From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32223 invoked by alias); 19 May 2003 05:56:06 -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 32193 invoked by uid 71); 19 May 2003 05:56:04 -0000 Resent-Date: 19 May 2003 05:56:04 -0000 Resent-Message-ID: <20030519055604.32192.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, inaoka.kazuhiro@renesas.com Received: (qmail 24658 invoked by uid 48); 19 May 2003 05:52:57 -0000 Message-Id: <20030519055257.24656.qmail@sources.redhat.com> Date: Mon, 19 May 2003 05:56:00 -0000 From: inaoka.kazuhiro@renesas.com Reply-To: inaoka.kazuhiro@renesas.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: target/10851: [m32r] ICE in extract_insn, at recog.c:2175 X-SW-Source: 2003-05/txt/msg02054.txt.bz2 List-Id: >Number: 10851 >Category: target >Synopsis: [m32r] ICE in extract_insn, at recog.c:2175 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Mon May 19 05:56:03 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Kazuhiro Inaoka >Release: gcc version 3.3 >Organization: >Environment: Linux t1pc-m32rsvr 2.4.18-24.7.x #1 Fri Jan 31 07:06:03 EST 2003 i686 unknown >Description: ice20030519.c: In function `FontSize': ice20030519.c:17370: error: unrecognizable insn: (insn 595 604 596 11 (nil) (set (reg:SI 17 cbit) (const_int 0 [0x0])) -1 (nil) (expr_list:REG_EQUAL (const_int 0 [0x0]) (nil))) ice20030519.c:17370: internal compiler error: in extract_insn, at recog.c:2175 Please submit a full bug report, with preprocessed source if appropriate. following is one of the bug patterns. void func() { int i; for (i=0; i<5; i++) if (i=0) break; } >How-To-Repeat: compile with Optimize options (-O, -O2, -O3) >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="ice20030519.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ice20030519.c" c3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSGVhZGVyOiAvcHJvamVjdC9tMzJyLWxpbnV4 L3RhcmdldF9zcmMvcmVwb3NpdG9yeS9sZXNzdGlmMS9zcmMvbGliL1htL1RleHRGLmMsdiAxLjEu MS4xIDIwMDMvMDUvMTYgMDM6NTY6MDMgdGFrYXRhIEV4cCAkIjsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CmV4dGVy biBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91Ymxl IGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIpIDsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwgaW50IF9fYmFzZSkKICAgICA7CmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4 dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVy biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z dHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us IGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoKCgoKCgpleHRl cm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0 b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f c3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jh c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpf X25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7 Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAg cmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3Qg Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9p ZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVy biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQg c2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGlu dCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9f aW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18g dHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90 ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50 IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5v X3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsK dHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBl ZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcg X19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQg X19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf dDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBl ZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3Ymxr X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRf dDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBp bnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYg X19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0 eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2Zz ZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9f dV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVk ZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91 c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3NvY2tsZW5fdDsKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9w cmlvcml0eTsKICB9OwoKCgp0eXBlZGVmIGludCBfX2F0b21pY19sb2NrX3Q7CgoKc3RydWN0IF9w dGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBfX2F0b21pY19sb2NrX3Qg X19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAq X3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAg aW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRf cGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsK ICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0 YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJl YWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0 CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNl cnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQg X19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRf bXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFk X211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9m Zl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoK CnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoK dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoK Cgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVk ZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVk ZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlw ZWRlZiBfX2tleV90IGtleV90Owp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKdHlwZWRlZiBfX2Ns b2NraWRfdCBjbG9ja2lkX3Q7CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fd29yZF9fKSkpOwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVk ZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNp emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKdHlwZWRlZiBfX3Np Z3NldF90IHNpZ3NldF90OwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7 CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1l X3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CgoKCgp0eXBlZGVmIF9f c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7 CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5 cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9f bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZk X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf X3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwg Kl9fcmVzdHJpY3QgX190aW1lb3V0KSA7Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoK CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90 IGZzZmlsY250X3Q7CgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZv aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0 c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0 ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAg aW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAg IGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBp bnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9t X2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9f cmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQg X19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0 ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBp bnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4 dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBf X3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoK CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFu ZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBs b25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVy biB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hv cnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJu IHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1 Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50 IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf X3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9y dCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAq X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9u ZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2ln bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxv bmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgOwoK ZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVy biBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CmV4dGVybiB2b2lk ICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2 b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2 b2lkICpfX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7 CgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5j KSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZv aWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmV4 dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFy ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGlu dCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29u c3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAg ICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoK CmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAq X190ZW1wbGF0ZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRl KSA7CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4g aW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKZXh0ZXJuIGNoYXIgKnJlYWxw YXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9f Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwpleHRlcm4gdm9p ZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21w YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNp emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJf Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu dCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQg KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4g Y2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln bikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3Ig KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmlj dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGludCBx ZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7 CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp Y3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp emVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywg c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f cHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6 ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh cikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj cywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf X3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2Nv bnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19s b2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZv aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoK ZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv aWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXpl X3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBj aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRl cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpl eHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgOwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRy aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg KnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z dCBjaGFyICpfX3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl cm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2Nl cHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJy ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpf X3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19y IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s CiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwpl eHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRl cm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p IDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVz dCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf X24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lk ICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19z LCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMg KGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGludCBzdHJjYXNl Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3Qg X19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSkgOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbMl07IH0gX19T VFJJTkcyX0NPUFlfQVJSMiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0 IHsgdW5zaWduZWQgY2hhciBfX2FyclszXTsgfSBfX1NUUklORzJfQ09QWV9BUlIzIF9fYXR0cmli dXRlX18gKChwYWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzRd OyB9IF9fU1RSSU5HMl9DT1BZX0FSUjQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVm IHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbNV07IH0gX19TVFJJTkcyX0NPUFlfQVJSNSBf X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBf X2Fycls2XTsgfSBfX1NUUklORzJfQ09QWV9BUlI2IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsK dHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzddOyB9IF9fU1RSSU5HMl9DT1BZ X0FSUjcgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVk IGNoYXIgX19hcnJbOF07IH0gX19TVFJJTkcyX0NPUFlfQVJSOCBfX2F0dHJpYnV0ZV9fICgocGFj a2VkKSk7CmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19z LCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs dCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBf X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq ZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIp OwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1 bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAh PSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICAr K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf X3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0Myk7 CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWplY3Qz KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0 XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tf X3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAg KytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf X3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQp CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0 XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRl cm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0 Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19z LCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jl c3VsdF0gPT0gX19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h Y2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9j MyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBf X2FjY2VwdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19z W19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAg ICAgICAgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJy a19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsK CiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9f YWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6 IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJy a19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJu IF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h Y2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAg d2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNj ZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAq X19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQpleHRl cm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBj aGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hh ciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0Owog IGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9f cyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgaWYgKCpf X3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAgICAgd2hpbGUgKCpf X3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAgICAgICAgewogICAg ICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAg ICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gY2hh ciAqX19zdHJzZXBfZyAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVq ZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hh ciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19y ZXR2YWwgIT0gKCh2b2lkICopMCkgJiYgKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGlu X2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBf X3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVq ZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9f cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3Ms IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoK X19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikK ewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2 b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAg ICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVh azsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19j cCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1ww JzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwog ICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9Cgpl eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl Y3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIg KipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsK ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9p ZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAg IHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3Ag PT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAg ICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9 CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICBy ZXR1cm4gX19yZXR2YWw7Cn0KZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gY2hhciAqX19zdHJu ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7Cgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYgc3RydWN0 IF9JT19GSUxFIF9fRklMRTsKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90Owp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f Y291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsK ICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90 OwpzdHJ1Y3QgdG07CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX3NyYykgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz Y2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSA7CgpleHRlcm4gd2NoYXJfdCAqd2Nz bmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoK CmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf dCAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2Nz bmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVf dCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBpbnQgd2NzY29s bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgoKZXh0 ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p IDsKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJf dCBfX3djKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg Kndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdj aGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3Qg Kl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193 Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3Rh Y2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZWxp bSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIDsK CgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90 ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f czIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19u KSA7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3 Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNl dCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgOwpleHRlcm4gd2ludF90 IGJ0b3djIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIDsKCgoK ZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w KSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf dCBfX3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz KSA7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry aWN0IF9fcHMpIDsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz dHJpY3QgX19wcykgOwoKCgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKQp7IHJldHVybiAoX19wcyAhPSAoKHZv aWQgKikwKQogICAgICAgICAgPyBtYnJ0b3djICgoKHZvaWQgKikwKSwgX19zLCBfX24sIF9fcHMp IDogX19tYnJsZW4gKF9fcywgX19uLCAoKHZvaWQgKikwKSkpOyB9CgoKCgpleHRlcm4gc2l6ZV90 IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSA7CgoKCmV4 dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f cHMpIDsKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 cikgOwpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog ICAgIDsKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0 IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50 ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgOwoKCmV4 dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193 Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n IGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2No YXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgoK CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRyLCBf X2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFsIChfX25wdHIs IF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGlu dCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz ZSwgMCk7IH0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu IHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No YXIgKHZvaWQpIDsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF ICpfX3N0cmVhbSkgOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAq X19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIDsKCgoK CmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7 CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCmV4dGVy biB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu IHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz dHJpY3QgX190cCkgOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRlZiB1bnNp Z25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKdHlwZWRl ZiBYSUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKCgp0eXBlZGVmIFhJRCBGb250OwoK dHlwZWRlZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9y bWFwOwp0eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIEtleUNvZGU7CnR5cGVkZWYgY2hhciAqWFBvaW50ZXI7CnR5cGVkZWYgc3Ry dWN0IF9YRXh0RGF0YSB7CiAgICAgICAgaW50IG51bWJlcjsKICAgICAgICBzdHJ1Y3QgX1hFeHRE YXRhICpuZXh0OwogICAgICAgIGludCAoKmZyZWVfcHJpdmF0ZSkoCgogICAgICAgIHN0cnVjdCBf WEV4dERhdGEgKmV4dGVuc2lvbgoKICAgICAgICApOwogICAgICAgIFhQb2ludGVyIHByaXZhdGVf ZGF0YTsKfSBYRXh0RGF0YTsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgZXh0ZW5z aW9uOwogICAgICAgIGludCBtYWpvcl9vcGNvZGU7CiAgICAgICAgaW50IGZpcnN0X2V2ZW50Owog ICAgICAgIGludCBmaXJzdF9lcnJvcjsKfSBYRXh0Q29kZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgaW50IGRlcHRoOwogICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgaW50IHNjYW5saW5l X3BhZDsKfSBYUGl4bWFwRm9ybWF0VmFsdWVzOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg ICBpbnQgZnVuY3Rpb247CiAgICAgICAgdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZm9yZWdyb3VuZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91 bmQ7CiAgICAgICAgaW50IGxpbmVfd2lkdGg7CiAgICAgICAgaW50IGxpbmVfc3R5bGU7CiAgICAg ICAgaW50IGNhcF9zdHlsZTsKCiAgICAgICAgaW50IGpvaW5fc3R5bGU7CiAgICAgICAgaW50IGZp bGxfc3R5bGU7CgogICAgICAgIGludCBmaWxsX3J1bGU7CiAgICAgICAgaW50IGFyY19tb2RlOwog ICAgICAgIFBpeG1hcCB0aWxlOwogICAgICAgIFBpeG1hcCBzdGlwcGxlOwogICAgICAgIGludCB0 c194X29yaWdpbjsKICAgICAgICBpbnQgdHNfeV9vcmlnaW47CiAgICAgICAgRm9udCBmb250Owog ICAgICAgIGludCBzdWJ3aW5kb3dfbW9kZTsKICAgICAgICBpbnQgZ3JhcGhpY3NfZXhwb3N1cmVz OwogICAgICAgIGludCBjbGlwX3hfb3JpZ2luOwogICAgICAgIGludCBjbGlwX3lfb3JpZ2luOwog ICAgICAgIFBpeG1hcCBjbGlwX21hc2s7CiAgICAgICAgaW50IGRhc2hfb2Zmc2V0OwogICAgICAg IGNoYXIgZGFzaGVzOwp9IFhHQ1ZhbHVlczsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hHQwoKCgoK CgoKKkdDOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsK ICAgICAgICBWaXN1YWxJRCB2aXN1YWxpZDsKCgoKICAgICAgICBpbnQgY2xhc3M7CgogICAgICAg IHVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJsdWVfbWFzazsKICAgICAgICBp bnQgYml0c19wZXJfcmdiOwogICAgICAgIGludCBtYXBfZW50cmllczsKfSBWaXN1YWw7CgoKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGRlcHRoOwogICAgICAgIGludCBudmlzdWFsczsK ICAgICAgICBWaXN1YWwgKnZpc3VhbHM7Cn0gRGVwdGg7CgoKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBz dHJ1Y3QgX1hEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIGlu dCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBtd2lkdGgsIG1oZWlnaHQ7CiAgICAgICAgaW50 IG5kZXB0aHM7CiAgICAgICAgRGVwdGggKmRlcHRoczsKICAgICAgICBpbnQgcm9vdF9kZXB0aDsK ICAgICAgICBWaXN1YWwgKnJvb3RfdmlzdWFsOwogICAgICAgIEdDIGRlZmF1bHRfZ2M7CiAgICAg ICAgQ29sb3JtYXAgY21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgYmxhY2tfcGl4ZWw7CiAgICAgICAgaW50IG1heF9tYXBzLCBtaW5f bWFwczsKICAgICAgICBpbnQgYmFja2luZ19zdG9yZTsKICAgICAgICBpbnQgc2F2ZV91bmRlcnM7 CiAgICAgICAgbG9uZyByb290X2lucHV0X21hc2s7Cn0gU2NyZWVuOwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBpbnQgZGVwdGg7CiAgICAg ICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgICAgIGludCBzY2FubGluZV9wYWQ7Cn0gU2NyZWVu Rm9ybWF0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFwIGJhY2tncm91bmRfcGl4bWFw OwogICAgdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9w aXhtYXA7CiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9waXhlbDsKICAgIGludCBiaXRfZ3Jhdml0 eTsKICAgIGludCB3aW5fZ3Jhdml0eTsKICAgIGludCBiYWNraW5nX3N0b3JlOwogICAgdW5zaWdu ZWQgbG9uZyBiYWNraW5nX3BsYW5lczsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19waXhlbDsK ICAgIGludCBzYXZlX3VuZGVyOwogICAgbG9uZyBldmVudF9tYXNrOwogICAgbG9uZyBkb19ub3Rf cHJvcGFnYXRlX21hc2s7CiAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7CiAgICBDb2xvcm1hcCBj b2xvcm1hcDsKICAgIEN1cnNvciBjdXJzb3I7Cn0gWFNldFdpbmRvd0F0dHJpYnV0ZXM7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50 IGJvcmRlcl93aWR0aDsKICAgIGludCBkZXB0aDsKICAgIFZpc3VhbCAqdmlzdWFsOwogICAgV2lu ZG93IHJvb3Q7CgoKCiAgICBpbnQgY2xhc3M7CgogICAgaW50IGJpdF9ncmF2aXR5OwogICAgaW50 IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNpZ25lZCBsb25nIGJh Y2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVsOwogICAgaW50IHNh dmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBfaW5zdGFsbGVkOwog ICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwogICAgbG9uZyB5b3Vy X2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsKICAgIGludCBvdmVy cmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dBdHRyaWJ1dGVzOwoK CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBpbnQgbGVu Z3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoKCgoKdHlwZWRlZiBz dHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCB4b2Zmc2V0Owog ICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9vcmRlcjsKICAgIGlu dCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAgaW50IGJpdG1hcF9w YWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAgICBpbnQgYml0c19w ZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBn cmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBYUG9pbnRlciBvYmRh dGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFnZSAqKCpjcmVhdGVf aW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAogICAgICAgICAgICAg ICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAg ICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBjaGFyKiAsCiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQgKTsKICAgICAgICBp bnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAgICAgdW5zaWduZWQg bG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50KTsKICAgICAgICBp bnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9u Zyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAq LCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAgICAgIGludCAoKmFk ZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwogICAgICAgIH0gZjsKfSBYSW1hZ2U7 CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0 OwogICAgaW50IGJvcmRlcl93aWR0aDsKICAgIFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNr X21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBwaXhlbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVuLCBibHVl OwogICAgICAgIGNoYXIgZmxhZ3M7CiAgICAgICAgY2hhciBwYWQ7Cn0gWENvbG9yOwoKCgoKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4MSwgeTEsIHgyLCB5MjsKfSBYU2VnbWVudDsKCnR5 cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7Cn0gWFBvaW50OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdpZHRoLCBoZWlnaHQ7Cn0gWFJl Y3RhbmdsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7CiAgICB1bnNpZ25lZCBz aG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBhbmdsZTI7Cn0gWEFyYzsKCgoK CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAgICAgICAg aW50IGJlbGxfcGVyY2VudDsKICAgICAgICBpbnQgYmVsbF9waXRjaDsKICAgICAgICBpbnQgYmVs bF9kdXJhdGlvbjsKICAgICAgICBpbnQgbGVkOwogICAgICAgIGludCBsZWRfbW9kZTsKICAgICAg ICBpbnQga2V5OwogICAgICAgIGludCBhdXRvX3JlcGVhdF9tb2RlOwp9IFhLZXlib2FyZENvbnRy b2w7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAg ICAgICAgaW50IGJlbGxfcGVyY2VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgYmVsbF9waXRjaCwg YmVsbF9kdXJhdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwogICAgICAgIGlu dCBnbG9iYWxfYXV0b19yZXBlYXQ7CiAgICAgICAgY2hhciBhdXRvX3JlcGVhdHNbMzJdOwp9IFhL ZXlib2FyZFN0YXRlOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgVGltZSB0aW1lOwogICAg ICAgIHNob3J0IHgsIHk7Cn0gWFRpbWVDb29yZDsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGludCBtYXhfa2V5cGVybW9kOwogICAgICAgIEtleUNvZGUgKm1vZGlmaWVybWFwOwp9IFhNb2Rp ZmllcktleW1hcDsKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9Y UHJpdmF0ZTsKc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QKCgoKewog ICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2 YXRlMTsKICAgICAgICBpbnQgZmQ7CiAgICAgICAgaW50IHByaXZhdGUyOwogICAgICAgIGludCBw cm90b19tYWpvcl92ZXJzaW9uOwogICAgICAgIGludCBwcm90b19taW5vcl92ZXJzaW9uOwogICAg ICAgIGNoYXIgKnZlbmRvcjsKICAgICAgICBYSUQgcHJpdmF0ZTM7CiAgICAgICAgWElEIHByaXZh dGU0OwogICAgICAgIFhJRCBwcml2YXRlNTsKICAgICAgICBpbnQgcHJpdmF0ZTY7CiAgICAgICAg WElEICgqcmVzb3VyY2VfYWxsb2MpKAoKICAgICAgICAgICAgICAgIHN0cnVjdCBfWERpc3BsYXkq CgogICAgICAgICk7CiAgICAgICAgaW50IGJ5dGVfb3JkZXI7CiAgICAgICAgaW50IGJpdG1hcF91 bml0OwogICAgICAgIGludCBiaXRtYXBfcGFkOwogICAgICAgIGludCBiaXRtYXBfYml0X29yZGVy OwogICAgICAgIGludCBuZm9ybWF0czsKICAgICAgICBTY3JlZW5Gb3JtYXQgKnBpeG1hcF9mb3Jt YXQ7CiAgICAgICAgaW50IHByaXZhdGU4OwogICAgICAgIGludCByZWxlYXNlOwogICAgICAgIHN0 cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAqcHJpdmF0ZTEwOwogICAgICAgIGludCBxbGVuOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9yZXF1ZXN0X3JlYWQ7CiAgICAgICAgdW5zaWduZWQg bG9uZyByZXF1ZXN0OwogICAgICAgIFhQb2ludGVyIHByaXZhdGUxMTsKICAgICAgICBYUG9pbnRl ciBwcml2YXRlMTI7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEzOwogICAgICAgIFhQb2ludGVy IHByaXZhdGUxNDsKICAgICAgICB1bnNpZ25lZCBtYXhfcmVxdWVzdF9zaXplOwogICAgICAgIHN0 cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqZGI7CiAgICAgICAgaW50ICgqcHJpdmF0ZTE1KSgKCiAg ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICAgICAgICAgICk7CiAgICAg ICAgY2hhciAqZGlzcGxheV9uYW1lOwogICAgICAgIGludCBkZWZhdWx0X3NjcmVlbjsKICAgICAg ICBpbnQgbnNjcmVlbnM7CiAgICAgICAgU2NyZWVuICpzY3JlZW5zOwogICAgICAgIHVuc2lnbmVk IGxvbmcgbW90aW9uX2J1ZmZlcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHByaXZhdGUxNjsKICAg ICAgICBpbnQgbWluX2tleWNvZGU7CiAgICAgICAgaW50IG1heF9rZXljb2RlOwogICAgICAgIFhQ b2ludGVyIHByaXZhdGUxNzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTg7CiAgICAgICAgaW50 IHByaXZhdGUxOTsKICAgICAgICBjaGFyICp4ZGVmYXVsdHM7Cgp9CgoKCipfWFByaXZEaXNwbGF5 Owp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdp bmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAg ICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAg ICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhLZXlF dmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRlZiBYS2V5RXZl bnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdp bmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwog ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNp Z25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsKICAgICAgICBpbnQg c2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9u UHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVsZWFzZWRFdmVudDsK CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25n IHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5 OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7CiAgICAgICAgV2lu ZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50IHgsIHk7CiAgICAg ICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKICAgICAg ICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhNb3Rpb25FdmVudDsK dHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93 IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cgc3Vid2luZG93Owog ICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgeF9yb290LCB5 X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsKCgoKCiAgICAgICAg aW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1bnNpZ25lZCBpbnQg c3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2lu ZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAgIGludCBkZXRhaWw7 CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFuZ2VFdmVudCBYRm9j dXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091dEV2ZW50OwoKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog ICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9yWzMyXTsKfSBYS2V5 bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCB4LCB5OwogICAg ICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBYRXhwb3NlRXZlbnQ7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh eTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp bnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAgaW50IG1ham9yX2Nv ZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3NlRXZlbnQ7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg ICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29kZTsKICAgICAgICBp bnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg ICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2Vu ZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7 CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg cGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBpbnQg b3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93 IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5kb3dFdmVudDsKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog ICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBm cm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKfSBYTWFw RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq ZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0g WE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cg d2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg aW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93 IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBXaW5k b3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhDb25maWd1cmVFdmVu dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBs b25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNw bGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAg IGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50 IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZl bnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAg ICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX aW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAg ICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAg ICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1bnNpZ25lZCBsb25n IHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsK ICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBp bnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBl dmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFjZTsKfSBYQ2lyY3Vs YXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7 CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX aW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1lIHRpbWU7CiAgICAg ICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK ICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNs ZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2luZG93IHJlcXVlc3Rv cjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBB dG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3Bs YXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAg ICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGlt ZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIENv bG9ybWFwIGNvbG9ybWFwOwoKCgogICAgICAgIGludCBuZXc7CgogICAgICAgIGludCBzdGF0ZTsK fSBYQ29sb3JtYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgQXRvbSBt ZXNzYWdlX3R5cGU7CiAgICAgICAgaW50IGZvcm1hdDsKICAgICAgICB1bmlvbiB7CiAgICAgICAg ICAgICAgICBjaGFyIGJbMjBdOwogICAgICAgICAgICAgICAgc2hvcnQgc1sxMF07CiAgICAgICAg ICAgICAgICBsb25nIGxbNV07CiAgICAgICAgICAgICAgICB9IGRhdGE7Cn0gWENsaWVudE1lc3Nh Z2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5 ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHJlcXVlc3Q7Cgog ICAgICAgIGludCBmaXJzdF9rZXljb2RlOwogICAgICAgIGludCBjb3VudDsKfSBYTWFwcGluZ0V2 ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIERpc3BsYXkg KmRpc3BsYXk7CiAgICAgICAgWElEIHJlc291cmNlaWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz ZXJpYWw7CiAgICAgICAgdW5zaWduZWQgY2hhciBlcnJvcl9jb2RlOwogICAgICAgIHVuc2lnbmVk IGNoYXIgcmVxdWVzdF9jb2RlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbWlub3JfY29kZTsKfSBY RXJyb3JFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWEFueUV2ZW50OwoKCgoKCnR5 cGVkZWYgdW5pb24gX1hFdmVudCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgWEFueUV2ZW50 IHhhbnk7CiAgICAgICAgWEtleUV2ZW50IHhrZXk7CiAgICAgICAgWEJ1dHRvbkV2ZW50IHhidXR0 b247CiAgICAgICAgWE1vdGlvbkV2ZW50IHhtb3Rpb247CiAgICAgICAgWENyb3NzaW5nRXZlbnQg eGNyb3NzaW5nOwogICAgICAgIFhGb2N1c0NoYW5nZUV2ZW50IHhmb2N1czsKICAgICAgICBYRXhw b3NlRXZlbnQgeGV4cG9zZTsKICAgICAgICBYR3JhcGhpY3NFeHBvc2VFdmVudCB4Z3JhcGhpY3Nl eHBvc2U7CiAgICAgICAgWE5vRXhwb3NlRXZlbnQgeG5vZXhwb3NlOwogICAgICAgIFhWaXNpYmls aXR5RXZlbnQgeHZpc2liaWxpdHk7CiAgICAgICAgWENyZWF0ZVdpbmRvd0V2ZW50IHhjcmVhdGV3 aW5kb3c7CiAgICAgICAgWERlc3Ryb3lXaW5kb3dFdmVudCB4ZGVzdHJveXdpbmRvdzsKICAgICAg ICBYVW5tYXBFdmVudCB4dW5tYXA7CiAgICAgICAgWE1hcEV2ZW50IHhtYXA7CiAgICAgICAgWE1h cFJlcXVlc3RFdmVudCB4bWFwcmVxdWVzdDsKICAgICAgICBYUmVwYXJlbnRFdmVudCB4cmVwYXJl bnQ7CiAgICAgICAgWENvbmZpZ3VyZUV2ZW50IHhjb25maWd1cmU7CiAgICAgICAgWEdyYXZpdHlF dmVudCB4Z3Jhdml0eTsKICAgICAgICBYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0 OwogICAgICAgIFhDb25maWd1cmVSZXF1ZXN0RXZlbnQgeGNvbmZpZ3VyZXJlcXVlc3Q7CiAgICAg ICAgWENpcmN1bGF0ZUV2ZW50IHhjaXJjdWxhdGU7CiAgICAgICAgWENpcmN1bGF0ZVJlcXVlc3RF dmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsKICAgICAgICBYUHJvcGVydHlFdmVudCB4cHJvcGVydHk7 CiAgICAgICAgWFNlbGVjdGlvbkNsZWFyRXZlbnQgeHNlbGVjdGlvbmNsZWFyOwogICAgICAgIFhT ZWxlY3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CiAgICAgICAgWFNlbGVjdGlv bkV2ZW50IHhzZWxlY3Rpb247CiAgICAgICAgWENvbG9ybWFwRXZlbnQgeGNvbG9ybWFwOwogICAg ICAgIFhDbGllbnRNZXNzYWdlRXZlbnQgeGNsaWVudDsKICAgICAgICBYTWFwcGluZ0V2ZW50IHht YXBwaW5nOwogICAgICAgIFhFcnJvckV2ZW50IHhlcnJvcjsKICAgICAgICBYS2V5bWFwRXZlbnQg eGtleW1hcDsKICAgICAgICBsb25nIHBhZFsyNF07Cn0gWEV2ZW50OwoKCgoKCgoKdHlwZWRlZiBz dHJ1Y3QgewogICAgc2hvcnQgbGJlYXJpbmc7CiAgICBzaG9ydCByYmVhcmluZzsKICAgIHNob3J0 IHdpZHRoOwogICAgc2hvcnQgYXNjZW50OwogICAgc2hvcnQgZGVzY2VudDsKICAgIHVuc2lnbmVk IHNob3J0IGF0dHJpYnV0ZXM7Cn0gWENoYXJTdHJ1Y3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgQXRvbSBuYW1lOwogICAgdW5zaWduZWQgbG9uZyBjYXJkMzI7Cn0gWEZvbnRQcm9wOwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgWEV4dERhdGEgKmV4dF9kYXRhOwogICAgRm9udCBmaWQ7CiAgICB1 bnNpZ25lZCBkaXJlY3Rpb247CiAgICB1bnNpZ25lZCBtaW5fY2hhcl9vcl9ieXRlMjsKICAgIHVu c2lnbmVkIG1heF9jaGFyX29yX2J5dGUyOwogICAgdW5zaWduZWQgbWluX2J5dGUxOwogICAgdW5z aWduZWQgbWF4X2J5dGUxOwogICAgaW50IGFsbF9jaGFyc19leGlzdDsKICAgIHVuc2lnbmVkIGRl ZmF1bHRfY2hhcjsKICAgIGludCBuX3Byb3BlcnRpZXM7CiAgICBYRm9udFByb3AgKnByb3BlcnRp ZXM7CiAgICBYQ2hhclN0cnVjdCBtaW5fYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgbWF4X2JvdW5k czsKICAgIFhDaGFyU3RydWN0ICpwZXJfY2hhcjsKICAgIGludCBhc2NlbnQ7CiAgICBpbnQgZGVz Y2VudDsKfSBYRm9udFN0cnVjdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgKmNoYXJz OwogICAgaW50IG5jaGFyczsKICAgIGludCBkZWx0YTsKICAgIEZvbnQgZm9udDsKfSBYVGV4dEl0 ZW07Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUxOwogICAgdW5zaWdu ZWQgY2hhciBieXRlMjsKfSBYQ2hhcjJiOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWENoYXIyYiAq Y2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBmb250Owp9IFhU ZXh0SXRlbTE2OwoKCnR5cGVkZWYgdW5pb24geyBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgICAg ICAgICAgR0MgZ2M7CiAgICAgICAgICAgICAgICBWaXN1YWwgKnZpc3VhbDsKICAgICAgICAgICAg ICAgIFNjcmVlbiAqc2NyZWVuOwogICAgICAgICAgICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBf Zm9ybWF0OwogICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKmZvbnQ7IH0gWEVEYXRhT2JqZWN0 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFJlY3RhbmdsZSBtYXhfaW5rX2V4dGVudDsKICAgIFhS ZWN0YW5nbGUgbWF4X2xvZ2ljYWxfZXh0ZW50Owp9IFhGb250U2V0RXh0ZW50czsKCgoKCgp0eXBl ZGVmIHN0cnVjdCBfWE9NICpYT007CnR5cGVkZWYgc3RydWN0IF9YT0MgKlhPQywgKlhGb250U2V0 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAg aW50IGRlbHRhOwogICAgWEZvbnRTZXQgZm9udF9zZXQ7Cn0gWG1iVGV4dEl0ZW07Cgp0eXBlZGVm IHN0cnVjdCB7CiAgICB3Y2hhcl90ICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVs dGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYd2NUZXh0SXRlbTsKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgaW50IGNoYXJzZXRfY291bnQ7CiAgICBjaGFyICoqY2hhcnNldF9saXN0Owp9IFhPTUNo YXJTZXRMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgIFhPTU9yaWVudGF0aW9uX0xUUl9UVEIsCiAg ICBYT01PcmllbnRhdGlvbl9SVExfVFRCLAogICAgWE9NT3JpZW50YXRpb25fVFRCX0xUUiwKICAg IFhPTU9yaWVudGF0aW9uX1RUQl9SVEwsCiAgICBYT01PcmllbnRhdGlvbl9Db250ZXh0Cn0gWE9y aWVudGF0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG51bV9vcmllbnRhdGlvbjsKICAg IFhPcmllbnRhdGlvbiAqb3JpZW50YXRpb247Cn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICBpbnQgbnVtX2ZvbnQ7CiAgICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xp c3Q7CiAgICBjaGFyICoqZm9udF9uYW1lX2xpc3Q7Cn0gWE9NRm9udEluZm87Cgp0eXBlZGVmIHN0 cnVjdCBfWElNICpYSU07CnR5cGVkZWYgc3RydWN0IF9YSUMgKlhJQzsKCnR5cGVkZWYgdm9pZCAo KlhJTVByb2MpKAoKICAgIFhJTSwKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIKCik7Cgp0eXBl ZGVmIGludCAoKlhJQ1Byb2MpKAoKICAgIFhJQywKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIK Cik7Cgp0eXBlZGVmIHZvaWQgKCpYSURQcm9jKSgKCiAgICBEaXNwbGF5KiwKICAgIFhQb2ludGVy LAogICAgWFBvaW50ZXIKCik7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3R5bGU7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF9zdHlsZXM7CiAgICBYSU1TdHls ZSAqc3VwcG9ydGVkX3N0eWxlczsKfSBYSU1TdHlsZXM7CnR5cGVkZWYgdm9pZCAqWFZhTmVzdGVk TGlzdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQb2ludGVyIGNsaWVudF9kYXRhOwogICAg WElNUHJvYyBjYWxsYmFjazsKfSBYSU1DYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQ b2ludGVyIGNsaWVudF9kYXRhOwogICAgWElDUHJvYyBjYWxsYmFjazsKfSBYSUNDYWxsYmFjazsK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVRl eHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRiYWNr OwogICAgaW50IGVuY29kaW5nX2lzX3djaGFyOwogICAgdW5pb24gewogICAgICAgIGNoYXIgKm11 bHRpX2J5dGU7CiAgICAgICAgd2NoYXJfdCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7Cn0gWElN VGV4dDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1QcmVlZGl0U3RhdGU7CgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX1hJTVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVBy ZWVkaXRTdGF0ZSBzdGF0ZTsKfSBYSU1QcmVlZGl0U3RhdGVOb3RpZnlDYWxsYmFja1N0cnVjdDsK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIFhJTVN0cmluZ0NvbnZlcnNpb25GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVN0 cmluZ0NvbnZlcnNpb25UZXh0IHsKICAgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKICAgIFhJTVN0 cmluZ0NvbnZlcnNpb25GZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2No YXI7CiAgICB1bmlvbiB7CiAgICAgICAgY2hhciAqbWJzOwogICAgICAgIHdjaGFyX3QgKndjczsK ICAgIH0gc3RyaW5nOwp9IFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBYSU1TdHJpbmdDb252ZXJzaW9uUG9zaXRpb247Cgp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IFhJTVN0cmluZ0NvbnZlcnNpb25UeXBlOwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb247CgoKCgp0eXBlZGVmIGVudW0gewogICAgWElN Rm9yd2FyZENoYXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNr d2FyZFdvcmQsCiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwg WElNUHJldmlvdXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLAogICAgWElNQWJz b2x1dGVQb3NpdGlvbiwKICAgIFhJTURvbnRDaGFuZ2UKfSBYSU1DYXJldERpcmVjdGlvbjsKCnR5 cGVkZWYgc3RydWN0IF9YSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3QgewogICAgWElN U3RyaW5nQ29udmVyc2lvblBvc2l0aW9uIHBvc2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24g ZGlyZWN0aW9uOwogICAgWElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbiBvcGVyYXRpb247CiAg ICB1bnNpZ25lZCBzaG9ydCBmYWN0b3I7CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uVGV4dCAqdGV4 dDsKfSBYSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBf WElNUHJlZWRpdERyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgY2FyZXQ7CiAgICBpbnQgY2hn X2ZpcnN0OwogICAgaW50IGNoZ19sZW5ndGg7CiAgICBYSU1UZXh0ICp0ZXh0Owp9IFhJTVByZWVk aXREcmF3Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWElNSXNJbnZpc2libGUs CiAgICBYSU1Jc1ByaW1hcnksCiAgICBYSU1Jc1NlY29uZGFyeQp9IFhJTUNhcmV0U3R5bGU7Cgp0 eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IHBv c2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgWElNQ2FyZXRTdHls ZSBzdHlsZTsKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7 CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRhVHlwZTsK CnR5cGVkZWYgc3RydWN0IF9YSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNU3Rh dHVzRGF0YVR5cGUgdHlwZTsKICAgIHVuaW9uIHsKICAgICAgICBYSU1UZXh0ICp0ZXh0OwogICAg ICAgIFBpeG1hcCBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNrU3Ry dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltIGtleXN5 bTsKICAgIGludCBtb2RpZmllcjsKICAgIGludCBtb2RpZmllcl9tYXNrOwp9IFhJTUhvdEtleVRy aWdnZXI7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlcnMgewogICAgaW50IG51bV9o b3Rfa2V5OwogICAgWElNSG90S2V5VHJpZ2dlciAqa2V5Owp9IFhJTUhvdEtleVRyaWdnZXJzOwoK dHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAqKnN1cHBvcnRlZF92 YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCgoKCgoKCmV4dGVybiBpbnQgX1hkZWJ1ZzsKCmV4dGVy biBYRm9udFN0cnVjdCAqWExvYWRRdWVyeUZvbnQoCgogICAgRGlzcGxheSogLAogICAgY29uc3Qg Y2hhcioKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZvbnQoCgogICAgRGlzcGxheSog LAogICAgWElECgopOwoKCmV4dGVybiBYVGltZUNvb3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAg IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBUaW1lICwKICAgIFRpbWUgLAogICAgaW50KgoK KTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhEZWxldGVNb2RpZmllcm1hcEVudHJ5KAoKICAg IFhNb2RpZmllcktleW1hcCogLAoKICAgIHVuc2lnbmVkIGludCAsCgoKCiAgICBpbnQKCik7Cgpl eHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYR2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkq CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWEluc2VydE1vZGlmaWVybWFwRW50cnkoCgog ICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsK CmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQKCik7Cgpl eHRlcm4gWEltYWdlICpYQ3JlYXRlSW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgVmlzdWFsKiAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICB1 bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CmV4 dGVybiBpbnQgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2UqCgopOwpleHRlcm4gWEltYWdlICpYR2V0 SW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcg LAogICAgaW50CgopOwpleHRlcm4gWEltYWdlICpYR2V0U3ViSW1hZ2UoCgogICAgRGlzcGxheSog LAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog ICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIFhJbWFn ZSogLAogICAgaW50ICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBEaXNwbGF5ICpYT3BlbkRpc3Bs YXkoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1Jbml0aWFsaXplKAoKICAg IHZvaWQKCik7CgpleHRlcm4gY2hhciAqWEZldGNoQnl0ZXMoCgogICAgRGlzcGxheSogLAogICAg aW50KgoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQqICwKICAgIGludAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRBdG9tTmFtZSgKCiAgICBEaXNwbGF5 KiAsCiAgICBBdG9tCgopOwpleHRlcm4gaW50IFhHZXRBdG9tTmFtZXMoCgogICAgRGlzcGxheSog LAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRE ZWZhdWx0KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIq CgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlOYW1lKAoKICAgIGNvbnN0IGNoYXIqCgopOwpleHRl cm4gY2hhciAqWEtleXN5bVRvU3RyaW5nKAoKICAgIEtleVN5bQoKKTsKCmV4dGVybiBpbnQgKCpY U3luY2hyb25pemUoCgogICAgRGlzcGxheSogLAogICAgaW50CgopKSgKCiAgICBEaXNwbGF5KgoK KTsKZXh0ZXJuIGludCAoKlhTZXRBZnRlckZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIGlu dCAoKikgKAoKICAgICAgICAgICAgIERpc3BsYXkqCgogICAgICAgICAgICApCgopKSgKCiAgICBE aXNwbGF5KgoKKTsKZXh0ZXJuIEF0b20gWEludGVybkF0b20oCgogICAgRGlzcGxheSogLAogICAg Y29uc3QgY2hhciogLAogICAgaW50CgopOwpleHRlcm4gaW50IFhJbnRlcm5BdG9tcygKCiAgICBE aXNwbGF5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIGludCAsCiAgICBBdG9tKgoKKTsK ZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERpc3BsYXkqICwKICAg IENvbG9ybWFwCgopOwpleHRlcm4gQ29sb3JtYXAgWENyZWF0ZUNvbG9ybWFwKAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICBWaXN1YWwqICwKICAgIGludAoKKTsKZXh0ZXJuIEN1cnNv ciBYQ3JlYXRlUGl4bWFwQ3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcCAsCiAgICBQ aXhtYXAgLAogICAgWENvbG9yKiAsCiAgICBYQ29sb3IqICwKICAgIHVuc2lnbmVkIGludCAsCiAg ICB1bnNpZ25lZCBpbnQKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUdseXBoQ3Vyc29yKAoKICAg IERpc3BsYXkqICwKICAgIEZvbnQgLAogICAgRm9udCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg dW5zaWduZWQgaW50ICwKICAgIFhDb2xvciBjb25zdCAqICwKICAgIFhDb2xvciBjb25zdCAqCgop OwpleHRlcm4gQ3Vyc29yIFhDcmVhdGVGb250Q3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIHVu c2lnbmVkIGludAoKKTsKZXh0ZXJuIEZvbnQgWExvYWRGb250KAoKICAgIERpc3BsYXkqICwKICAg IGNvbnN0IGNoYXIqCgopOwpleHRlcm4gR0MgWENyZWF0ZUdDKAoKICAgIERpc3BsYXkqICwKICAg IERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWEdDVmFsdWVzKgoKKTsKZXh0ZXJu IEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwoKKTsKZXh0ZXJuIHZvaWQgWEZsdXNo R0MoCgogICAgRGlzcGxheSogLAogICAgR0MKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZVBpeG1h cCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBpeG1hcCBYQ3JlYXRl Qml0bWFwRnJvbURhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgY29uc3Qg Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBp eG1hcCBYQ3JlYXRlUGl4bWFwRnJvbUJpdG1hcERhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJh d2FibGUgLAogICAgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs CiAgICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgaW50 CgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVTaW1wbGVXaW5kb3coCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu c2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1 bnNpZ25lZCBsb25nCgopOwpleHRlcm4gV2luZG93IFhHZXRTZWxlY3Rpb25Pd25lcigKCiAgICBE aXNwbGF5KiAsCiAgICBBdG9tCgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVXaW5kb3coCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg aW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg IHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWFNl dFdpbmRvd0F0dHJpYnV0ZXMqCgopOwpleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29s b3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQqCgopOwpleHRlcm4g Y2hhciAqKlhMaXN0Rm9udHMoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg aW50ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RGb250c1dpdGhJbmZvKAoKICAg IERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhG b250U3RydWN0KioKCik7CmV4dGVybiBjaGFyICoqWEdldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3Bs YXkqICwKICAgIGludCoKCik7CmV4dGVybiBBdG9tICpYTGlzdFByb3BlcnRpZXMoCgogICAgRGlz cGxheSogLAogICAgV2luZG93ICwKICAgIGludCoKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhM aXN0SG9zdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwpleHRlcm4g S2V5U3ltIFhLZXljb2RlVG9LZXlzeW0oCgogICAgRGlzcGxheSogLAoKICAgIHVuc2lnbmVkIGlu dCAsCgoKCiAgICBpbnQKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5 RXZlbnQqICwKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygK CiAgICBEaXNwbGF5KiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludCAsCiAgICBpbnQq CgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCBjaGFyKgoKKTsK ZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9u ZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIg KlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpY U2NyZWVuUmVzb3VyY2VTdHJpbmcoCgogICAgICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25l ZCBsb25nIFhEaXNwbGF5TW90aW9uQnVmZmVyU2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJu IFZpc3VhbElEIFhWaXN1YWxJREZyb21WaXN1YWwoCgogICAgVmlzdWFsKgoKKTsKCgoKZXh0ZXJu IGludCBYSW5pdFRocmVhZHMoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFhMb2NrRGlzcGxh eSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiB2b2lkIFhVbmxvY2tEaXNwbGF5KAoKICAgIERp c3BsYXkqCgopOwoKCgpleHRlcm4gWEV4dENvZGVzICpYSW5pdEV4dGVuc2lvbigKCiAgICBEaXNw bGF5KiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRXh0Q29kZXMgKlhBZGRFeHRlbnNp b24oCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBYRXh0RGF0YSAqWEZpbmRPbkV4dGVuc2lvbkxp c3QoCgogICAgWEV4dERhdGEqKiAsCiAgICBpbnQKCik7CmV4dGVybiBYRXh0RGF0YSAqKlhFSGVh ZE9mRXh0ZW5zaW9uTGlzdCgKCiAgICBYRURhdGFPYmplY3QKCik7CgoKZXh0ZXJuIFdpbmRvdyBY Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBXaW5kb3cgWERl ZmF1bHRSb290V2luZG93KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gV2luZG93IFhSb290V2lu ZG93T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFZpc3VhbCAqWERlZmF1bHRWaXN1 YWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gVmlzdWFsICpYRGVmYXVsdFZp c3VhbE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiBHQyBYRGVmYXVsdEdDKAoKICAg IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIEdDIFhEZWZhdWx0R0NPZlNjcmVlbigKCiAg ICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbCgKCiAgICBEaXNw bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsKAoKICAg IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEFsbFBsYW5lcygK CiAgICB2b2lkCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbE9mU2NyZWVuKAoK ICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsT2ZTY3JlZW4o CgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWE5leHRSZXF1ZXN0KAoKICAg IERpc3BsYXkqCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTGFzdEtub3duUmVxdWVzdFByb2Nl c3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhTZXJ2ZXJWZW5kb3IoCgogICAg RGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheVN0cmluZygKCiAgICBEaXNwbGF5KgoK KTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcE9mU2NyZWVuKAoKICAgIFNj cmVlbioKCik7CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mU2NyZWVuKAoKICAgIFNjcmVlbioK Cik7CmV4dGVybiBTY3JlZW4gKlhTY3JlZW5PZkRpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAg aW50CgopOwpleHRlcm4gU2NyZWVuICpYRGVmYXVsdFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw bGF5KgoKKTsKZXh0ZXJuIGxvbmcgWEV2ZW50TWFza09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7 CgpleHRlcm4gaW50IFhTY3JlZW5OdW1iZXJPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKdHlw ZWRlZiBpbnQgKCpYRXJyb3JIYW5kbGVyKSAoCgogICAgRGlzcGxheSogLAogICAgWEVycm9yRXZl bnQqCgopOwoKZXh0ZXJuIFhFcnJvckhhbmRsZXIgWFNldEVycm9ySGFuZGxlciAoCgogICAgWEVy cm9ySGFuZGxlcgoKKTsKCgp0eXBlZGVmIGludCAoKlhJT0Vycm9ySGFuZGxlcikgKAoKICAgIERp c3BsYXkqCgopOwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoK ICAgIFhJT0Vycm9ySGFuZGxlcgoKKTsKCgpleHRlcm4gWFBpeG1hcEZvcm1hdFZhbHVlcyAqWExp c3RQaXhtYXBGb3JtYXRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQg KlhMaXN0RGVwdGhzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQqCgopOwoKCgpl eHRlcm4gaW50IFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv dyAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhXaW5kb3dDaGFuZ2VzKgoKKTsK CmV4dGVybiBpbnQgWEdldFdNUHJvdG9jb2xzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs CiAgICBBdG9tKiogLAogICAgaW50KgoKKTsKZXh0ZXJuIGludCBYU2V0V01Qcm90b2NvbHMoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEF0b20qICwKICAgIGludAoKKTsKZXh0ZXJu IGludCBYSWNvbmlmeVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50 CgopOwpleHRlcm4gaW50IFhXaXRoZHJhd1dpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgaW50CgopOwpleHRlcm4gaW50IFhHZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK ICAgIFdpbmRvdyAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWEdldFdN Q29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cq KiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTUNvbG9ybWFwV2luZG93cygKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CmV4dGVybiB2 b2lkIFhGcmVlU3RyaW5nTGlzdCgKCiAgICBjaGFyKioKCik7CmV4dGVybiBpbnQgWFNldFRyYW5z aWVudEZvckhpbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdwoKKTsK CgoKZXh0ZXJuIGludCBYQWN0aXZhdGVTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4 dGVybiBpbnQgWEFkZEhvc3QoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RBZGRyZXNzKgoKKTsK CmV4dGVybiBpbnQgWEFkZEhvc3RzKAoKICAgIERpc3BsYXkqICwKICAgIFhIb3N0QWRkcmVzcyog LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkVG9FeHRlbnNpb25MaXN0KAoKICAgIHN0cnVj dCBfWEV4dERhdGEqKiAsCiAgICBYRXh0RGF0YSoKCik7CgpleHRlcm4gaW50IFhBZGRUb1NhdmVT ZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xv cigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqCgopOwoKZXh0ZXJu IGludCBYQWxsb2NDb2xvckNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAg IGludCAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWdu ZWQgbG9uZyogLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xvclBs YW5lcygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBpbnQgLAogICAgdW5zaWdu ZWQgbG9uZyogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVu c2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqCgop OwoKZXh0ZXJuIGludCBYQWxsb2NOYW1lZENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9y bWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4 dGVybiBpbnQgWEFsbG93RXZlbnRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBUaW1l CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVy biBpbnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJlbGwo CgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIo CgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoK Cik7CgpleHRlcm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu dCBYQ2VsbHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0 aXZlUG9pbnRlckdyYWIoCgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgaW50ICwKICAgIEN1 cnNvciAsCiAgICBUaW1lCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlR0MoCgogICAgRGlzcGxheSog LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMqCgopOwoKZXh0ZXJu IGludCBYQ2hhbmdlS2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVk IGxvbmcgLAogICAgWEtleWJvYXJkQ29udHJvbCoKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXli b2FyZE1hcHBpbmcoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBLZXlT eW0qICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAg IERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cgLAogICAgQXRvbSAsCiAgICBBdG9tICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29u c3QgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlU2F2ZVNl dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY Q2hhbmdlV2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg dW5zaWduZWQgbG9uZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CgpleHRlcm4gaW50 IFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCop ICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAg ICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsK CmV4dGVybiBpbnQgWENoZWNrTWFza0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAog ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRFdmVudCgKCiAgICBEaXNwbGF5 KiAsCiAgICBpbnQgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRXaW5k b3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIFhFdmVu dCoKCik7CgpleHRlcm4gaW50IFhDaGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBsb25nICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhDaXJjdWxh dGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzRG93bigKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cKCik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzVXAoCgogICAgRGlzcGxh eSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg ICB1bnNpZ25lZCBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJXaW5kb3coCgog ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoK ICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3Bs YXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0NoYW5nZXMq CgopOwoKZXh0ZXJuIGludCBYQ29ubmVjdGlvbk51bWJlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4 dGVybiBpbnQgWENvbnZlcnRTZWxlY3Rpb24oCgogICAgRGlzcGxheSogLAogICAgQXRvbSAsCiAg ICBBdG9tICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50 IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBEcmF3YWJsZSAs CiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygKCiAg ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIEdDCgopOwoKZXh0 ZXJuIGludCBYQ29weVBsYW5lKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIERy YXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcK Cik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGgoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop OwoKZXh0ZXJuIGludCBYRGVmYXVsdERlcHRoT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4 dGVybiBpbnQgWERlZmF1bHRTY3JlZW4oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhE ZWZpbmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEN1cnNvcgoKKTsK CmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVdpbmRvdygKCiAgICBEaXNwbGF5KiAs CiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEb2VzQmFja2luZ1N0b3JlKAoKICAg IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEb2VzU2F2ZVVuZGVycygKCiAgICBTY3JlZW4qCgop OwoKZXh0ZXJuIGludCBYRGlzYWJsZUFjY2Vzc0NvbnRyb2woCgogICAgRGlzcGxheSoKCik7CgoK ZXh0ZXJuIGludCBYRGlzcGxheUNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4 dGVybiBpbnQgWERpc3BsYXlIZWlnaHQoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0 ZXJuIGludCBYRGlzcGxheUhlaWdodE1NKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4 dGVybiBpbnQgWERpc3BsYXlLZXljb2RlcygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAg IGludCoKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5UGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aCgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5V2lkdGhNTSgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhEcmF3QXJjKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxl ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3Mo CgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEFyYyogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAg IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nMTYoCgogICAgRGlzcGxh eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z dCBYQ2hhcjJiKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNw bGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu dCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZXMoCgogICAgRGlzcGxheSogLAog ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBvaW50KiAsCiAgICBpbnQgLAogICAgaW50Cgop OwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnRzKAoK ICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAg aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxh eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3Rhbmds ZXMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFJlY3Rhbmds ZSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1NlZ21lbnRzKAoKICAgIERpc3BsYXkq ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhTZWdtZW50KiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK ZXh0ZXJuIGludCBYRHJhd1N0cmluZzE2KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgWENoYXIyYiogLAogICAgaW50 CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0qICwKICAgIGludAoK KTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0xNiogLAogICAgaW50 CgopOwoKZXh0ZXJuIGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgoKKTsK CmV4dGVybiBpbnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhGZXRjaE5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNo YXIqKgoKKTsKCmV4dGVybiBpbnQgWEZpbGxBcmMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi bGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg dW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsQXJj cygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYQXJjKiAsCiAg ICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUG9seWdvbigKCiAgICBEaXNwbGF5KiAsCiAgICBE cmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAsCiAgICBpbnQgLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYRmlsbFJlY3RhbmdsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBE cmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs CiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlcygKCiAgICBE aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhGbHVzaCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQg WEZvcmNlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGlu dCBYRnJlZSgKCiAgICB2b2lkKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcm1hcCgKCiAgICBE aXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAg RGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgaW50ICwK ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhGcmVlQ3Vyc29yKAoKICAgIERpc3Bs YXkqICwKICAgIEN1cnNvcgoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAg IGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250KAoKICAgIERpc3BsYXkqICwKICAgIFhG b250U3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250SW5mbygKCiAgICBjaGFyKiogLAog ICAgWEZvbnRTdHJ1Y3QqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250TmFtZXMo CgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgoK KTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKCmV4dGVy biBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCgopOwoKZXh0ZXJu IGludCBYRnJlZVBpeG1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4g aW50IFhHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog LAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGlu dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JEYXRhYmFz ZVRleHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciog LAogICAgY29uc3QgY2hhciogLAogICAgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY R2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqICwK ICAgIEF0b20gLAogICAgdW5zaWduZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhHZXRHQ1ZhbHVl cygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1Zh bHVlcyoKCik7CgpleHRlcm4gaW50IFhHZXRHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBE cmF3YWJsZSAsCiAgICBXaW5kb3cqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l ZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNp Z25lZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0SWNvbk5hbWUoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldElucHV0Rm9jdXMoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0 S2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIFhLZXlib2FyZFN0YXRlKgoKKTsK CmV4dGVybiBpbnQgWEdldFBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIGludCog LAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlck1hcHBpbmco CgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJu IGludCBYR2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQq ICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWEdldFRyYW5zaWVudEZvckhp bnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyoKCik7CgpleHRlcm4g aW50IFhHZXRXaW5kb3dQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg QXRvbSAsCiAgICBsb25nICwKICAgIGxvbmcgLAogICAgaW50ICwKICAgIEF0b20gLAogICAgQXRv bSogLAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBsb25nKiAs CiAgICB1bnNpZ25lZCBjaGFyKioKCik7CgpleHRlcm4gaW50IFhHZXRXaW5kb3dBdHRyaWJ1dGVz KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYV2luZG93QXR0cmlidXRlcyoKCik7 CgpleHRlcm4gaW50IFhHcmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGlu dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25l ZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAgQ3Vyc29yCgopOwoK ZXh0ZXJuIGludCBYR3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4 dGVybiBpbnQgWEdyYWJLZXlib2FyZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiBpbnQgWEdyYWJQ b2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgV2luZG93ICwKICAgIEN1cnNvciAsCiAg ICBUaW1lCgopOwoKZXh0ZXJuIGludCBYR3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4 dGVybiBpbnQgWEhlaWdodE1NT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg WEhlaWdodE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhJZkV2ZW50KAoK ICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAg ICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVudCogLAogICAgICAgICAgICAgICBYUG9p bnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhJbWFn ZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1h cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBLZXlDb2RlIFhLZXlz eW1Ub0tleWNvZGUoCgogICAgRGlzcGxheSogLAogICAgS2V5U3ltCgopOwoKZXh0ZXJuIGludCBY S2lsbENsaWVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgpleHRlcm4gaW50IFhMb29r dXBDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAs CiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhMb3dlcldpbmRvdygK CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBSYWlzZWQoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFwU3Vid2luZG93cygK CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBXaW5kb3coCgog ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFza0V2ZW50KAoKICAg IERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWE1heENt YXBzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1pbkNtYXBzT2ZTY3Jl ZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1vdmVSZXNpemVXaW5kb3coCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg aW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWE1vdmVXaW5kb3coCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50 IFhOZXh0RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQg WE5vT3AoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQYXJzZUNvbG9yKAoKICAgIERp c3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvcioKCik7 CgpleHRlcm4gaW50IFhQYXJzZUdlb21ldHJ5KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCog LAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoKCik7Cgpl eHRlcm4gaW50IFhQZWVrRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4 dGVybiBpbnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAg aW50ICgqKSAoCgogICAgICAgICAgICAgICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVu dCogLAogICAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50 ZXIKCik7CgpleHRlcm4gaW50IFhQZW5kaW5nKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu dCBYUGxhbmVzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKCik7CgpleHRlcm4gaW50IFhQcm90b2Nv bFJldmlzaW9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYUHJvdG9jb2xWZXJzaW9u KAoKICAgIERpc3BsYXkqCgopOwoKCmV4dGVybiBpbnQgWFB1dEJhY2tFdmVudCgKCiAgICBEaXNw bGF5KiAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYUHV0SW1hZ2UoCgogICAgRGlzcGxh eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAg aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk IGludAoKKTsKCmV4dGVybiBpbnQgWFFMZW5ndGgoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4g aW50IFhRdWVyeUJlc3RDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAg dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg IHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RTaXplKAoKICAgIERpc3Bs YXkqICwKICAgIGludCAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4 dGVybiBpbnQgWFF1ZXJ5QmVzdFN0aXBwbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg LAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQq ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RUaWxlKAoKICAg IERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l ZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqCgopOwoKZXh0ZXJu IGludCBYUXVlcnlDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29s b3IqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlDb2xvcnMoCgogICAgRGlzcGxheSogLAogICAgQ29s b3JtYXAgLAogICAgWENvbG9yKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhRdWVyeUV4dGVu c2lvbigKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQqICwKICAgIGlu dCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5S2V5bWFwKAoKICAgIERpc3BsYXkq ICwKICAgIGNoYXIgWzMyXQoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5UG9pbnRlcigKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIGludCog LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsK CmV4dGVybiBpbnQgWFF1ZXJ5VGV4dEV4dGVudHMoCgogICAgRGlzcGxheSogLAogICAgWElEICwK ICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50 KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhRdWVyeVRleHRFeHRlbnRzMTYo CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludCAs CiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7Cgpl eHRlcm4gaW50IFhRdWVyeVRyZWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdp bmRvdyogLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqKiAsCiAgICB1bnNpZ25lZCBpbnQqCgop OwoKZXh0ZXJuIGludCBYUmFpc2VXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93Cgop OwoKZXh0ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi bGUgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp bnQqICwKICAgIFBpeG1hcCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBY UmVhZEJpdG1hcEZpbGVEYXRhKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIHVuc2lnbmVkIGludCog LAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBjaGFyKiogLAogICAgaW50KiAsCiAg ICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUmViaW5kS2V5c3ltKAoKICAgIERpc3BsYXkqICwKICAg IEtleVN5bSAsCiAgICBLZXlTeW0qICwKICAgIGludCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFy KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZWNvbG9yQ3Vyc29yKAoKICAgIERpc3BsYXkq ICwKICAgIEN1cnNvciAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50 IFhSZWZyZXNoS2V5Ym9hcmRNYXBwaW5nKAoKICAgIFhNYXBwaW5nRXZlbnQqCgopOwoKZXh0ZXJu IGludCBYUmVtb3ZlRnJvbVNhdmVTZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoK ZXh0ZXJuIGludCBYUmVtb3ZlSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFkZHJlc3Mq CgopOwoKZXh0ZXJuIGludCBYUmVtb3ZlSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RB ZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRvdygKCiAgICBE aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhSZXNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu IGludCBYUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUmVzdGFja1dpbmRv d3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50 IFhSb3RhdGVCdWZmZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg WFJvdGF0ZVdpbmRvd1Byb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IEF0b20qICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTY3JlZW5Db3VudCgK CiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFNlbGVjdElucHV0KAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBsb25nCgopOwoKZXh0ZXJuIGludCBYU2VuZEV2ZW50KAoKICAg IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgbG9uZyAsCiAgICBYRXZlbnQq CgopOwoKZXh0ZXJuIGludCBYU2V0QWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQKCik7CgpleHRlcm4gaW50IFhTZXRBcmNNb2RlKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEJhY2tncm91bmQoCgogICAgRGlzcGxheSogLAog ICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldENsaXBNYXNrKAoK ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldENs aXBPcmlnaW4oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiBpbnQgWFNldENsaXBSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK ICAgIGludCAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgaW50ICwKICAgIGludAoK KTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93bk1vZGUoCgogICAgRGlzcGxheSogLAogICAgaW50 CgopOwoKZXh0ZXJuIGludCBYU2V0Q29tbWFuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg LAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldERhc2hlcygKCiAgICBE aXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50Cgop OwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3BsYXkqICwKICAgIEdD ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQoCgogICAgRGlzcGxheSogLAogICAg R0MgLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq ICwKICAgIGNoYXIqKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGb3JlZ3JvdW5kKAoK ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50 IFhTZXRGdW5jdGlvbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQKCik7CgpleHRl cm4gaW50IFhTZXRHcmFwaGljc0V4cG9zdXJlcygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg ICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBX aW5kb3cgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gaW50IFhTZXRJbnB1dEZvY3VzKAoK ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVy biBpbnQgWFNldExpbmVBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVu c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg WFNldE1vZGlmaWVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBYTW9kaWZpZXJLZXltYXAq CgopOwoKZXh0ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRQb2ludGVyTWFwcGluZygKCiAg ICBEaXNwbGF5KiAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl cm4gaW50IFhTZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRTZWxlY3Rpb25Pd25lcigK CiAgICBEaXNwbGF5KiAsCiAgICBBdG9tICwKICAgIFdpbmRvdyAsCiAgICBUaW1lCgopOwoKZXh0 ZXJuIGludCBYU2V0U3RhdGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQg bG9uZyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBsb25nCgop OwoKZXh0ZXJuIGludCBYU2V0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBQ aXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRTdWJ3aW5kb3dNb2RlKAoKICAgIERpc3BsYXkqICwK ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFRTT3JpZ2luKAoKICAgIERpc3Bs YXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRUaWxl KAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNl dFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKAoKICAg IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRX aW5kb3dCb3JkZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGxv bmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXJQaXhtYXAoCgogICAgRGlzcGxheSog LAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRl cldpZHRoKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQKCik7 CgpleHRlcm4gaW50IFhTZXRXaW5kb3dDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k b3cgLAogICAgQ29sb3JtYXAKCik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZlcigKCiAgICBEaXNw bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGlu dCBYU3RvcmVCeXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQK Cik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9ycygKCiAgICBEaXNwbGF5 KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg WFN0b3JlTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhcioK Cik7CgpleHRlcm4gaW50IFhTdG9yZU5hbWVkQ29sb3IoCgogICAgRGlzcGxheSogLAogICAgQ29s b3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7 CgpleHRlcm4gaW50IFhTeW5jKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFRleHRFeHRlbnRzKAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAg ICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3Qq CgopOwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAg Y29uc3QgWENoYXIyYiogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQq ICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aCgKCiAgICBYRm9u dFN0cnVjdCogLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVGV4 dFdpZHRoMTYoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGlu dAoKKTsKCmV4dGVybiBpbnQgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKAoKICAgIERpc3BsYXkqICwK ICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwK ICAgIGludCogLAogICAgV2luZG93KgoKKTsKCmV4dGVybiBpbnQgWFVuZGVmaW5lQ3Vyc29yKAoK ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYkJ1dHRvbigK CiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAg IFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3Jh YktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy YWJQb2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy YWJTZXJ2ZXIoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhVbmluc3RhbGxDb2xvcm1h cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFVubG9hZEZv bnQoCgogICAgRGlzcGxheSogLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFVubWFwU3Vid2lu ZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhVbm1hcFdp bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhWZW5kb3JS ZWxlYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYV2FycFBvaW50ZXIoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoK KTsKCmV4dGVybiBpbnQgWFdpZHRoTU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJu IGludCBYV2lkdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYV2luZG93 RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50 KgoKKTsKCmV4dGVybiBpbnQgWFdyaXRlQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBQaXhtYXAgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk IGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU3VwcG9ydHNMb2NhbGUg KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKlhTZXRMb2NhbGVNb2RpZmllcnMoCiAgICBjb25zdCBjaGFy KgopOwoKZXh0ZXJuIFhPTSBYT3Blbk9NKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt SGFzaEJ1Y2tldFJlYyogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7Cgpl eHRlcm4gaW50IFhDbG9zZU9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBjaGFyICpYU2V0T01WYWx1 ZXMoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0T01WYWx1ZXMoCgog ICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mT00oCgogICAg WE9NCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZk9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBY T0MgWENyZWF0ZU9DKAoKICAgIFhPTSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJv eU9DKAoKICAgIFhPQwoKKTsKCmV4dGVybiBYT00gWE9NT2ZPQygKCiAgICBYT0MKCik7CgpleHRl cm4gY2hhciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hh ciAqWEdldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQg WENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY2hh cioqKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiB2b2lkIFhGcmVlRm9udFNl dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBpbnQgWEZvbnRzT2ZG b250U2V0KAoKICAgIFhGb250U2V0ICwKICAgIFhGb250U3RydWN0KioqICwKICAgIGNoYXIqKioK Cik7CgpleHRlcm4gY2hhciAqWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQoCgogICAgWEZvbnRT ZXQKCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK CmV4dGVybiBpbnQgWENvbnRleHREZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0CgopOwoK ZXh0ZXJuIGludCBYRGlyZWN0aW9uYWxEZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0Cgop OwoKZXh0ZXJuIGludCBYQ29udGV4dHVhbERyYXdpbmcoCgogICAgWEZvbnRTZXQKCik7CgpleHRl cm4gWEZvbnRTZXRFeHRlbnRzICpYRXh0ZW50c09mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK CmV4dGVybiBpbnQgWG1iVGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3Qg Y2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXNjYXBlbWVudCgKCiAgICBY Rm9udFNldCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh1 dGY4VGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK Cik7CgpleHRlcm4gaW50IFh3Y1RleHRFeHRlbnRzKAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0 IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVjdGFuZ2xlKgoK KTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBjb25z dCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoKCik7 CgpleHRlcm4gaW50IFhtYlRleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSog LAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK Cik7CgpleHRlcm4gaW50IFh3Y1RleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAg ICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh bmdsZSogLAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh bmdsZSoKCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250 U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0KAoKICAgIERpc3BsYXkqICwK ICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWG1iVGV4dEl0 ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERpc3BsYXkq ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWHdjVGV4 dEl0ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1RleHQoCgogICAgRGlz cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBY bWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1N0cmluZygKCiAg ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBp bnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lk IFh3Y0RyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRT ZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAg ICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAog ICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3SW1hZ2VT dHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAg R0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gdm9pZCBYd2NEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi bGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z dCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdJbWFnZVN0cmlu ZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAs CiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVy biBYSU0gWE9wZW5JTSgKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRS ZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VJTSgKCiAg ICBYSU0KCik7CgpleHRlcm4gY2hhciAqWEdldElNVmFsdWVzKAoKICAgIFhJTSAsIC4uLgoKKTsK CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mSU0oCgogICAgWElNCgopOwoKZXh0ZXJuIGNoYXIg KlhMb2NhbGVPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlDKAoKICAgIFhJ TSAsIC4uLgoKKTsKCmV4dGVybiB2b2lkIFhEZXN0cm95SUMoCgogICAgWElDCgopOwoKZXh0ZXJu IHZvaWQgWFNldElDRm9jdXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHZvaWQgWFVuc2V0SUNGb2N1 cygKCiAgICBYSUMKCik7CgpleHRlcm4gd2NoYXJfdCAqWHdjUmVzZXRJQygKCiAgICBYSUMKCik7 CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWHV0 ZjhSZXNldElDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBjaGFyICpYU2V0SUNWYWx1ZXMoCgogICAg WElDICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJQ1ZhbHVlcygKCiAgICBYSUMgLCAuLi4K Cik7CgpleHRlcm4gWElNIFhJTU9mSUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGludCBYRmlsdGVy RXZlbnQoCgogICAgWEV2ZW50KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhtYkxvb2t1 cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciogLAog ICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHdjTG9va3Vw U3RyaW5nKAoKICAgIFhJQyAsCiAgICBYS2V5UHJlc3NlZEV2ZW50KiAsCiAgICB3Y2hhcl90KiAs CiAgICBpbnQgLAogICAgS2V5U3ltKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYdXRmOExv b2t1cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciog LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBYVmFOZXN0ZWRM aXN0IFhWYUNyZWF0ZU5lc3RlZExpc3QoCgogICAgaW50ICwgLi4uCgopOwoKCgpleHRlcm4gaW50 IFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1 Y3QgX1hybUhhc2hCdWNrZXRSZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFBy b2MgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhVbnJlZ2lzdGVySU1JbnN0YW50aWF0 ZUNhbGxiYWNrKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyog LAogICAgY2hhciogLAogICAgY2hhciogLAogICAgWElEUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsK CnR5cGVkZWYgdm9pZCAoKlhDb25uZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KiAsCiAg ICBYUG9pbnRlciAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhQb2ludGVyKgoKKTsKCgpleHRl cm4gaW50IFhJbnRlcm5hbENvbm5lY3Rpb25OdW1iZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGlu dCoqICwKICAgIGludCoKCik7CgpleHRlcm4gdm9pZCBYUHJvY2Vzc0ludGVybmFsQ29ubmVjdGlv bigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRDb25uZWN0aW9u V2F0Y2goCgogICAgRGlzcGxheSogLAogICAgWENvbm5lY3Rpb25XYXRjaFByb2MgLAogICAgWFBv aW50ZXIKCik7CgpleHRlcm4gdm9pZCBYUmVtb3ZlQ29ubmVjdGlvbldhdGNoKAoKICAgIERpc3Bs YXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJu IHZvaWQgWFNldEF1dGhvcml6YXRpb24oCgogICAgY2hhciAqICwKICAgIGludCAsCiAgICBjaGFy ICogLAogICAgaW50CgopOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGZsYWdzOwog ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBt aW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsK ICAgICAgICBpbnQgd2lkdGhfaW5jLCBoZWlnaHRfaW5jOwogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgICAgIGludCB5OwogICAgICAgIH0gbWluX2Fz cGVjdCwgbWF4X2FzcGVjdDsKICAgICAgICBpbnQgYmFzZV93aWR0aCwgYmFzZV9oZWlnaHQ7CiAg ICAgICAgaW50IHdpbl9ncmF2aXR5Owp9IFhTaXplSGludHM7CnR5cGVkZWYgc3RydWN0IHsKICAg ICAgICBsb25nIGZsYWdzOwogICAgICAgIGludCBpbnB1dDsKCiAgICAgICAgaW50IGluaXRpYWxf c3RhdGU7CiAgICAgICAgUGl4bWFwIGljb25fcGl4bWFwOwogICAgICAgIFdpbmRvdyBpY29uX3dp bmRvdzsKICAgICAgICBpbnQgaWNvbl94LCBpY29uX3k7CiAgICAgICAgUGl4bWFwIGljb25fbWFz azsKICAgICAgICBYSUQgd2luZG93X2dyb3VwOwoKfSBYV01IaW50czsKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CiAgICBBdG9tIGVuY29kaW5nOwogICAgaW50IGZv cm1hdDsKICAgIHVuc2lnbmVkIGxvbmcgbml0ZW1zOwp9IFhUZXh0UHJvcGVydHk7CgoKCgoKdHlw ZWRlZiBlbnVtIHsKICAgIFhTdHJpbmdTdHlsZSwKICAgIFhDb21wb3VuZFRleHRTdHlsZSwKICAg IFhUZXh0U3R5bGUsCiAgICBYU3RkSUNDVGV4dFN0eWxlLAoKICAgIFhVVEY4U3RyaW5nU3R5bGUK fSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgbWluX3dp ZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAg ICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgY2hhciAqcmVzX25hbWU7CiAgICAgICAgY2hhciAqcmVzX2NsYXNzOwp9IFhD bGFzc0hpbnQ7CnR5cGVkZWYgc3RydWN0IF9YQ29tcG9zZVN0YXR1cyB7CiAgICBYUG9pbnRlciBj b21wb3NlX3B0cjsKICAgIGludCBjaGFyc19tYXRjaGVkOwp9IFhDb21wb3NlU3RhdHVzOwp0eXBl ZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHN0cnVjdCB7CiAgVmlzdWFsICp2 aXN1YWw7CiAgVmlzdWFsSUQgdmlzdWFsaWQ7CiAgaW50IHNjcmVlbjsKICBpbnQgZGVwdGg7CgoK CiAgaW50IGNsYXNzOwoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcg Z3JlZW5fbWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6 ZTsKICBpbnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwp0eXBlZGVmIHN0cnVjdCB7CiAg ICAgICAgQ29sb3JtYXAgY29sb3JtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgcmVkX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVl bl9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVk IGxvbmcgYmx1ZV9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyBiYXNlX3BpeGVsOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAg ICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5kYXJkQ29sb3JtYXA7CnR5cGVkZWYgaW50IFhDb250ZXh0 OwoKCgoKCgoKCmV4dGVybiBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQK Cik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4 dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g WFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7 CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g aW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBS ZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhE ZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBpbnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlz cGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJl Z2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdp b24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9u CgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK ICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoKKTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGlu dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWENsYXNzSGludCoKCik7CgpleHRl cm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhJ Y29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50 IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFu ZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0 U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7 CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSogLAogICAgV2luZG93 ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8g KlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWFZpc3VhbElu Zm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAg RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhX TUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRl cm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY VGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQgWEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAs CiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5v cm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs CiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdldFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkq ICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgop OwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs CiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBS ZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0 Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJu IGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlFdmVudCogLAogICAgY2hhciogLAogICAgaW50 ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VTdGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0 Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50 ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBS ZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24o CgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5 Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp bnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1 bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRl eHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNo YXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NIaW50KAoKICAgIERpc3BsYXkqICwKICAgIFdp bmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiBpbnQgWFNldEljb25TaXplcygKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWEljb25TaXplKiAsCiAgICBpbnQKCik7Cgpl eHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAog ICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERp c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwK ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTaXplSGludHMoCgogICAgRGlzcGxheSogLAog ICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhT ZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNv bnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAog ICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0 eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSogLAogICAg QXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSog LAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01I aW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0 ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5 KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0 V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50 cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAg IFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBj aGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBY Q2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFhtYlNldFdNUHJvcGVydGllcygKCiAgICBEaXNw bGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog ICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAog ICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAg ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hh ciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50 cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01TaXplSGludHMoCgog ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7 CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUmVn aW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSog LAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0 ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY U2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNocmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAog ICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0 eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJu IGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVnaW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdp b24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5 KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2Rp bmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4 dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXks CiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBjb3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxl IHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGlu dCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAg Y2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwK ICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0Zy ZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxpc3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9w ZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAg IGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNw bGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hh cioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3 Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3Qg WFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgd2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAg IGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0 TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0 X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJuLAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsK CmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAgWFJlY3RhbmdsZSogLAogICAg UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJl Z2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRy eSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3Qg Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIGludCogLAog ICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQg WFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCgoK CgoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFsbG9jKAoKICAgIHVuc2lnbmVkIGludAoKKTsKCgoK CgoKCnR5cGVkZWYgaW50IFhybVF1YXJrLCAqWHJtUXVhcmtMaXN0OwoKCnR5cGVkZWYgY2hhciAq WHJtU3RyaW5nOwoKCgpleHRlcm4gWHJtUXVhcmsgWHJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25z dCBjaGFyKgoKKTsKCmV4dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBj b25zdCBjaGFyKgoKKTsKCgpleHRlcm4gWHJtU3RyaW5nIFhybVF1YXJrVG9TdHJpbmcoCgogICAg WHJtUXVhcmsKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoK KTsKdHlwZWRlZiBlbnVtIHtYcm1CaW5kVGlnaHRseSwgWHJtQmluZExvb3NlbHl9IFhybUJpbmRp bmcsICpYcm1CaW5kaW5nTGlzdDsKCmV4dGVybiB2b2lkIFhybVN0cmluZ1RvUXVhcmtMaXN0KAoK ICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVF1YXJrTGlzdAoKKTsKCmV4dGVybiB2b2lkIFhybVN0 cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1CaW5kaW5n TGlzdCAsCiAgICBYcm1RdWFya0xpc3QKCik7CgoKCgoKCgp0eXBlZGVmIFhybVF1YXJrIFhybU5h bWU7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybU5hbWVMaXN0OwoKCgoKdHlwZWRlZiBYcm1RdWFy ayBYcm1DbGFzczsKdHlwZWRlZiBYcm1RdWFya0xpc3QgWHJtQ2xhc3NMaXN0Owp0eXBlZGVmIFhy bVF1YXJrIFhybVJlcHJlc2VudGF0aW9uOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25l ZCBpbnQgc2l6ZTsKICAgIFhQb2ludGVyIGFkZHI7Cn0gWHJtVmFsdWUsICpYcm1WYWx1ZVB0cjsK dHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybUhhc2hCdWNrZXQ7CnR5cGVkZWYg WHJtSGFzaEJ1Y2tldCAqWHJtSGFzaFRhYmxlOwp0eXBlZGVmIFhybUhhc2hUYWJsZSBYcm1TZWFy Y2hMaXN0W107CnR5cGVkZWYgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjICpYcm1EYXRhYmFzZTsK CgpleHRlcm4gdm9pZCBYcm1EZXN0cm95RGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UKCik7Cgpl eHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIFhybUJp bmRpbmdMaXN0ICwKICAgIFhybVF1YXJrTGlzdCAsCiAgICBYcm1SZXByZXNlbnRhdGlvbiAsCiAg ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRh YmFzZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUq CgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNl KiAsCiAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICBYcm1RdWFya0xpc3QgLAogICAgY29uc3QgY2hh cioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRTdHJpbmdSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFz ZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY cm1QdXRMaW5lUmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIGNvbnN0IGNoYXIqCgop OwoKZXh0ZXJuIGludCBYcm1RR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJt TmFtZUxpc3QgLAogICAgWHJtQ2xhc3NMaXN0ICwKICAgIFhybVJlcHJlc2VudGF0aW9uKiAsCiAg ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybUdldFJlc291cmNlKAoKICAgIFhybURhdGFi YXNlICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNoYXIqKiAsCiAg ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybVFHZXRTZWFyY2hMaXN0KAoKICAgIFhybURh dGFiYXNlICwKICAgIFhybU5hbWVMaXN0ICwKICAgIFhybUNsYXNzTGlzdCAsCiAgICBYcm1TZWFy Y2hMaXN0ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWHJtUUdldFNlYXJjaFJlc291cmNlKAoK ICAgIFhybVNlYXJjaExpc3QgLAogICAgWHJtTmFtZSAsCiAgICBYcm1DbGFzcyAsCiAgICBYcm1S ZXByZXNlbnRhdGlvbiogLAogICAgWHJtVmFsdWUqCgopOwoKCgoKCgoKZXh0ZXJuIHZvaWQgWHJt U2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSogLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4g WHJtRGF0YWJhc2UgWHJtR2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWHJt RGF0YWJhc2UgWHJtR2V0RmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJu IGludCBYcm1Db21iaW5lRmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybURh dGFiYXNlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0U3RyaW5nRGF0 YWJhc2UoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRGaWxlRGF0YWJh c2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY cm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZSAsCiAgICBYcm1EYXRhYmFzZSoKCik7 CgpleHRlcm4gdm9pZCBYcm1Db21iaW5lRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAg WHJtRGF0YWJhc2UqICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBpbnQgWHJtRW51bWVyYXRlRGF0 YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJtTmFtZUxpc3QgLAogICAgWHJtQ2xhc3NM aXN0ICwKICAgIGludCAsCiAgICBpbnQgKCopKAoKICAgICAgICAgICAgIFhybURhdGFiYXNlKiAs CiAgICAgICAgICAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICAgICAgICAgICBYcm1RdWFya0xpc3Qg LAogICAgICAgICAgICAgWHJtUmVwcmVzZW50YXRpb24qICwKICAgICAgICAgICAgIFhybVZhbHVl KiAsCiAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIK Cik7CgpleHRlcm4gY29uc3QgY2hhciAqWHJtTG9jYWxlT2ZEYXRhYmFzZSgKCiAgICBYcm1EYXRh YmFzZQoKKTsKdHlwZWRlZiBlbnVtIHsKICAgIFhybW9wdGlvbk5vQXJnLAogICAgWHJtb3B0aW9u SXNBcmcsCiAgICBYcm1vcHRpb25TdGlja3lBcmcsCiAgICBYcm1vcHRpb25TZXBBcmcsCiAgICBY cm1vcHRpb25SZXNBcmcsCiAgICBYcm1vcHRpb25Ta2lwQXJnLAogICAgWHJtb3B0aW9uU2tpcExp bmUsCiAgICBYcm1vcHRpb25Ta2lwTkFyZ3MKCn0gWHJtT3B0aW9uS2luZDsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIGNoYXIgKm9wdGlvbjsKICAgIGNoYXIgKnNwZWNpZmllcjsKICAgIFhybU9wdGlv bktpbmQgYXJnS2luZDsKICAgIFhQb2ludGVyIHZhbHVlOwp9IFhybU9wdGlvbkRlc2NSZWMsICpY cm1PcHRpb25EZXNjTGlzdDsKCgpleHRlcm4gdm9pZCBYcm1QYXJzZUNvbW1hbmQoCgogICAgWHJt RGF0YWJhc2UqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwKICAgIGludCAsCiAgICBjb25zdCBj aGFyKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCgp0eXBlZGVmIGNoYXIgKlN0cmluZzsK dHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyAqV2lkZ2V0Owp0eXBlZGVmIFdpZGdldCAqV2lkZ2V0 TGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpXaWRnZXRDbGFzczsKdHlwZWRl ZiBzdHJ1Y3QgX0NvbXBvc2l0ZVJlYyAqQ29tcG9zaXRlV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBf WHRBY3Rpb25zUmVjICpYdEFjdGlvbkxpc3Q7CnR5cGVkZWYgc3RydWN0IF9YdEV2ZW50UmVjICpY dEV2ZW50VGFibGU7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBcHBTdHJ1Y3QgKlh0QXBwQ29udGV4dDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIFh0VmFsdWVNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg WHRJbnRlcnZhbElkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRJbnB1dElkOwp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgWHRXb3JrUHJvY0lkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRTaWduYWxJ ZDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgWHRHZW9tZXRyeU1hc2s7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBYdEdDTWFzazsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeGVsOwp0eXBlZGVmIGludCBY dENhY2hlVHlwZTsKdHlwZWRlZiBjaGFyIEJvb2xlYW47CnR5cGVkZWYgbG9uZyBYdEFyZ1ZhbDsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFh0RW51bTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBDYXJk aW5hbDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBEaW1lbnNpb247CnR5cGVkZWYgc2hvcnQgUG9z aXRpb247CgoKdHlwZWRlZiB2b2lkKiBYdFBvaW50ZXI7CgoKCgoKCnR5cGVkZWYgWHRQb2ludGVy IE9wYXF1ZTsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpDb3JlV2lkZ2V0Q2xhc3M7 CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgKkNvcmVXaWRnZXQ7CmV4dGVybiBXaWRnZXRDbGFz cyBjb3JlV2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHdpZGdldENsYXNzOwp0eXBl ZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgKkNvbXBvc2l0ZVdpZGdldENsYXNzOwoKdHlw ZWRlZiBDYXJkaW5hbCAoKlh0T3JkZXJQcm9jKSgKCiAgICBXaWRnZXQKCik7CgoKCmV4dGVybiB2 b2lkIFh0TWFuYWdlQ2hpbGRyZW4oCgogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK CmV4dGVybiB2b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQg WHRVbm1hbmFnZUNoaWxkcmVuKAoKICAgIFdpZGdldExpc3QgLAogICAgQ2FyZGluYWwKCik7Cgpl eHRlcm4gdm9pZCBYdFVubWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKdHlwZWRlZiB2b2lk ICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXRMaXN0ICwKICAgIENh cmRpbmFsICogLAogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFh0UG9pbnRl cgoKKTsKCmV4dGVybiB2b2lkIFh0Q2hhbmdlTWFuYWdlZFNldCgKCiAgICBXaWRnZXRMaXN0ICwK ICAgIENhcmRpbmFsICwKICAgIFh0RG9DaGFuZ2VQcm9jICwKICAgIFh0UG9pbnRlciAsCiAgICBX aWRnZXRMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKCgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbXBv c2l0ZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjICpDb25z dHJhaW50V2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbnN0cmFpbnRXaWRnZXRD bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBf T2JqZWN0Q2xhc3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFzcyBvYmplY3RD bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpSZWMgKlJlY3RPYmo7CnR5cGVkZWYgc3RydWN0 IF9SZWN0T2JqQ2xhc3NSZWMgKlJlY3RPYmpDbGFzczsKCgpleHRlcm4gV2lkZ2V0Q2xhc3MgcmVj dE9iakNsYXNzOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1RyYW5zbGF0aW9uRGF0YSAqWHRUcmFuc2xh dGlvbnM7CnR5cGVkZWYgc3RydWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0QWNjZWxlcmF0b3JzOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBNb2RpZmllcnM7Cgp0eXBlZGVmIHZvaWQgKCpYdEFjdGlvblBy b2MpKAoKICAgIFdpZGdldCAsCiAgICBYRXZlbnQqICwKICAgIFN0cmluZyogLAogICAgQ2FyZGlu YWwqCgopOwoKdHlwZWRlZiBYdEFjdGlvblByb2MqIFh0Qm91bmRBY3Rpb25zOwoKdHlwZWRlZiBz dHJ1Y3QgX1h0QWN0aW9uc1JlY3sKICAgIFN0cmluZyBzdHJpbmc7CiAgICBYdEFjdGlvblByb2Mg cHJvYzsKfSBYdEFjdGlvbnNSZWM7Cgp0eXBlZGVmIGVudW0gewoKCiAgICBYdEFkZHJlc3MsCiAg ICBYdEJhc2VPZmZzZXQsCiAgICBYdEltbWVkaWF0ZSwKICAgIFh0UmVzb3VyY2VTdHJpbmcsCiAg ICBYdFJlc291cmNlUXVhcmssCiAgICBYdFdpZGdldEJhc2VPZmZzZXQsCiAgICBYdFByb2NlZHVy ZUFyZwp9IFh0QWRkcmVzc01vZGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEFkZHJlc3NNb2Rl IGFkZHJlc3NfbW9kZTsKICAgIFh0UG9pbnRlciBhZGRyZXNzX2lkOwogICAgQ2FyZGluYWwgc2l6 ZTsKfSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoKdHlwZWRlZiB2b2lkICgq WHRDb252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1W YWx1ZSoKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEdlb21ldHJ5TWFzayByZXF1ZXN0X21v ZGU7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgRGltZW5zaW9uIHdpZHRoLCBoZWlnaHQsIGJvcmRl cl93aWR0aDsKICAgIFdpZGdldCBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWHRXaWRn ZXRHZW9tZXRyeTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0Q29udmVydGVyKSgKCiAgICBYcm1W YWx1ZSogLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlKiAsCiAgICBYcm1WYWx1ZSoKCik7 Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFR5cGVDb252ZXJ0ZXIpKAoKICAgIERpc3BsYXkqICwKICAg IFhybVZhbHVlKiAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWUqICwKICAgIFhybVZhbHVl KiAsCiAgICBYdFBvaW50ZXIqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZXN0cnVjdG9yKSgKCiAg ICBYdEFwcENvbnRleHQgLAogICAgWHJtVmFsdWUqICwKICAgIFh0UG9pbnRlciAsCiAgICBYcm1W YWx1ZSogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBPcGFxdWUgWHRDYWNoZVJlZjsKCnR5 cGVkZWYgT3BhcXVlIFh0QWN0aW9uSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRBY3Rpb25Ib29r UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBTdHJpbmcgLAogICAgWEV2 ZW50KiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgdW5zaWduZWQg bG9uZyBYdEJsb2NrSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRCbG9ja0hvb2tQcm9jKSgKCiAg ICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEtleVByb2MpKAoKICAgIERpc3BsYXkq ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAg ICBLZXlTeW0qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDYXNlUHJvYykoCgogICAgRGlzcGxheSog LAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgS2V5U3ltKgoKKTsKCnR5cGVkZWYgdm9p ZCAoKlh0RXZlbnRIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFhF dmVudCogLAogICAgQm9vbGVhbioKCik7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBFdmVudE1hc2s7 Cgp0eXBlZGVmIGVudW0ge1h0TGlzdEhlYWQsIFh0TGlzdFRhaWwgfSBYdExpc3RQb3NpdGlvbjsK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdElucHV0TWFzazsKCgoKCgp0eXBlZGVmIHZvaWQgKCpY dFRpbWVyQ2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgLAogICAgWHRJbnRlcnZhbElkKgoK KTsKCnR5cGVkZWYgdm9pZCAoKlh0SW5wdXRDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlciAs CiAgICBpbnQqICwKICAgIFh0SW5wdXRJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNpZ25hbENh bGxiYWNrUHJvYykoCgogICAgWHRQb2ludGVyICwKICAgIFh0U2lnbmFsSWQqCgopOwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgU3RyaW5nIG5hbWU7CiAgICBYdEFyZ1ZhbCB2YWx1ZTsKfSBBcmcsICpB cmdMaXN0OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRWYXJBcmdzTGlzdDsKCnR5cGVkZWYgdm9pZCAo Klh0Q2FsbGJhY2tQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UG9p bnRlcgoKKTsKCnR5cGVkZWYgc3RydWN0IF9YdENhbGxiYWNrUmVjIHsKICAgIFh0Q2FsbGJhY2tQ cm9jIGNhbGxiYWNrOwogICAgWHRQb2ludGVyIGNsb3N1cmU7Cn0gWHRDYWxsYmFja1JlYywgKlh0 Q2FsbGJhY2tMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBYdENhbGxiYWNrTm9MaXN0LAog ICAgICAgIFh0Q2FsbGJhY2tIYXNOb25lLAogICAgICAgIFh0Q2FsbGJhY2tIYXNTb21lCn0gWHRD YWxsYmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBYdEdlb21ldHJ5WWVzLAogICAgWHRH ZW9tZXRyeU5vLAogICAgWHRHZW9tZXRyeUFsbW9zdCwKICAgIFh0R2VvbWV0cnlEb25lCn0gWHRH ZW9tZXRyeVJlc3VsdDsKCnR5cGVkZWYgZW51bSB7WHRHcmFiTm9uZSwgWHRHcmFiTm9uZXhjbHVz aXZlLCBYdEdyYWJFeGNsdXNpdmV9IFh0R3JhYktpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBX aWRnZXQgc2hlbGxfd2lkZ2V0OwogICAgV2lkZ2V0IGVuYWJsZV93aWRnZXQ7Cn0gWHRQb3Bkb3du SURSZWMsICpYdFBvcGRvd25JRDsKCnR5cGVkZWYgc3RydWN0IF9YdFJlc291cmNlIHsKICAgIFN0 cmluZyByZXNvdXJjZV9uYW1lOwogICAgU3RyaW5nIHJlc291cmNlX2NsYXNzOwogICAgU3RyaW5n IHJlc291cmNlX3R5cGU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9zaXplOwogICAgQ2FyZGluYWwg cmVzb3VyY2Vfb2Zmc2V0OwogICAgU3RyaW5nIGRlZmF1bHRfdHlwZTsKICAgIFh0UG9pbnRlciBk ZWZhdWx0X2FkZHI7Cn0gWHRSZXNvdXJjZSwgKlh0UmVzb3VyY2VMaXN0OwoKdHlwZWRlZiB2b2lk ICgqWHRSZXNvdXJjZURlZmF1bHRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIFhy bVZhbHVlKgoKKTsKCnR5cGVkZWYgU3RyaW5nICgqWHRMYW5ndWFnZVByb2MpKAoKICAgIERpc3Bs YXkqICwKICAgIFN0cmluZyAsCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEVy cm9yTXNnSGFuZGxlcikoCgogICAgU3RyaW5nICwKICAgIFN0cmluZyAsCiAgICBTdHJpbmcgLAog ICAgU3RyaW5nICwKICAgIFN0cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiB2b2lk ICgqWHRFcnJvckhhbmRsZXIpKAoKICBTdHJpbmcKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENyZWF0 ZVBvcHVwQ2hpbGRQcm9jKSgKCiAgICBXaWRnZXQKCik7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFdv cmtQcm9jKSgKCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyIG1h dGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBTdWJzdGl0dXRpb25SZWMsICpTdWJzdGl0 dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQcmVkaWNhdGUpKAoKICAgU3RyaW5nCgop OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRSZXF1ZXN0SWQ7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdENv bnZlcnRTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSog LAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBp bnQqCgopOwoKdHlwZWRlZiB2b2lkICgqWHRMb3NlU2VsZWN0aW9uUHJvYykoCgogICAgV2lkZ2V0 ICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRTZWxlY3Rpb25Eb25lUHJvYykoCgog ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRT ZWxlY3Rpb25DYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAg QXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyICwKICAgIHVuc2lnbmVkIGxvbmcqICwK ICAgIGludCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rpb25JbmNyUHJvYykoCgog ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAo Klh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAg QXRvbSogLAogICAgWHRSZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9v bGVhbiAoKlh0Q29udmVydFNlbGVjdGlvbkluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRv bSogLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25l ZCBsb25nKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIFh0UG9pbnRlciAs CiAgICBYdFJlcXVlc3RJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENhbmNlbENvbnZlcnRTZWxl Y3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRS ZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0RXZlbnRE aXNwYXRjaFByb2MpKAoKICAgIFhFdmVudCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEV4dGVuc2lv blNlbGVjdFByb2MpKAoKICAgIFdpZGdldCAsCiAgICBpbnQqICwKICAgIFh0UG9pbnRlciogLAog ICAgaW50ICwKICAgIFh0UG9pbnRlcgoKKTsKCgoKCgoKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDb252 ZXJ0QW5kU3RvcmUoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVZhbHVl KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gQm9vbGVhbiBY dENhbGxDb252ZXJ0ZXIoCgogICAgRGlzcGxheSogLAogICAgWHRUeXBlQ29udmVydGVyICwKICAg IFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh bHVlKiAsCiAgICBYdENhY2hlUmVmKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVu dCgKCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDYWxsQWNjZXB0Rm9jdXMoCgog ICAgV2lkZ2V0ICwKICAgIFRpbWUqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRQZWVrRXZlbnQoCgog ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVla0V2ZW50KAoKICAgIFh0QXBw Q29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1N1YmNsYXNzKAoK ICAgIFdpZGdldCAsCiAgICBXaWRnZXRDbGFzcwoKKTsKCmV4dGVybiBCb29sZWFuIFh0SXNPYmpl Y3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWco CgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBCb29sZWFuIF9YdElz U3ViY2xhc3NPZigKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0Q2xh c3MgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc01hbmFnZWQoCgog ICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldAoK KTsKCmV4dGVybiBCb29sZWFuIFh0SXNTZW5zaXRpdmUoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJu IEJvb2xlYW4gWHRPd25TZWxlY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGlt ZSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25Qcm9jICwKICAgIFh0TG9zZVNlbGVjdGlvblByb2Mg LAogICAgWHRTZWxlY3Rpb25Eb25lUHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0T3duU2VsZWN0 aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGltZSAsCiAgICBY dENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYyAsCiAgICBYdExvc2VTZWxlY3Rpb25JbmNyUHJvYyAs CiAgICBYdFNlbGVjdGlvbkRvbmVJbmNyUHJvYyAsCiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rp b25Qcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdEdlb21ldHJ5UmVzdWx0IFh0TWFr ZVJlc2l6ZVJlcXVlc3QoCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp Z25lZCBpbnQgLAogICAgRGltZW5zaW9uKiAsCiAgICBEaW1lbnNpb24qCgopOwoKZXh0ZXJuIHZv aWQgWHRUcmFuc2xhdGVDb29yZHMoCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBpbnQgLAog ICAgUG9zaXRpb24qICwKICAgIFBvc2l0aW9uKgoKKTsKCmV4dGVybiBLZXlTeW0qIFh0R2V0S2V5 c3ltVGFibGUoCgogICAgRGlzcGxheSogLAogICAgS2V5Q29kZSogLAogICAgaW50KgoKKTsKCmV4 dGVybiB2b2lkIFh0S2V5c3ltVG9LZXljb2RlTGlzdCgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlT eW0gLAogICAgS2V5Q29kZSoqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0U3Ry aW5nQ29udmVyc2lvbldhcm5pbmcoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioK Cik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlTdHJpbmdDb252ZXJzaW9uV2FybmluZygKCiAgICBE aXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCgpleHRlcm4g WHRDb252ZXJ0QXJnUmVjIGNvbnN0IGNvbG9yQ29udmVydEFyZ3NbXTsKZXh0ZXJuIFh0Q29udmVy dEFyZ1JlYyBjb25zdCBzY3JlZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBB ZGRDb252ZXJ0ZXIoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv bnN0IGNoYXIqICwKICAgIFh0Q29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAg Q2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdEFkZENvbnZlcnRlcigKCiAgICBjb25zdCBjaGFy KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYdENvbnZlcnRlciAsCiAgICBYdENvbnZlcnRBcmdM aXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRUeXBlQ29udmVydGVyKAoK ICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0VHlwZUNvbnZlcnRlciAs CiAgICBYdENvbnZlcnRBcmdMaXN0ICwKICAgIENhcmRpbmFsICwKICAgIFh0Q2FjaGVUeXBlICwK ICAgIFh0RGVzdHJ1Y3RvcgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwU2V0VHlwZUNvbnZlcnRlcigK CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog ICAgWHRUeXBlQ29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAgQ2FyZGluYWwg LAogICAgWHRDYWNoZVR5cGUgLAogICAgWHREZXN0cnVjdG9yCgopOwoKZXh0ZXJuIHZvaWQgWHRD b252ZXJ0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSogLAog ICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUqCgopOwoKZXh0ZXJuIHZvaWQgWHREaXJlY3RD b252ZXJ0KAoKICAgIFh0Q29udmVydGVyICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs ICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlKgoKKTsKCgoKCgoKCmV4dGVybiBYdFRy YW5zbGF0aW9ucyBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSgKCiAgICBjb25zdCBjaGFyKgoKKTsK CmV4dGVybiBYdEFjY2VsZXJhdG9ycyBYdFBhcnNlQWNjZWxlcmF0b3JUYWJsZSgKCiAgICBjb25z dCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnMoCgogICAgV2lk Z2V0ICwKICAgIFh0VHJhbnNsYXRpb25zCgopOwoKZXh0ZXJuIHZvaWQgWHRBdWdtZW50VHJhbnNs YXRpb25zKAoKICAgIFdpZGdldCAsCiAgICBYdFRyYW5zbGF0aW9ucwoKKTsKCmV4dGVybiB2b2lk IFh0SW5zdGFsbEFjY2VsZXJhdG9ycygKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0CgopOwoKZXh0 ZXJuIHZvaWQgWHRJbnN0YWxsQWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAsCiAgICBXaWRn ZXQKCik7CgpleHRlcm4gdm9pZCBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQK Cik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg IFh0QWN0aW9uTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiB2b2lkIFh0QWRkQWN0aW9u cygKCiAgICBYdEFjdGlvbkxpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gWHRBY3Rpb25I b29rSWQgWHRBcHBBZGRBY3Rpb25Ib29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEFjdGlv bkhvb2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9u SG9vaygKCiAgICBYdEFjdGlvbkhvb2tJZAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlz dCgKCiAgICBXaWRnZXRDbGFzcyAsCiAgICBYdEFjdGlvbkxpc3QqICwKICAgIENhcmRpbmFsKgoK KTsKCmV4dGVybiB2b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0 IGNoYXIqICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBDYXJkaW5hbAoKKTsKCmV4 dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAsCiAgICBp bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9p ZCBYdFNldE11bHRpQ2xpY2tUaW1lKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVy biBpbnQgWHRHZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBLZXlT eW0gWHRHZXRBY3Rpb25LZXlzeW0oCgogICAgWEV2ZW50KiAsCiAgICBNb2RpZmllcnMqCgopOwoK CgoKCgoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXljb2RlKAoKICAgIERpc3BsYXkqICwKICAg IHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAgICBLZXlT eW0qCgopOwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSogLAogICAg dW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBNb2RpZmllcnMqICwKICAgIEtleVN5 bSoKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxheSogLAog ICAgWHRLZXlQcm9jCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VDb252ZXJ0ZXIoCgog ICAgRGlzcGxheSogLAogICAgWHRDYXNlUHJvYyAsCiAgICBLZXlTeW0gLAogICAgS2V5U3ltCgop OwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0g LAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFu ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50 SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUV2ZW50SGFu ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50 SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEFkZFJhd0V2ZW50SGFu ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50 SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50 SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2 ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEluc2VydEV2ZW50 SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2 ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRMaXN0UG9zaXRpb24KCik7CgpleHRl cm4gdm9pZCBYdEluc2VydFJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRN YXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAg WHRMaXN0UG9zaXRpb24KCik7CgpleHRlcm4gWHRFdmVudERpc3BhdGNoUHJvYyBYdFNldEV2ZW50 RGlzcGF0Y2hlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgWHRFdmVudERpc3BhdGNo UHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVudFRvV2lkZ2V0KAoKICAgIFdp ZGdldCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudFR5cGVIYW5k bGVyKAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgWHRQb2ludGVyICwKICAgIFh0RXZlbnRI YW5kbGVyICwKICAgIFh0UG9pbnRlciAsCiAgICBYdExpc3RQb3NpdGlvbgoKKTsKCmV4dGVybiB2 b2lkIFh0UmVtb3ZlRXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAg IFh0UG9pbnRlciAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRl cm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv aWQgWHRSZWdpc3RlckV4dGVuc2lvblNlbGVjdG9yKAoKICAgIERpc3BsYXkqICwKICAgIGludCAs CiAgICBpbnQgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsK CmV4dGVybiB2b2lkIFh0QWRkR3JhYigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoK KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlR3JhYigKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gdm9p ZCBYdFByb2Nlc3NFdmVudCgKCiAgICBYdElucHV0TWFzawoKKTsKCmV4dGVybiB2b2lkIFh0QXBw UHJvY2Vzc0V2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdElucHV0TWFzawoKKTsKCmV4 dGVybiB2b2lkIFh0TWFpbkxvb3AoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTWFp bkxvb3AoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBvc3VyZVRv UmVnaW9uKAoKICAgIFhFdmVudCogLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRL ZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0 IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gWEV2ZW50 KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBUaW1lIFh0 TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCgoKCgoKCmV4dGVybiBY dEludGVydmFsSWQgWHRBZGRUaW1lT3V0KAoKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWHRUaW1l ckNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRJbnRlcnZhbElkIFh0 QXBwQWRkVGltZU91dCgKCiAgICBYdEFwcENvbnRleHQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAg ICBYdFRpbWVyQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0 UmVtb3ZlVGltZU91dCgKCiAgICBYdEludGVydmFsSWQKCik7CgpleHRlcm4gWHRJbnB1dElkIFh0 QWRkSW5wdXQoCgogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0Q2FsbGJhY2tQ cm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdElucHV0SWQgWHRBcHBBZGRJbnB1dCgK CiAgICBYdEFwcENvbnRleHQgLAogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0 Q2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlSW5w dXQoCgogICAgWHRJbnB1dElkCgopOwoKZXh0ZXJuIFh0U2lnbmFsSWQgWHRBcHBBZGRTaWduYWwo CgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0U2lnbmFsQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9p bnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlU2lnbmFsKAoKICAgIFh0U2lnbmFsSWQKCik7 CgpleHRlcm4gdm9pZCBYdE5vdGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCgopOwoKZXh0ZXJu IHZvaWQgWHROZXh0RXZlbnQoCgogICAgWEV2ZW50KgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4 dEV2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKCgoKCgoKZXh0ZXJu IEJvb2xlYW4gWHRQZW5kaW5nKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWHRJbnB1dE1hc2sgWHRB cHBQZW5kaW5nKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBYdEJsb2NrSG9va0lkIFh0 QXBwQWRkQmxvY2tIb29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEJsb2NrSG9va1Byb2Mg LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVCbG9ja0hvb2soCgogICAg WHRCbG9ja0hvb2tJZAoKKTsKZXh0ZXJuIHZvaWQgWHRSZWFsaXplV2lkZ2V0KAoKICAgIFdpZGdl dAoKKTsKCnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv aWQgWHREZXN0cm95V2lkZ2V0KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0U2Vu c2l0aXZlKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdFNldE1hcHBl ZFdoZW5NYW5hZ2VkKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gV2lkZ2V0IFh0 TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBX aWRnZXQgWHRXaW5kb3dUb1dpZGdldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7Cgpl eHRlcm4gWHRQb2ludGVyIFh0R2V0Q2xhc3NFeHRlbnNpb24oCgogICAgV2lkZ2V0Q2xhc3MgLAog ICAgQ2FyZGluYWwgLAogICAgWHJtUXVhcmsgLAogICAgbG9uZyAsCiAgICBDYXJkaW5hbAoKKTsK ZXh0ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGlu YWwgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKZXh0ZXJuIFh0VmFyQXJnc0xpc3Qg WHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9pbnRlciAsIC4uLgoKKTsKZXh0ZXJuIERpc3Bs YXkgKlh0RGlzcGxheSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gRGlzcGxheSAqWHREaXNwbGF5 T2ZPYmplY3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW4oCgogICAg V2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQK Cik7CgpleHRlcm4gV2luZG93IFh0V2luZG93KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiBXaW5k b3cgWHRXaW5kb3dPZk9iamVjdCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gU3RyaW5nIFh0TmFt ZSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0Q2xhc3MgWHRTdXBlcmNsYXNzKAoKICAg IFdpZGdldAoKKTsKCmV4dGVybiBXaWRnZXRDbGFzcyBYdENsYXNzKAoKICAgIFdpZGdldAoKKTsK CmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0CgopOwoKCgoKCgoKZXh0ZXJuIHZv aWQgWHRBZGRDYWxsYmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRD YWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVDYWxs YmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRDYWxsYmFja1Byb2Mg LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lk Z2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZv aWQgWHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg IFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVBbGxDYWxsYmFja3MoCgog ICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKCmV4dGVybiB2b2lkIFh0Q2FsbENhbGxi YWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRQb2ludGVyCgopOwoK ZXh0ZXJuIHZvaWQgWHRDYWxsQ2FsbGJhY2tMaXN0KAoKICAgIFdpZGdldCAsCiAgICBYdENhbGxi YWNrTGlzdCAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRDYWxsYmFja1N0YXR1cyBYdEhh c0NhbGxiYWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBYdEdl b21ldHJ5UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgWHRX aWRnZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7CgpleHRlcm4gWHRHZW9t ZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0ICwKICAgIFh0V2lkZ2V0R2Vv bWV0cnkqICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0 ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lk Z2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFD cmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAg IFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdFBvcHVwKAoKICAgIFdpZGdldCAs CiAgICBYdEdyYWJLaW5kCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3B1cFNwcmluZ0xvYWRlZCgKCiAg ICBXaWRnZXQKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgLAog ICAgWHRQb2ludGVyICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tO b25leGNsdXNpdmUoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIK Cik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrRXhjbHVzaXZlKAoKICAgIFdpZGdldCAsCiAgICBY dFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3Bkb3duKAoKICAg IFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tQb3Bkb3duKAoKICAgIFdpZGdldCAs CiAgICBYdFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRNZW51UG9w dXBBY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBD YXJkaW5hbCoKCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0IGNo YXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENh cmRpbmFsCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29u c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAog ICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVXaWRnZXQoCgogICAgY29u c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4 dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29uc3QgY2hhciogLAog ICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQg WHRDcmVhdGVBcHBsaWNhdGlvblNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENs YXNzICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0QXBw Q3JlYXRlU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgV2lk Z2V0Q2xhc3MgLAogICAgRGlzcGxheSogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK CmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAg IGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIERpc3BsYXkqICwKICAgIC4uLgoK KTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0VG9vbGtpdEluaXRpYWxpemUoCgogICAgdm9pZAoKKTsK CmV4dGVybiBYdExhbmd1YWdlUHJvYyBYdFNldExhbmd1YWdlUHJvYygKCiAgICBYdEFwcENvbnRl eHQgLAogICAgWHRMYW5ndWFnZVByb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQg WHREaXNwbGF5SW5pdGlhbGl6ZSgKCiAgICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSogLAog ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVzY1JlYyog LAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBjaGFyKioKCik7CgpleHRlcm4gV2lkZ2V0 IFh0T3BlbkFwcGxpY2F0aW9uKAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciog LAogICAgWHJtT3B0aW9uRGVzY0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBT dHJpbmcqICwKICAgIFN0cmluZyogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgQXJnTGlzdCAsCiAg ICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlvbigKCiAgICBY dEFwcENvbnRleHQqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwK ICAgIENhcmRpbmFsICwKICAgIGludCogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqICwKICAg IFdpZGdldENsYXNzICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRBcHBJbml0aWFsaXpl KAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVz Y0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBTdHJpbmcqICwKICAgIFN0cmlu ZyogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFw cEluaXRpYWxpemUoCgogICAgWHRBcHBDb250ZXh0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBY cm1PcHRpb25EZXNjTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIFN0cmluZyog LAogICAgU3RyaW5nKiAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlhbGl6ZSgK CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBEaXNw bGF5ICpYdE9wZW5EaXNwbGF5KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAs CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBYdEFw cENvbnRleHQgWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgdm9pZAoKKTsKCmV4dGVy biB2b2lkIFh0QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg IFN0cmluZyoKCik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgog ICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3Mo CgogICAgV2lkZ2V0Q2xhc3MKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBs aWNhdGlvbkNvbnRleHQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFh0QXBwQ29udGV4dCBYdERp c3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBYcm1E YXRhYmFzZSBYdERhdGFiYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNl IFh0U2NyZWVuRGF0YWJhc2UoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiB2b2lkIFh0Q2xvc2VE aXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRBcHBsaWNhdGlvblJl c291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0 ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g dm9pZCBYdFZhR2V0QXBwbGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9p bnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICAuLi4KCik7Cgpl eHRlcm4gdm9pZCBYdEdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVy ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0UmVzb3VyY2VMaXN0 ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g dm9pZCBYdFZhR2V0U3VicmVzb3VyY2VzKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAog ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHRSZXNvdXJjZUxpc3QgLAog ICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRWYWx1ZXMoCgogICAg V2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZh U2V0VmFsdWVzKAoKICAgIFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFZh bHVlcygKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVy biB2b2lkIFh0VmFHZXRWYWx1ZXMoCgogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiB2 b2lkIFh0U2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAs CiAgICBDYXJkaW5hbCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv aWQgWHRWYVNldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIgLAogICAgWHRSZXNvdXJjZUxpc3Qg LAogICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTdWJ2YWx1ZXMo CgogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0ICwKICAgIENhcmRpbmFsICwKICAg IEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZhR2V0U3VidmFsdWVz KAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAg ICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFz cyAsCiAgICBYdFJlc291cmNlTGlzdCogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQg WHRHZXRDb25zdHJhaW50UmVzb3VyY2VMaXN0KAoKICAgIFdpZGdldENsYXNzICwKICAgIFh0UmVz b3VyY2VMaXN0KiAsCiAgICBDYXJkaW5hbCoKCik7CnR5cGVkZWYgc3RydWN0IF9YdENoZWNrcG9p bnRUb2tlblJlYyB7CiAgICBpbnQgc2F2ZV90eXBlOwogICAgaW50IGludGVyYWN0X3N0eWxlOwog ICAgQm9vbGVhbiBzaHV0ZG93bjsKICAgIEJvb2xlYW4gZmFzdDsKICAgIEJvb2xlYW4gY2FuY2Vs X3NodXRkb3duOwogICAgaW50IHBoYXNlOwogICAgaW50IGludGVyYWN0X2RpYWxvZ190eXBlOwog ICAgQm9vbGVhbiByZXF1ZXN0X2NhbmNlbDsKICAgIEJvb2xlYW4gcmVxdWVzdF9uZXh0X3BoYXNl OwogICAgQm9vbGVhbiBzYXZlX3N1Y2Nlc3M7CiAgICBpbnQgdHlwZTsKICAgIFdpZGdldCB3aWRn ZXQ7Cn0gWHRDaGVja3BvaW50VG9rZW5SZWMsICpYdENoZWNrcG9pbnRUb2tlbjsKClh0Q2hlY2tw b2ludFRva2VuIFh0U2Vzc2lvbkdldFRva2VuKAoKICAgIFdpZGdldAoKKTsKCnZvaWQgWHRTZXNz aW9uUmV0dXJuVG9rZW4oCgogICAgWHRDaGVja3BvaW50VG9rZW4KCik7CgoKCgoKCgpleHRlcm4g WHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRFcnJvck1zZ0hhbmRsZXIoCgogICAgWHRBcHBDb250 ZXh0ICwKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRFcnJvck1z Z0hhbmRsZXIoCgogICAgWHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gWHRFcnJvck1zZ0hh bmRsZXIgWHRBcHBTZXRXYXJuaW5nTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAg WHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdFNldFdhcm5pbmdNc2dIYW5kbGVy KAoKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBFcnJvck1zZygK CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgU3RyaW5nKiAsCiAgICBDYXJk aW5hbCoKCik7CgpleHRlcm4gdm9pZCBYdEVycm9yTXNnKAoKICAgIGNvbnN0IGNoYXIqICwKICAg IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0 cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBXYXJuaW5nTXNnKAoK ICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAg ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRp bmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0V2FybmluZ01zZygKCiAgICBjb25zdCBjaGFyKiAsCiAg ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBT dHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNl dEVycm9ySGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAgWHRFcnJvckhhbmRsZXIKCik7 CgpleHRlcm4gdm9pZCBYdFNldEVycm9ySGFuZGxlcigKCiAgICBYdEVycm9ySGFuZGxlcgoKKTsK CmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdhcm5pbmdIYW5kbGVyKAoKICAgIFh0QXBw Q29udGV4dCAsCiAgICBYdEVycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2Fybmlu Z0hhbmRsZXIoCgogICAgWHRFcnJvckhhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdEFwcEVycm9y KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0 RXJyb3IoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYdEFwcFdhcm5pbmcoCgog ICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIHZvaWQgWHRXYXJu aW5nKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpYdEFwcEdldEVy cm9yRGF0YWJhc2UoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpY dEdldEVycm9yRGF0YWJhc2UoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwR2V0RXJy b3JEYXRhYmFzZVRleHQoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0 cmluZyAsCiAgICBpbnQgLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4gdm9pZCBYdEdldEVy cm9yRGF0YWJhc2VUZXh0KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAg IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0cmluZyAsCiAgICBpbnQKCik7 CgoKCgoKCgpleHRlcm4gY2hhciAqWHRNYWxsb2MoCgogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g Y2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g Y2hhciAqWHRSZWFsbG9jKAoKICAgIGNoYXIqICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv aWQgWHRGcmVlKAoKICAgIGNoYXIqCgopOwpleHRlcm4gWHRXb3JrUHJvY0lkIFh0QWRkV29ya1By b2MoCgogICAgWHRXb3JrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRXb3JrUHJv Y0lkIFh0QXBwQWRkV29ya1Byb2MoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0V29ya1Byb2Mg LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVXb3JrUHJvYygKCiAgICBY dFdvcmtQcm9jSWQKCik7CgoKCgoKCgpleHRlcm4gR0MgWHRHZXRHQygKCiAgICBXaWRnZXQgLAog ICAgWHRHQ01hc2sgLAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBHQyBYdEFsbG9jYXRlR0Mo CgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsICwKICAgIFh0R0NNYXNrICwKICAgIFhHQ1ZhbHVl cyogLAogICAgWHRHQ01hc2sgLAogICAgWHRHQ01hc2sKCik7CgoKCgoKZXh0ZXJuIHZvaWQgWHRE ZXN0cm95R0MoCgogICAgR0MKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVhc2VHQygKCiAgICBXaWRn ZXQgLAogICAgR0MKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBwUmVsZWFzZUNhY2hlUmVmcygKCiAg ICBYdEFwcENvbnRleHQgLAogICAgWHRDYWNoZVJlZioKCik7CgpleHRlcm4gdm9pZCBYdENhbGxi YWNrUmVsZWFzZUNhY2hlUmVmKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRQ b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZkxpc3QoCgog ICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9p ZCBYdFNldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQqICwKICAg IENhcmRpbmFsCgopOwoKZXh0ZXJuIFN0cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0IGNoYXIq ICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQcmVkaWNhdGUK Cik7CgpleHRlcm4gU3RyaW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3BsYXkqICwKICAg IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv bnN0IGNoYXIqICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQ cmVkaWNhdGUKCik7CmV4dGVybiB2b2lkIFh0RGlzb3duU2VsZWN0aW9uKAoKICAgIFdpZGdldCAs CiAgICBBdG9tICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVl KAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgWHRTZWxlY3Rpb25DYWxs YmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdl dFNlbGVjdGlvblZhbHVlcygKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBBdG9tKiAsCiAg ICBpbnQgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyKiAsCiAg ICBUaW1lCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIFh0 QXBwQ29udGV4dCAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTZWxl Y3Rpb25UaW1lb3V0KAoKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gdW5zaWduZWQgbG9u ZyBYdEFwcEdldFNlbGVjdGlvblRpbWVvdXQoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgWHRHZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIHZvaWQKCik7CgpleHRl cm4gWFNlbGVjdGlvblJlcXVlc3RFdmVudCAqWHRHZXRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdp ZGdldCAsCiAgICBBdG9tICwKICAgIFh0UmVxdWVzdElkCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRT ZWxlY3Rpb25WYWx1ZUluY3JlbWVudGFsKAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0 b20gLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRp bWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0luY3JlbWVudGFsKAoKICAg IFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20qICwKICAgIGludCAsCiAgICBYdFNlbGVjdGlv bkNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIqICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9p ZCBYdFNldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAg QXRvbSAsCiAgICBYdFBvaW50ZXIgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgpl eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0 b20gLAogICAgWHRSZXF1ZXN0SWQgLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1 bnNpZ25lZCBsb25nKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxlY3Rp b25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIHZvaWQgWHRTZW5k U2VsZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBUaW1lCgopOwoK ZXh0ZXJuIHZvaWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBB dG9tCgopOwoKZXh0ZXJuIEF0b20gWHRSZXNlcnZlUHJvcGVydHlBdG9tKAoKICAgIFdpZGdldAoK KTsKCmV4dGVybiB2b2lkIFh0UmVsZWFzZVByb3BlcnR5QXRvbSgKCiAgICBXaWRnZXQgLAogICAg QXRvbQoKKTsKCmV4dGVybiB2b2lkIFh0R3JhYktleSgKCiAgICBXaWRnZXQgLAogICAgdW5zaWdu ZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsK CmV4dGVybiB2b2lkIFh0VW5ncmFiS2V5KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQg LAogICAgTW9kaWZpZXJzCgopOwoKZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBXaWRn ZXQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiB2 b2lkIFh0VW5ncmFiS2V5Ym9hcmQoCgogICAgV2lkZ2V0ICwKICAgIFRpbWUKCik7CgpleHRlcm4g dm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBNb2RpZmllcnMg LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdp bmRvdyAsCiAgICBDdXJzb3IKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBX aWRnZXQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycwoKKTsKCmV4dGVybiBpbnQg WHRHcmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs CiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBDdXJzb3IgLAogICAgVGltZQoK KTsKCmV4dGVybiB2b2lkIFh0VW5ncmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgVGltZQoK KTsKCmV4dGVybiB2b2lkIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3MoCgogICAgRGlzcGxh eSogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3Rl ckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpZGdldAoKKTsK CmV4dGVybiB2b2lkIFh0VW5yZWdpc3RlckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERy YXdhYmxlCgopOwoKZXh0ZXJuIFdpZGdldCBYdEhvb2tzT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkq CgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0 OwogICAgQXJnTGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDcmVhdGVIb29r RGF0YVJlYywgKlh0Q3JlYXRlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcg dHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFBvaW50ZXIgZXZlbnRfZGF0YTsKICAgIENh cmRpbmFsIG51bV9ldmVudF9kYXRhOwp9IFh0Q2hhbmdlSG9va0RhdGFSZWMsICpYdENoYW5nZUhv b2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgV2lkZ2V0IG9sZCwgcmVxOwogICAgQXJnTGlz dCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDaGFuZ2VIb29rU2V0VmFsdWVzRGF0 YVJlYywgKlh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBT dHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdEdlb21ldHJ5TWFzayBjaGFuZ2VN YXNrOwogICAgWFdpbmRvd0NoYW5nZXMgY2hhbmdlczsKfSBYdENvbmZpZ3VyZUhvb2tEYXRhUmVj LCAqWHRDb25maWd1cmVIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0eXBl OwogICAgV2lkZ2V0IHdpZGdldDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkqIHJlcXVlc3Q7CiAgICBY dFdpZGdldEdlb21ldHJ5KiByZXBseTsKICAgIFh0R2VvbWV0cnlSZXN1bHQgcmVzdWx0Owp9IFh0 R2VvbWV0cnlIb29rRGF0YVJlYywgKlh0R2VvbWV0cnlIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0 IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKfSBYdERlc3Ryb3lIb29rRGF0 YVJlYywgKlh0RGVzdHJveUhvb2tEYXRhOwoKZXh0ZXJuIHZvaWQgWHRHZXREaXNwbGF5cygKCiAg ICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSoqKiAsCiAgICBDYXJkaW5hbCoKCik7CgpleHRl cm4gQm9vbGVhbiBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKAoKICAgIHZvaWQKCik7CgpleHRl cm4gdm9pZCBYdEFwcFNldEV4aXRGbGFnKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBC b29sZWFuIFh0QXBwR2V0RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZv aWQgWHRBcHBMb2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwVW5s b2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Fj Y2VsZXJhdG9yVGFibGUoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2Fy ZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRl cioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQXRvbSgKCiAgICBEaXNwbGF5KiAs CiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAg WHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry aW5nVG9Cb29sKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Jvb2xlYW4oCgogICAgRGlzcGxheSogLAog ICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhy bVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmlu Z1RvQ29tbWFuZEFyZ0FycmF5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAg IENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBv aW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0N1cnNvcigKCiAgICBEaXNw bGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIg LAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0 Q3Z0U3RyaW5nVG9EaW1lbnNpb24oCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0 UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGlyZWN0b3J5U3RyaW5n KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBY cm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJu IEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Rpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmlsZSgK CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC b29sZWFuIFh0Q3Z0U3RyaW5nVG9GbG9hdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0 ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250KAoKICAg IERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1 ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xl YW4gWHRDdnRTdHJpbmdUb0ZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIg LAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAg IFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRm9udFN0cnVjdCgK CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC b29sZWFuIFh0Q3Z0U3RyaW5nVG9HcmF2aXR5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVl UHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAs CiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0luaXRpYWxT dGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAog ICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4 dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9JbnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvUGl4ZWwo CgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhy bVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVy biBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9SZXN0YXJ0U3R5bGUoCgogICAgRGlzcGxheSogLAogICAg WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv U2hvcnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwK ICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7Cgpl eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVHJhbnNsYXRpb25UYWJsZSgKCiAgICBEaXNwbGF5 KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAog ICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0 U3RyaW5nVG9VbnNpZ25lZENoYXIoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0 UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVmlzdWFsKAoKICAgIERp c3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0 ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKCgpleHRlcm4gQm9vbGVh biBYdEN2dEludFRvQm9vbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBD YXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2lu dGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sZWFuKAoKICAgIERpc3BsYXkq ICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg ICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJ bnRUb0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop OwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRmxvYXQoCgogICAgRGlzcGxheSogLAogICAg WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRm9u dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAg WHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVy biBCb29sZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0 ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAoCgogICAg RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s ZWFuIFh0Q3Z0SW50VG9TaG9ydCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg ICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQ b2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAg RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s ZWFuIFh0Q3Z0Q29sb3JUb1BpeGVsKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwK ICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBY dFBvaW50ZXIqCgopOwoKCgoKCgoKdHlwZWRlZiB2b2lkICpJY2VQb2ludGVyOwoKCgoKdHlwZWRl ZiBlbnVtIHsKICAgIEljZVBvQXV0aEhhdmVSZXBseSwKICAgIEljZVBvQXV0aFJlamVjdGVkLAog ICAgSWNlUG9BdXRoRmFpbGVkLAogICAgSWNlUG9BdXRoRG9uZUNsZWFudXAKfSBJY2VQb0F1dGhT dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUGFBdXRoQ29udGludWUsCiAgICBJY2VQYUF1 dGhBY2NlcHRlZCwKICAgIEljZVBhQXV0aFJlamVjdGVkLAogICAgSWNlUGFBdXRoRmFpbGVkCn0g SWNlUGFBdXRoU3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZUNvbm5lY3RQZW5kaW5nLAog ICAgSWNlQ29ubmVjdEFjY2VwdGVkLAogICAgSWNlQ29ubmVjdFJlamVjdGVkLAogICAgSWNlQ29u bmVjdElPRXJyb3IKfSBJY2VDb25uZWN0U3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVBy b3RvY29sU2V0dXBTdWNjZXNzLAogICAgSWNlUHJvdG9jb2xTZXR1cEZhaWx1cmUsCiAgICBJY2VQ cm90b2NvbFNldHVwSU9FcnJvciwKICAgIEljZVByb3RvY29sQWxyZWFkeUFjdGl2ZQp9IEljZVBy b3RvY29sU2V0dXBTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQWNjZXB0U3VjY2VzcywK ICAgIEljZUFjY2VwdEZhaWx1cmUsCiAgICBJY2VBY2NlcHRCYWRNYWxsb2MKfSBJY2VBY2NlcHRT dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQ2xvc2VkTm93LAogICAgSWNlQ2xvc2VkQVNB UCwKICAgIEljZUNvbm5lY3Rpb25JblVzZSwKICAgIEljZVN0YXJ0ZWRTaHV0ZG93bk5lZ290aWF0 aW9uCn0gSWNlQ2xvc2VTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUHJvY2Vzc01lc3Nh Z2VzU3VjY2VzcywKICAgIEljZVByb2Nlc3NNZXNzYWdlc0lPRXJyb3IsCiAgICBJY2VQcm9jZXNz TWVzc2FnZXNDb25uZWN0aW9uQ2xvc2VkCn0gSWNlUHJvY2Vzc01lc3NhZ2VzU3RhdHVzOwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZV9vZl9yZXF1ZXN0OwogICAg aW50IG1ham9yX29wY29kZV9vZl9yZXF1ZXN0OwogICAgaW50IG1pbm9yX29wY29kZV9vZl9yZXF1 ZXN0OwogICAgSWNlUG9pbnRlciByZXBseTsKfSBJY2VSZXBseVdhaXRJbmZvOwoKdHlwZWRlZiBz dHJ1Y3QgX0ljZUNvbm4gKkljZUNvbm47CnR5cGVkZWYgc3RydWN0IF9JY2VMaXN0ZW5PYmogKklj ZUxpc3Rlbk9iajsKCnR5cGVkZWYgdm9pZCAoKkljZVdhdGNoUHJvYykgKAoKICAgIEljZUNvbm4g LAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAqCgopOwoKdHlwZWRl ZiB2b2lkICgqSWNlUG9Qcm9jZXNzTXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9p bnRlciAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQgLAogICAgSWNlUmVw bHlXYWl0SW5mbyAqICwKICAgIGludCAqCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlUGFQcm9jZXNz TXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAg dW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbWFq b3JfdmVyc2lvbjsKICAgIGludCBtaW5vcl92ZXJzaW9uOwogICAgSWNlUG9Qcm9jZXNzTXNnUHJv YyBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBvVmVyc2lvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIGludCBtYWpvcl92ZXJzaW9uOwogICAgaW50IG1pbm9yX3ZlcnNpb247CiAgICBJY2VQYVBy b2Nlc3NNc2dQcm9jIHByb2Nlc3NfbXNnX3Byb2M7Cn0gSWNlUGFWZXJzaW9uUmVjOwoKdHlwZWRl ZiBJY2VQb0F1dGhTdGF0dXMgKCpJY2VQb0F1dGhQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBJ Y2VQb2ludGVyICogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRl ciAsCiAgICBpbnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVk ZWYgSWNlUGFBdXRoU3RhdHVzICgqSWNlUGFBdXRoUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAg SWNlUG9pbnRlciAqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAsCiAgICBp bnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVkZWYgaW50ICgq SWNlSG9zdEJhc2VkQXV0aFByb2MpICgKCiAgICBjaGFyICoKCik7Cgp0eXBlZGVmIGludCAoKklj ZVByb3RvY29sU2V0dXBQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAqICwKICAgIGNoYXIgKioK Cik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VQcm90b2NvbEFjdGl2YXRlUHJvYykgKAoKICAgIEljZUNv bm4gLAogICAgSWNlUG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZUlPRXJyb3JQcm9jKSAo CgogICAgSWNlQ29ubgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBpbmdSZXBseVByb2MpICgKCiAg ICBJY2VDb25uICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VFcnJvckhh bmRsZXIpICgKCiAgICBJY2VDb25uICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg bG9uZyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZv aWQgKCpJY2VJT0Vycm9ySGFuZGxlcikgKAoKICAgIEljZUNvbm4KCik7CgoKCgoKCgoKZXh0ZXJu IGludCBJY2VSZWdpc3RlckZvclByb3RvY29sU2V0dXAgKAoKICAgIGNoYXIgKiAsCiAgICBjaGFy ICogLAogICAgY2hhciAqICwKICAgIGludCAsCiAgICBJY2VQb1ZlcnNpb25SZWMgKiAsCiAgICBp bnQgLAogICAgY2hhciAqKiAsCiAgICBJY2VQb0F1dGhQcm9jICogLAogICAgSWNlSU9FcnJvclBy b2MKCik7CgpleHRlcm4gaW50IEljZVJlZ2lzdGVyRm9yUHJvdG9jb2xSZXBseSAoCgogICAgY2hh ciAqICwKICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgaW50ICwKICAgIEljZVBhVmVyc2lv blJlYyAqICwKICAgIGludCAsCiAgICBjaGFyICoqICwKICAgIEljZVBhQXV0aFByb2MgKiAsCiAg ICBJY2VIb3N0QmFzZWRBdXRoUHJvYyAsCiAgICBJY2VQcm90b2NvbFNldHVwUHJvYyAsCiAgICBJ Y2VQcm90b2NvbEFjdGl2YXRlUHJvYyAsCiAgICBJY2VJT0Vycm9yUHJvYwoKKTsKCmV4dGVybiBJ Y2VDb25uIEljZU9wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAs CiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gSWNl UG9pbnRlciBJY2VHZXRDb25uZWN0aW9uQ29udGV4dCAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVy biBpbnQgSWNlTGlzdGVuRm9yQ29ubmVjdGlvbnMgKAoKICAgIGludCAqICwKICAgIEljZUxpc3Rl bk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VMaXN0ZW5G b3JXZWxsS25vd25Db25uZWN0aW9ucyAoCgogICAgY2hhciAqICwKICAgIGludCAqICwKICAgIElj ZUxpc3Rlbk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VH ZXRMaXN0ZW5Db25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VMaXN0ZW5PYmoKCik7CgpleHRlcm4g Y2hhciAqSWNlR2V0TGlzdGVuQ29ubmVjdGlvblN0cmluZyAoCgogICAgSWNlTGlzdGVuT2JqCgop OwoKZXh0ZXJuIGNoYXIgKkljZUNvbXBvc2VOZXR3b3JrSWRMaXN0ICgKCiAgICBpbnQgLAogICAg SWNlTGlzdGVuT2JqICoKCik7CgpleHRlcm4gdm9pZCBJY2VGcmVlTGlzdGVuT2JqcyAoCgogICAg aW50ICwKICAgIEljZUxpc3Rlbk9iaiAqCgopOwoKZXh0ZXJuIHZvaWQgSWNlU2V0SG9zdEJhc2Vk QXV0aFByb2MgKAoKICAgIEljZUxpc3Rlbk9iaiAsCiAgICBJY2VIb3N0QmFzZWRBdXRoUHJvYwoK KTsKCmV4dGVybiBJY2VDb25uIEljZUFjY2VwdENvbm5lY3Rpb24gKAoKICAgIEljZUxpc3Rlbk9i aiAsCiAgICBJY2VBY2NlcHRTdGF0dXMgKgoKKTsKCmV4dGVybiB2b2lkIEljZVNldFNodXRkb3du TmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4gLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBJY2VD aGVja1NodXRkb3duTmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gSWNlQ2xv c2VTdGF0dXMgSWNlQ2xvc2VDb25uZWN0aW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu dCBJY2VBZGRDb25uZWN0aW9uV2F0Y2ggKAoKICAgIEljZVdhdGNoUHJvYyAsCiAgICBJY2VQb2lu dGVyCgopOwoKZXh0ZXJuIHZvaWQgSWNlUmVtb3ZlQ29ubmVjdGlvbldhdGNoICgKCiAgICBJY2VX YXRjaFByb2MgLAogICAgSWNlUG9pbnRlcgoKKTsKCmV4dGVybiBJY2VQcm90b2NvbFNldHVwU3Rh dHVzIEljZVByb3RvY29sU2V0dXAgKAoKICAgIEljZUNvbm4gLAogICAgaW50ICwKICAgIEljZVBv aW50ZXIgLAogICAgaW50ICwKICAgIGludCAqICwKICAgIGludCAqICwKICAgIGNoYXIgKiogLAog ICAgY2hhciAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VQcm90 b2NvbFNodXRkb3duICgKCiAgICBJY2VDb25uICwKICAgIGludAoKKTsKCmV4dGVybiBJY2VQcm9j ZXNzTWVzc2FnZXNTdGF0dXMgSWNlUHJvY2Vzc01lc3NhZ2VzICgKCiAgICBJY2VDb25uICwKICAg IEljZVJlcGx5V2FpdEluZm8gKiAsCiAgICBpbnQgKgoKKTsKCmV4dGVybiBpbnQgSWNlUGluZyAo CgogICBJY2VDb25uICwKICAgSWNlUGluZ1JlcGx5UHJvYyAsCiAgIEljZVBvaW50ZXIKCik7Cgpl eHRlcm4gY2hhciAqSWNlQWxsb2NTY3JhdGNoICgKCiAgIEljZUNvbm4gLAogICB1bnNpZ25lZCBs b25nCgopOwoKZXh0ZXJuIGludCBJY2VGbHVzaCAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu dCBJY2VHZXRPdXRCdWZTaXplICgKCiAgIEljZUNvbm4KCik7CgpleHRlcm4gaW50IEljZUdldElu QnVmU2l6ZSAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIEljZUNvbm5lY3RTdGF0dXMgSWNlQ29u bmVjdGlvblN0YXR1cyAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVybiBjaGFyICpJY2VWZW5kb3Ig KAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gY2hhciAqSWNlUmVsZWFzZSAoCgogICAgSWNlQ29u bgoKKTsKCmV4dGVybiBpbnQgSWNlUHJvdG9jb2xWZXJzaW9uICgKCiAgICBJY2VDb25uCgopOwoK ZXh0ZXJuIGludCBJY2VQcm90b2NvbFJldmlzaW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu IGludCBJY2VDb25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGNoYXIg KkljZUNvbm5lY3Rpb25TdHJpbmcgKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gdW5zaWduZWQg bG9uZyBJY2VMYXN0U2VudFNlcXVlbmNlTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgSWNlTGFzdFJlY2VpdmVkU2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNv bm4KCik7CgpleHRlcm4gaW50IEljZVN3YXBwaW5nICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu IEljZUVycm9ySGFuZGxlciBJY2VTZXRFcnJvckhhbmRsZXIgKAoKICAgIEljZUVycm9ySGFuZGxl cgoKKTsKCmV4dGVybiBJY2VJT0Vycm9ySGFuZGxlciBJY2VTZXRJT0Vycm9ySGFuZGxlciAoCgog ICAgSWNlSU9FcnJvckhhbmRsZXIKCik7CgoKCgoKCmV4dGVybiBpbnQgSWNlSW5pdFRocmVhZHMg KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJY2VBcHBMb2NrQ29ubiAoCgogICAgSWNlQ29u bgoKKTsKCmV4dGVybiB2b2lkIEljZUFwcFVubG9ja0Nvbm4gKAoKICAgIEljZUNvbm4KCik7CgoK dHlwZWRlZiBJY2VQb2ludGVyIFNtUG9pbnRlcjsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1NtY0Nv bm4gKlNtY0Nvbm47CnR5cGVkZWYgc3RydWN0IF9TbXNDb25uICpTbXNDb25uOwoKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQgbGVuZ3RoOwogICAgU21Qb2ludGVyIHZhbHVlOwp9IFNtUHJv cFZhbHVlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnR5cGU7 CiAgICBpbnQgbnVtX3ZhbHM7CiAgICBTbVByb3BWYWx1ZSAqdmFsczsKfSBTbVByb3A7CgoKCgoK Cgp0eXBlZGVmIGVudW0gewogICAgU21jQ2xvc2VkTm93LAogICAgU21jQ2xvc2VkQVNBUCwKICAg IFNtY0Nvbm5lY3Rpb25JblVzZQp9IFNtY0Nsb3NlU3RhdHVzOwoKCgoKCgoKdHlwZWRlZiB2b2lk ICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoKICAgIFNtY0Nvbm4gLAogICAgU21Qb2ludGVyICwK ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAo KlNtY1NhdmVZb3Vyc2VsZlBoYXNlMlByb2MpICgKCiAgICBTbWNDb25uICwKICAgIFNtUG9pbnRl cgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY0ludGVyYWN0UHJvYykgKAoKICAgIFNtY0Nvbm4gLAog ICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jRGllUHJvYykgKAoKICAgIFNtY0Nv bm4gLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25DYW5jZWxs ZWRQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQg KCpTbWNTYXZlQ29tcGxldGVQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7 Cgp0eXBlZGVmIHZvaWQgKCpTbWNQcm9wUmVwbHlQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBT bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCgoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZVlvdXJzZWxmUHJvYyBjYWxsYmFjazsK ICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNhdmVfeW91cnNlbGY7CgogICAg c3RydWN0IHsKICAgICAgICBTbWNEaWVQcm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBj bGllbnRfZGF0YTsKICAgIH0gZGllOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZUNvbXBs ZXRlUHJvYyBjYWxsYmFjazsKICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNh dmVfY29tcGxldGU7CgogICAgc3RydWN0IHsKICAgICAgICBTbWNTaHV0ZG93bkNhbmNlbGxlZFBy b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIGNsaWVudF9kYXRhOwogICAgfSBzaHV0ZG93 bl9jYW5jZWxsZWQ7Cgp9IFNtY0NhbGxiYWNrczsKdHlwZWRlZiBpbnQgKCpTbXNSZWdpc3RlckNs aWVudFByb2MpICgKCiAgICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBjaGFyICoKCik7 Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs CiAgICBTbVBvaW50ZXIgLAogICAgaW50CgopOwoKdHlwZWRlZiB2b2lkICgqU21zSW50ZXJhY3RE b25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwKICAgIGludAoKKTsKCnR5 cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs CiAgICBTbVBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlBoYXNlMlJlcXVlc3RQ cm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpT bXNTYXZlWW91cnNlbGZEb25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwK ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc0Nsb3NlQ29ubmVjdGlvblByb2MpICgKCiAg ICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCnR5 cGVkZWYgdm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBT bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNt c0RlbGV0ZVByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIgLAog ICAgaW50ICwKICAgIGNoYXIgKioKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNHZXRQcm9wZXJ0aWVz UHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyCgopOwoKCgoKCgp0eXBlZGVmIHN0 cnVjdCB7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNSZWdpc3RlckNsaWVudFByb2MgY2FsbGJh Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gcmVnaXN0ZXJfY2xpZW50 OwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3RSZXF1ZXN0UHJvYyBjYWxsYmFjazsK ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9yZXF1ZXN0OwoK ICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3REb25lUHJvYyBjYWxsYmFjazsKICAgICAg ICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9kb25lOwoKICAgIHN0cnVj dCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUmVxdWVzdFByb2MgY2FsbGJhY2s7CiAgICAgICAg U21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9yZXF1ZXN0OwoKICAg IHN0cnVjdCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUGhhc2UyUmVxdWVzdFByb2MgY2FsbGJh Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9w aGFzZTJfcmVxdWVzdDsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NhdmVZb3Vyc2VsZkRvbmVQ cm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNhdmVf eW91cnNlbGZfZG9uZTsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc0Nsb3NlQ29ubmVjdGlvblBy b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gY2xvc2Vf Y29ubmVjdGlvbjsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NldFByb3BlcnRpZXNQcm9jIGNh bGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0 aWVzOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zRGVsZXRlUHJvcGVydGllc1Byb2MgY2FsbGJh Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gZGVsZXRlX3Byb3BlcnRp ZXM7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNHZXRQcm9wZXJ0aWVzUHJvYyBjYWxsYmFjazsK ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBnZXRfcHJvcGVydGllczsKCn0g U21zQ2FsbGJhY2tzOwp0eXBlZGVmIGludCAoKlNtc05ld0NsaWVudFByb2MpICgKCiAgICBTbXND b25uICwKICAgIFNtUG9pbnRlciAsCiAgICB1bnNpZ25lZCBsb25nICogLAogICAgU21zQ2FsbGJh Y2tzICogLAogICAgY2hhciAqKgoKKTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlNtY0Vycm9ySGFu ZGxlcikgKAoKICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBs b25nICwKICAgIGludCAsCiAgICBpbnQgLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lk ICgqU21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK ICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIGludCAsCiAgICBTbVBvaW50ZXIKCik7 CgoKCgoKCgoKCmV4dGVybiBTbWNDb25uIFNtY09wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICog LAogICAgU21Qb2ludGVyICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAs CiAgICBTbWNDYWxsYmFja3MgKiAsCiAgICBjaGFyICogLAogICAgY2hhciAqKiAsCiAgICBpbnQg LAogICAgY2hhciAqCgopOwoKZXh0ZXJuIFNtY0Nsb3NlU3RhdHVzIFNtY0Nsb3NlQ29ubmVjdGlv biAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCmV4dGVybiB2b2lk IFNtY01vZGlmeUNhbGxiYWNrcyAoCgogICAgU21jQ29ubiAsCiAgICB1bnNpZ25lZCBsb25nICwK ICAgIFNtY0NhbGxiYWNrcyAqCgopOwoKZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVydGllcyAoCgog ICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgU21Qcm9wICoqCgopOwoKZXh0ZXJuIHZvaWQgU21j RGVsZXRlUHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoK KTsKCmV4dGVybiBpbnQgU21jR2V0UHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBTbWNQ cm9wUmVwbHlQcm9jICwKICAgIFNtUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgU21jSW50ZXJhY3RS ZXF1ZXN0ICgKCiAgICBTbWNDb25uICwKICAgIGludCAsCiAgICBTbWNJbnRlcmFjdFByb2MgLAog ICAgU21Qb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgU21jSW50ZXJhY3REb25lICgKCiAgICBTbWND b25uICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFNtY1JlcXVlc3RTYXZlWW91cnNlbGYgKAoK ICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAg IGludAoKKTsKCmV4dGVybiBpbnQgU21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgogICAg U21jQ29ubiAsCiAgICBTbWNTYXZlWW91cnNlbGZQaGFzZTJQcm9jICwKICAgIFNtUG9pbnRlcgoK KTsKCmV4dGVybiB2b2lkIFNtY1NhdmVZb3Vyc2VsZkRvbmUgKAoKICAgIFNtY0Nvbm4gLAogICAg aW50CgopOwoKZXh0ZXJuIGludCBTbWNQcm90b2NvbFZlcnNpb24gKAoKICAgIFNtY0Nvbm4KCik7 CgpleHRlcm4gaW50IFNtY1Byb3RvY29sUmV2aXNpb24gKAoKICAgIFNtY0Nvbm4KCik7CgpleHRl cm4gY2hhciAqU21jVmVuZG9yICgKCiAgICBTbWNDb25uCgopOwoKZXh0ZXJuIGNoYXIgKlNtY1Jl bGVhc2UgKAoKICAgIFNtY0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21jQ2xpZW50SUQgKAoKICAg IFNtY0Nvbm4KCik7CgpleHRlcm4gSWNlQ29ubiBTbWNHZXRJY2VDb25uZWN0aW9uICgKCiAgICBT bWNDb25uCgopOwoKZXh0ZXJuIGludCBTbXNJbml0aWFsaXplICgKCiAgICBjaGFyICogLAogICAg Y2hhciAqICwKICAgIFNtc05ld0NsaWVudFByb2MgLAogICAgU21Qb2ludGVyICwKICAgIEljZUhv c3RCYXNlZEF1dGhQcm9jICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gY2hhciAq U21zQ2xpZW50SG9zdE5hbWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21zR2Vu ZXJhdGVDbGllbnRJRCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUmVnaXN0ZXJD bGllbnRSZXBseSAoCgogICAgU21zQ29ubiAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gdm9pZCBT bXNTYXZlWW91cnNlbGYgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBp bnQgLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgU21zU2F2ZVlvdXJzZWxmUGhhc2UyICgKCiAg ICBTbXNDb25uCgopOwoKZXh0ZXJuIHZvaWQgU21zSW50ZXJhY3QgKAoKICAgIFNtc0Nvbm4KCik7 CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNT YXZlQ29tcGxldGUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNTaHV0ZG93bkNh bmNlbGxlZCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiB2b2lkIFNtc1JldHVyblByb3BlcnRp ZXMgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCmV4dGVybiB2 b2lkIFNtc0NsZWFuVXAgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gaW50IFNtc1Byb3RvY29s VmVyc2lvbiAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xSZXZpc2lv biAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBjaGFyICpTbXNDbGllbnRJRCAoCgogICAgU21z Q29ubgoKKTsKCmV4dGVybiBJY2VDb25uIFNtc0dldEljZUNvbm5lY3Rpb24gKAoKICAgIFNtc0Nv bm4KCik7CgpleHRlcm4gU21jRXJyb3JIYW5kbGVyIFNtY1NldEVycm9ySGFuZGxlciAoCgogICAg U21jRXJyb3JIYW5kbGVyCgopOwoKZXh0ZXJuIFNtc0Vycm9ySGFuZGxlciBTbXNTZXRFcnJvckhh bmRsZXIgKAoKICAgIFNtc0Vycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVByb3Bl cnR5ICgKCiAgICBTbVByb3AgKgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVJlYXNvbnMgKAoKICAg IGludCAsCiAgICBjaGFyICoqCgopOwoKCmV4dGVybiBjb25zdCBjaGFyIFh0U2hlbGxTdHJpbmdz W107CnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjICpTaGVsbFdpZGdldENsYXNzOwp0eXBl ZGVmIHN0cnVjdCBfT3ZlcnJpZGVTaGVsbENsYXNzUmVjICpPdmVycmlkZVNoZWxsV2lkZ2V0Q2xh c3M7CnR5cGVkZWYgc3RydWN0IF9XTVNoZWxsQ2xhc3NSZWMgKldNU2hlbGxXaWRnZXRDbGFzczsK dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgKlRyYW5zaWVudFNoZWxsV2lk Z2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Ub3BMZXZlbFNoZWxsQ2xhc3NSZWMgKlRvcExldmVs U2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxDbGFzc1Jl YyAqQXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfU2Vzc2lvblNo ZWxsQ2xhc3NSZWMgKlNlc3Npb25TaGVsbFdpZGdldENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFz cyBzaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgb3ZlcnJpZGVTaGVsbFdpZGdl dENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgd21TaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lk Z2V0Q2xhc3MgdHJhbnNpZW50U2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHRv cExldmVsU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIGFwcGxpY2F0aW9uU2hl bGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHNlc3Npb25TaGVsbFdpZGdldENsYXNz OwpleHRlcm4gY29uc3QgY2hhciBYdFN0cmluZ3NbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU3Ry aW5nc1tdOwpleHRlcm4gV2lkZ2V0Q2xhc3MgdmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCnR5cGVk ZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsUmVjICogWG1WZW5kb3JTaGVsbFdpZGdldDsKdHlwZWRl ZiBzdHJ1Y3QgX1htVmVuZG9yU2hlbGxDbGFzc1JlYyAqIFhtVmVuZG9yU2hlbGxXaWRnZXRDbGFz czsKCgoKCgoKCkJvb2xlYW4gWG1Jc01vdGlmV01SdW5uaW5nKFdpZGdldCBzaGVsbCk7CmV4dGVy biB2b2lkIFhtVHJhbnNsYXRlS2V5KERpc3BsYXkgKkRzcCwgS2V5Q29kZSBLZXljb2RlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllcnMgbW9kaWZpZXJzLCBNb2RpZmllcnMgKm1v ZGlmaWVyc19yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVN5bSAqS2V5c3lt X3JldHVybik7CmV4dGVybiBpbnQgeG1Vc2VWZXJzaW9uOwpleHRlcm4gY2hhciBfWG1TREVGQVVM VF9GT05UW107CmV4dGVybiBjaGFyIF9YbVNERUZBVUxUX0JBQ0tHUk9VTkRbXTsKCgoKCgp0eXBl ZGVmIGVudW0gewogICAgWG1GT05UX0lTX0ZPTlQsCiAgICBYbUZPTlRfSVNfRk9OVFNFVCwKICAg IFhtRk9OVF9JU19YT0MsCiAgICBYbUZPTlRfSVNfWEZUCn0gWG1Gb250VHlwZTsKCmVudW0gewog ICAgWG1TVFJJTkdfRElSRUNUSU9OX0xfVE9fUiwKICAgIFhtU1RSSU5HX0RJUkVDVElPTl9SX1RP X0wsCiAgICBYbVNUUklOR19ESVJFQ1RJT05fREVGQVVMVCA9IDI1NQp9OwoKZW51bSB7CiAgICBY bVNUUklOR19DT01QT05FTlRfVU5LTk9XTiwKICAgIFhtU1RSSU5HX0NPTVBPTkVOVF9DSEFSU0VU LAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1RFWFQsCiAgICBYbVNUUklOR19DT01QT05FTlRfRElS RUNUSU9OLAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1NFUEFSQVRPUiwKICAgIFhtU1RSSU5HX0NP TVBPTkVOVF9MT0NBTEVfVEVYVAoKfTsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0 cmluZ0RpcmVjdGlvbjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICpYbVN0cmluZzsKdHlwZWRlZiBY bVN0cmluZyAqWG1TdHJpbmdUYWJsZTsKdHlwZWRlZiBjaGFyICpYbVN0cmluZ0NoYXJTZXQ7CnR5 cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0cmluZ0NvbXBvbmVudFR5cGU7Cgp0eXBlZGVmIHN0cnVj dCBfX1htU3RyaW5nQ29udGV4dFJlYyAqX1htU3RyaW5nQ29udGV4dDsKdHlwZWRlZiBzdHJ1Y3Qg X19YbVN0cmluZ1JlYyAqX1htU3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBfWG10U3RyaW5nQ29udGV4 dFJlYyAqWG1TdHJpbmdDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfWG1Gb250TGlzdENvbnRleHRS ZWMgKlhtRm9udENvbnRleHQ7CnR5cGVkZWYgc3RydWN0IF9fWG1SZW5kaXRpb25SZWMgKlhtRm9u dExpc3RFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgX19YbVJlbmRlclRhYmxlUmVjICpYbUZvbnRMaXN0 OwoKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyB4bVByaW1pdGl2ZVdpZGdldENsYXNzOwoKdHlwZWRl ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NSZWMgKlhtUHJpbWl0aXZlV2lkZ2V0Q2xhc3M7CnR5 cGVkZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyAqWG1QcmltaXRpdmVXaWRnZXQ7CgpleHRlcm4g V2lkZ2V0Q2xhc3MgeG1HYWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENsYXNz UmVjICpYbUdhZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRSZWMgKlhtR2FkZ2V0 OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtTWFuYWdlcldpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1 Y3QgX1htTWFuYWdlckNsYXNzUmVjICpYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1 Y3QgX1htTWFuYWdlclJlYyAqWG1NYW5hZ2VyV2lkZ2V0OwplbnVtIHsKICAgIFhtUElYRUxTLAog ICAgWG0xMDBUSF9NSUxMSU1FVEVSUywKICAgIFhtMTAwMFRIX0lOQ0hFUywKICAgIFhtMTAwVEhf UE9JTlRTLAogICAgWG0xMDBUSF9GT05UX1VOSVRTCn07CgoKCmVudW0gewogICAgWG1ERVNUUk9Z LAogICAgWG1VTk1BUCwKICAgIFhtRE9fTk9USElORwp9OwoKCgplbnVtIHsKICAgIFhtRVhQTElD SVQsCiAgICBYbVBPSU5URVIKfTsKCgoKZW51bSB7CiAgICBYbU5PTkUsCiAgICBYbVRBQl9HUk9V UCwKICAgIFhtU1RJQ0tZX1RBQl9HUk9VUCwKICAgIFhtRVhDTFVTSVZFX1RBQl9HUk9VUAp9OwoK CgplbnVtIHsKCgoKICAgIFhtQkVMTCA9IDEKfTsKCgoKZW51bSB7CiAgICBYbU5PX09SSUVOVEFU SU9OLAogICAgWG1WRVJUSUNBTCwKICAgIFhtSE9SSVpPTlRBTAp9OwoKCgplbnVtIHsKICAgIFht V09SS19BUkVBLAogICAgWG1NRU5VX0JBUiwKICAgIFhtTUVOVV9QVUxMRE9XTiwKICAgIFhtTUVO VV9QT1BVUCwKICAgIFhtTUVOVV9PUFRJT04KfTsKCgoKZW51bSB7CiAgICBYbU5PX1BBQ0tJTkcs CiAgICBYbVBBQ0tfVElHSFQsCiAgICBYbVBBQ0tfQ09MVU1OLAogICAgWG1QQUNLX05PTkUKfTsK CmVudW0gewoKCgoKCiAgICBYbUFMSUdOTUVOVF9DT05URU5UU19UT1AgPSAzLAogICAgWG1BTElH Tk1FTlRfQ09OVEVOVFNfQk9UVE9NCn07CgplbnVtIHsKICAgIFhtVEVBUl9PRkZfRU5BQkxFRCwK ICAgIFhtVEVBUl9PRkZfRElTQUJMRUQKfTsKCmVudW0gewogICAgWG1VTlBPU1QsCiAgICBYbVVO UE9TVF9BTkRfUkVQTEFZCn07CgoKZW51bSB7CiAgICAgICAgWG1MQVNUX1BPU0lUSU9OID0gLTEs CiAgICAgICAgWG1GSVJTVF9QT1NJVElPTgp9OwoKCgplbnVtIHsKICAgIFhtQUxJR05NRU5UX0JF R0lOTklORywKICAgIFhtQUxJR05NRU5UX0NFTlRFUiwKICAgIFhtQUxJR05NRU5UX0VORAp9OwoK ZW51bSB7CiAgICBYbUFMSUdOTUVOVF9CQVNFTElORV9UT1AsCgoKCiAgICBYbUFMSUdOTUVOVF9C QVNFTElORV9CT1RUT00gPSAyLAogICAgWG1BTElHTk1FTlRfV0lER0VUX1RPUCwKICAgIFhtQUxJ R05NRU5UX1dJREdFVF9CT1RUT00KfTsKCgoKZW51bSB7CiAgICBYbUZSQU1FX0dFTkVSSUNfQ0hJ TEQsCiAgICBYbUZSQU1FX1dPUktBUkVBX0NISUxELAogICAgWG1GUkFNRV9USVRMRV9DSElMRAp9 OwoKCmVudW0gewogICAgWG1OX09GX01BTlkgPSAxLAogICAgWG1PTkVfT0ZfTUFOWQp9OwoKCgpl bnVtIHsKICAgIFhtQVRUQUNIX05PTkUsCiAgICBYbUFUVEFDSF9GT1JNLAogICAgWG1BVFRBQ0hf T1BQT1NJVEVfRk9STSwKICAgIFhtQVRUQUNIX1dJREdFVCwKICAgIFhtQVRUQUNIX09QUE9TSVRF X1dJREdFVCwKICAgIFhtQVRUQUNIX1BPU0lUSU9OLAogICAgWG1BVFRBQ0hfU0VMRgp9OwoKCgpl bnVtIHsKICAgIFhtUkVTSVpFX05PTkUsCiAgICBYbVJFU0laRV9HUk9XLAogICAgWG1SRVNJWkVf QU5ZCn07CgoKCmVudW0gewogICAgWG1DUl9OT05FLAogICAgWG1DUl9IRUxQLAogICAgWG1DUl9W QUxVRV9DSEFOR0VELAogICAgWG1DUl9JTkNSRU1FTlQsCiAgICBYbUNSX0RFQ1JFTUVOVCwKICAg IFhtQ1JfUEFHRV9JTkNSRU1FTlQsCiAgICBYbUNSX1BBR0VfREVDUkVNRU5ULAogICAgWG1DUl9U T19UT1AsCiAgICBYbUNSX1RPX0JPVFRPTSwKICAgIFhtQ1JfRFJBRywKICAgIFhtQ1JfQUNUSVZB VEUsCiAgICBYbUNSX0FSTSwKICAgIFhtQ1JfRElTQVJNLAogICAgWG1DUl9EVU1NWTEzLAogICAg WG1DUl9EVU1NWTE0LAogICAgWG1DUl9EVU1NWTE1LAogICAgWG1DUl9NQVAsCiAgICBYbUNSX1VO TUFQLAogICAgWG1DUl9GT0NVUywKICAgIFhtQ1JfTE9TSU5HX0ZPQ1VTLAogICAgWG1DUl9NT0RJ RllJTkdfVEVYVF9WQUxVRSwKICAgIFhtQ1JfTU9WSU5HX0lOU0VSVF9DVVJTT1IsCiAgICBYbUNS X0VYRUNVVEUsCiAgICBYbUNSX1NJTkdMRV9TRUxFQ1QsCiAgICBYbUNSX01VTFRJUExFX1NFTEVD VCwKICAgIFhtQ1JfRVhURU5ERURfU0VMRUNULAogICAgWG1DUl9CUk9XU0VfU0VMRUNULAogICAg WG1DUl9ERUZBVUxUX0FDVElPTiwKICAgIFhtQ1JfQ0xJUEJPQVJEX0RBVEFfUkVRVUVTVCwKICAg IFhtQ1JfQ0xJUEJPQVJEX0RBVEFfREVMRVRFLAogICAgWG1DUl9DQVNDQURJTkcsCiAgICBYbUNS X09LLAogICAgWG1DUl9DQU5DRUwsCiAgICBYbUNSX0RVTU1ZMzMsCiAgICBYbUNSX0FQUExZLAog ICAgWG1DUl9OT19NQVRDSCwKICAgIFhtQ1JfQ09NTUFORF9FTlRFUkVELAogICAgWG1DUl9DT01N QU5EX0NIQU5HRUQsCiAgICBYbUNSX0VYUE9TRSwKICAgIFhtQ1JfUkVTSVpFLAogICAgWG1DUl9J TlBVVCwKICAgIFhtQ1JfR0FJTl9QUklNQVJZLAogICAgWG1DUl9MT1NFX1BSSU1BUlksCiAgICBY bUNSX0NSRUFURSwKICAgIFhtQ1JfVEVBUl9PRkZfQUNUSVZBVEUsCiAgICBYbUNSX1RFQVJfT0ZG X0RFQUNUSVZBVEUsCiAgICBYbUNSX09CU0NVUkVEX1RSQVZFUlNBTCwKICAgIFhtQ1JfUFJPVE9D T0xTCn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAq ZXZlbnQ7Cn0gWG1BbnlDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBy ZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtQXJyb3dC dXR0b25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAg ICBYRXZlbnQgKmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFht Q29tbWFuZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsK ICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaW5kb3cgd2luZG93Owp9IFhtRHJhd2luZ0FyZWFDYWxs YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg KmV2ZW50OwogICAgV2luZG93IHdpbmRvdzsKICAgIGludCBjbGlja19jb3VudDsKfSBYbURyYXdu QnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog ICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIHZhbHVlOwogICAgaW50IGxlbmd0aDsKICAg IFhtU3RyaW5nIG1hc2s7CiAgICBpbnQgbWFza19sZW5ndGg7CiAgICBYbVN0cmluZyBkaXI7CiAg ICBpbnQgZGlyX2xlbmd0aDsKICAgIFhtU3RyaW5nIHBhdHRlcm47CiAgICBpbnQgcGF0dGVybl9s ZW5ndGg7Cn0gWG1GaWxlU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIGl0ZW07 CiAgICBpbnQgaXRlbV9sZW5ndGg7CiAgICBpbnQgaXRlbV9wb3NpdGlvbjsKICAgIFhtU3RyaW5n ICpzZWxlY3RlZF9pdGVtczsKICAgIGludCBzZWxlY3RlZF9pdGVtX2NvdW50OwogICAgaW50ICpz ZWxlY3RlZF9pdGVtX3Bvc2l0aW9uczsKICAgIGludCBzZWxlY3Rpb25fdHlwZTsKfSBYbUxpc3RD YWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZl bnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtUHVzaEJ1dHRvbkNhbGxiYWNrU3Ry dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7 CiAgICBXaWRnZXQgd2lkZ2V0OwogICAgY2hhciAqZGF0YTsKICAgIGNoYXIgKmNhbGxiYWNrc3Ry dWN0Owp9IFhtUm93Q29sdW1uQ2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAg aW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7Cn0gWG1TY2FsZUNh bGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVu dCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7CiAgICBpbnQgcGl4ZWw7Cn0gWG1TY3JvbGxCYXJDYWxs YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg KmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFhtU2VsZWN0aW9u Qm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAg WEV2ZW50ICpldmVudDsKICAgIGludCBzZXQ7Cn0gWG1Ub2dnbGVCdXR0b25DYWxsYmFja1N0cnVj dDsKCgoKZW51bSB7CiAgICBYbU1VTFRJQ0xJQ0tfRElTQ0FSRCwKICAgIFhtTVVMVElDTElDS19L RUVQCn07CgoKZW51bSB7CiAgICBYbVNIQURPV19JTiA9IDcsCiAgICBYbVNIQURPV19PVVQKfTsK CgplbnVtIHsKICAgIFhtQVJST1dfVVAsCiAgICBYbUFSUk9XX0RPV04sCiAgICBYbUFSUk9XX0xF RlQsCiAgICBYbUFSUk9XX1JJR0hUCn07CgoKCmVudW0gewogICAgWG1OT19MSU5FLAogICAgWG1T SU5HTEVfTElORSwKICAgIFhtRE9VQkxFX0xJTkUsCiAgICBYbVNJTkdMRV9EQVNIRURfTElORSwK ICAgIFhtRE9VQkxFX0RBU0hFRF9MSU5FLAogICAgWG1TSEFET1dfRVRDSEVEX0lOLAogICAgWG1T SEFET1dfRVRDSEVEX09VVCwKICAgIFhtU0hBRE9XX0VUQ0hFRF9JTl9EQVNILAogICAgWG1TSEFE T1dfRVRDSEVEX09VVF9EQVNILAogICAgWG1JTlZBTElEX1NFUEFSQVRPUl9UWVBFCn07CgoKCmVu dW0gewogICAgWG1QSVhNQVAgPSAxLAogICAgWG1TVFJJTkcKfTsKCgplbnVtIHsKICAgIFhtV0lO RE9XLAoKCgogICAgWG1DVVJTT1IgPSAyCn07CgoKCmVudW0gewogICAgWG1NQVhfT05fVE9QLAog ICAgWG1NQVhfT05fQk9UVE9NLAogICAgWG1NQVhfT05fTEVGVCwKICAgIFhtTUFYX09OX1JJR0hU Cn07CgoKCmVudW0gewogICAgWG1TSU5HTEVfU0VMRUNULAogICAgWG1NVUxUSVBMRV9TRUxFQ1Qs CiAgICBYbUVYVEVOREVEX1NFTEVDVCwKICAgIFhtQlJPV1NFX1NFTEVDVAp9OwoKZW51bSB7CiAg ICBYbVNUQVRJQywKICAgIFhtRFlOQU1JQwp9OwoKCgplbnVtIHsKICAgIFhtVkFSSUFCTEUsCiAg ICBYbUNPTlNUQU5ULAogICAgWG1SRVNJWkVfSUZfUE9TU0lCTEUKfTsKCmVudW0gewogICAgWG1B VVRPTUFUSUMsCiAgICBYbUFQUExJQ0FUSU9OX0RFRklORUQKfTsKCmVudW0gewoKCgogICAgWG1B U19ORUVERUQgPSAxCn07CgplbnVtIHsKICAgIFhtQk9UVE9NX1JJR0hULAogICAgWG1UT1BfUklH SFQsCiAgICBYbUJPVFRPTV9MRUZULAogICAgWG1UT1BfTEVGVAp9OwoKCgplbnVtIHsKICAgIFht Q09NTUFORF9BQk9WRV9XT1JLU1BBQ0UsCiAgICBYbUNPTU1BTkRfQkVMT1dfV09SS1NQQUNFCn07 CgoKCmVudW0gewogICAgWG1NVUxUSV9MSU5FX0VESVQsCiAgICBYbVNJTkdMRV9MSU5FX0VESVQK fTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtVEVYVF9GT1JXQVJELAogICAgWG1URVhUX0JBQ0tX QVJECn0gWG1UZXh0RGlyZWN0aW9uOwoKdHlwZWRlZiBsb25nIFhtVGV4dFBvc2l0aW9uOwp0eXBl ZGVmIEF0b20gWG1UZXh0Rm9ybWF0Owp0eXBlZGVmIGVudW0gewogICAgWG1TRUxFQ1RfUE9TSVRJ T04sCiAgICBYbVNFTEVDVF9XSElURVNQQUNFLAogICAgWG1TRUxFQ1RfV09SRCwKICAgIFhtU0VM RUNUX0xJTkUsCiAgICBYbVNFTEVDVF9BTEwsCiAgICBYbVNFTEVDVF9QQVJBR1JBUEgKfSBYbVRl eHRTY2FuVHlwZTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtSElHSExJR0hUX05PUk1BTCwKICAg IFhtSElHSExJR0hUX1NFTEVDVEVELAogICAgWG1ISUdITElHSFRfU0VDT05EQVJZX1NFTEVDVEVE Cn0gWG1IaWdobGlnaHRNb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqcHRyOwogICAg aW50IGxlbmd0aDsKICAgIFhtVGV4dEZvcm1hdCBmb3JtYXQ7Cn0gWG1UZXh0QmxvY2tSZWMsICpY bVRleHRCbG9jazsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50 ICpldmVudDsKICAgIEJvb2xlYW4gZG9pdDsKICAgIFhtVGV4dFBvc2l0aW9uIGN1cnJJbnNlcnQs IG5ld0luc2VydDsKICAgIFhtVGV4dFBvc2l0aW9uIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICBYbVRl eHRCbG9jayB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0LCAqWG1UZXh0VmVyaWZ5 UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgd2NoYXJfdCAqd2NzcHRyOwogICAgaW50IGxlbmd0 aDsKfSBYbVRleHRCbG9ja1JlY1djcywgKlhtVGV4dEJsb2NrV2NzOwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBCb29sZWFuIGRvaXQ7CiAg ICBYbVRleHRQb3NpdGlvbiBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBYbVRleHRQb3NpdGlv biBzdGFydFBvcywgZW5kUG9zOwogICAgWG1UZXh0QmxvY2tXY3MgdGV4dDsKfSBYbVRleHRWZXJp ZnlDYWxsYmFja1N0cnVjdFdjcywgKlhtVGV4dFZlcmlmeVB0cldjczsKCgoKCgoKCmVudW0gewog ICAgWG1ESUFMT0dfTk9ORSwKICAgIFhtRElBTE9HX0FQUExZX0JVVFRPTiwKICAgIFhtRElBTE9H X0NBTkNFTF9CVVRUT04sCiAgICBYbURJQUxPR19ERUZBVUxUX0JVVFRPTiwKICAgIFhtRElBTE9H X09LX0JVVFRPTiwKICAgIFhtRElBTE9HX0ZJTFRFUl9MQUJFTCwKICAgIFhtRElBTE9HX0ZJTFRF Ul9URVhULAogICAgWG1ESUFMT0dfSEVMUF9CVVRUT04sCiAgICBYbURJQUxPR19MSVNULAogICAg WG1ESUFMT0dfTElTVF9MQUJFTCwKICAgIFhtRElBTE9HX01FU1NBR0VfTEFCRUwsCiAgICBYbURJ QUxPR19TRUxFQ1RJT05fTEFCRUwsCiAgICBYbURJQUxPR19TWU1CT0xfTEFCRUwsCiAgICBYbURJ QUxPR19URVhULAogICAgWG1ESUFMT0dfU0VQQVJBVE9SLAogICAgWG1ESUFMT0dfRElSX0xJU1Qs CiAgICBYbURJQUxPR19ESVJfTElTVF9MQUJFTAp9OwplbnVtIHsKICAgIFhtRElBTE9HX01PREVM RVNTLAogICAgWG1ESUFMT0dfUFJJTUFSWV9BUFBMSUNBVElPTl9NT0RBTCwKICAgIFhtRElBTE9H X0ZVTExfQVBQTElDQVRJT05fTU9EQUwsCiAgICBYbURJQUxPR19TWVNURU1fTU9EQUwKfTsKCgoK CgoKZW51bSB7CiAgICBYbVBMQUNFX1RPUCwKICAgIFhtUExBQ0VfQUJPVkVfU0VMRUNUSU9OLAog ICAgWG1QTEFDRV9CRUxPV19TRUxFQ1RJT04KfTsKZW51bSB7CiAgICBYbURJQUxPR19XT1JLX0FS RUEsCiAgICBYbURJQUxPR19QUk9NUFQsCiAgICBYbURJQUxPR19TRUxFQ1RJT04sCiAgICBYbURJ QUxPR19DT01NQU5ELAogICAgWG1ESUFMT0dfRklMRV9TRUxFQ1RJT04KfTsKCgplbnVtIHsKICAg IFhtRElBTE9HX1RFTVBMQVRFLAogICAgWG1ESUFMT0dfRVJST1IsCiAgICBYbURJQUxPR19JTkZP Uk1BVElPTiwKICAgIFhtRElBTE9HX01FU1NBR0UsCiAgICBYbURJQUxPR19RVUVTVElPTiwKICAg IFhtRElBTE9HX1dBUk5JTkcsCiAgICBYbURJQUxPR19XT1JLSU5HCn07CgoKCnR5cGVkZWYgZW51 bSB7CiAgICBYbVZJU0lCSUxJVFlfVU5PQlNDVVJFRCwKICAgIFhtVklTSUJJTElUWV9QQVJUSUFM TFlfT0JTQ1VSRUQsCiAgICBYbVZJU0lCSUxJVFlfRlVMTFlfT0JTQ1VSRUQKfSBYbVZpc2liaWxp dHk7Cgp0eXBlZGVmIGVudW0gewogICAgWG1UUkFWRVJTRV9DVVJSRU5ULAogICAgWG1UUkFWRVJT RV9ORVhULAogICAgWG1UUkFWRVJTRV9QUkVWLAogICAgWG1UUkFWRVJTRV9IT01FLAogICAgWG1U UkFWRVJTRV9ORVhUX1RBQl9HUk9VUCwKICAgIFhtVFJBVkVSU0VfUFJFVl9UQUJfR1JPVVAsCiAg ICBYbVRSQVZFUlNFX1VQLAogICAgWG1UUkFWRVJTRV9ET1dOLAogICAgWG1UUkFWRVJTRV9MRUZU LAogICAgWG1UUkFWRVJTRV9SSUdIVAp9IFhtVHJhdmVyc2FsRGlyZWN0aW9uOwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaWRnZXQgdHJh dmVyc2FsX2Rlc3RpbmF0aW9uOwogICAgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uOwp9 IFhtVHJhdmVyc2VPYnNjdXJlZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IFhtTmF2aWdhdGlvblR5cGU7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbUJ1dHRvblR5cGU7 CnR5cGVkZWYgWG1CdXR0b25UeXBlICogWG1CdXR0b25UeXBlVGFibGU7CnR5cGVkZWYgS2V5U3lt ICogWG1LZXlTeW1UYWJsZTsKdHlwZWRlZiBYbVN0cmluZ0NoYXJTZXQgKiBYbVN0cmluZ0NoYXJT ZXRUYWJsZTsKCmVudW0gewogICAgWG1QVVNIQlVUVE9OID0gMSwKICAgIFhtVE9HR0xFQlVUVE9O LAogICAgWG1SQURJT0JVVFRPTiwKICAgIFhtQ0FTQ0FERUJVVFRPTiwKICAgIFhtU0VQQVJBVE9S LAogICAgWG1ET1VCTEVfU0VQQVJBVE9SLAogICAgWG1USVRMRQp9OwoKCgoKCnR5cGVkZWYgWHRQ b2ludGVyICgqWG1SZXNvdXJjZUJhc2VQcm9jKShXaWRnZXQgdywgWHRQb2ludGVyKTsKCnR5cGVk ZWYgc3RydWN0IF9YbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYyB7CiAgICBYbVJlc291cmNlQmFz ZVByb2MgYmFzZV9wcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRhOwogICAgU3RyaW5nIG5h bWU7CiAgICBTdHJpbmcgcmVzX2NsYXNzOwogICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwog ICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKfSBYbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYywg KlhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhOwoKQ2FyZGluYWwgWG1HZXRTZWNvbmRhcnlSZXNvdXJj ZURhdGEoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhICoqcmVzRGF0YSk7CgoKUGl4bWFwIFhtR2V0UGl4bWFw KFNjcmVlbiAqc2NyZWVuLCBjaGFyICppbWFnZV9uYW1lLCBQaXhlbCBmb3JlZ3JvdW5kLCBQaXhl bCBiYWNrZ3JvdW5kKTsKUGl4bWFwIFhtR2V0UGl4bWFwQnlEZXB0aChTY3JlZW4gKnNjcmVlbiwg Y2hhciAqaW1hZ2VfbmFtZSwgUGl4ZWwgZm9yZWdyb3VuZCwgUGl4ZWwgYmFja2dyb3VuZCwgaW50 IGRlcHRoKTsKQm9vbGVhbiBYbURlc3Ryb3lQaXhtYXAoU2NyZWVuICpzY3JlZW4sIFBpeG1hcCBw aXhtYXApOwpCb29sZWFuIFhtSW5zdGFsbEltYWdlKFhJbWFnZSAqaW1hZ2UsIGNoYXIgKmltYWdl X25hbWUpOwpCb29sZWFuIFhtVW5pbnN0YWxsSW1hZ2UoWEltYWdlICppbWFnZSk7CgoKCnZvaWQg WG1VcGRhdGVEaXNwbGF5KFdpZGdldCB3KTsKCgoKdHlwZWRlZiBsb25nIFhtT2Zmc2V0Owp0eXBl ZGVmIFhtT2Zmc2V0ICpYbU9mZnNldFB0cjsKCnZvaWQgWG1SZXNvbHZlUGFydE9mZnNldHMoV2lk Z2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCk7CnZvaWQgWG1SZXNvbHZlQWxs UGFydE9mZnNldHMoV2lkZ2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYbU9mZnNldFB0ciAqY29uc3RyYWludF9vZmZzZXQp OwpCb29sZWFuIFhtV2lkZ2V0R2V0QmFzZWxpbmVzKFdpZGdldCB3aWQsIERpbWVuc2lvbiAqKmJh c2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVfY291bnQpOwpC b29sZWFuIFhtV2lkZ2V0R2V0RGlzcGxheVJlY3QoV2lkZ2V0IHdpZCwgWFJlY3RhbmdsZSAqZGlz cGxheXJlY3QpOwoKCgp2b2lkIFhtUmVnaXN0ZXJDb252ZXJ0ZXJzKHZvaWQpOwp2b2lkIFhtQ3Z0 U3RyaW5nVG9Vbml0VHlwZShYcm1WYWx1ZVB0ciBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MsIFhy bVZhbHVlICpmcm9tX3ZhbCwgWHJtVmFsdWUgKnRvX3ZhbCk7CmNoYXIgKlhtUmVnaXN0ZXJTZWdt ZW50RW5jb2RpbmcoY2hhciAqZm9udGxpc3RfdGFnLCBjaGFyICpjdF9lbmNvZGluZyk7CmNoYXIg KlhtTWFwU2VnbWVudEVuY29kaW5nKGNoYXIgKmZvbnRsaXN0X3RhZyk7ClhtU3RyaW5nIFhtQ3Z0 Q1RUb1htU3RyaW5nKGNoYXIgKnRleHQpOwpCb29sZWFuIFhtQ3Z0VGV4dFRvWG1TdHJpbmcoRGlz cGxheSAqZGlzcGxheSwgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENhcmRpbmFsICpudW1fYXJncywgWHJtVmFsdWUgKmZyb21fdmFsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3ZhbCwgWHRQb2ludGVyICpjb252ZXJ0ZXJfZGF0 YSk7CmNoYXIgKlhtQ3Z0WG1TdHJpbmdUb0NUKFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1D dnRYbVN0cmluZ1RvVGV4dChEaXNwbGF5ICpkaXNwbGF5LCBYcm1WYWx1ZVB0ciBhcmdzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLCBYcm1WYWx1ZSAqZnJv bV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdG9fdmFsLCBYdFBv aW50ZXIgKmNvbnZlcnRlcl9kYXRhKTsKCgoKaW50IFhtQ29udmVydFVuaXRzKFdpZGdldCB3aWRn ZXQsIGludCBvcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgIGludCBmcm9tX3VuaXRfdHlw ZSwgaW50IGZyb21fdmFsdWUsIGludCB0b191bml0X3R5cGUpOwppbnQgWG1DdnRUb0hvcml6b250 YWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50IGZyb21fdHlwZSk7Cmlu dCBYbUN2dFRvVmVydGljYWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50 IGZyb21fdHlwZSk7CmludCBYbUN2dEZyb21Ib3Jpem9udGFsUGl4ZWxzKFNjcmVlbiAqc2NyZWVu LCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKaW50IFhtQ3Z0RnJvbVZlcnRpY2FsUGl4ZWxz KFNjcmVlbiAqc2NyZWVuLCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKdm9pZCBYbVNldEZv bnRVbml0cyhEaXNwbGF5ICpkaXNwbGF5LCBpbnQgaF92YWx1ZSwgaW50IHZfdmFsdWUpOwp2b2lk IFhtU2V0Rm9udFVuaXQoRGlzcGxheSAqZGlzcGxheSwgaW50IHZhbHVlKTsKCgoKdm9pZCBYbVNl dE1lbnVDdXJzb3IoRGlzcGxheSAqZGlzcGxheSwgQ3Vyc29yIGN1cnNvcklkKTsKQ3Vyc29yIFht R2V0TWVudUN1cnNvcihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKV2lkZ2V0IFhtQ3JlYXRlU2ltcGxl Q2hlY2tCb3goV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CldpZGdldCBYbUNyZWF0 ZVNpbXBsZU1lbnVCYXIoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKV2lkZ2V0IFht Q3JlYXRlU2ltcGxlT3B0aW9uTWVudShXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJnY291bnQp OwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwg YXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVu dCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJn bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVSYWRpb0JveChX aWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB cmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKCgoKV2lkZ2V0IFhtVmFDcmVhdGVTaW1w bGVDaGVja0JveChXaWRnZXQgcGFyZW50LCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD cmVhdGVTaW1wbGVNZW51QmFyKFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVPcHRpb25N ZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBidXR0b25fc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssIC4uLik7CldpZGdldCBYbVZhQ3JlYXRlU2ltcGxl UG9wdXBNZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD cmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgU3RyaW5nIG5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0X2Zyb21fYnV0dG9uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg Li4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVSYWRpb0JveChXaWRnZXQgcGFyZW50LCBTdHJp bmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnV0dG9uX3NldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg Li4uKTsKCgoKV2lkZ2V0IFhtVHJhY2tpbmdFdmVudChXaWRnZXQgd2lkZ2V0LCBDdXJzb3IgY3Vy c29yLCBCb29sZWFuIGNvbmZpbmVfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl dmVudF9yZXR1cm4pOwpXaWRnZXQgWG1UcmFja2luZ0xvY2F0ZShXaWRnZXQgd2lkZ2V0LCBDdXJz b3IgY3Vyc29yLCBCb29sZWFuIGNvbmZpbmVfdG8pOwoKCgp0eXBlZGVmIHZvaWQgKCpYbUNvbG9y UHJvYykoWENvbG9yICpiZ19jb2xvciwgWENvbG9yICpmZ19jb2xvciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFhDb2xvciAqc2VsX2NvbG9yLCBYQ29sb3IgKnRzX2NvbG9yLCBYQ29sb3Ig KmJzX2NvbG9yKTsKCgpleHRlcm4gWG1Db2xvclByb2MgWG1TZXRDb2xvckNhbGN1bGF0aW9uKFht Q29sb3JQcm9jIHByb2MpOwpleHRlcm4gWG1Db2xvclByb2MgWG1HZXRDb2xvckNhbGN1bGF0aW9u KHZvaWQpOwpleHRlcm4gdm9pZCBYbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29sb3JtYXAg Y29sb3JfbWFwLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kLCBQaXhl bCAqZm9yZWdyb3VuZF9yZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICp0b3Bfc2hh ZG93X3JldCwgUGl4ZWwgKmJvdHRvbV9zaGFkb3dfcmV0LAogICAgICAgICAgICAgICAgICAgICAg ICBQaXhlbCAqc2VsZWN0X3JldCk7CmV4dGVybiB2b2lkIFhtQ2hhbmdlQ29sb3IoV2lkZ2V0IHdp ZGdldCwgUGl4ZWwgYmFja2dyb3VuZCk7CgoKCkRpbWVuc2lvbiBYbVN0cmluZ0Jhc2VsaW5lKFht Rm9udExpc3QgZm9udGxpc3QsIFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1TdHJpbmdCeXRl Q29tcGFyZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpCb29sZWFuIFhtU3RyaW5nQ29tcGFy ZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NvbmNhdChYbVN0 cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZShjaGFyICp0ZXh0 LCBjaGFyICp0YWcpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZUx0b1IoY2hhciAqdGV4dCwgY2hh ciAqdGFnKTsKWG1TdHJpbmcgWG1TdHJpbmdMdG9SQ3JlYXRlKGNoYXIgKnRleHQsIGNoYXIgKnRh Zyk7ClhtU3RyaW5nIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKGNoYXIgKnRleHQpOwpYbVN0cmlu ZyBYbVN0cmluZ0NyZWF0ZVNpbXBsZShjaGFyICp0ZXh0KTsKWG1TdHJpbmcgWG1TdHJpbmdEaXJl Y3Rpb25DcmVhdGUoWG1TdHJpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKTsKdm9pZCBYbVN0cmluZ0Ry YXcoRGlzcGxheSAqZCwKICAgICAgICAgICAgICAgICAgV2luZG93IHcsCiAgICAgICAgICAgICAg ICAgIFhtRm9udExpc3QgZm9udGxpc3QsCiAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmlu ZywKICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs CiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgIERpbWVuc2lv biB3aWR0aCwKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwKICAgICAgICAgICAg ICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3SW1hZ2UoRGlzcGxheSAq ZCwgV2luZG93IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250bGlzdCwK ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwKICAgICAgICAg ICAgICAgICAgICAgICBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv biB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWdubWVudCwK ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3 VW5kZXJsaW5lKERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdDIGdjLCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LCBEaW1lbnNpb24gd2lkdGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxpZ25tZW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIFhtU3RyaW5nIHVuZGVybGluZSk7CkJvb2xlYW4gWG1TdHJpbmdFbXB0eShY bVN0cmluZyBzMSk7CnZvaWQgWG1TdHJpbmdFeHRlbnQoWG1Gb250TGlzdCBmb250bGlzdCwKICAg ICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgRGlt ZW5zaW9uICp3aWR0aCwKICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gKmhlaWdodCk7CnZv aWQgWG1TdHJpbmdGcmVlKFhtU3RyaW5nIHN0cmluZyk7CnZvaWQgWG1TdHJpbmdGcmVlQ29udGV4 dChYbVN0cmluZ0NvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1TdHJpbmdHZXRMdG9SKFhtU3Ry aW5nIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IHRhZywK ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnRleHQpOwpYbVN0cmluZ0NvbXBvbmVudFR5 cGUgWG1TdHJpbmdHZXROZXh0Q29tcG9uZW50KFhtU3RyaW5nQ29udGV4dCBjb250ZXh0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0ZXh0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hh clNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb21wb25lbnRUeXBlICp1bmtub3duX3RhZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz aG9ydCAqdW5rbm93bl9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnVua25vd25fdmFsdWUpOwpCb29sZWFuIFhtU3Ry aW5nR2V0TmV4dFNlZ21lbnQoWG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhtU3RyaW5nQ2hhclNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmdEaXJlY3Rpb24gKmRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJvb2xlYW4gKnNlcGFyYXRvcik7CkJvb2xlYW4gWG1TdHJpbmdIYXNTdWJzdHJpbmcoWG1T dHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN1YnN0 cmluZyk7CkRpbWVuc2lvbiBYbVN0cmluZ0hlaWdodChYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0 cmluZyBzdHJpbmcpOwpCb29sZWFuIFhtU3RyaW5nSW5pdENvbnRleHQoWG1TdHJpbmdDb250ZXh0 ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKTsK aW50IFhtU3RyaW5nTGVuZ3RoKFhtU3RyaW5nIHMxKTsKaW50IFhtU3RyaW5nTGluZUNvdW50KFht U3RyaW5nIHN0cmluZyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvbmNhdChYbVN0cmluZyBzMSwgWG1T dHJpbmcgczIsIGludCBudW1fYnl0ZXMpOwpYbVN0cmluZyBYbVN0cmluZ0NvcHkoWG1TdHJpbmcg cyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvcHkoWG1TdHJpbmcgczEsIGludCBudW1fYnl0ZXMpOwpY bVN0cmluZ0NvbXBvbmVudFR5cGUgWG1TdHJpbmdQZWVrTmV4dENvbXBvbmVudChYbVN0cmluZ0Nv bnRleHQgY29udGV4dCk7ClhtU3RyaW5nIFhtU3RyaW5nU2VnbWVudENyZWF0ZShjaGFyICp0ZXh0 LCBjaGFyICp0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0RpcmVj dGlvbiBkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHNl cGFyYXRvcik7ClhtU3RyaW5nIFhtU3RyaW5nU2VwYXJhdG9yQ3JlYXRlKHZvaWQpOwoKRGltZW5z aW9uIFhtU3RyaW5nV2lkdGgoWG1Gb250TGlzdCBmb250TGlzdCwgWG1TdHJpbmcgc3RyaW5nKTsK ClhtRm9udExpc3QgWG1TdHJpbmdDcmVhdGVGb250TGlzdCggWEZvbnRTdHJ1Y3QgKmZvbnQsIFht U3RyaW5nQ2hhclNldCBjaGFyc2V0KTsKCgoKWG1Gb250TGlzdCBYbUZvbnRMaXN0QXBwZW5kRW50 cnkoWG1Gb250TGlzdCBvbGRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY bUZvbnRMaXN0RW50cnkgZW50cnkpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoWEZvbnRT dHJ1Y3QgKmZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQg Y2hhcnNldCk7ClhtRm9udExpc3QgWG1Gb250TGlzdEFkZChYbUZvbnRMaXN0IG9sZCwKICAgICAg ICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0ICpmb250LAogICAgICAgICAgICAgICAgICAg ICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDb3B5 KFhtRm9udExpc3QgZm9udGxpc3QpOwpYbUZvbnRMaXN0RW50cnkgWG1Gb250TGlzdEVudHJ5Q3Jl YXRlKGNoYXIgKnRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZv bnRUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu dGVyIGZvbnQpOwp2b2lkIFhtRm9udExpc3RFbnRyeUZyZWUoWG1Gb250TGlzdEVudHJ5ICplbnRy eSk7Clh0UG9pbnRlciBYbUZvbnRMaXN0RW50cnlHZXRGb250KFhtRm9udExpc3RFbnRyeSBlbnRy eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250VHlwZSAqdHlwZV9yZXR1 cm4pOwpjaGFyICpYbUZvbnRMaXN0RW50cnlHZXRUYWcoWG1Gb250TGlzdEVudHJ5IGVudHJ5KTsK WG1Gb250TGlzdEVudHJ5IFhtRm9udExpc3RFbnRyeUxvYWQoRGlzcGxheSAqZGlzcGxheSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udF9uYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlIHR5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhZyk7CnZvaWQgWG1Gb250TGlzdEZyZWUo WG1Gb250TGlzdCBsaXN0KTsKdm9pZCBYbUZvbnRMaXN0RnJlZUZvbnRDb250ZXh0KFhtRm9udENv bnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEluaXRGb250Q29udGV4dChYbUZvbnRD b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250 TGlzdCBmb250bGlzdCk7ClhtRm9udExpc3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KFhtRm9u dENvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEdldE5leHRGb250KFhtRm9udENv bnRleHQgY29udGV4dCwgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LCBYRm9udFN0cnVjdCAqKmZv bnQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1vdmVFbnRyeShYbUZvbnRMaXN0IG9sZGxpc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3RFbnRyeSBlbnRyeSk7 CgoKCgpXaWRnZXQgWG1HZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKQm9vbGVh biBYbUlzVHJhdmVyc2FibGUoV2lkZ2V0IHdpZGdldCk7ClhtVmlzaWJpbGl0eSBYbUdldFZpc2li aWxpdHkoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1BZGRUYWJHcm91cChXaWRnZXQgd2lkZ2V0KTsK dm9pZCBYbVJlbW92ZVRhYkdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgWG1HZXRUYWJHcm91 cChXaWRnZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHdpZGdl dCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IFhtR2V0Rm9jdXNXaWRn ZXQoV2lkZ2V0IHdpZGdldCk7CgoKCnZvaWQgWG1JbVJlZ2lzdGVyKFdpZGdldCB3LCB1bnNpZ25l ZCBpbnQgcmVzZXJ2ZWQpOwp2b2lkIFhtSW1VbnJlZ2lzdGVyKFdpZGdldCB3KTsKdm9pZCBYbUlt U2V0Rm9jdXNWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVtX2FyZ3Mp Owp2b2lkIFhtSW1TZXRWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVt X2FyZ3MpOwp2b2lkIFhtSW1VbnNldEZvY3VzKFdpZGdldCB3KTsKWElNIFhtSW1HZXRYSU0oV2lk Z2V0IHcpOwppbnQgWG1JbU1iTG9va3VwU3RyaW5nKFdpZGdldCB3LAogICAgICAgICAgICAgICAg ICAgICAgIFhLZXlQcmVzc2VkRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAg ICAgICAgICAgIEtleVN5bSAqa2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqc3Rh dHVzKTsKdm9pZCBYbUltTWJSZXNldElDKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAg ICBjaGFyICoqbWIpOwpleHRlcm4gdm9pZCBYbUltVmFTZXRGb2N1c1ZhbHVlcyhXaWRnZXQgdywg Li4uKTsKZXh0ZXJuIHZvaWQgWG1JbVZhU2V0VmFsdWVzKFdpZGdldCB3LCAuLi4pOwpleHRlcm4g dm9pZCBfWG1EcmF3U2hhZG93cyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBEcmF3YWJsZSBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgc2hhZG93X3R5cGUpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NoYWRv dyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgdG9wX2djLAogICAgICAgICAgICAgICAgICAg ICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0 aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNp b24gaGVpZ2h0KTsKCmV4dGVybiB2b2lkIF9YbUNsZWFyQm9yZGVyKERpc3BsYXkgKmRpc3BsYXks CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIERpbWVuc2lvbiBzaGFkb3dfdGhpY2spOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NlcGFy YXRvcihEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2Fi bGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdDIHNlcGFyYXRvcl9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs IFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgs IERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdp biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlcGFyYXRvcl90eXBl KTsKCmV4dGVybiB2b2lkIF9YbURyYXdEaWFtb25kKERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgYm90dG9tX2djLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBHQyBjZW50ZXJfZ2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGltZW5zaW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg RGltZW5zaW9uIGZpbGwpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NpbXBsZUhpZ2hsaWdodChEaXNw bGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxl IGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWln aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIGhpZ2hsaWdo dF90aGljayk7CgpleHRlcm4gdm9pZCBfWG1EcmF3SGlnaGxpZ2h0KERpc3BsYXkgKmRpc3BsYXks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHQyBnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlv biB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiB3 aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1l bnNpb24gaGlnaGxpZ2h0X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs aW5lX3N0eWxlKTsKCmV4dGVybiB2b2lkIF9YbURyYXdBcnJvdyhEaXNwbGF5ICpkaXNwbGF5LAog ICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAg ICAgIEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdF9nYywKICAgICAg ICAgICAgICAgICAgICAgICAgIEdDIGNlbnRfZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICBQ b3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u IHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5z aW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg ZGlyZWN0aW9uKTsKCmV4dGVybiB2b2lkIF9YbUhpZ2hsaWdodEJvcmRlcihXaWRnZXQgdyk7CmV4 dGVybiB2b2lkIF9YbVVuaGlnaGxpZ2h0Qm9yZGVyKFdpZGdldCB3KTsKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgbG9uZyB4cm1fbmFtZTsKICAgIGxvbmcgeHJtX2NsYXNzOwogICAgbG9uZyB4cm1fdHlw ZTsKICAgIENhcmRpbmFsIHhybV9zaXplOwogICAgaW50IHhybV9vZmZzZXQ7CiAgICBsb25nIHhy bV9kZWZhdWx0X3R5cGU7CiAgICBYdFBvaW50ZXIgeHJtX2RlZmF1bHRfYWRkcjsKfSBYcm1SZXNv dXJjZSwgKlhybVJlc291cmNlTGlzdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdFZlcnNpb25U eXBlOwp0eXBlZGVmIHZvaWQgKCpYdFByb2MpKAoKICAgIHZvaWQKCik7Cgp0eXBlZGVmIHZvaWQg KCpYdFdpZGdldENsYXNzUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MKCik7Cgp0eXBlZGVmIHZvaWQg KCpYdFdpZGdldFByb2MpKAoKICAgIFdpZGdldAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QWNj ZXB0Rm9jdXNQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgVGltZSoKCik7Cgp0eXBlZGVmIHZvaWQg KCpYdEFyZ3NQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbCoK Cik7Cgp0eXBlZGVmIHZvaWQgKCpYdEluaXRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0 ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRT ZXRWYWx1ZXNGdW5jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAg ICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QXJnc0Z1 bmMpKAoKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVk ZWYgdm9pZCAoKlh0QWxtb3N0UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAgICBY dFdpZGdldEdlb21ldHJ5KiAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgoKKTsKCnR5cGVkZWYgdm9p ZCAoKlh0RXhwb3NlUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgUmVnaW9u CgopOwp0eXBlZGVmIHZvaWQgKCpYdFJlYWxpemVQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRW YWx1ZU1hc2sqICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCnR5cGVkZWYgWHRHZW9t ZXRyeVJlc3VsdCAoKlh0R2VvbWV0cnlIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRXaWRn ZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7Cgp0eXBlZGVmIHZvaWQgKCpY dFN0cmluZ1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBTdHJpbmcKCik7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICBTdHJpbmcgbmFtZTsKICAgIFN0cmluZyB0eXBlOwogICAgWHRBcmdWYWwgdmFsdWU7 CiAgICBpbnQgc2l6ZTsKfSBYdFR5cGVkQXJnLCAqWHRUeXBlZEFyZ0xpc3Q7Cgp0eXBlZGVmIHZv aWQgKCpYdEFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MgLAogICAgQ2FyZGluYWwgKiAs CiAgICBDYXJkaW5hbCAqICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwgKiAsCiAgICBYdFR5 cGVkQXJnTGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFdpZGdldCAqICwKICAgIFh0UG9pbnRl ciAqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZWFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0ICwK ICAgIFh0UG9pbnRlcgoKKTsKCnN0cnVjdCBfWHRTdGF0ZVJlYzsKCnR5cGVkZWYgc3RydWN0IF9Y dFRNUmVjIHsKICAgIFh0VHJhbnNsYXRpb25zIHRyYW5zbGF0aW9uczsKICAgIFh0Qm91bmRBY3Rp b25zIHByb2NfdGFibGU7CiAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7CiAg ICB1bnNpZ25lZCBsb25nIGxhc3RFdmVudFRpbWU7Cn0gWHRUTVJlYywgKlh0VE07CmV4dGVybiBp bnQgX1h0SW5oZXJpdFRyYW5zbGF0aW9uczsKdHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKICAg IFdpZGdldCBzZWxmOwogICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBh cmVudDsKICAgIFhybU5hbWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsK ICAgIFh0Q2FsbGJhY2tMaXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0 cmFpbnRzOwogICAgUG9zaXRpb24geCwgeTsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0Owog ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aDsKICAgIEJvb2xlYW4gbWFuYWdlZDsKICAgIEJvb2xl YW4gc2Vuc2l0aXZlOwogICAgQm9vbGVhbiBhbmNlc3Rvcl9zZW5zaXRpdmU7CiAgICBYdEV2ZW50 VGFibGUgZXZlbnRfdGFibGU7CiAgICBYdFRNUmVjIHRtOwogICAgWHRUcmFuc2xhdGlvbnMgYWNj ZWxlcmF0b3JzOwogICAgUGl4ZWwgYm9yZGVyX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9waXht YXA7CiAgICBXaWRnZXRMaXN0IHBvcHVwX2xpc3Q7CiAgICBDYXJkaW5hbCBudW1fcG9wdXBzOwog ICAgU3RyaW5nIG5hbWU7CiAgICBTY3JlZW4gKnNjcmVlbjsKICAgIENvbG9ybWFwIGNvbG9ybWFw OwogICAgV2luZG93IHdpbmRvdzsKICAgIENhcmRpbmFsIGRlcHRoOwogICAgUGl4ZWwgYmFja2dy b3VuZF9waXhlbDsKICAgIFBpeG1hcCBiYWNrZ3JvdW5kX3BpeG1hcDsKICAgIEJvb2xlYW4gdmlz aWJsZTsKICAgIEJvb2xlYW4gbWFwcGVkX3doZW5fbWFuYWdlZDsKfSBDb3JlUGFydDsKCnR5cGVk ZWYgc3RydWN0IF9XaWRnZXRSZWMgewogICAgQ29yZVBhcnQgY29yZTsKIH0gV2lkZ2V0UmVjLCBD b3JlUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29yZUNsYXNzUGFydCB7CiAgICBXaWRnZXRDbGFzcyBz dXBlcmNsYXNzOwogICAgU3RyaW5nIGNsYXNzX25hbWU7CiAgICBDYXJkaW5hbCB3aWRnZXRfc2l6 ZTsKICAgIFh0UHJvYyBjbGFzc19pbml0aWFsaXplOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh c3NfcGFydF9pbml0aWFsaXplOwogICAgWHRFbnVtIGNsYXNzX2luaXRlZDsKICAgIFh0SW5pdFBy b2MgaW5pdGlhbGl6ZTsKICAgIFh0QXJnc1Byb2MgaW5pdGlhbGl6ZV9ob29rOwogICAgWHRSZWFs aXplUHJvYyByZWFsaXplOwogICAgWHRBY3Rpb25MaXN0IGFjdGlvbnM7CiAgICBDYXJkaW5hbCBu dW1fYWN0aW9uczsKICAgIFh0UmVzb3VyY2VMaXN0IHJlc291cmNlczsKICAgIENhcmRpbmFsIG51 bV9yZXNvdXJjZXM7CiAgICBYcm1DbGFzcyB4cm1fY2xhc3M7CiAgICBCb29sZWFuIGNvbXByZXNz X21vdGlvbjsKICAgIFh0RW51bSBjb21wcmVzc19leHBvc3VyZTsKICAgIEJvb2xlYW4gY29tcHJl c3NfZW50ZXJsZWF2ZTsKICAgIEJvb2xlYW4gdmlzaWJsZV9pbnRlcmVzdDsKICAgIFh0V2lkZ2V0 UHJvYyBkZXN0cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBl eHBvc2U7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0 X3ZhbHVlc19ob29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRB cmdzUHJvYyBnZXRfdmFsdWVzX2hvb2s7CiAgICBYdEFjY2VwdEZvY3VzUHJvYyBhY2NlcHRfZm9j dXM7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNpb247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJp dmF0ZTsKICAgIFN0cmluZyB0bV90YWJsZTsKICAgIFh0R2VvbWV0cnlIYW5kbGVyIHF1ZXJ5X2dl b21ldHJ5OwogICAgWHRTdHJpbmdQcm9jIGRpc3BsYXlfYWNjZWxlcmF0b3I7CiAgICBYdFBvaW50 ZXIgZXh0ZW5zaW9uOwogfSBDb3JlQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENs YXNzUmVjIHsKICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKfSBXaWRnZXRDbGFzc1JlYywg Q29yZUNsYXNzUmVjOwoKZXh0ZXJuIFdpZGdldENsYXNzUmVjIHdpZGdldENsYXNzUmVjOwp0eXBl ZGVmIHN0cnVjdCBfQ29tcG9zaXRlUGFydCB7CiAgICBXaWRnZXRMaXN0IGNoaWxkcmVuOwogICAg Q2FyZGluYWwgbnVtX2NoaWxkcmVuOwogICAgQ2FyZGluYWwgbnVtX3Nsb3RzOwogICAgWHRPcmRl clByb2MgaW5zZXJ0X3Bvc2l0aW9uOwp9IENvbXBvc2l0ZVBhcnQsKkNvbXBvc2l0ZVB0cjsKCnR5 cGVkZWYgc3RydWN0IF9Db21wb3NpdGVSZWMgewogICAgQ29yZVBhcnQgY29yZTsKICAgIENvbXBv c2l0ZVBhcnQgY29tcG9zaXRlOwp9IENvbXBvc2l0ZVJlYzsKCgoKCgoKCnR5cGVkZWYgc3RydWN0 IF9Db21wb3NpdGVDbGFzc1BhcnQgewogICAgWHRHZW9tZXRyeUhhbmRsZXIgZ2VvbWV0cnlfbWFu YWdlcjsKICAgIFh0V2lkZ2V0UHJvYyBjaGFuZ2VfbWFuYWdlZDsKICAgIFh0V2lkZ2V0UHJvYyBp bnNlcnRfY2hpbGQ7CiAgICBYdFdpZGdldFByb2MgZGVsZXRlX2NoaWxkOwogICAgWHRQb2ludGVy IGV4dGVuc2lvbjsKfSBDb21wb3NpdGVDbGFzc1BhcnQsKkNvbXBvc2l0ZVBhcnRQdHI7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayBy ZWNvcmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwog ICAgQm9vbGVhbiBhY2NlcHRzX29iamVjdHM7CiAgICBCb29sZWFuIGFsbG93c19jaGFuZ2VfbWFu YWdlZF9zZXQ7Cn0gQ29tcG9zaXRlQ2xhc3NFeHRlbnNpb25SZWMsICpDb21wb3NpdGVDbGFzc0V4 dGVuc2lvbjsKCgp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgewogICAgIENvcmVD bGFzc1BhcnQgY29yZV9jbGFzczsKICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns YXNzOwp9IENvbXBvc2l0ZUNsYXNzUmVjOwoKZXh0ZXJuIENvbXBvc2l0ZUNsYXNzUmVjIGNvbXBv c2l0ZUNsYXNzUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludFBhcnQgewogICAgWHRQb2lu dGVyIG11bWJsZTsKfSBDb25zdHJhaW50UGFydDsKCnR5cGVkZWYgc3RydWN0IF9Db25zdHJhaW50 UmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAg IENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7Cn0gQ29uc3RyYWludFJlYywgKkNvbnN0cmFpbnRX aWRnZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUGFydCB7CiAgICBYdFJlc291 cmNlTGlzdCByZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1fcmVzb3VyY2VzOwogICAgQ2FyZGlu YWwgY29uc3RyYWludF9zaXplOwogICAgWHRJbml0UHJvYyBpbml0aWFsaXplOwogICAgWHRXaWRn ZXRQcm9jIGRlc3Ryb3k7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0UG9p bnRlciBleHRlbnNpb247Cn0gQ29uc3RyYWludENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIFh0UG9pbnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwog ICAgbG9uZyB2ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYdEFyZ3NQcm9j IGdldF92YWx1ZXNfaG9vazsKfSBDb25zdHJhaW50Q2xhc3NFeHRlbnNpb25SZWMsICpDb25zdHJh aW50Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjIHsK ICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w b3NpdGVfY2xhc3M7CiAgICBDb25zdHJhaW50Q2xhc3NQYXJ0IGNvbnN0cmFpbnRfY2xhc3M7Cn0g Q29uc3RyYWludENsYXNzUmVjOwoKZXh0ZXJuIENvbnN0cmFpbnRDbGFzc1JlYyBjb25zdHJhaW50 Q2xhc3NSZWM7CnR5cGVkZWYgc3RydWN0IF9PYmplY3RQYXJ0IHsKICAgIFdpZGdldCBzZWxmOwog ICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBhcmVudDsKICAgIFhybU5h bWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsKICAgIFh0Q2FsbGJhY2tM aXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0cmFpbnRzOwp9IE9iamVj dFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0 Owp9IE9iamVjdFJlYzsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdENsYXNzUGFydCB7CgogICAgV2lk Z2V0Q2xhc3Mgc3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwg d2lkZ2V0X3NpemU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xh c3NQcm9jIGNsYXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAg ICBYdEluaXRQcm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsK ICAgIFh0UHJvYyBvYmoxOwogICAgWHRQb2ludGVyIG9iajI7CiAgICBDYXJkaW5hbCBvYmozOwog ICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsK ICAgIFhybUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gb2JqNDsKICAgIFh0RW51bSBvYmo1 OwogICAgQm9vbGVhbiBvYmo2OwogICAgQm9vbGVhbiBvYmo3OwogICAgWHRXaWRnZXRQcm9jIGRl c3Ryb3k7CiAgICBYdFByb2Mgb2JqODsKICAgIFh0UHJvYyBvYmo5OwogICAgWHRTZXRWYWx1ZXNG dW5jIHNldF92YWx1ZXM7CiAgICBYdEFyZ3NGdW5jIHNldF92YWx1ZXNfaG9vazsKICAgIFh0UHJv YyBvYmoxMDsKICAgIFh0QXJnc1Byb2MgZ2V0X3ZhbHVlc19ob29rOwogICAgWHRQcm9jIG9iajEx OwogICAgWHRWZXJzaW9uVHlwZSB2ZXJzaW9uOwogICAgWHRQb2ludGVyIGNhbGxiYWNrX3ByaXZh dGU7CiAgICBTdHJpbmcgb2JqMTI7CiAgICBYdFByb2Mgb2JqMTM7CiAgICBYdFByb2Mgb2JqMTQ7 CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9T2JqZWN0Q2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5 cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0QWxs b2NhdGVQcm9jIGFsbG9jYXRlOwogICAgWHREZWFsbG9jYXRlUHJvYyBkZWFsbG9jYXRlOwp9IE9i amVjdENsYXNzRXh0ZW5zaW9uUmVjLCAqT2JqZWN0Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0 cnVjdCBfT2JqZWN0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK fSBPYmplY3RDbGFzc1JlYzsKCmV4dGVybiBPYmplY3RDbGFzc1JlYyBvYmplY3RDbGFzc1JlYzsK dHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpQYXJ0IHsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1l bnNpb24gd2lkdGgsIGhlaWdodDsKICAgIERpbWVuc2lvbiBib3JkZXJfd2lkdGg7CiAgICBCb29s ZWFuIG1hbmFnZWQ7CiAgICBCb29sZWFuIHNlbnNpdGl2ZTsKICAgIEJvb2xlYW4gYW5jZXN0b3Jf c2Vuc2l0aXZlOwp9UmVjdE9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfUmVjdE9ialJlYyB7CiAg ICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKfSBSZWN0T2Jq UmVjOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNsYXNzUGFydCB7CgogICAgV2lkZ2V0Q2xhc3Mg c3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwgd2lkZ2V0X3Np emU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9jIGNs YXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAgICBYdEluaXRQ cm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsKICAgIFh0UHJv YyByZWN0MTsKICAgIFh0UG9pbnRlciByZWN0MjsKICAgIENhcmRpbmFsIHJlY3QzOwogICAgWHRS ZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKICAgIFhy bUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gcmVjdDQ7CiAgICBYdEVudW0gcmVjdDU7CiAg ICBCb29sZWFuIHJlY3Q2OwogICAgQm9vbGVhbiByZWN0NzsKICAgIFh0V2lkZ2V0UHJvYyBkZXN0 cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBleHBvc2U7CiAg ICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0X3ZhbHVlc19o b29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRBcmdzUHJvYyBn ZXRfdmFsdWVzX2hvb2s7CiAgICBYdFByb2MgcmVjdDk7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNp b247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJpdmF0ZTsKICAgIFN0cmluZyByZWN0MTA7CiAg ICBYdEdlb21ldHJ5SGFuZGxlciBxdWVyeV9nZW9tZXRyeTsKICAgIFh0UHJvYyByZWN0MTE7CiAg ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFJlY3RPYmpDbGFzc1BhcnQ7Cgp0eXBlZGVmIHN0cnVj dCBfUmVjdE9iakNsYXNzUmVjIHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKfSBS ZWN0T2JqQ2xhc3NSZWM7CgpleHRlcm4gUmVjdE9iakNsYXNzUmVjIHJlY3RPYmpDbGFzc1JlYzsK CgpleHRlcm4gV2lkZ2V0IF9YdFdpbmRvd2VkQW5jZXN0b3IoCgogICAgV2lkZ2V0CgopOwoKZXh0 ZXJuIHZvaWQgX1h0SW5oZXJpdCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVX aW5kb3coCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAg IFh0VmFsdWVNYXNrICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCmV4dGVybiB2b2lk IFh0UmVzaXplV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiB2b2lkIFh0TW92ZVdpZGdl dCgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh0Q29u ZmlndXJlV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJu IHZvaWQgWHRSZXNpemVXaW5kb3coCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9j ZXNzTG9jaygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9jZXNzVW5sb2NrKAoKICAg IHZvaWQKCik7CgoKZW51bSB7CiAgICBYbU1FTlVfUE9QRE9XTiwKICAgIFhtTUVOVV9QUk9DRVNT X1RSRUUsCiAgICBYbU1FTlVfVFJBVkVSU0FMLAogICAgWG1NRU5VX1NIRUxMX1BPUERPV04sCiAg ICBYbU1FTlVfQ0FMTEJBQ0ssCiAgICBYbU1FTlVfQlVUVE9OLAogICAgWG1NRU5VX0NBU0NBRElO RywKICAgIFhtTUVOVV9TVUJNRU5VLAogICAgWG1NRU5VX0FSTSwKICAgIFhtTUVOVV9ESVNBUk0s CiAgICBYbU1FTlVfQkFSX0NMRUFOVVAsCiAgICBYbU1FTlVfU1RBVFVTLAogICAgWG1NRU5VX01F TVdJREdFVF9VUERBVEUsCiAgICBYbU1FTlVfQlVUVE9OX1BPUERPV04sCiAgICBYbU1FTlVfUkVT VE9SRV9FWENMVURFRF9URUFST0ZGX1RPX1RPUExFVkVMX1NIRUxMLAogICAgWG1NRU5VX1JFU1RP UkVfVEVBUk9GRl9UT19UT1BMRVZFTF9TSEVMTCwKICAgIFhtTUVOVV9SRVNUT1JFX1RFQVJPRkZf VE9fTUVOVVNIRUxMLAogICAgWG1NRU5VX0dFVF9MQVNUX1NFTEVDVF9UT1BMRVZFTCwKICAgIFht TUVOVV9URUFSX09GRl9BUk0KfTsKdHlwZWRlZiBzdHJ1Y3QgX1htU2ltcGxlTWVudVJlYyB7CiAg ICBpbnQgY291bnQ7CiAgICBpbnQgcG9zdF9mcm9tX2J1dHRvbjsKICAgIFh0Q2FsbGJhY2tQcm9j IGNhbGxiYWNrOwogICAgWG1TdHJpbmdUYWJsZSBsYWJlbF9zdHJpbmc7CiAgICBTdHJpbmcgKmFj Y2VsZXJhdG9yOwogICAgWG1TdHJpbmdUYWJsZSBhY2NlbGVyYXRvcl90ZXh0OwogICAgWG1LZXlT eW1UYWJsZSBtbmVtb25pYzsKICAgIFhtU3RyaW5nQ2hhclNldFRhYmxlIG1uZW1vbmljX2NoYXJz ZXQ7CiAgICBYbUJ1dHRvblR5cGVUYWJsZSBidXR0b25fdHlwZTsKICAgIGludCBidXR0b25fc2V0 OwogICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsOwogICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYzsK fSBYbVNpbXBsZU1lbnVSZWMsICpYbVNpbXBsZU1lbnU7CnR5cGVkZWYgZW51bSB7CiAgICBYbVNZ TlRIRVRJQ19OT05FLAogICAgWG1TWU5USEVUSUNfTE9BRAp9IFhtSW1wb3J0T3BlcmF0b3I7Cgp0 eXBlZGVmIHZvaWQgKCpYbUV4cG9ydFByb2MpKFdpZGdldCwgaW50LCBYdEFyZ1ZhbCAqKTsKdHlw ZWRlZiBYbUltcG9ydE9wZXJhdG9yICgqWG1JbXBvcnRQcm9jKShXaWRnZXQsIGludCwgWHRBcmdW YWwqKTsKCnR5cGVkZWYgc3RydWN0IF9YbVN5bnRoZXRpY1Jlc291cmNlIHsKICAgIFN0cmluZyBy ZXNvdXJjZV9uYW1lOwogICAgQ2FyZGluYWwgcmVzb3VyY2Vfc2l6ZTsKICAgIENhcmRpbmFsIHJl c291cmNlX29mZnNldDsKICAgIFhtRXhwb3J0UHJvYyBleHBvcnRfcHJvYzsKICAgIFhtSW1wb3J0 UHJvYyBpbXBvcnRfcHJvYzsKfSBYbVN5bnRoZXRpY1Jlc291cmNlOwoKCgoKCmVudW0gewogICAg WG1QQVJFTlRfUFJPQ0VTU19BTlksCiAgICBYbUlOUFVUX0FDVElPTgp9OwoKZW51bSB7CiAgICBY bVBBUkVOVF9BQ1RJVkFURSwKICAgIFhtUEFSRU5UX0NBTkNFTAp9OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgaW50IHByb2Nlc3NfdHlwZTsKfSBYbVBhcmVudFByb2Nlc3NBbnlSZWM7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQgcHJvY2Vzc190eXBlOwogICAgWEV2ZW50ICpldmVudDsKICAg IGludCBhY3Rpb247CiAgICBTdHJpbmcgKnBhcmFtczsKICAgIENhcmRpbmFsICpudW1fcGFyYW1z Owp9IFhtUGFyZW50SW5wdXRBY3Rpb25SZWM7Cgp0eXBlZGVmIHVuaW9uIHsKICAgIFhtUGFyZW50 UHJvY2Vzc0FueVJlYyBhbnk7CiAgICBYbVBhcmVudElucHV0QWN0aW9uUmVjIGlucHV0X2FjdGlv bjsKfSBYbVBhcmVudFByb2Nlc3NEYXRhUmVjLCAqWG1QYXJlbnRQcm9jZXNzRGF0YTsKCgoKZW51 bSB7CiAgICBYbUJBU0VMSU5FX0dFVCwKICAgIFhtQkFTRUxJTkVfU0VUCn07Cgp0eXBlZGVmIHN0 cnVjdCBfWG1CYXNlbGluZU1hcmdpbnMgewogICAgdW5zaWduZWQgY2hhciBnZXRfb3Jfc2V0Owog ICAgRGltZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAg IERpbWVuc2lvbiBzaGFkb3c7CiAgICBEaW1lbnNpb24gaGlnaGxpZ2h0OwogICAgRGltZW5zaW9u IHRleHRfaGVpZ2h0OwogICAgRGltZW5zaW9uIHRleHRfd2lkdGg7CiAgICBEaW1lbnNpb24gbWFy Z2luX2hlaWdodDsKfSBYbUJhc2VsaW5lTWFyZ2luczsKCnR5cGVkZWYgZW51bSB7CiAgICBYbUZP Q1VTX0lOLAogICAgWG1GT0NVU19PVVQsCiAgICBYbUVOVEVSLAogICAgWG1MRUFWRQp9IFhtRm9j dXNDaGFuZ2U7Cgp0eXBlZGVmIGVudW17CiAgICBYbU5PVF9OQVZJR0FCTEUsCiAgICBYbUNPTlRS T0xfTkFWSUdBQkxFLAogICAgWG1UQUJfTkFWSUdBQkxFLAogICAgWG1ERVNDRU5EQU5UU19OQVZJ R0FCTEUsCiAgICBYbURFU0NFTkRBTlRTX1RBQl9OQVZJR0FCTEUKfSBYbU5hdmlnYWJpbGl0eTsK CgoKdHlwZWRlZiBCb29sZWFuICgqWG1QYXJlbnRQcm9jZXNzUHJvYykoV2lkZ2V0LCBYbVBhcmVu dFByb2Nlc3NEYXRhKTsKdHlwZWRlZiB2b2lkICgqWG1XaWRnZXREaXNwYXRjaFByb2MpCiAgICAg ICAgICAgICAgICAgICAgICAgIChXaWRnZXQgZ2FkZ2V0LCBYRXZlbnQgKmV2ZW50LCBNYXNrIGV2 ZW50X21hc2spOwp0eXBlZGVmIHZvaWQgKCpYbU1lbnVQb3B1cFByb2MpKFdpZGdldCwgV2lkZ2V0 LCBYRXZlbnQgKik7CnR5cGVkZWYgdm9pZCAoKlhtTWVudVRyYXZlcnNhbFByb2MpKCBXaWRnZXQs IFdpZGdldCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24pOwp0eXBlZGVmIHZvaWQgKCpYbVJlc2l6ZUZs YWdQcm9jKShXaWRnZXQsIEJvb2xlYW4pOwp0eXBlZGVmIHZvaWQgKCpYbVJlYWxpemVPdXRQcm9j KShXaWRnZXQsIE1hc2sgKiwgWFNldFdpbmRvd0F0dHJpYnV0ZXMgKik7CnR5cGVkZWYgQm9vbGVh biAoKlhtVmlzdWFsQ2hhbmdlUHJvYykKICAgICAgICAgICAgICAgICAgICAgICAgKFdpZGdldCBn YWRnZXQsIFdpZGdldCBjdXJfbWdyLCBXaWRnZXQgbmV3X21ncik7CnR5cGVkZWYgdm9pZCAoKlht VHJhdmVyc2FsUHJvYykoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlciwgaW50KTsKdHlwZWRl ZiB2b2lkICgqWG1Gb2N1c01vdmVkUHJvYykoIFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIp IDsKdHlwZWRlZiB2b2lkICgqWG1DYWNoZUNvcHlQcm9jKShYdFBvaW50ZXIsIFh0UG9pbnRlciwg c2l6ZV90KTsKdHlwZWRlZiBpbnQgKCpYbUNhY2hlQ29tcGFyZVByb2MpKFh0UG9pbnRlciwgWHRQ b2ludGVyKTsKdHlwZWRlZiBCb29sZWFuICgqWG1XaWRnZXRCYXNlbGluZVByb2MpCiAgICAgICAg ICAgICAgICAgICAgICAgIChXaWRnZXQgdywgRGltZW5zaW9uICoqYmFzZWxpbmVzLCBpbnQgKm51 bV9iYXNlbGluZXMpOwp0eXBlZGVmIEJvb2xlYW4gKCpYbVdpZGdldERpc3BsYXlSZWN0UHJvYyko V2lkZ2V0IHcsIFhSZWN0YW5nbGUgKnJlY3QpOwp0eXBlZGVmIHZvaWQgKCpYbVdpZGdldE1hcmdp bnNQcm9jKShXaWRnZXQgdywgWG1CYXNlbGluZU1hcmdpbnMgKm1hcmdpbnMpOwp0eXBlZGVmIFht TmF2aWdhYmlsaXR5ICgqWG1XaWRnZXROYXZpZ2FibGVQcm9jKShXaWRnZXQgdyk7CnR5cGVkZWYg dm9pZCAoKlhtRm9jdXNDaGFuZ2VQcm9jKShXaWRnZXQgdywgWG1Gb2N1c0NoYW5nZSBjaGFuZ2Up OwoKdHlwZWRlZiB2b2lkICgqWG1NZW51UHJvYykoaW50IGZ1bmN0aW9uLCBXaWRnZXQgd2lkZ2V0 LCAuLi4pOwoKdHlwZWRlZiB2b2lkICgqWG1HYWRnZXRDYWNoZVByb2MpKFh0UG9pbnRlcik7CnR5 cGVkZWYgQm9vbGVhbiAoKlhtVHJhdmVyc2FsQ2hpbGRyZW5Qcm9jKQogICAgICAgICAgICAgICAg ICAgICAgICAoV2lkZ2V0IG13LCBXaWRnZXQgKipjaGlsZHJlbiwgQ2FyZGluYWwgKm51bV9jaGls ZHJlbik7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgTW9kaWZpZXJzIG1vZDsKICAgIGNoYXIg KmtleTsKICAgIGNoYXIgKmFjdGlvbjsKfSBfWG1CdWlsZFZpcnR1YWxLZXlTdHJ1Y3Q7CgoKCgoK CnR5cGVkZWYgc3RydWN0IHsKICAgIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uOwogICAgWG1IaWdo bGlnaHRNb2RlIG1vZGU7Cn0gX1htSGlnaGxpZ2h0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg Q2FyZGluYWwgbnVtYmVyOwogICAgQ2FyZGluYWwgbWF4aW11bTsKICAgIF9YbUhpZ2hsaWdodFJl YyAqbGlzdDsKfSBfWG1IaWdobGlnaHREYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBz ZWxlY3Rpb247CiAgICBBdG9tIHRhcmdldDsKfSBfWG1UZXh0SW5zZXJ0UGFpcjsKCnR5cGVkZWYg ZW51bSB7CiAgICBYbURFU1RfU0VMRUNULAogICAgWG1QUklNX1NFTEVDVAp9IFhtU2VsZWN0VHlw ZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZG9uZV9zdGF0dXM7CiAgICBCb29sZWFu IHN1Y2Nlc3Nfc3RhdHVzOwogICAgWG1TZWxlY3RUeXBlIHNlbGVjdF90eXBlOwogICAgWFNlbGVj dGlvblJlcXVlc3RFdmVudCAqZXZlbnQ7Cn0gX1htSW5zZXJ0U2VsZWN0OwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgWEV2ZW50ICpldmVudDsKICAgIFN0cmluZyAqcGFyYW1zOwogICAgQ2FyZGluYWwg Km51bV9wYXJhbXM7Cn0gX1htVGV4dEFjdGlvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFdp ZGdldCB3aWRnZXQ7CiAgICBYbVRleHRQb3NpdGlvbiBpbnNlcnRfcG9zOwogICAgaW50IG51bV9j aGFyczsKICAgIFRpbWUgdGltZXN0YW1wOwogICAgQm9vbGVhbiBtb3ZlOwp9IF9YbVRleHREcm9w VHJhbnNmZXJSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbVRleHRQb3NpdGlvbiBwb3NpdGlv bjsKICAgIEF0b20gdGFyZ2V0OwogICAgVGltZSB0aW1lOwogICAgaW50IG51bV9jaGFyczsKICAg IGludCByZWZfY291bnQ7Cn0gX1htVGV4dFByaW1TZWxlY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBTY3JlZW4gKnNjcmVlbjsKICAgIFhDb250ZXh0IGNvbnRleHQ7CiAgICB1bnNpZ25lZCBjaGFy IHR5cGU7Cn0gWG1UZXh0Q29udGV4dERhdGFSZWMsICpYbVRleHRDb250ZXh0RGF0YTsKCmVudW0g ewogICAgX1hNX0lTX0RFU1RfQ1RYLAogICAgX1hNX0lTX0dDX0RBVEFfQ1RYLAogICAgX1hNX0lT X1BJWE1BUF9DVFgKfTsKZW51bXsKICAgIFhtR0VUX0FDVFVBTF9TSVpFID0gMSwKICAgIFhtR0VU X1BSRUZFUlJFRF9TSVpFLAogICAgWG1HRU9fUFJFX1NFVCwKICAgIFhtR0VPX1BPU1RfU0VUCn07 CgoKZW51bSB7CiAgICBYbUdFT19FWFBBTkQsCiAgICBYbUdFT19DRU5URVIsCiAgICBYbUdFT19Q QUNLCn07CgoKZW51bSB7CiAgICBYbUdFT19QUk9QT1JUSU9OQUwsCiAgICBYbUdFT19BVkVSQUdJ TkcsCiAgICBYbUdFT19XUkFQCn07CgplbnVtIHsKICAgIFhtR0VPX1JPV19NQUpPUiwKICAgIFht R0VPX0NPTFVNTl9NQUpPUgp9OwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjICpYbUdl b01hdHJpeDsKdHlwZWRlZiB1bmlvbiBfWG1HZW9NYWpvckxheW91dFJlYyAqWG1HZW9NYWpvckxh eW91dDsKdHlwZWRlZiBzdHJ1Y3QgX1htS2lkR2VvbWV0cnlSZWMgewogICAgV2lkZ2V0IGtpZDsK ICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94Owp9IFhtS2lkR2VvbWV0cnlSZWMsICpYbUtpZEdlb21l dHJ5OwoKdHlwZWRlZiB2b2lkICgqWG1HZW9BcnJhbmdlUHJvYykoWG1HZW9NYXRyaXgsIFBvc2l0 aW9uLCBQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u ICosIERpbWVuc2lvbiAqKTsKdHlwZWRlZiBCb29sZWFuICgqWG1HZW9FeGNlcHRQcm9jKShYbUdl b01hdHJpeCk7CnR5cGVkZWYgdm9pZCAoKlhtR2VvRXh0RGVzdHJ1Y3RvclByb2MpKFh0UG9pbnRl cik7CnR5cGVkZWYgdm9pZCAoKlhtR2VvU2VnbWVudEZpeFVwUHJvYykoWG1HZW9NYXRyaXgsIGlu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0 LCBYbUtpZEdlb21ldHJ5KTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZW5kOwogICAg WG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwog ICAgRGltZW5zaW9uIGV2ZW5faGVpZ2h0OwogICAgRGltZW5zaW9uIG1pbl9oZWlnaHQ7CiAgICBC b29sZWFuIHN0cmV0Y2hfaGVpZ2h0OwogICAgQm9vbGVhbiB1bmlmb3JtX2JvcmRlcjsKICAgIERp bWVuc2lvbiBib3JkZXI7CiAgICB1bnNpZ25lZCBjaGFyIGZpbGxfbW9kZTsKICAgIHVuc2lnbmVk IGNoYXIgZml0X21vZGU7CiAgICBCb29sZWFuIHN0aWNreV9lbmQ7CiAgICBEaW1lbnNpb24gc3Bh Y2VfYWJvdmU7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAgRGltZW5zaW9uIHNwYWNlX2Jl dHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gYm94ZXNf d2lkdGg7CiAgICBEaW1lbnNpb24gZmlsbF93aWR0aDsKICAgIERpbWVuc2lvbiBib3hfY291bnQ7 Cn0gWG1HZW9Sb3dMYXlvdXRSZWMsICpYbUdlb1Jvd0xheW91dDsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIEJvb2xlYW4gZW5kOwogICAgWG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERp bWVuc2lvbiBldmVuX2hlaWdodDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwogICAgRGltZW5z aW9uIG1pbl93aWR0aDsKICAgIEJvb2xlYW4gc3RyZXRjaF93aWR0aDsKICAgIEJvb2xlYW4gdW5p Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgdW5zaWduZWQgY2hhciBmaWxs X21vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGZpdF9tb2RlOwogICAgQm9vbGVhbiBzdGlja3lfZW5k OwogICAgRGltZW5zaW9uIHNwYWNlX2xlZnQ7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAg RGltZW5zaW9uIHNwYWNlX2JldHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF93aWR0aDsKICAg IERpbWVuc2lvbiBib3hlZF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gZmlsbF9oZWlnaHQ7CiAgICBE aW1lbnNpb24gYm94X2NvdW50Owp9IFhtR2VvQ29sdW1uTGF5b3V0UmVjLCAqWG1HZW9Db2x1bW5M YXlvdXQ7Cgp0eXBlZGVmIHVuaW9uIF9YbUdlb01ham9yTGF5b3V0UmVjIHsKICAgIFhtR2VvUm93 TGF5b3V0UmVjIHJvdzsKICAgIFhtR2VvQ29sdW1uTGF5b3V0UmVjIGNvbDsKfSBYbUdlb01ham9y TGF5b3V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjIHsKICAgIFdpZGdldCBj b21wb3NpdGU7CiAgICBXaWRnZXQgaW5zdGlnYXRvcjsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgaW5z dGlnX3JlcXVlc3Q7CiAgICBYdFdpZGdldEdlb21ldHJ5IHBhcmVudF9yZXF1ZXN0OwogICAgWHRX aWRnZXRHZW9tZXRyeSAqaW5fbGF5b3V0OwogICAgWG1LaWRHZW9tZXRyeSBib3hlczsKICAgIFht R2VvTWFqb3JMYXlvdXQgbGF5b3V0czsKICAgIERpbWVuc2lvbiBtYXJnaW5fdzsKICAgIERpbWVu c2lvbiBtYXJnaW5faDsKICAgIEJvb2xlYW4gc3RyZXRjaF9ib3hlczsKICAgIEJvb2xlYW4gdW5p Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgRGltZW5zaW9uIG1heF9tYWpv cjsKICAgIERpbWVuc2lvbiBib3hlc19taW5vcjsKICAgIERpbWVuc2lvbiBmaWxsX21pbm9yOwog ICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIFhtR2VvRXhjZXB0 UHJvYyBzZXRfZXhjZXB0OwogICAgWG1HZW9FeGNlcHRQcm9jIGFsbW9zdF9leGNlcHQ7CiAgICBY bUdlb0V4Y2VwdFByb2Mgbm9fZ2VvX3JlcXVlc3Q7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwog ICAgWG1HZW9FeHREZXN0cnVjdG9yUHJvYyBleHRfZGVzdHJ1Y3RvcjsKICAgIFhtR2VvQXJyYW5n ZVByb2MgYXJyYW5nZV9ib3hlczsKICAgIHVuc2lnbmVkIGNoYXIgbWFqb3Jfb3JkZXI7Cn0gWG1H ZW9NYXRyaXhSZWM7Cgp0eXBlZGVmIFhtR2VvTWF0cml4ICgqWG1HZW9DcmVhdGVQcm9jKShXaWRn ZXQsIFdpZGdldCwgWHRXaWRnZXRHZW9tZXRyeSAqKTsKZW51bSB7CiAgICBYbUNBU0NBREVfQlVU VE9OX0JJVCA9IDEsCiAgICBYbUNBU0NBREVfQlVUVE9OX0dBREdFVF9CSVQsCiAgICBYbUNPTU1B TkRfQk9YX0JJVCwKICAgIFhtRElBTE9HX1NIRUxMX0JJVCwKICAgIFhtTElTVF9CSVQsCiAgICBY bUZPUk1fQklULAogICAgWG1URVhUX0ZJRUxEX0JJVCwKICAgIFhtR0FER0VUX0JJVCwKICAgIFht TEFCRUxfQklULAogICAgWG1MQUJFTF9HQURHRVRfQklULAogICAgWG1NQUlOX1dJTkRPV19CSVQs CiAgICBYbU1BTkFHRVJfQklULAogICAgWG1NRU5VX1NIRUxMX0JJVCwKICAgIFhtRFJBV05fQlVU VE9OX0JJVCwKICAgIFhtUFJJTUlUSVZFX0JJVCwKICAgIFhtUFVTSF9CVVRUT05fQklULAogICAg WG1QVVNIX0JVVFRPTl9HQURHRVRfQklULAogICAgWG1ST1dfQ09MVU1OX0JJVCwKICAgIFhtU0NS T0xMX0JBUl9CSVQsCiAgICBYbVNDUk9MTEVEX1dJTkRPV19CSVQsCiAgICBYbVNFTEVDVElPTl9C T1hfQklULAogICAgWG1TRVBBUkFUT1JfQklULAogICAgWG1TRVBBUkFUT1JfR0FER0VUX0JJVCwK ICAgIFhtVEVYVF9CSVQsCiAgICBYbVRPR0dMRV9CVVRUT05fQklULAogICAgWG1UT0dHTEVfQlVU VE9OX0dBREdFVF9CSVQsCiAgICBYbURST1BfVFJBTlNGRVJfQklULAogICAgWG1EUk9QX1NJVEVf TUFOQUdFUl9CSVQsCiAgICBYbURJU1BMQVlfQklULAogICAgWG1TQ1JFRU5fQklULAogICAgWG1B UlJPV19CVVRUT05fQklUID0gMzIsCiAgICBYbUFSUk9XX0JVVFRPTl9HQURHRVRfQklULAogICAg WG1CVUxMRVRJTl9CT0FSRF9CSVQsCiAgICBYbURSQVdJTkdfQVJFQV9CSVQsCiAgICBYbUZJTEVf U0VMRUNUSU9OX0JPWF9CSVQsCiAgICBYbUZSQU1FX0JJVCwKICAgIFhtTUVTU0FHRV9CT1hfQklU LAogICAgWG1TQVNIX0JJVCwKICAgIFhtU0NBTEVfQklULAogICAgWG1QQU5FRF9XSU5ET1dfQklU LAogICAgWG1WRU5ET1JfU0hFTExfQklULAogICAgWG1DTElQX1dJTkRPV19CSVQsCiAgICBYbURS QUdfSUNPTl9CSVQsCiAgICBYbVRFQVJPRkZfQlVUVE9OX0JJVCwKICAgIFhtRFJBR19PVkVSX1NI RUxMX0JJVCwKICAgIFhtRFJBR19DT05URVhUX0JJVCwKCgoKCgoKICAgIFhtRkFTVF9TVUJDTEFT U19UQUlMX0JJVCwKCiAgICBYbUZJUlNUX0FQUExJQ0FUSU9OX1NVQkNMQVNTX0JJVCA9IDE5Mgp9 Owp0eXBlZGVmIHN0cnVjdCBfWG1QYXJ0UmVzb3VyY2UgewogICAgU3RyaW5nIHJlc291cmNlX25h bWU7CiAgICBTdHJpbmcgcmVzb3VyY2VfY2xhc3M7CiAgICBTdHJpbmcgcmVzb3VyY2VfdHlwZTsK ICAgIENhcmRpbmFsIHJlc291cmNlX3NpemU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9vZmZzZXQ7 CiAgICBTdHJpbmcgZGVmYXVsdF90eXBlOwogICAgWHRQb2ludGVyIGRlZmF1bHRfYWRkcjsKfSBY bVBhcnRSZXNvdXJjZTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHgyLCB5MSwgeTI7 Cn0gWG1SZWdpb25Cb3g7Cgp0eXBlZGVmIHN0cnVjdCBfWG1SZWdpb24gewogICAgbG9uZyBzaXpl OwogICAgbG9uZyBudW1SZWN0czsKICAgIFhtUmVnaW9uQm94ICpyZWN0czsKICAgIFhtUmVnaW9u Qm94IGV4dGVudHM7Cn0gWG1SZWdpb25SZWMsICpYbVJlZ2lvbjsKCgoKWG1HYWRnZXQgX1htSW5w dXRJbkdhZGdldChXaWRnZXQgY3csIGludCB4LCBpbnQgeSk7ClhtR2FkZ2V0IF9YbUlucHV0Rm9y R2FkZ2V0KFdpZGdldCBjdywgaW50IHgsIGludCB5KTsKdm9pZCBfWG1Db25maWd1cmVPYmplY3Qo V2lkZ2V0IGcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAg IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aCk7CnZvaWQgX1htUmVzaXplT2JqZWN0KFdpZGdldCBn LCBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg IERpbWVuc2lvbiBib3JkZXJfd2lkdGgpOwp2b2lkIF9YbU1vdmVPYmplY3QoV2lkZ2V0IGcsIFBv c2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2b2lkIF9YbVJlZGlzcGxheUdhZGdldHMoV2lkZ2V0IHcs IFhFdmVudCAqZXZlbnQsIFJlZ2lvbiByZWdpb24pOwp2b2lkIF9YbURpc3BhdGNoR2FkZ2V0SW5w dXQoV2lkZ2V0IGcsIFhFdmVudCAqZXZlbnQsIE1hc2sgbWFzayk7ClRpbWUgX19YbUdldERlZmF1 bHRUaW1lKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50KTsKQm9vbGVhbiBfWG1JbnN0YWxsSW1hZ2Uo WEltYWdlICppbWFnZSwgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg aW50IGhvdF94LCBpbnQgaG90X3kpOwpCb29sZWFuIF9YbUdldEltYWdlKFNjcmVlbiAqc2NyZWVu LCBjaGFyICppbWFnZV9uYW1lLCBYSW1hZ2UgKippbWFnZSk7CkJvb2xlYW4gX1htR2V0UGl4bWFw RGF0YShTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXht YXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqaW1hZ2VfbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBQaXhl bCAqZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICpiYWNrZ3JvdW5k LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpob3RfeCwKICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqaG90X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg KndpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpoZWlnaHQpOwpQ aXhtYXAgX1htR2V0UGl4bWFwKFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgIGNo YXIgKmltYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoLAogICAgICAgICAg ICAgICAgICAgIFBpeGVsIGZvcmVncm91bmQsCiAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFj a2dyb3VuZCk7CkJvb2xlYW4gX1htSW5zdGFsbFBpeG1hcChQaXhtYXAgcGl4bWFwLAogICAgICAg ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICppbWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgZm9yZWdy b3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGJhY2tncm91bmQpOwoKCgpCb29s ZWFuIF9YbU1hcEJ0bkV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpldmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpidXR0b24s CiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICptb2RpZmllcnMpOwpCb29sZWFu IF9YbU1hcEtleUV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ICpl dmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmtleXN5bSwKICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm1vZGlmaWVycyk7CkJvb2xlYW4gX1htTWF0 Y2hCdG5FdmVudChYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV2 ZW50VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidXR0b24sCiAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKTsKQm9vbGVhbiBf WG1NYXRjaEtleUV2ZW50KFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZXZlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleSwK ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMpOwoKCgpYSW1h Z2UgKl9YbUdldEltYWdlRnJvbUZpbGUoY2hhciAqZmlsZW5hbWUpOwpYSW1hZ2UgKl9YbUdldElt YWdlQW5kSG90U3BvdEZyb21GaWxlKGNoYXIgKmZpbGVuYW1lLCBpbnQgKmhvdF94LCBpbnQgKmhv dF95KTsKCgoKZW51bSB7IFhtTEFCRUxfRk9OVExJU1QgPSAxLAogICAgICAgWG1CVVRUT05fRk9O VExJU1QsCiAgICAgICBYbVRFWFRfRk9OVExJU1QKfTsKCnZvaWQgX1htUmVnaXN0ZXJDb252ZXJ0 ZXJzKHZvaWQpOwp2b2lkIF9YbVdhcm5pbmcoV2lkZ2V0IHcsIGNvbnN0IGNoYXIgKm1lc3NhZ2Us IC4uLik7CkJvb2xlYW4gX1htU3RyaW5nc0FyZUVxdWFsKGNoYXIgKmluX3N0ciwgY2hhciAqdGV4 dF9zdHIpOwpYbUZvbnRMaXN0IF9YbUdldERlZmF1bHRGb250TGlzdChXaWRnZXQgdywgdW5zaWdu ZWQgY2hhciBmb250TGlzdFR5cGUpOwpjaGFyICpfWG1Db252ZXJ0Q1NUb1N0cmluZyhYbVN0cmlu ZyBjcyk7CkJvb2xlYW4gX1htQ3Z0WG1TdHJpbmdUb0NUKFhybVZhbHVlICpmcm9tLCBYcm1WYWx1 ZSAqdG8pOwoKCgp2b2lkIF9YbUJ1aWxkUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2UgKip3 Y19yZXNvdXJjZXNfcHRyLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqd2NfbnVtX3Jlc291 cmNlc19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgWG1TeW50aGV0aWNSZXNvdXJjZSAqc2Nf cmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgIGludCBzY19udW1fcmVzb3VyY2VzKTsK dm9pZCBfWG1Jbml0aWFsaXplU3ludGhldGljUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2Ug KnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1f cmVzb3VyY2VzKTsKdm9pZCBfWG1QcmltaXRpdmVHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRHZXRWYWx1 ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBf WG1NYW5hZ2VyR2V0VmFsdWVzSG9vayhXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg Km51bV9hcmdzKTsKdm9pZCBfWG1FeHRHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAg ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2Fy ZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1FeHRJbXBvcnRBcmdzKFdpZGdldCB3LAogICAgICAg ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgQ2FyZGlu YWwgKm51bV9hcmdzKTsKdm9pZCBfWG1QcmltaXRpdmVJbXBvcnRBcmdzKFdpZGdldCB3LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRBcmdzKFdp ZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAg ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRT ZWNvbmRhcnlBcmdzKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg Km51bV9hcmdzKTsKdm9pZCBfWG1NYW5hZ2VySW1wb3J0QXJncyhXaWRnZXQgdywKICAgICAgICAg ICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Q2FyZGluYWwgKm51bV9hcmdzKTsKaW50IF9YbUNvbnZlcnRVbml0cyhTY3JlZW4gKnNjcmVlbiwK ICAgICAgICAgICAgICAgICAgICBpbnQgZGltZW5zaW9uLAogICAgICAgICAgICAgICAgICAgIGlu dCBmcm9tX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGZyb21fdmFsLAogICAgICAgICAg ICAgICAgICAgIGludCB0b190eXBlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub0hvcml6b250YWxQ aXhlbHMoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRB cmdWYWwgKnZhbHVlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub1ZlcnRpY2FsUGl4ZWxzKFdpZGdl dCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsK dm9pZCBfWG1Gcm9tSG9yaXpvbnRhbFBpeGVscyhXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Gcm9tVmVydGljYWxQaXhlbHMoV2lkZ2V0IHdpZGdl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Tb3J0UmVzb3VyY2VMaXN0KFhy bVJlc291cmNlICpsaXN0W10sIENhcmRpbmFsIGxlbik7CnZvaWQgX1htVW5pdFR5cGVEZWZhdWx0 KFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAg ICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnVuc2lnbmVkIGNoYXIgX1htR2V0 VW5pdFR5cGUoV2lkZ2V0IHdpZGdldCk7CgoKCkJvb2xlYW4gX1htSXNFdmVudFVuaXF1ZShYRXZl bnQgKmV2ZW50KTsKdm9pZCBfWG1SZWNvcmRFdmVudChYRXZlbnQgKmV2ZW50KTsKdHlwZWRlZiBz dHJ1Y3QgX1htQ29sb3JEYXRhIHsKICAgU2NyZWVuICogc2NyZWVuOwogICBDb2xvcm1hcCBjb2xv cl9tYXA7CiAgIHVuc2lnbmVkIGNoYXIgYWxsb2NhdGVkOwogICBYQ29sb3IgYmFja2dyb3VuZDsK ICAgWENvbG9yIGZvcmVncm91bmQ7CiAgIFhDb2xvciB0b3Bfc2hhZG93OwogICBYQ29sb3IgYm90 dG9tX3NoYWRvdzsKICAgWENvbG9yIHNlbGVjdDsKfSBYbUNvbG9yRGF0YTsKCnZvaWQgX1htUmVn aXN0ZXJQaXhtYXBDb252ZXJ0ZXJzKHZvaWQpOwpjaGFyICpfWG1HZXRCR1BpeG1hcE5hbWUodm9p ZCk7CnZvaWQgX1htQ2xlYXJCR1BpeG1hcCh2b2lkKTsKdm9pZCBfWG1Gb3JlZ3JvdW5kQ29sb3JE ZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQg X1htSGlnaGxpZ2h0Q29sb3JEZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZh bHVlICp2YWx1ZSk7CnZvaWQgX1htQmFja2dyb3VuZENvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0 LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVRvcFNoYWRvd0NvbG9yRGVm YXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y bUJvdHRvbVNoYWRvd0NvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1W YWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZVRvcFNoYWRvd1BpeG1hcERlZmF1bHQoV2lk Z2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdlclRvcFNoYWRvd1BpeG1hcERl ZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZUhpZ2hsaWdo dFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdl ckhpZ2hsaWdodFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y bUdldERlZmF1bHRUaHJlc2hvbGRzRm9yU2NyZWVuKFNjcmVlbiAqc2NyZWVuKTsKU3RyaW5nIF9Y bUdldERlZmF1bHRCYWNrZ3JvdW5kQ29sb3JTcGVjKFNjcmVlbiAqc2NyZWVuKTsKdm9pZCBfWG1T ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yU3BlYyhTY3JlZW4gKnNjcmVlbiwgU3RyaW5nIG5ld19j b2xvcl9zcGVjKTsKWG1Db2xvckRhdGEgKl9YbUdldERlZmF1bHRDb2xvcnMoU2NyZWVuICpzY3Jl ZW4sIENvbG9ybWFwIGNvbG9yX21hcCk7CkJvb2xlYW4gX1htU2VhcmNoQ29sb3JDYWNoZSh1bnNp Z25lZCBpbnQgd2hpY2gsIFhtQ29sb3JEYXRhICp2YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYbUNvbG9yRGF0YSAqKnJldCk7ClhtQ29sb3JEYXRhICpfWG1BZGRUb0NvbG9yQ2Fj aGUoWG1Db2xvckRhdGEgKm5ld19yZWMpOwpQaXhlbCBfWG1CbGFja1BpeGVsKFNjcmVlbiAqc2Ny ZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIGJsYWNrY29sb3IpOwpQaXhlbCBfWG1XaGl0 ZVBpeGVsKFNjcmVlbiAqc2NyZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIHdoaXRlY29s b3IpOwpQaXhlbCBfWG1BY2Nlc3NDb2xvckRhdGEoWG1Db2xvckRhdGEgKmNkLCB1bnNpZ25lZCBj aGFyIHdoaWNoKTsKWG1Db2xvckRhdGEgKl9YbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29s b3JtYXAgY29sb3JfbWFwLCBQaXhlbCBiYWNrZ3JvdW5kKTsKdm9pZCBfWG1TZWxlY3RDb2xvckRl ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCgpYRm9udFN0cnVj dCAqX1htR2V0Rmlyc3RGb250KFhtRm9udExpc3RFbnRyeSBlbnRyeSk7CkJvb2xlYW4gX1htRm9u dExpc3RHZXREZWZhdWx0Rm9udChYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb250X3N0cnVjdCk7CkJvb2xlYW4gX1ht Rm9udExpc3RTZWFyY2goWG1Gb250TGlzdCBmb250bGlzdCwgWG1TdHJpbmdDaGFyU2V0IGNoYXJz ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmluZHgsIFhGb250U3RydWN0ICoq Zm9udF9zdHJ1Y3QpOwpCb29sZWFuIF9YbVN0cmluZ0lzWG1TdHJpbmcoWG1TdHJpbmcgc3RyaW5n KTsKQm9vbGVhbiBfWG1TdHJpbmdJbml0Q29udGV4dChfWG1TdHJpbmdDb250ZXh0ICpjb250ZXh0 LCBfWG1TdHJpbmcgc3RyaW5nKTsKQm9vbGVhbiBfWG1TdHJpbmdHZXROZXh0U2VnbWVudChfWG1T dHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1T dHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFht U3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmNo YXJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiAqc2VwYXJh dG9yKSA7CnZvaWQgX1htU3RyaW5nRnJlZUNvbnRleHQoX1htU3RyaW5nQ29udGV4dCBjb250ZXh0 KSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdXaWR0aChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJp bmcgc3RyaW5nKSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdIZWlnaHQoWG1Gb250TGlzdCBmb250bGlz dCwgX1htU3RyaW5nIHN0cmluZykgOwp2b2lkIF9YbVN0cmluZ0V4dGVudChYbUZvbnRMaXN0IGZv bnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g KndpZHRoLCBEaW1lbnNpb24gKmhlaWdodCkgOwpCb29sZWFuIF9YbVN0cmluZ0VtcHR5KF9YbVN0 cmluZyBzdHJpbmcpOwp2b2lkIF9YbVN0cmluZ0RyYXcoRGlzcGxheSAqZCwgV2luZG93IHcsIFht Rm9udExpc3QgZm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICBH QyBnYywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAg ICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgX1htU3RyaW5nRHJhd0ltYWdl KERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0 IGZvbnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBHQyBn YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWduLCB1bnNpZ25lZCBjaGFyIGxheV9kaXIsCiAg ICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXApOwp2b2lkIF9YbVN0cmluZ0Ry YXdVbmRlcmxpbmUoRGlzcGxheSAqZCwgV2luZG93IHcsIFhtRm9udExpc3QgZiwgX1htU3RyaW5n IHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQyBnYywgUG9zaXRpb24geCwgUG9zaXRp b24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwgX1htU3RyaW5nIHUpOwp2b2lkIF9YbVN0cmluZ0Ry YXdNbmVtb25pYyhEaXNwbGF5ICpkLCBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgWG1Gb250TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0MgZ2MsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksIERpbWVuc2lvbiB3aWR0 aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RyaW5nIG1uZW1vbmljLCBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCk7 Cl9YbVN0cmluZyBfWG1TdHJpbmdDcmVhdGUoWG1TdHJpbmcgY3MpOwp2b2lkIF9YbVN0cmluZ0Zy ZWUoX1htU3RyaW5nIHN0cmluZyk7CmNoYXIgKl9YbVN0cmluZ0dldEN1cnJlbnRDaGFyc2V0KHZv aWQpIDsKY2hhciAqX1htQ2hhcnNldENhbm9uaWNhbGl6ZShTdHJpbmcgY2hhcnNldCk7Cl9YbVN0 cmluZyBfWG1TdHJpbmdDb3B5KF9YbVN0cmluZyBzdHJpbmcpOwpCb29sZWFuIF9YbVN0cmluZ0J5 dGVDb21wYXJlKF9YbVN0cmluZyBhLCBfWG1TdHJpbmcgYik7CkJvb2xlYW4gX1htU3RyaW5nSGFz U3Vic3RyaW5nKF9YbVN0cmluZyBzdHJpbmcsIF9YbVN0cmluZyBzdWJzdHJpbmcpOwpYbVN0cmlu ZyBfWG1TdHJpbmdDcmVhdGVFeHRlcm5hbChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJpbmcg Y3MpOwpEaW1lbnNpb24gX1htU3RyaW5nQmFzZWxpbmUoWG1Gb250TGlzdCBmb250bGlzdCwgX1ht U3RyaW5nIHN0cmluZyk7CmludCBfWG1TdHJpbmdMaW5lQ291bnQoX1htU3RyaW5nIHN0cmluZyk7 CmNoYXIgKiBfWG1TdHJpbmdHZXRUZXh0Q29uY2F0KFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4g X1htU3RyaW5nSXNDdXJyZW50Q2hhcnNldChYbVN0cmluZ0NoYXJTZXQgYyk7CkJvb2xlYW4gX1ht U3RyaW5nU2luZ2xlU2VnbWVudChYbVN0cmluZyBzdHIsIGNoYXIgKipwVGV4dE91dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCAqcENoYXJzZXRPdXQpOwp2 b2lkIF9YbVN0cmluZ1VwZGF0ZVdNU2hlbGxUaXRsZShYbVN0cmluZyB4bXN0ciwgV2lkZ2V0IHNo ZWxsKTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNNb3ZlZENhbGxiYWNrU3RydWN0IHsK ICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgQm9vbGVhbiBjb250OwogICAg V2lkZ2V0IG9sZF9mb2N1czsKICAgIFdpZGdldCBuZXdfZm9jdXM7CiAgICB1bnNpZ25lZCBjaGFy IGZvY3VzX3BvbGljeTsKfSBYbUZvY3VzTW92ZWRDYWxsYmFja1N0cnVjdCwgKlhtRm9jdXNNb3Zl ZENhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNEYXRhUmVjICpYbUZvY3VzRGF0YTsK ClhtRm9jdXNEYXRhIF9YbUNyZWF0ZUZvY3VzRGF0YSh2b2lkKTsKdm9pZCBfWG1EZXN0cm95Rm9j dXNEYXRhKFhtRm9jdXNEYXRhIGZvY3VzRGF0YSk7CnZvaWQgX1htU2V0QWN0aXZlVGFiR3JvdXAo WG1Gb2N1c0RhdGEgZm9jdXNEYXRhLCBXaWRnZXQgdGFiR3JvdXApOwpXaWRnZXQgX1htR2V0QWN0 aXZlSXRlbShXaWRnZXQgdyk7CnZvaWQgX1htTmF2aWdJbml0aWFsaXplKFdpZGdldCByZXF1ZXN0 LCBXaWRnZXQgbmV3X3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBD YXJkaW5hbCAqbnVtX2FyZ3MpOwpCb29sZWFuIF9YbU5hdmlnU2V0VmFsdWVzKFdpZGdldCBjdXJy ZW50LCBXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IG5ld193aWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MpOwp2b2lkIF9YbU5hdmlnQ2hh bmdlTWFuYWdlZChXaWRnZXQgd2lkKTsKdm9pZCBfWG1OYXZpZ1Jlc2l6ZShXaWRnZXQgd2lkKTsK dm9pZCBfWG1WYWxpZGF0ZUZvY3VzKFdpZGdldCB3aWQpOwp2b2lkIF9YbU5hdmlnRGVzdHJveShX aWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1DYWxsRm9jdXNNb3ZlZChXaWRnZXQgb2xkLCBXaWRnZXQg bmV3X3dpZCwgWEV2ZW50ICpldmVudCk7CkJvb2xlYW4gX1htTWdyVHJhdmVyc2FsKFdpZGdldCB3 aWQsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbik7CnZvaWQgX1htQ2xlYXJGb2N1c1Bh dGgoV2lkZ2V0IHdpZCk7CkJvb2xlYW4gX1htRm9jdXNJc0hlcmUoV2lkZ2V0IHcpOwp2b2lkIF9Y bVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHcsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpciwgQm9v bGVhbiBjaGVjayk7CnVuc2lnbmVkIGNoYXIgX1htR2V0Rm9jdXNQb2xpY3koV2lkZ2V0IHcpOwpX aWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQgdyk7CnZvaWQgX1htRm9jdXNNb2RlbENo YW5nZWQoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xp ZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpCb29sZWFuIF9YbUdyYWJUaGVGb2N1cyhX aWRnZXQgdywgWEV2ZW50ICpldmVudCk7ClhtRm9jdXNEYXRhIF9YbUdldEZvY3VzRGF0YShXaWRn ZXQgd2lkKTsKQm9vbGVhbiBfWG1DcmVhdGVWaXNpYmlsaXR5UmVjdChXaWRnZXQgdywgWFJlY3Rh bmdsZSAqcmVjdFB0cik7CnZvaWQgX1htU2V0UmVjdChYUmVjdGFuZ2xlICpyZWN0LCBXaWRnZXQg dyk7CmludCBfWG1JbnRlcnNlY3RSZWN0KFhSZWN0YW5nbGUgKnNyY1JlY3RBLCBXaWRnZXQgd2lk Z2V0LCBYUmVjdGFuZ2xlICpkc3RSZWN0KTsKaW50IF9YbUVtcHR5UmVjdChYUmVjdGFuZ2xlICpy KTsKdm9pZCBfWG1DbGVhclJlY3QoWFJlY3RhbmdsZSAqcik7CkJvb2xlYW4gX1htSXNOYXZpZ2Fi bGUoV2lkZ2V0IHdpZCk7CnZvaWQgX1htV2lkZ2V0Rm9jdXNDaGFuZ2UoV2lkZ2V0IHdpZCwgWG1G b2N1c0NoYW5nZSBjaGFuZ2UpOwpXaWRnZXQgX1htTmF2aWdhdGUoV2lkZ2V0IHdpZCwgWG1UcmF2 ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IF9YbUZpbmROZXh0VGFiR3JvdXAoV2lk Z2V0IHdpZCk7CldpZGdldCBfWG1GaW5kUHJldlRhYkdyb3VwKFdpZGdldCB3aWQpOwp2b2lkIF9Y bVNldEluaXRpYWxPZlRhYkdyb3VwKFdpZGdldCB0YWJfZ3JvdXAsIFdpZGdldCBpbml0X2ZvY3Vz KTsKdm9pZCBfWG1SZXNldFRyYXZHcmFwaChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1Gb2N1c0lz SW5TaGVsbChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1TaGVsbElzRXhjbHVzaXZlKFdpZGdldCB3 aWQpOwpXaWRnZXQgX1htR2V0Rmlyc3RGb2N1cyhXaWRnZXQgd2lkKTsKCgoKdm9pZCBfWG1UcmFj a1NoZWxsRm9jdXMoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy IGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg ICAgICAgICAgICAgICAgICAgICBCb29sZWFuICpkb250U3dhbGxvdyk7Cgp2b2lkIF9YbU1hbmFn ZXJFbnRlcihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50X2lu LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg ICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyTGVhdmUoV2lkZ2V0IHdp ZCwKICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudF9pbiwKICAgICAgICAgICAgICAg ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1f cGFyYW1zKTsKCnZvaWQgX1htTWFuYWdlckZvY3VzSW5JbnRlcm5hbChXaWRnZXQgd2lkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyRm9jdXNJbihXaWRn ZXQgbXcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbU1hbmFnZXJGb2N1c091dChXaWRnZXQgd2lkLAogICAg ICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg ICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w YXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyVW5tYXAoV2lkZ2V0IG13LAogICAgICAgICAgICAgICAg ICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywK ICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Qcmlt aXRpdmVFbnRlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50 LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAg ICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lk Z2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbVByaW1pdGl2ZUZvY3VzT3V0KFdpZGdldCB3LAogICAg ICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg Km51bV9wYXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVGb2N1c0luKFdpZGdldCB3LAogICAgICAg ICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg IFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w YXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQgdywKICAgICAgICAgICAgICAg ICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFy YW1zLAogICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQg X1htRW50ZXJHYWRnZXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu dCwKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg ICBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbUxlYXZlR2FkZ2V0KFdpZGdldCB3LAog ICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgU3Ry aW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoK dm9pZCBfWG1Gb2N1c0luR2FkZ2V0KFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgWEV2 ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAg ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Gb2N1c091dEdh ZGdldChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg ICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAg IENhcmRpbmFsICpudW1fcGFyYW1zKTsKCgoKdm9pZCBfWG1HZW9BZGp1c3RCb3hlcyhYbUdlb01h dHJpeCBnZW9TcGVjKTsKdm9pZCBfWG1HZW9BcnJhbmdlQm94ZXMoWG1HZW9NYXRyaXggZ2VvU3Bl YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERpbWVuc2lvbiAqcFcsIERpbWVuc2lvbiAqcEgpOwpEaW1lbnNpb24gX1htR2VvQm94ZXNTYW1l V2lkdGgoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiB3aWR0aCk7CkRpbWVuc2lvbiBf WG1HZW9Cb3hlc1NhbWVIZWlnaHQoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiBoZWln aHQpOwp2b2lkIF9YbUdlb0NsZWFyUmVjdE9iakFyZWFzKFJlY3RPYmogciwgWFdpbmRvd0NoYW5n ZXMgKm9sZCk7CmludCBfWG1HZW9Db3VudF9raWRzKENvbXBvc2l0ZVdpZGdldCBjKTsKdm9pZCBf WG1HZW9HZXREaW1lbnNpb25zKFhtR2VvTWF0cml4IGdlb1NwZWMpOwpYbUtpZEdlb21ldHJ5IF9Y bUdldEtpZEdlbyhXaWRnZXQgd2lkLCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHVuaWZvcm1fYm9yZGVyLCBEaW1lbnNpb24gYm9yZGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgdW5pZm9ybV93aWR0aF9tYXJnaW5zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgdW5pZm9ybV9oZWlnaHRfbWFyZ2lucywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgV2lkZ2V0IGhlbHAsIGludCBnZW9fdHlwZSk7CnZvaWQgX1htR2VvTG9hZFZh bHVlcyhXaWRnZXQgd2lkLCBpbnQgZ2VvVHlwZSwgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAg ICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAgICAgICAgICAgICAg ICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqZ2VvUmVzdWx0KTsKWG1HZW9NYXRyaXggX1htR2VvTWF0 cml4QWxsb2ModW5zaWduZWQgaW50IG51bVJvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBudW1Cb3hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGV4dFNpemUpOwp2b2lkIF9YbUdlb01hdHJpeEZyZWUoWG1HZW9NYXRyaXgg Z2VvX3NwZWMpOwp2b2lkIF9YbUdlb01hdHJpeEdldChYbUdlb01hdHJpeCBnZW9TcGVjLCBpbnQg Z2VvVHlwZSk7CnZvaWQgX1htR2VvTWF0cml4U2V0KFhtR2VvTWF0cml4IGdlb1NwZWMpOwpCb29s ZWFuIF9YbUdlb1JlcGx5WWVzKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVz cG9uc2UpOwpCb29sZWFuIF9YbUdlb1NldHVwS2lkKFhtS2lkR2VvbWV0cnkgZ2VvLCBXaWRnZXQg a2lkV2lkKTsKQm9vbGVhbiBfWG1HZW9tZXRyeUVxdWFsKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2Vv bWV0cnkgKmdlb0EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdl dEdlb21ldHJ5ICpnZW9CKTsKdm9pZCBfWG1IYW5kbGVTaXplVXBkYXRlKFdpZGdldCB3aWQsIHVu c2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgWG1HZW9DcmVhdGVQ cm9jIGNyZWF0ZU1hdHJpeCk7Clh0R2VvbWV0cnlSZXN1bHQgX1htSGFuZGxlUXVlcnlHZW9tZXRy eShXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRX aWRnZXRHZW9tZXRyeSAqaW50ZW5kZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwb2xpY3ksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBYbUdlb0NyZWF0ZVByb2MgY3JlYXRlTWF0cml4KTsKWHRH ZW9tZXRyeVJlc3VsdCBfWG1IYW5kbGVHZW9tZXRyeU1hbmFnZXIoV2lkZ2V0IHdpZCwgV2lkZ2V0 IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0 V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01hdHJpeCAqY2FjaGVQdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtR2VvQ3JlYXRlUHJvYyBjcmVh dGVNYXRyaXgpOwpYdEdlb21ldHJ5UmVzdWx0IF9YbU1ha2VHZW9tZXRyeVJlcXVlc3QoV2lkZ2V0 IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21l dHJ5ICpnZW9tKTsKdm9pZCBfWG1NZW51QmFyRml4KFhtR2VvTWF0cml4IGdlb1NwZWMsIGludCBh Y3Rpb24sCiAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxheW91dFB0ciwgWG1L aWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNlcGFyYXRvckZpeChYbUdlb01hdHJpeCBnZW9T cGVjLCBpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxh eW91dFB0ciwgWG1LaWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNldEtpZEdlbyhYbUtpZEdl b21ldHJ5IGtnLCBXaWRnZXQgaW5zdGlnYXRvcik7CgoKWG1SZWdpb24gX1htUmVnaW9uQ3JlYXRl KHZvaWQpOwpYbVJlZ2lvbiBfWG1SZWdpb25DcmVhdGVTaXplKGxvbmcgc2l6ZSk7CnZvaWQgX1ht UmVnaW9uQ29tcHV0ZUV4dGVudHMoWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uR2V0RXh0ZW50 cyhYbVJlZ2lvbiByLCBYUmVjdGFuZ2xlICpyZWN0KTsKdm9pZCBfWG1SZWdpb25VbmlvblJlY3RX aXRoUmVnaW9uKFhSZWN0YW5nbGUgKnJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYbVJlZ2lvbiBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY bVJlZ2lvbiBkZXN0KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3RSZWN0V2l0aFJlZ2lvbihYUmVj dGFuZ2xlICpyZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVn aW9uIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVJlZ2lv biBkZXN0KTsKbG9uZyBfWG1SZWdpb25HZXROdW1SZWN0YW5nbGVzKFhtUmVnaW9uIHIpOwp2b2lk IF9YbVJlZ2lvbkdldFJlY3RhbmdsZXMoWG1SZWdpb24gciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFhSZWN0YW5nbGUgKipyZWN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgKm5yZWN0cyk7CnZvaWQgX1htUmVnaW9uU2V0R0NSZWdpb24oRGlzcGxheSAqZHB5LAogICAg ICAgICAgICAgICAgICAgICAgICAgIEdDIGdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB4X29yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV9vcmlnaW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uRGVzdHJveShY bVJlZ2lvbiByKTsKdm9pZCBfWG1SZWdpb25PZmZzZXQoWG1SZWdpb24gcFJlZ2lvbiwgaW50IHgs IGludCB5KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3QoWG1SZWdpb24gcmVnMSwgWG1SZWdpb24g cmVnMiwgWG1SZWdpb24gbmV3UmVnKTsKdm9pZCBfWG1SZWdpb25VbmlvbihYbVJlZ2lvbiByZWcx LCBYbVJlZ2lvbiByZWcyLCBYbVJlZ2lvbiBuZXdSZWcpOwp2b2lkIF9YbVJlZ2lvblN1YnRyYWN0 KFhtUmVnaW9uIHJlZ00sIFhtUmVnaW9uIHJlZ1MsIFhtUmVnaW9uIHJlZ0QpOwpCb29sZWFuIF9Y bVJlZ2lvbklzRW1wdHkoWG1SZWdpb24gcik7CkJvb2xlYW4gX1htUmVnaW9uRXF1YWwoWG1SZWdp b24gcjEsIFhtUmVnaW9uIHIyKTsKQm9vbGVhbiBfWG1SZWdpb25Qb2ludEluUmVnaW9uKFhtUmVn aW9uIHBSZWdpb24sIGludCB4LCBpbnQgeSk7CnZvaWQgX1htUmVnaW9uQ2xlYXIoWG1SZWdpb24g ciApOwp2b2lkIF9YbVJlZ2lvblNocmluayhYbVJlZ2lvbiByLCBpbnQgZHgsIGludCBkeSk7CnZv aWQgX1htUmVnaW9uRHJhd1NoYWRvdyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAg ICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywK ICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAg ICAgICAgIFhtUmVnaW9uIHJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv biBib3JkZXJfdGhpY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93 X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNoYWRvd190eXBl KTsKCgoKdm9pZCBfWG1TZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkcHksIFdpZGdldCB3KTsKCgoK dm9pZCBfWG1JbUNoYW5nZU1hbmFnZWQoV2lkZ2V0IHZ3KTsKdm9pZCBfWG1JbVJlYWxpemUoV2lk Z2V0IHZ3KTsKdm9pZCBfWG1JbVJlc2l6ZShXaWRnZXQgdncpOwp2b2lkIF9YbUltUmVkaXNwbGF5 KFdpZGdldCB2dyk7CgoKCnZvaWQgX1htSW5pdEF0b21QYWlycyhEaXNwbGF5ICpkaXNwbGF5KTsK dm9pZCBfWG1Jbml0VGFyZ2V0c1RhYmxlKERpc3BsYXkgKmRpc3BsYXkpOwpDYXJkaW5hbCBfWG1J bmRleFRvVGFyZ2V0cyhXaWRnZXQgc2hlbGwsIENhcmRpbmFsIHRfaW5kZXgsIEF0b20gKip0YXJn ZXRzUnRuKTsKQ2FyZGluYWwgX1htVGFyZ2V0c1RvSW5kZXgoV2lkZ2V0IHNoZWxsLCBBdG9tICp0 YXJnZXRzLCBDYXJkaW5hbCBudW1UYXJnZXRzKTsKQXRvbSBfWG1BbGxvY01vdGlmQXRvbShXaWRn ZXQgc2hlbGwsIFRpbWUgdGltZSk7CnZvaWQgX1htRnJlZU1vdGlmQXRvbShXaWRnZXQgc2hlbGws IEF0b20gYXRvbSk7CnZvaWQgX1htRGVzdHJveU1vdGlmV2luZG93KERpc3BsYXkgKmRweSk7Cldp bmRvdyBfWG1HZXREcmFnUHJveHlXaW5kb3coRGlzcGxheSAqZGlzcGxheSk7CgoKCnZvaWQgX1ht RHJhZ092ZXJIaWRlKFdpZGdldCB3LCBQb3NpdGlvbiBjbGlwT3JpZ2luWCwgUG9zaXRpb24gY2xp cE9yaWdpblksCiAgICAgICAgICAgICAgICAgICAgIFhtUmVnaW9uIGNsaXBSZWdpb24pOwp2b2lk IF9YbURyYWdPdmVyU2hvdyhXaWRnZXQgdywgUG9zaXRpb24gY2xpcE9yaWdpblgsIFBvc2l0aW9u IGNsaXBPcmlnaW5ZLAogICAgICAgICAgICAgICAgICAgICBYbVJlZ2lvbiBjbGlwUmVnaW9uKTsK dm9pZCBfWG1EcmFnT3Zlck1vdmUoV2lkZ2V0IHcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2 b2lkIF9YbURyYWdPdmVyQ2hhbmdlKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3Rh dHVzKTsKdm9pZCBfWG1EcmFnT3ZlckZpbmlzaChXaWRnZXQgdywgdW5zaWduZWQgY2hhciBjb21w bGV0aW9uU3RhdHVzKTsKQ3Vyc29yIF9YbURyYWdPdmVyR2V0QWN0aXZlQ3Vyc29yKCBXaWRnZXQg dyk7CnZvaWQgX1htRHJhZ092ZXJTZXRJbml0aWFsUG9zaXRpb24oV2lkZ2V0IHcsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5pdGlhbFgsIFBvc2l0aW9uIGlu aXRpYWxZKTsKCgoKdm9pZCBfWG1EcmFnVW5kZXJBbmltYXRpb24oV2lkZ2V0IHcsIFh0UG9pbnRl ciBjbGllbnREYXRhLCBYdFBvaW50ZXIgY2FsbERhdGEpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBY dFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0R2VvbWV0cnlI YW5kbGVyIHJvb3RfZ2VvbWV0cnlfbWFuYWdlcjsKfSBTaGVsbENsYXNzRXh0ZW5zaW9uUmVjLCAq U2hlbGxDbGFzc0V4dGVuc2lvbjsKCgoKCnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjIHsK ICAgICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgQ29tcG9zaXRlQ2xhc3NQ YXJ0IGNvbXBvc2l0ZV9jbGFzczsKICAgICAgICBTaGVsbENsYXNzUGFydCBzaGVsbF9jbGFzczsK fSBTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFNoZWxsQ2xhc3NSZWMgc2hlbGxDbGFzc1JlYzsKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNoYXIgKmdlb21ldHJ5OwogICAgICAgIFh0Q3JlYXRl UG9wdXBDaGlsZFByb2MgY3JlYXRlX3BvcHVwX2NoaWxkX3Byb2M7CiAgICAgICAgWHRHcmFiS2lu ZCBncmFiX2tpbmQ7CiAgICAgICAgQm9vbGVhbiBzcHJpbmdfbG9hZGVkOwogICAgICAgIEJvb2xl YW4gcG9wcGVkX3VwOwogICAgICAgIEJvb2xlYW4gYWxsb3dfc2hlbGxfcmVzaXplOwogICAgICAg IEJvb2xlYW4gY2xpZW50X3NwZWNpZmllZDsKCgoKCiAgICAgICAgQm9vbGVhbiBzYXZlX3VuZGVy OwogICAgICAgIEJvb2xlYW4gb3ZlcnJpZGVfcmVkaXJlY3Q7CgogICAgICAgIFh0Q2FsbGJhY2tM aXN0IHBvcHVwX2NhbGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IHBvcGRvd25fY2FsbGJh Y2s7CiAgICAgICAgVmlzdWFsKiB2aXN1YWw7Cn0gU2hlbGxQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBjb21wb3NpdGU7 CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwp9IFNoZWxsUmVjLCAqU2hlbGxXaWRnZXQ7CnR5cGVk ZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gT3ZlcnJpZGVTaGVsbENsYXNz UGFydDsKCnR5cGVkZWYgc3RydWN0IF9PdmVycmlkZVNoZWxsQ2xhc3NSZWMgewogICAgICAgIENv cmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9z aXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIE92 ZXJyaWRlU2hlbGxDbGFzc1BhcnQgb3ZlcnJpZGVfc2hlbGxfY2xhc3M7Cn0gT3ZlcnJpZGVTaGVs bENsYXNzUmVjOwoKZXh0ZXJuIE92ZXJyaWRlU2hlbGxDbGFzc1JlYyBvdmVycmlkZVNoZWxsQ2xh c3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0IHtpbnQgZnJhYmpvdXM7fSBPdmVycmlkZVNoZWxsUGFy dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBv c2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBPdmVy cmlkZVNoZWxsUGFydCBvdmVycmlkZTsKfSBPdmVycmlkZVNoZWxsUmVjLCAqT3ZlcnJpZGVTaGVs bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBXTVNo ZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dNU2hlbGxDbGFzc1JlYyB7CiAgICAgICAg Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w b3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICAgICAg V01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKfSBXTVNoZWxsQ2xhc3NSZWM7CgpleHRl cm4gV01TaGVsbENsYXNzUmVjIHdtU2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgICAgIGNoYXIgKnRpdGxlOwogICAgICAgIGludCB3bV90aW1lb3V0OwogICAgICAgIEJvb2xl YW4gd2FpdF9mb3Jfd207CiAgICAgICAgQm9vbGVhbiB0cmFuc2llbnQ7CiAgICAgICAgQm9vbGVh biB1cmdlbmN5OwogICAgICAgIFdpZGdldCBjbGllbnRfbGVhZGVyOwogICAgICAgIFN0cmluZyB3 aW5kb3dfcm9sZTsKICAgICAgICBzdHJ1Y3QgX09sZFhTaXplSGludHMgewogICAgICAgICAgICBs b25nIGZsYWdzOwogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgaW50IHdpZHRoLCBo ZWlnaHQ7CiAgICAgICAgICAgIGludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgICAg IGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgICAgIGludCB3aWR0aF9pbmMsIGhl aWdodF9pbmM7CiAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgaW50IHg7 CiAgICAgICAgICAgICAgICAgICAgaW50IHk7CiAgICAgICAgICAgIH0gbWluX2FzcGVjdCwgbWF4 X2FzcGVjdDsKICAgICAgICB9IHNpemVfaGludHM7CiAgICAgICAgWFdNSGludHMgd21faGludHM7 CiAgICAgICAgaW50IGJhc2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jh dml0eTsKICAgICAgICBBdG9tIHRpdGxlX2VuY29kaW5nOwp9IFdNU2hlbGxQYXJ0OwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt Owp9IFdNU2hlbGxSZWMsICpXTVNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfVmVuZG9yU2hl bGxDbGFzc1JlYyAqVmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXRDbGFzcyB2 ZW5kb3JTaGVsbFdpZGdldENsYXNzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50 ZXIgZXh0ZW5zaW9uOwp9IFZlbmRvclNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1Zl bmRvclNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAg ICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xh c3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxDbGFzc1BhcnQgd21fc2hlbGxfY2xh c3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVuZG9yX3NoZWxsX2NsYXNzOwp9IFZl bmRvclNoZWxsQ2xhc3NSZWM7CgpleHRlcm4gVmVuZG9yU2hlbGxDbGFzc1JlYyB2ZW5kb3JTaGVs bENsYXNzUmVjOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHZlbmRvcl9zcGVjaWZp YzsKfSBWZW5kb3JTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQg Y29yZTsKICAgICAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQg c2hlbGw7CiAgICAgICAgV01TaGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZl bmRvcjsKfSBWZW5kb3JTaGVsbFJlYywgKlZlbmRvclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVj dCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0OwoK dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFz c1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns YXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxD bGFzc1BhcnQgd21fc2hlbGxfY2xhc3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVu ZG9yX3NoZWxsX2NsYXNzOwogICAgICAgIFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0IHRyYW5zaWVu dF9zaGVsbF9jbGFzczsKfSBUcmFuc2llbnRTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFRyYW5zaWVu dFNoZWxsQ2xhc3NSZWMgdHJhbnNpZW50U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIFdpZGdldCB0cmFuc2llbnRfZm9yOwp9IFRyYW5zaWVudFNoZWxsUGFydDsKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBvc2l0ZVBh cnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBXTVNoZWxsUGFy dCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVuZG9yOwogICAgICAgIFRyYW5zaWVudFNo ZWxsUGFydCB0cmFuc2llbnQ7Cn0gVHJhbnNpZW50U2hlbGxSZWMsICpUcmFuc2llbnRTaGVsbFdp ZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBUb3BMZXZl bFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1RvcExldmVsU2hlbGxDbGFzc1JlYyB7 CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNz UGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7 CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAgICBWZW5kb3JT aGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2ZWxTaGVsbENs YXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7Cn0gVG9wTGV2ZWxTaGVsbENsYXNzUmVjOwoK ZXh0ZXJuIFRvcExldmVsU2hlbGxDbGFzc1JlYyB0b3BMZXZlbFNoZWxsQ2xhc3NSZWM7CgoKCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBjaGFyICppY29uX25hbWU7CiAgICAgICAgQm9vbGVhbiBp Y29uaWM7CiAgICAgICAgQXRvbSBpY29uX25hbWVfZW5jb2Rpbmc7Cn0gVG9wTGV2ZWxTaGVsbFBh cnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBDb21w b3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQgc2hlbGw7CiAgICAgICAgV01T aGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgICAgICBUb3BM ZXZlbFNoZWxsUGFydCB0b3BMZXZlbDsKfSBUb3BMZXZlbFNoZWxsUmVjLCAqVG9wTGV2ZWxTaGVs bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBBcHBs aWNhdGlvblNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxD bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2 ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKfSBBcHBsaWNhdGlvblNo ZWxsQ2xhc3NSZWM7CgpleHRlcm4gQXBwbGljYXRpb25TaGVsbENsYXNzUmVjIGFwcGxpY2F0aW9u U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKCgogICAgY2hhciAqY2xhc3M7Cgog ICAgWHJtQ2xhc3MgeHJtX2NsYXNzOwogICAgaW50IGFyZ2M7CiAgICBjaGFyICoqYXJndjsKfSBB cHBsaWNhdGlvblNoZWxsUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBj b3JlOwogICAgICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBz aGVsbDsKICAgICAgICBXTVNoZWxsUGFydCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVu ZG9yOwogICAgICAgIFRvcExldmVsU2hlbGxQYXJ0IHRvcExldmVsOwogICAgICAgIEFwcGxpY2F0 aW9uU2hlbGxQYXJ0IGFwcGxpY2F0aW9uOwp9IEFwcGxpY2F0aW9uU2hlbGxSZWMsICpBcHBsaWNh dGlvblNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u Owp9IFNlc3Npb25TaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9TZXNzaW9uU2hlbGxD bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2 ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKICAgICAgICBTZXNzaW9u U2hlbGxDbGFzc1BhcnQgc2Vzc2lvbl9zaGVsbF9jbGFzczsKfSBTZXNzaW9uU2hlbGxDbGFzc1Jl YzsKCmV4dGVybiBTZXNzaW9uU2hlbGxDbGFzc1JlYyBzZXNzaW9uU2hlbGxDbGFzc1JlYzsKCnR5 cGVkZWYgc3RydWN0IF9YdFNhdmVZb3Vyc2VsZlJlYyAqWHRTYXZlWW91cnNlbGY7CgoKCnR5cGVk ZWYgc3RydWN0IHsKICAgIFNtY0Nvbm4gY29ubmVjdGlvbjsKICAgIFN0cmluZyBzZXNzaW9uX2lk OwogICAgU3RyaW5nKiByZXN0YXJ0X2NvbW1hbmQ7CiAgICBTdHJpbmcqIGNsb25lX2NvbW1hbmQ7 CiAgICBTdHJpbmcqIGRpc2NhcmRfY29tbWFuZDsKICAgIFN0cmluZyogcmVzaWduX2NvbW1hbmQ7 CiAgICBTdHJpbmcqIHNodXRkb3duX2NvbW1hbmQ7CiAgICBTdHJpbmcqIGVudmlyb25tZW50Owog ICAgU3RyaW5nIGN1cnJlbnRfZGlyOwogICAgU3RyaW5nIHByb2dyYW1fcGF0aDsKICAgIHVuc2ln bmVkIGNoYXIgcmVzdGFydF9zdHlsZTsKICAgIHVuc2lnbmVkIGNoYXIgY2hlY2twb2ludF9zdGF0 ZTsKICAgIEJvb2xlYW4gam9pbl9zZXNzaW9uOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jYWxs YmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBpbnRlcmFjdF9jYWxsYmFja3M7CiAgICBYdENhbGxi YWNrTGlzdCBjYW5jZWxfY2FsbGJhY2tzOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jb21wbGV0 ZV9jYWxsYmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBkaWVfY2FsbGJhY2tzOwogICAgWHRDYWxs YmFja0xpc3QgZXJyb3JfY2FsbGJhY2tzOwogICAgWHRTYXZlWW91cnNlbGYgc2F2ZTsKICAgIFh0 SW5wdXRJZCBpbnB1dF9pZDsKICAgIFh0UG9pbnRlciBzZXMyMDsKICAgIFh0UG9pbnRlciBzZXMx OTsKICAgIFh0UG9pbnRlciBzZXMxODsKICAgIFh0UG9pbnRlciBzZXMxNzsKICAgIFh0UG9pbnRl ciBzZXMxNjsKICAgIFh0UG9pbnRlciBzZXMxNTsKICAgIFh0UG9pbnRlciBzZXMxNDsKICAgIFh0 UG9pbnRlciBzZXMxMzsKICAgIFh0UG9pbnRlciBzZXMxMjsKICAgIFh0UG9pbnRlciBzZXMxMTsK ICAgIFh0UG9pbnRlciBzZXMxMDsKICAgIFh0UG9pbnRlciBzZXM5OwogICAgWHRQb2ludGVyIHNl czg7CiAgICBYdFBvaW50ZXIgc2VzNzsKICAgIFh0UG9pbnRlciBzZXM2OwogICAgWHRQb2ludGVy IHNlczU7CiAgICBYdFBvaW50ZXIgc2VzNDsKICAgIFh0UG9pbnRlciBzZXMzOwogICAgWHRQb2lu dGVyIHNlczI7CiAgICBYdFBvaW50ZXIgc2VzMTsKfSBTZXNzaW9uU2hlbGxQYXJ0OwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt OwogICAgICAgIFZlbmRvclNoZWxsUGFydCB2ZW5kb3I7CiAgICAgICAgVG9wTGV2ZWxTaGVsbFBh cnQgdG9wTGV2ZWw7CiAgICAgICAgQXBwbGljYXRpb25TaGVsbFBhcnQgYXBwbGljYXRpb247CiAg ICAgICAgU2Vzc2lvblNoZWxsUGFydCBzZXNzaW9uOwp9IFNlc3Npb25TaGVsbFJlYywgKlNlc3Np b25TaGVsbFdpZGdldDsKCgoKCgoKCmV4dGVybiBDYXJkaW5hbCBfWG1GaWx0ZXJSZXNvdXJjZXMo WHRSZXNvdXJjZSAqcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENhcmRpbmFsIG51bVJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBXaWRnZXRDbGFzcyBmaWx0ZXJDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBYdFJlc291cmNlICoqZmlsdGVyZWRSZXNvdXJjZXNSdG4pOwoKZXh0ZXJuIHZvaWQgX1ht QWRkR3JhYihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gZXhjbHVz aXZlLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gc3ByaW5nX2xvYWRlZCk7CgpleHRl cm4gdm9pZCBfWG1SZW1vdmVHcmFiKFdpZGdldCB3aWQpOwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1 bHQgX1htUm9vdEdlb21ldHJ5TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0 cnkgKnJlcGx5KTsKCmV4dGVybiB2b2lkIF9YbVZlbmRvckV4dFJlYWxpemUoV2lkZ2V0IHcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsb3N1cmUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNhbGxfZGF0YSkgOwoKZXh0ZXJuIERp c3BsYXkgKl9YbUdldERlZmF1bHREaXNwbGF5KHZvaWQpOwoKZXh0ZXJuIFZlbmRvclNoZWxsQ2xh c3NSZWMgdmVuZG9yU2hlbGxDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQg aW50IGV2ZW50VHlwZTsKICAgIEtleVN5bSBrZXlzeW07CiAgICBLZXlDb2RlIGtleTsKICAgIHVu c2lnbmVkIGludCBtb2RpZmllcnM7CiAgICBXaWRnZXQgY29tcG9uZW50OwogICAgQm9vbGVhbiBu ZWVkR3JhYjsKICAgIEJvb2xlYW4gaXNNbmVtb25pYzsKfSBYbUtleWJvYXJkRGF0YTsKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBQaXhlbCBmb3JlZ3JvdW5kOwoKICAgIERpbWVuc2lvbiBzaGFkb3df dGhpY2tuZXNzOwogICAgUGl4ZWwgdG9wX3NoYWRvd19jb2xvcjsKICAgIFBpeG1hcCB0b3Bfc2hh ZG93X3BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbV9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgYm90 dG9tX3NoYWRvd19waXhtYXA7CgogICAgUGl4ZWwgaGlnaGxpZ2h0X2NvbG9yOwogICAgUGl4bWFw IGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVscF9jYWxsYmFjazsKICAg IFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJzYWxfb247CiAgICB1bnNp Z25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvbl90eXBl OwoKCiAgICBCb29sZWFuIGV2ZW50X2hhbmRsZXJfYWRkZWQ7CiAgICBXaWRnZXQgYWN0aXZlX2No aWxkOwogICAgV2lkZ2V0IGhpZ2hsaWdodGVkX3dpZGdldDsKICAgIFdpZGdldCBhY2NlbGVyYXRv cl93aWRnZXQ7CgogICAgQm9vbGVhbiBoYXNfZm9jdXM7CgogICAgWG1TdHJpbmdEaXJlY3Rpb24g c3RyaW5nX2RpcmVjdGlvbjsKCiAgICBYbUtleWJvYXJkRGF0YSAqa2V5Ym9hcmRfbGlzdDsKICAg IHNob3J0IG51bV9rZXlib2FyZF9lbnRyaWVzOwogICAgc2hvcnQgc2l6ZV9rZXlib2FyZF9saXN0 OwoKICAgIFhtR2FkZ2V0IHNlbGVjdGVkX2dhZGdldDsKICAgIFhtR2FkZ2V0IGVsaWdpYmxlX2Zv cl9tdWx0aV9idXR0b25fZXZlbnQ7CgogICAgR0MgYmFja2dyb3VuZF9HQzsKICAgIEdDIGhpZ2hs aWdodF9HQzsKICAgIEdDIHRvcF9zaGFkb3dfR0M7CiAgICBHQyBib3R0b21fc2hhZG93X0dDOwoK ICAgIFdpZGdldCBpbml0aWFsX2ZvY3VzOwoKICAgIFh0Q2FsbGJhY2tMaXN0IHBvcHVwX2hhbmRs ZXJfY2FsbGJhY2s7Cn0gWG1NYW5hZ2VyUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0UG9p bnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwogICAgbG9uZyB2 ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYbVRyYXZlcnNhbENoaWxkcmVu UHJvYyB0cmF2ZXJzYWxfY2hpbGRyZW47Cn0gWG1NYW5hZ2VyQ2xhc3NFeHRSZWMsICpYbU1hbmFn ZXJDbGFzc0V4dDsKCgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJSZWMgewogICAgQ29yZVBh cnQgY29yZTsKICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgQ29uc3RyYWludFBhcnQg Y29uc3RyYWludDsKICAgIFhtTWFuYWdlclBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJSZWM7CgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHRyYW5zbGF0aW9uczsKICAgIFhtU3ludGhldGlj UmVzb3VyY2UgKnN5bl9yZXNvdXJjZXM7CiAgICBpbnQgbnVtX3N5bl9yZXNvdXJjZXM7CiAgICBY bVN5bnRoZXRpY1Jlc291cmNlICpzeW5fY29uc3RyYWludF9yZXNvdXJjZXM7CiAgICBpbnQgbnVt X3N5bl9jb25zdHJhaW50X3Jlc291cmNlczsKICAgIFhtUGFyZW50UHJvY2Vzc1Byb2MgcGFyZW50 X3Byb2Nlc3M7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtTWFuYWdlckNsYXNzUGFydDsK CgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJDbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0 IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAg Q29uc3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQ YXJ0IG1hbmFnZXJfY2xhc3M7Cn0gWG1NYW5hZ2VyQ2xhc3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0 IF9YbU1hbmFnZXJDb25zdHJhaW50UGFydCB7CiAgICBpbnQgdW51c2VkOwp9IFhtTWFuYWdlckNv bnN0cmFpbnRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htTWFuYWdlckNvbnN0cmFpbnRSZWMgewog ICAgWG1NYW5hZ2VyQ29uc3RyYWludFBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJDb25zdHJhaW50 UmVjLCAqWG1NYW5hZ2VyQ29uc3RyYWludFB0cjsKCmV4dGVybiBYbU1hbmFnZXJDbGFzc1JlYyB4 bU1hbmFnZXJDbGFzc1JlYzsKQm9vbGVhbiBfWG1QYXJlbnRQcm9jZXNzKFdpZGdldCB3aWRnZXQs IFhtUGFyZW50UHJvY2Vzc0RhdGEgZGF0YSk7CnZvaWQgX1htRGVzdHJveVBhcmVudENhbGxiYWNr ICggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnQsIFh0UG9pbnRlciBjYWxsICk7Cgp2b2lkIF9Y bVNvY29ycm8oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htQ2xlYXJTaGFkb3dUeXBlKFdpZGdldCB3LAogICAgICAg ICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX3dpZHRoLCBEaW1lbnNpb24gb2xkX2hlaWdo dCwKICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG9sZF9zaGFkb3dfdGhpY2tuZXNz LAogICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX2hpZ2hsaWdodF90aGlja25l c3MpOwoKCnZvaWQgX1htR2FkZ2V0QnV0dG9uTW90aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50 LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldEFy bShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f cGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRBY3RpdmF0ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwg U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0 aUFybShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0aUFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQg KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh ZGdldERyYWcoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htR2FkZ2V0U2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2 ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVu dEFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu YWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVudENhbmNlbChXaWRnZXQgdywgWEV2ZW50ICpl dmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRn ZXRUcmF2ZXJzZVByZXZUYWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpw YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZU5leHRU YWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFs ICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVByZXYoV2lkZ2V0IHcsIFhFdmVu dCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CnZvaWQgX1ht R2FkZ2V0VHJhdmVyc2VOZXh0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFt cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNlVXAoV2lkZ2V0 IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7 CnZvaWQgX1htR2FkZ2V0VHJhdmVyc2VEb3duKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJp bmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNl TGVmdChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVJpZ2h0KFdpZGdldCB3LCBYRXZlbnQg KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh ZGdldFRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMs IENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRIZWxwKFdpZGdldCB3LCBYRXZl bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9Y bUdhZGdldEtleUlucHV0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywg Q2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VySGVscChXaWRnZXQgdywgWEV2 ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdHlwZWRl ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NFeHRSZWMgewogICAgWHRQb2ludGVyIG5leHRfZXh0 ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBD YXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFhtV2lkZ2V0QmFzZWxpbmVQcm9jIHdpZGdldF9iYXNl bGluZTsKICAgIFhtV2lkZ2V0RGlzcGxheVJlY3RQcm9jIHdpZGdldF9kaXNwbGF5X3JlY3Q7CiAg ICBYbVdpZGdldE1hcmdpbnNQcm9jIHdpZGdldF9tYXJnaW5zOwp9IFhtUHJpbWl0aXZlQ2xhc3NF eHRSZWMsICpYbVByaW1pdGl2ZUNsYXNzRXh0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4 ZWwgZm9yZWdyb3VuZDsKCiAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrbmVzczsKICAgIFBpeGVs IHRvcF9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgdG9wX3NoYWRvd19waXhtYXA7CiAgICBQaXhl bCBib3R0b21fc2hhZG93X2NvbG9yOwogICAgUGl4bWFwIGJvdHRvbV9zaGFkb3dfcGl4bWFwOwoK ICAgIERpbWVuc2lvbiBoaWdobGlnaHRfdGhpY2tuZXNzOwogICAgUGl4ZWwgaGlnaGxpZ2h0X2Nv bG9yOwogICAgUGl4bWFwIGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVs cF9jYWxsYmFjazsKICAgIFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJz YWxfb247CiAgICBCb29sZWFuIGhpZ2hsaWdodF9vbl9lbnRlcjsKICAgIEJvb2xlYW4gaGF2ZV90 cmF2ZXJzYWw7CgogICAgdW5zaWduZWQgY2hhciB1bml0X3R5cGU7CiAgICBYbU5hdmlnYXRpb25U eXBlIG5hdmlnYXRpb25fdHlwZTsKCiAgICBCb29sZWFuIGhpZ2hsaWdodF9kcmF3bjsKICAgIEJv b2xlYW4gaGlnaGxpZ2h0ZWQ7CgogICAgR0MgaGlnaGxpZ2h0X0dDOwogICAgR0MgdG9wX3NoYWRv d19HQzsKICAgIEdDIGJvdHRvbV9zaGFkb3dfR0M7Cn0gWG1QcmltaXRpdmVQYXJ0OwoKCnR5cGVk ZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1Qcmlt aXRpdmVQYXJ0IHByaW1pdGl2ZTsKfSBYbVByaW1pdGl2ZVJlYzsKCgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX2hpZ2hsaWdodDsKICAgIFh0V2lkZ2V0UHJvYyBib3Jk ZXJfdW5oaWdobGlnaHQ7CiAgICBTdHJpbmcgdHJhbnNsYXRpb25zOwogICAgWHRBY3Rpb25Qcm9j IGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVzb3VyY2Vz OwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBY bVByaW1pdGl2ZUNsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1QcmltaXRpdmVDbGFzc1Jl YyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBYbVByaW1pdGl2ZUNsYXNzUGFy dCBwcmltaXRpdmVfY2xhc3M7Cn0gWG1QcmltaXRpdmVDbGFzc1JlYzsKCgpleHRlcm4gWG1Qcmlt aXRpdmVDbGFzc1JlYyB4bVByaW1pdGl2ZUNsYXNzUmVjOwoKCgpleHRlcm4gdm9pZCBfWG1Qcmlt aXRpdmVFbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRp bmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lkZ2V0IHcs IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4 dGVybiB2b2lkIF9YbVByaW1pdGl2ZUZvY3VzSW4oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0 cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVByaW1p dGl2ZUZvY3VzT3V0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1UcmF2ZXJzZUxlZnQoV2lkZ2V0IHcs IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4 dGVybiB2b2lkIF9YbVRyYXZlcnNlUmlnaHQoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmlu ZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNl TmV4dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu dW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVyc2VQcmV2KFdpZGdldCB3LCBYRXZlbnQg KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9p ZCBfWG1UcmF2ZXJzZURvd24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1z LCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlVXAoV2lkZ2V0 IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7 CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3Ry aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVy c2VOZXh0VGFiR3JvdXAoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBD YXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlUHJldlRhYkdyb3Vw KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w YXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVQYXJlbnRBY3RpdmF0ZShXaWRnZXQgdywg WEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0 ZXJuIHZvaWQgX1htUHJpbWl0aXZlUGFyZW50Q2FuY2VsKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50 LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1Q cmltaXRpdmVIZWxwKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQg dywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsK ZXh0ZXJuIEJvb2xlYW4gX1htRGlmZmVyZW50QmFja2dyb3VuZChXaWRnZXQgdywgV2lkZ2V0IHBh cmVudCk7CnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENhY2hlIHsKICAgIHN0cnVjdCBfWG1HYWRn ZXRDYWNoZSAqbmV4dDsKICAgIHN0cnVjdCBfWG1HYWRnZXRDYWNoZSAqcHJldjsKICAgIGludCBy ZWZfY291bnQ7Cn0gWG1HYWRnZXRDYWNoZSwgKlhtR2FkZ2V0Q2FjaGVQdHI7Cgp0eXBlZGVmIHN0 cnVjdCBfWG1DYWNoZUNsYXNzUGFydCB7CiAgICBYbUdhZGdldENhY2hlIGNhY2hlX2hlYWQ7CiAg ICBYbUNhY2hlQ29weVByb2MgY2FjaGVfY29weTsKICAgIFhtR2FkZ2V0Q2FjaGVQcm9jIGNhY2hl X2RlbGV0ZTsKICAgIFhtQ2FjaGVDb21wYXJlUHJvYyBjYWNoZV9jb21wYXJlOwp9IFhtQ2FjaGVD bGFzc1BhcnQsICpYbUNhY2hlQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0 Q2FjaGVSZWYgewogICAgWG1HYWRnZXRDYWNoZSBjYWNoZTsKICAgIFh0QXJnVmFsIGRhdGE7Cn0g WG1HYWRnZXRDYWNoZVJlZiwgKlhtR2FkZ2V0Q2FjaGVSZWZQdHI7CgoKCnR5cGVkZWYgc3RydWN0 IF9YbUdhZGdldFBhcnQgewogICAgRGltZW5zaW9uIHNoYWRvd190aGlja25lc3M7CiAgICBEaW1l bnNpb24gaGlnaGxpZ2h0X3RoaWNrbmVzczsKCiAgICBYdENhbGxiYWNrTGlzdCBoZWxwX2NhbGxi YWNrOwogICAgWHRQb2ludGVyIHVzZXJfZGF0YTsKCiAgICBCb29sZWFuIHRyYXZlcnNhbF9vbjsK ICAgIEJvb2xlYW4gaGlnaGxpZ2h0X29uX2VudGVyOwogICAgQm9vbGVhbiBoYXZlX3RyYXZlcnNh bDsKCiAgICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2 aWdhdGlvbl90eXBlOwoKICAgIEJvb2xlYW4gaGlnaGxpZ2h0X2RyYXduOwogICAgQm9vbGVhbiBo aWdobGlnaHRlZDsKICAgIEJvb2xlYW4gdmlzaWJsZTsKCiAgICBNYXNrIGV2ZW50X21hc2s7Cn0g WG1HYWRnZXRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldFJlYyB7CiAgICBPYmplY3RQ YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtR2FkZ2V0UGFydCBn YWRnZXQ7Cn0gWG1HYWRnZXRSZWM7CgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRDbGFzc0V4 dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNvcmRf dHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwogICAgWG1X aWRnZXRCYXNlbGluZVByb2Mgd2lkZ2V0X2Jhc2VsaW5lOwogICAgWG1XaWRnZXREaXNwbGF5UmVj dFByb2Mgd2lkZ2V0X2Rpc3BsYXlfcmVjdDsKfSBYbUdhZGdldENsYXNzRXh0UmVjLCAqWG1HYWRn ZXRDbGFzc0V4dDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRXaWRnZXRQcm9jIGJvcmRlcl9oaWdo bGlnaHQ7CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX3VuaGlnaGxpZ2h0OwogICAgWHRBY3Rpb25Q cm9jIGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVdpZGdldERpc3BhdGNoUHJvYyBpbnB1dF9kaXNw YXRjaDsKICAgIFhtVmlzdWFsQ2hhbmdlUHJvYyB2aXN1YWxfY2hhbmdlOwogICAgWG1TeW50aGV0 aWNSZXNvdXJjZSAqc3luX3Jlc291cmNlczsKICAgIGludCBudW1fc3luX3Jlc291cmNlczsKICAg IFhtQ2FjaGVDbGFzc1BhcnRQdHIgY2FjaGVfcGFydDsKICAgIFh0UG9pbnRlciBleHRlbnNpb247 Cn0gWG1HYWRnZXRDbGFzc1BhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0Q2xhc3NSZWMg ewogICAgUmVjdE9iakNsYXNzUGFydCByZWN0X2NsYXNzOwogICAgWG1HYWRnZXRDbGFzc1BhcnQg Z2FkZ2V0X2NsYXNzOwp9IFhtR2FkZ2V0Q2xhc3NSZWM7CgoKZXh0ZXJuIFhtR2FkZ2V0Q2xhc3NS ZWMgeG1HYWRnZXRDbGFzc1JlYzsKdm9pZCBfWG1CdWlsZEdhZGdldFJlc291cmNlcyhXaWRnZXRD bGFzcyBjKTsKdHlwZWRlZiBDYXJkaW5hbCAoKlhtR2V0U2VjUmVzRGF0YUZ1bmMpKFdpZGdldENs YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TZWNvbmRhcnlS ZXNvdXJjZURhdGEgKiopOwoKdHlwZWRlZiBzdHJ1Y3QgX1htT2JqZWN0Q2xhc3NFeHRSZWMKewog ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKfSBYbU9iamVjdENsYXNz RXh0UmVjLCAqWG1PYmplY3RDbGFzc0V4dDsKCnR5cGVkZWYgc3RydWN0IF9YbUdlbmVyaWNDbGFz c0V4dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNv cmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwp9IFht R2VuZXJpY0NsYXNzRXh0UmVjLCAqWG1HZW5lcmljQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBf WG1XcmFwcGVyRGF0YVJlYwp7CiAgICBzdHJ1Y3QgX1htV3JhcHBlckRhdGFSZWMgKm5leHQ7CiAg ICBXaWRnZXRDbGFzcyB3aWRnZXRDbGFzczsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZUxlYWY7 CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzTGVhZjsKICAgIFh0QXJnc1Byb2MgZ2V0VmFs dWVzTGVhZjsKICAgIFh0UmVhbGl6ZVByb2MgcmVhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9j IGNsYXNzUGFydEluaXRMZWFmOwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0R2VvbWV0 cnlIYW5kbGVyIGdlb21ldHJ5X21hbmFnZXI7Cn0gWG1XcmFwcGVyRGF0YVJlYywgKlhtV3JhcHBl ckRhdGE7Cgp0eXBlZGVmIHN0cnVjdCBfWG1CYXNlQ2xhc3NFeHRSZWMKewogICAgWHRQb2ludGVy IG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNp b247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZVBy ZWhvb2s7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzUHJlaG9vazsKICAgIFh0SW5pdFBy b2MgaW5pdGlhbGl6ZVBvc3Rob29rOwogICAgWHRTZXRWYWx1ZXNGdW5jIHNldFZhbHVlc1Bvc3Ro b29rOwogICAgV2lkZ2V0Q2xhc3Mgc2Vjb25kYXJ5T2JqZWN0Q2xhc3M7CiAgICBYdEluaXRQcm9j IHNlY29uZGFyeU9iamVjdENyZWF0ZTsKICAgIFhtR2V0U2VjUmVzRGF0YUZ1bmMgZ2V0U2VjUmVz RGF0YTsKICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMzJdOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1 ZXNQcmVob29rOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1ZXNQb3N0aG9vazsKICAgIFh0V2lkZ2V0 Q2xhc3NQcm9jIGNsYXNzUGFydEluaXRQcmVob29rOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh c3NQYXJ0SW5pdFBvc3Rob29rOwogICAgWHRSZXNvdXJjZUxpc3QgZXh0X3Jlc291cmNlczsKICAg IFh0UmVzb3VyY2VMaXN0IGNvbXBpbGVkX2V4dF9yZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1f ZXh0X3Jlc291cmNlczsKICAgIEJvb2xlYW4gdXNlX3N1Yl9yZXNvdXJjZXM7CiAgICBYbVdpZGdl dE5hdmlnYWJsZVByb2Mgd2lkZ2V0TmF2aWdhYmxlOwogICAgWG1Gb2N1c0NoYW5nZVByb2MgZm9j dXNDaGFuZ2U7CiAgICBYbVdyYXBwZXJEYXRhIHdyYXBwZXJEYXRhOwp9IFhtQmFzZUNsYXNzRXh0 UmVjLCAqWG1CYXNlQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1XaWRnZXRFeHREYXRhUmVj CnsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBXaWRnZXQgcmVxV2lkZ2V0OwogICAgV2lkZ2V0IG9s ZFdpZGdldDsKfSBYbVdpZGdldEV4dERhdGFSZWMsICpYbVdpZGdldEV4dERhdGE7CgpleHRlcm4g WHJtUXVhcmsgWG1RbW90aWY7CmV4dGVybiBpbnQgX1htSW5oZXJpdENsYXNzOwpleHRlcm4gWG1C YXNlQ2xhc3NFeHQgKl9YbV9mYXN0UHRyOwoKZXh0ZXJuIEJvb2xlYW4gX1htSXNTbG93U3ViY2xh c3MoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBiaXQpOwpleHRlcm4gWG1HZW5lcmljQ2xhc3NFeHQgKl9YbUdldENsYXNzRXh0ZW5z aW9uUHRyKFhtR2VuZXJpY0NsYXNzRXh0ICpsc3RIZWFkUHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhybVF1YXJrIG93bmVyKTsKZXh0ZXJuIHZv aWQgX1htUHVzaFdpZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWG1XaWRnZXRFeHREYXRhIGRhdGEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXh0VHlwZSk7CmV4dGVybiB2b2lkIF9YbVBvcFdp ZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYbVdpZGdldEV4dERhdGEgKmRhdGFSdG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciBleHRUeXBlKTsKZXh0ZXJuIFhtV2lkZ2V0RXh0RGF0YSBfWG1HZXRX aWRnZXRFeHREYXRhKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGV4dFR5cGUpOwpleHRlcm4gdm9pZCBfWG1GcmVl V2lkZ2V0RXh0RGF0YShXaWRnZXQgd2lkZ2V0KTsKZXh0ZXJuIHZvaWQgX1htQmFzZUNsYXNzUGFy dEluaXRpYWxpemUoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gdm9pZCBfWG1Jbml0aWFsaXplRXh0 ZW5zaW9ucyh2b2lkKTsKZXh0ZXJuIEJvb2xlYW4gX1htSXNTdGFuZGFyZE1vdGlmV2lkZ2V0Q2xh c3MoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gQ2FyZGluYWwgX1htU2Vjb25kYXJ5UmVzb3VyY2VE YXRhKFhtQmFzZUNsYXNzRXh0IGJjZVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYbVNlY29uZGFyeVJlc291cmNlRGF0YSAqKnNlY1Jlc0RhdGFSdG4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRh LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc19uYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVzb3VyY2VCYXNl UHJvYyBiYXNlZnVuY3Rpb25wb2ludGVyKTsKZXh0ZXJuIHZvaWQgX1htVHJhbnNmb3JtU3ViUmVz b3VyY2VzKFh0UmVzb3VyY2VMaXN0IGNvbXBfcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX2NvbXBfcmVzb3VyY2VzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRSZXNvdXJjZUxpc3QgKnJlc291cmNlcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcmVzb3VyY2Vz KTsKCgpleHRlcm4gQm9vbGVhbiBfWG1Jc1N1YmNsYXNzT2YoV2lkZ2V0Q2xhc3Mgd2MsIFdpZGdl dENsYXNzIHNjbGFzcyk7CmVudW0gewogICAgWG1DQUNIRV9FWFRFTlNJT04gPSAxLAogICAgWG1E RVNLVE9QX0VYVEVOU0lPTiwKICAgIFhtU0hFTExfRVhURU5TSU9OLAogICAgWG1QUk9UT0NPTF9F WFRFTlNJT04sCiAgICBYbURFRkFVTFRfRVhURU5TSU9OCn07CnR5cGVkZWYgc3RydWN0IF9YbUV4 dFJlYyAqWG1FeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbUV4dENsYXNzUmVjICpYbUV4dE9i amVjdENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRXh0T2JqZWN0Q2xhc3M7CnR5cGVkZWYg c3RydWN0IF9YbUV4dENsYXNzUGFydCB7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVz b3VyY2VzOwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwoKCgoKCgogICAgWHRQb2ludGVyIGV4 dGVuc2lvbjsKfSBYbUV4dENsYXNzUGFydCwgKlhtRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBz dHJ1Y3QgX1htRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK ICAgIFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKfSBYbUV4dENsYXNzUmVjOwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgV2lkZ2V0IGxvZ2ljYWxQYXJlbnQ7CiAgICB1bnNpZ25lZCBjaGFyIGV4dGVu c2lvblR5cGU7Cn0gWG1FeHRQYXJ0LCAqWG1FeHRQYXJ0UHRyOwoKZXh0ZXJuIFhtRXh0Q2xhc3NS ZWMgeG1FeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbUV4dFJlYyB7CiAgICBPYmplY3RQ YXJ0IG9iamVjdDsKICAgIFhtRXh0UGFydCBleHQ7Cn0gWG1FeHRSZWM7Cgp0eXBlZGVmIHN0cnVj dCBfWG1FeHRDYWNoZSB7CiAgIGNoYXIgZGF0YVsoMjUgKiBzaXplb2Yodm9pZCAqKSAtIHNpemVv ZihCb29sZWFuKSldOwogICBCb29sZWFuIGludXNlOwp9IFhtRXh0Q2FjaGU7CgpleHRlcm4gY2hh ciAqX1htRXh0T2JqQWxsb2MoQ2FyZGluYWwgc2l6ZSk7CmV4dGVybiB2b2lkIF9YbUV4dE9iakZy ZWUoWHRQb2ludGVyIGVsZW1lbnQpOwpleHRlcm4gdm9pZCBfWG1CdWlsZEV4dFJlc291cmNlcyhX aWRnZXRDbGFzcyBjKTsKdHlwZWRlZiBzdHJ1Y3QgX1htRGVza3RvcFJlYyAqWG1EZXNrdG9wT2Jq ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EZXNrdG9wQ2xhc3NSZWMgKlhtRGVza3RvcE9iamVjdENs YXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1EZXNrdG9wQ2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBf WG1EZXNrdG9wQ2xhc3NQYXJ0IHsKICAgIFdpZGdldENsYXNzIGNoaWxkX2NsYXNzOwogICAgWHRX aWRnZXRQcm9jIGluc2VydF9jaGlsZDsKICAgIFh0V2lkZ2V0UHJvYyBkZWxldGVfY2hpbGQ7CiAg ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtRGVza3RvcENsYXNzUGFydCwgKlhtRGVza3RvcENs YXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BDbGFzc1JlYyB7CiAgICBPYmpl Y3RDbGFzc1BhcnQgb2JqZWN0X2NsYXNzOwogICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog ICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3BfY2xhc3M7Cn0gWG1EZXNrdG9wQ2xhc3NSZWM7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBXaWRnZXQgcGFyZW50OwogICAgV2lkZ2V0ICpjaGlsZHJl bjsKICAgIENhcmRpbmFsIG51bV9jaGlsZHJlbjsKICAgIENhcmRpbmFsIG51bV9zbG90czsKfSBY bURlc2t0b3BQYXJ0LCAqWG1EZXNrdG9wUGFydFB0cjsKCmV4dGVybiBYbURlc2t0b3BDbGFzc1Jl YyB4bURlc2t0b3BDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BSZWMgewogICAg T2JqZWN0UGFydCBvYmplY3Q7CiAgICBYbUV4dFBhcnQgZXh0OwogICAgWG1EZXNrdG9wUGFydCBk ZXNrdG9wOwp9IFhtRGVza3RvcFJlYzsKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyBfWG1HZXRBY3R1 YWxDbGFzcyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgV2lkZ2V0Q2xhc3Mgd19jbGFzcyk7CmV4dGVybiB2b2lkIF9YbVNldEFjdHVhbENsYXNz KERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENs YXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIGFj dHVhbENsYXNzKTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2NyZWVuQ2xhc3M7Cgp0eXBlZGVmIHN0 cnVjdCBfWG1TY3JlZW5SZWMgKlhtU2NyZWVuOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFz c1JlYyAqWG1TY3JlZW5DbGFzczsKCmV4dGVybiBXaWRnZXQgWG1HZXRYbVNjcmVlbihTY3JlZW4g KnNjcmVlbik7CmVudW0gewogICAgWG1BVFRBQ0hfTk9SVEhfV0VTVCwKICAgIFhtQVRUQUNIX05P UlRILAogICAgWG1BVFRBQ0hfTk9SVEhfRUFTVCwKICAgIFhtQVRUQUNIX0VBU1QsCiAgICBYbUFU VEFDSF9TT1VUSF9FQVNULAogICAgWG1BVFRBQ0hfU09VVEgsCiAgICBYbUFUVEFDSF9TT1VUSF9X RVNULAogICAgWG1BVFRBQ0hfV0VTVCwKICAgIFhtQVRUQUNIX0NFTlRFUiwKICAgIFhtQVRUQUNI X0hPVAp9OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdJY29uUmVjICpYbURyYWdJY29uT2Jq ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjICpYbURyYWdJY29uT2JqZWN0 Q2xhc3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bURyYWdJY29uT2JqZWN0Q2xhc3M7CgpXaWRnZXQg WG1DcmVhdGVEcmFnSWNvbiAoV2lkZ2V0IHdpZGdldCwgU3RyaW5nIG5hbWUsIEFyZ0xpc3QgYXJn bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFzc1Bh cnQgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNjcmVlbkNsYXNzUGFydCwgKlhtU2Ny ZWVuQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuQ2xhc3NSZWMgewogICAg Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3Bf Y2xhc3M7CiAgICBYbVNjcmVlbkNsYXNzUGFydCBzY3JlZW5fY2xhc3M7Cn0gWG1TY3JlZW5DbGFz c1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDdXJzb3JSZWMgewogICAgc3RydWN0IF9YbURy YWdDdXJzb3JSZWMgKm5leHQ7CiAgICBDdXJzb3IgY3Vyc29yOwogICAgWG1EcmFnSWNvbk9iamVj dCBzdGF0ZUljb247CiAgICBYbURyYWdJY29uT2JqZWN0IG9wSWNvbjsKICAgIFhtRHJhZ0ljb25P YmplY3Qgc291cmNlSWNvbjsKICAgIEJvb2xlYW4gZGlydHk7Cn0gWG1EcmFnQ3Vyc29yUmVjLCAq WG1EcmFnQ3Vyc29yQ2FjaGU7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjICpY bVNjcmF0Y2hQaXhtYXA7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjIHsKICAg IFhtU2NyYXRjaFBpeG1hcCBuZXh0OwogICAgUGl4bWFwIHBpeG1hcDsKICAgIENhcmRpbmFsIGRl cHRoOwogICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIEJvb2xl YW4gaW5Vc2U7Cn0gWG1TY3JhdGNoUGl4bWFwUmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQm9v bGVhbiBtd21QcmVzZW50OwogICAgdW5zaWduZWQgc2hvcnQgbnVtUmVwYXJlbnRlZDsKICAgIGlu dCBkYXJrVGhyZXNob2xkOwogICAgaW50IGZvcmVncm91bmRUaHJlc2hvbGQ7CiAgICBpbnQgbGln aHRUaHJlc2hvbGQ7CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHROb25lQ3Vyc29ySWNvbjsK ICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdFZhbGlkQ3Vyc29ySWNvbjsKICAgIFhtRHJhZ0lj b25PYmplY3QgZGVmYXVsdEludmFsaWRDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCBk ZWZhdWx0TW92ZUN1cnNvckljb247CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHRDb3B5Q3Vy c29ySWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdExpbmtDdXJzb3JJY29uOwogICAg WG1EcmFnSWNvbk9iamVjdCBkZWZhdWx0U291cmNlQ3Vyc29ySWNvbjsKCiAgICBDdXJzb3IgbnVs bEN1cnNvcjsKICAgIFhtRHJhZ0N1cnNvclJlYyAqY3Vyc29yQ2FjaGU7CiAgICBDYXJkaW5hbCBt YXhDdXJzb3JXaWR0aDsKICAgIENhcmRpbmFsIG1heEN1cnNvckhlaWdodDsKCiAgICBDdXJzb3Ig bWVudUN1cnNvcjsKICAgIHVuc2lnbmVkIGNoYXIgdW5wb3N0QmVoYXZpb3I7CiAgICBYRm9udFN0 cnVjdCAqZm9udF9zdHJ1Y3Q7CiAgICBpbnQgaF91bml0OwogICAgaW50IHZfdW5pdDsKICAgIFht U2NyYXRjaFBpeG1hcCBzY3JhdGNoUGl4bWFwczsKICAgIHVuc2lnbmVkIGNoYXIgbW92ZU9wYXF1 ZTsKCiAgICBYbURyYWdJY29uT2JqZWN0IHhtU3RhdGVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNv bk9iamVjdCB4bU1vdmVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUNvcHlDdXJz b3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUxpbmtDdXJzb3JJY29uOwogICAgWG1EcmFn SWNvbk9iamVjdCB4bVNvdXJjZUN1cnNvckljb247CgogICAgR0MgaW1hZ2VHQzsKICAgIGludCBp bWFnZUdDRGVwdGg7CiAgICBQaXhlbCBpbWFnZUZvcmVncm91bmQ7CiAgICBQaXhlbCBpbWFnZUJh Y2tncm91bmQ7CgogICAgWHRQb2ludGVyIHNjcmVlbkluZm87Cn0gWG1TY3JlZW5QYXJ0LCAqWG1T Y3JlZW5QYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuSW5mbyB7CiAgICBYdFBvaW50 ZXIgbWVudV9zdGF0ZTsKICAgIEJvb2xlYW4gZGVzdHJveUNhbGxiYWNrQWRkZWQ7Cn0gWG1TY3Jl ZW5JbmZvOwoKZXh0ZXJuIFhtU2NyZWVuQ2xhc3NSZWMgeG1TY3JlZW5DbGFzc1JlYzsKCnR5cGVk ZWYgc3RydWN0IF9YbVNjcmVlblJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1EZXNrdG9w UGFydCBkZXNrdG9wOwogICAgWG1TY3JlZW5QYXJ0IHNjcmVlbjsKfSBYbVNjcmVlblJlYzsKCmV4 dGVybiBYcm1RdWFyayBfWG1JbnZhbGlkQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsg X1htVmFsaWRDdXJzb3JJY29uUXVhcms7CmV4dGVybiBYcm1RdWFyayBfWG1Ob25lQ3Vyc29ySWNv blF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htRGVmYXVsdERyYWdJY29uUXVhcms7CmV4dGVybiBY cm1RdWFyayBfWG1Nb3ZlQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htQ29weUN1 cnNvckljb25RdWFyazsKZXh0ZXJuIFhybVF1YXJrIF9YbUxpbmtDdXJzb3JJY29uUXVhcms7CgoK CgpleHRlcm4gWG1EcmFnSWNvbk9iamVjdCBfWG1TY3JlZW5HZXRPcGVyYXRpb25JY29uKFdpZGdl dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgb3BlcmF0aW9uKTsKZXh0ZXJuIFhtRHJhZ0ljb25PYmplY3QgX1htU2NyZWVu R2V0U3RhdGVJY29uKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIHN0YXRlKTsKZXh0ZXJuIFhtRHJh Z0ljb25PYmplY3QgX1htU2NyZWVuR2V0U291cmNlSWNvbihXaWRnZXQgdyk7CmV4dGVybiBQaXht YXAgX1htQWxsb2NTY3JhdGNoUGl4bWFwKFhtU2NyZWVuIHhtU2NyZWVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBkZXB0aCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEaW1lbnNpb24gaGVpZ2h0KTsKZXh0ZXJuIHZvaWQgX1htRnJlZVNjcmF0 Y2hQaXhtYXAoWG1TY3JlZW4geG1TY3JlZW4sIFBpeG1hcCBwaXhtYXApOwpleHRlcm4gWG1EcmFn Q3Vyc29yQ2FjaGUgKiBfWG1HZXREcmFnQ3Vyc29yQ2FjaGVQdHIoWG1TY3JlZW4geG1TY3JlZW4p OwpleHRlcm4gdm9pZCBfWG1HZXRNYXhDdXJzb3JTaXplKFdpZGdldCB3LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiAqd2lkdGgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRGltZW5zaW9uICpoZWlnaHQpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE51bGxD dXJzb3IoV2lkZ2V0IHcpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE1lbnVDdXJzb3JCeVNjcmVlbihT Y3JlZW4gKnNjcmVlbik7CmV4dGVybiBCb29sZWFuIF9YbUdldE1vdmVPcGFxdWVCeVNjcmVlbihT Y3JlZW4gKnNjcmVlbik7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9YbUdldFVucG9zdEJlaGF2aW9y KFdpZGdldCB3aWQpOwpleHRlcm4gaW50IF9YbUdldEZvbnRVbml0KFNjcmVlbiAqc2NyZWVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaW1lbnNpb24pOwpleHRlcm4gdm9pZCBfWG1T Y3JlZW5SZW1vdmVGcm9tQ3Vyc29yQ2FjaGUoWG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJu IFdpZGdldENsYXNzIHhtUm93Q29sdW1uV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1S b3dDb2x1bW5SZWMgKlhtUm93Q29sdW1uV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1 bW5DbGFzc1JlYyAqWG1Sb3dDb2x1bW5XaWRnZXRDbGFzczsKCgoKCgpleHRlcm4gV2lkZ2V0IFht Q3JlYXRlTWVudUJhcihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENh cmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZU9wdGlvbk1lbnUoV2lkZ2V0 IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4 dGVybiBXaWRnZXQgWG1DcmVhdGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwg QXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVQ dWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJk aW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVSYWRpb0JveChXaWRnZXQgcGFy ZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJu IFdpZGdldCBYbUNyZWF0ZVJvd0NvbHVtbihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcg KmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVdvcmtB cmVhKFdpZGdldCBwYXJlbnQsIGNoYXIgKm5hbWUsIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJn Y291bnQpOwoKZXh0ZXJuIFdpZGdldCBYbU9wdGlvbkJ1dHRvbkdhZGdldChXaWRnZXQgb3B0aW9u X21lbnUpOwpleHRlcm4gV2lkZ2V0IFhtT3B0aW9uTGFiZWxHYWRnZXQoV2lkZ2V0IG9wdGlvbl9t ZW51KTsKCmV4dGVybiB2b2lkIFhtTWVudVBvc2l0aW9uKFdpZGdldCBtZW51LCBYQnV0dG9uUHJl c3NlZEV2ZW50ICpldmVudCk7CmV4dGVybiBXaWRnZXQgWG1HZXRUZWFyT2ZmQ29udHJvbChXaWRn ZXQgbWVudSk7CgpleHRlcm4gdm9pZCBYbUFkZFRvUG9zdEZyb21MaXN0KFdpZGdldCBtZW51X3dp ZCwgV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtUmVtb3ZlRnJvbVBvc3RGcm9tTGlzdChX aWRnZXQgbWVudV93aWQsIFdpZGdldCB3aWRnZXQpOwpleHRlcm4gV2lkZ2V0IFhtR2V0UG9zdGVk RnJvbVdpZGdldChXaWRnZXQgbWVudSk7CnR5cGVkZWYgc3RydWN0IF9YbUJ1dHRvbkV2ZW50U3Rh dHVzUmVjIHsKICAgIFRpbWUgdGltZTsKICAgIEJvb2xlYW4gdmVyaWZpZWQ7CiAgICBCb29sZWFu IHdhaXRpbmdfdG9fYmVfbWFuYWdlZDsKICAgIFhCdXR0b25FdmVudCBldmVudDsKfSBYbUJ1dHRv bkV2ZW50U3RhdHVzUmVjOwoKCnR5cGVkZWYgc3RydWN0IF9YbVJlcGxheUluZm9SZWMgewogICAg VGltZSB0aW1lOwogICAgV2lkZ2V0IHRvcGxldmVsX21lbnU7Cn0gWG1SZXBsYXlJbmZvUmVjOwoK dHlwZWRlZiBzdHJ1Y3QgX1htTWVudUZvY3VzUmVjIHsKICAgIFdpZGdldCBvbGRXaWRnZXQ7CiAg ICBXaW5kb3cgb2xkRm9jdXM7CiAgICBpbnQgb2xkUmV2ZXJ0Owp9IFhtTWVudUZvY3VzUmVjOwoK CnR5cGVkZWYgc3RydWN0IF9YbU1lbnVTdGF0ZVJlYyB7CiAgICBXaWRnZXQgUkNfTGFzdFNlbGVj dFRvcGxldmVsOwogICAgWG1CdXR0b25FdmVudFN0YXR1c1JlYyBSQ19CdXR0b25FdmVudFN0YXR1 czsKICAgIFhtUmVwbGF5SW5mb1JlYyBSQ19SZXBsYXlJbmZvOwoKICAgIFdpZGdldCBSQ19hY3Rp dmVJdGVtOwogICAgWG1NZW51Rm9jdXNSZWMgUkNfbWVudUZvY3VzOwoKICAgIEJvb2xlYW4gUkNf YWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVudUl0ZW1zOwogICAgVGltZSBN U19MYXN0TWFuYWdlZE1lbnVUaW1lOwogICAgQm9vbGVhbiBNVV9JbkRyYWdNb2RlOwogICAgV2lk Z2V0IE1VX0N1cnJlbnRNZW51Q2hpbGQ7CiAgICBCb29sZWFuIE1VX0luUE1Nb2RlOwp9IFhtTWVu dVN0YXRlUmVjLCAqWG1NZW51U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IF9YbVJDS2lkR2VvbWV0 cnlSZWMKewogICAgV2lkZ2V0IGtpZDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94OwogICAgRGlt ZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAgIERpbWVu c2lvbiBiYXNlbGluZTsKfSBYbVJDS2lkR2VvbWV0cnlSZWMsICpYbVJDS2lkR2VvbWV0cnk7CgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgRGltZW5zaW9uIG1hcmdpbl9oZWlnaHQ7CiAgICBEaW1lbnNp b24gbWFyZ2luX3dpZHRoOwoKICAgIERpbWVuc2lvbiBzcGFjaW5nOwoKICAgIERpbWVuc2lvbiBl bnRyeV9ib3JkZXI7CgogICAgV2lkZ2V0IGhlbHBfcHVzaGJ1dHRvbjsKICAgIFdpZGdldCBjYXNj YWRlQnRuOwoKICAgIFhtU3RyaW5nIG9wdGlvbl9sYWJlbDsKICAgIFdpZGdldCBvcHRpb25fc3Vi bWVudTsKCiAgICBYbVJDS2lkR2VvbWV0cnkgYm94ZXM7CgogICAgV2lkZ2V0Q2xhc3MgZW50cnlf Y2xhc3M7CgogICAgWHRDYWxsYmFja0xpc3QgZW50cnlfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNr TGlzdCBtYXBfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNrTGlzdCB1bm1hcF9jYWxsYmFjazsKCiAg ICBXaWRnZXQgbWVtb3J5X3N1YndpZGdldDsKCiAgICBzaG9ydCBudW1fY29sdW1uczsKCiAgICBT dHJpbmcgbWVudVBvc3Q7CgogICAgdW5zaWduZWQgaW50IHBvc3RCdXR0b247CiAgICBpbnQgcG9z dEV2ZW50VHlwZTsKICAgIHVuc2lnbmVkIGludCBwb3N0TW9kaWZpZXJzOwoKICAgIFN0cmluZyBt ZW51X2FjY2VsZXJhdG9yOwogICAgS2V5U3ltIG1uZW1vbmljOwogICAgWG1TdHJpbmdDaGFyU2V0 IG1uZW1vbmljQ2hhclNldDsKCiAgICB1bnNpZ25lZCBjaGFyIGVudHJ5X2FsaWdubWVudDsKCiAg ICB1bnNpZ25lZCBjaGFyIHBhY2tpbmc7CgogICAgdW5zaWduZWQgY2hhciB0eXBlOwoKICAgIHVu c2lnbmVkIGNoYXIgb3JpZW50YXRpb247CgogICAgQm9vbGVhbiBhcm1lZDsKICAgIEJvb2xlYW4g YWRqdXN0X21hcmdpbjsKICAgIEJvb2xlYW4gYWRqdXN0X2xhc3Q7CiAgICBCb29sZWFuIGRvX2Fs aWdubWVudDsKICAgIEJvb2xlYW4gcmFkaW87CiAgICBCb29sZWFuIHJhZGlvX29uZTsKICAgIEJv b2xlYW4gaG9tb2dlbmVvdXM7CiAgICBCb29sZWFuIHJlc2l6ZV93aWR0aDsKICAgIEJvb2xlYW4g cmVzaXplX2hlaWdodDsKCiAgICBCb29sZWFuIHBvcHVwX2VuYWJsZWQ7CgogICAgRGltZW5zaW9u IG9sZF93aWR0aDsKICAgIERpbWVuc2lvbiBvbGRfaGVpZ2h0OwogICAgRGltZW5zaW9uIG9sZF9z aGFkb3dfdGhpY2tuZXNzOwoKICAgIFdpZGdldCAqcG9zdEZyb21MaXN0OwogICAgaW50IHBvc3RG cm9tQ291bnQ7CiAgICBpbnQgcG9zdEZyb21MaXN0U2l6ZTsKCiAgICBXaWRnZXQgbGFzdFNlbGVj dFRvcGxldmVsOwogICAgV2lkZ2V0IHBvcHVwUG9zdGVkOwoKICAgIHVuc2lnbmVkIGNoYXIgb2xk Rm9jdXNQb2xpY3k7CgogICAgdW5zaWduZWQgY2hhciBUZWFyT2ZmTW9kZWw7CiAgICBXaWRnZXQg UGFyZW50U2hlbGw7CiAgICBXaWRnZXQgdGVhcl9vZmZfY29udHJvbDsKICAgIEJvb2xlYW4gdG9f c3RhdGU7CgogICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfYWN0aXZhdGVkX2NhbGxiYWNrOwog ICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfZGVhY3RpdmF0ZWRfY2FsbGJhY2s7CiAgICBXaWRn ZXQgdGVhcl9vZmZfbGFzdFNlbGVjdFRvcGxldmVsOwogICAgV2lkZ2V0IHRlYXJfb2ZmX2ZvY3Vz X2l0ZW07CgogICAgdW5zaWduZWQgY2hhciBlbnRyeV92ZXJ0aWNhbF9hbGlnbm1lbnQ7CiAgICB1 bnNpZ25lZCBjaGFyIHBvcHVwX21lbnVfY2xpY2s7CiAgICBYdEludGVydmFsSWQgcG9wdXBfdGlt ZW91dF90aW1lcjsKfSBYbVJvd0NvbHVtblBhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29s dW1uUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsK ICAgIENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7CiAgICBYbU1hbmFnZXJQYXJ0IG1hbmFnZXI7 CiAgICBYbVJvd0NvbHVtblBhcnQgcm93X2NvbHVtbjsKfSBYbVJvd0NvbHVtblJlYzsKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBYbU1lbnVQcm9jIG1lbnVQcm9jZWR1cmVzOwogICAgWHRBY3Rpb25Q cm9jIGFybUFuZEFjdGl2YXRlOwogICAgWG1NZW51VHJhdmVyc2FsUHJvYyB0cmF2ZXJzYWxIYW5k bGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVJvd0NvbHVtbkNsYXNzUGFydDsKCgp0 eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1bW5DbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNv cmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgQ29u c3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQYXJ0 IG1hbmFnZXJfY2xhc3M7CiAgICBYbVJvd0NvbHVtbkNsYXNzUGFydCByb3dfY29sdW1uX2NsYXNz Owp9IFhtUm93Q29sdW1uQ2xhc3NSZWM7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29u c3RyYWludFBhcnQgewogICAgQm9vbGVhbiB3YXNfbWFuYWdlZDsKICAgIERpbWVuc2lvbiBtYXJn aW5fdG9wOwogICAgRGltZW5zaW9uIG1hcmdpbl9ib3R0b207CiAgICBEaW1lbnNpb24gYmFzZWxp bmU7CiAgICBzaG9ydCBwb3NpdGlvbl9pbmRleDsKfSBYbVJvd0NvbHVtbkNvbnN0cmFpbnRQYXJ0 OwoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29uc3RyYWludFJlYyB7CiAgICBYbU1hbmFn ZXJDb25zdHJhaW50UGFydCBtYW5hZ2VyOwogICAgWG1Sb3dDb2x1bW5Db25zdHJhaW50UGFydCBy b3dfY29sdW1uOwp9IFhtUm93Q29sdW1uQ29uc3RyYWludFJlYywgKlhtUm93Q29sdW1uQ29uc3Ry YWludHM7CmV4dGVybiBYbVJvd0NvbHVtbkNsYXNzUmVjIHhtUm93Q29sdW1uQ2xhc3NSZWM7CmVu dW0gewogICAgWG1XRUFLX0NIRUNLID0gMSwKICAgIFhtTUVESVVNX0NIRUNLLAogICAgWG1TVFJP TkdfQ0hFQ0sKfTsKCmVudW0gewogICAgWG1NRU5VX0JFR0lOLAogICAgWG1NRU5VX01JRERMRSwK ICAgIFhtTUVOVV9FTkQKfTsKCgoKCmVudW0gewogICAgQU5ZX0NISUxELAogICAgRklSU1RfQlVU VE9OCn07Cgp2b2lkIF9MdFJDRW50cnlDYWxsYmFjayhXaWRnZXQgdywgWHRDYWxsYmFja0xpc3Qg Y2JfbGlzdCwgWHRQb2ludGVyIGNicyk7Cgp2b2lkIF9YbVBvc3RQb3B1cE1lbnUoV2lkZ2V0IHdp ZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htU2V0UG9wdXBNZW51Q2xpY2soV2lkZ2V0IHdpZCwg Qm9vbGVhbiBwb3B1cE1lbnVDbGljayk7CkJvb2xlYW4gX1htR2V0UG9wdXBNZW51Q2xpY2soV2lk Z2V0IHdpZCk7CnZvaWQgX1htQWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVu dUl0ZW1zKFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJvb2xlYW4gYWxsb3dlZCk7CnZvaWQgX1htU2V0U3dhbGxvd0V2ZW50 SGFuZGxlcihXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIGFkZF9oYW5kbGVyKTsKdm9pZCBfWG1NZW51 Rm9jdXMoV2lkZ2V0IHcsIGludCBvcGVyYXRpb24sIFRpbWUgX3RpbWUpOwp2b2lkIF9YbUdldEFj dGl2ZVRvcExldmVsTWVudShXaWRnZXQgd2lkLCBXaWRnZXQgKnJ3aWQpOwpCb29sZWFuIF9YbU1h dGNoQlNlbGVjdEV2ZW50KFdpZGdldCB3aWQsIFhFdmVudCAqZXZlbnQpOwpCb29sZWFuIF9YbU1h dGNoQkRyYWdFdmVudChXaWRnZXQgd2lkLCBYRXZlbnQgKmV2ZW50KTsKdm9pZCBfWG1IYW5kbGVN ZW51QnV0dG9uUHJlc3MoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudUJ0 bkRvd24oV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1NZW51QnRu VXAoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpw YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1DYWxsUm93Q29sdW1uTWFwQ2Fs bGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htQ2FsbFJvd0NvbHVtblVu bWFwQ2FsbGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudVBvcERv d24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKnBvcHBlZF91cCk7CkJvb2xlYW4g X1htSXNBY3RpdmVUZWFyT2ZmKFdpZGdldCB3KTsKdm9pZCBfWG1NZW51SGVscChXaWRnZXQgd2lk LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h bCAqbnVtX3BhcmFtcyk7CldpZGdldCBfWG1NZW51TmV4dEl0ZW0oV2lkZ2V0IG1lbnUsIFdpZGdl dCBjdXJyZW50X2l0ZW0pOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1TZWxlY3Rpb25Cb3hXaWRnZXRD bGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveFJlYyAqWG1TZWxlY3Rpb25Cb3hX aWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveENsYXNzUmVjICpYbVNlbGVjdGlv bkJveFdpZGdldENsYXNzOwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25Cb3go V2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3Vu dCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25EaWFsb2coV2lkZ2V0IHBhcmVudCwg Y2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRn ZXQgWG1DcmVhdGVQcm9tcHREaWFsb2coV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICph cmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1TZWxlY3Rpb25Cb3hH ZXRDaGlsZChXaWRnZXQgcGFyZW50LCB1bnNpZ25lZCBjaGFyIGNoaWxkKTsKZXh0ZXJuIFdpZGdl dENsYXNzIHhtVGV4dFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVGV4dFJlYyAqWG1U ZXh0V2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1UZXh0Q2xhc3NSZWMgKlhtVGV4dFdpZGdldENs YXNzOwoKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVRleHQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdD b3VudCk7CgpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2Nyb2xsZWRUZXh0KFdpZGdldCBwYXJlbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnY291bnQpOwoKCgoKCnR5cGVkZWYgc3RydWN0 IF9YbVRleHRTb3VyY2VSZWMgKlhtVGV4dFNvdXJjZTsKCnZvaWQgWG1UZXh0Q2xlYXJTZWxlY3Rp b24oV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKQm9vbGVhbiBYbVRleHRDb3B5KFdpZGdldCB3 aWRnZXQsIFRpbWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0Q3V0KFdpZGdldCB3aWRnZXQsIFRpbWUg dGltZSk7CnZvaWQgWG1UZXh0RGlzYWJsZVJlZGlzcGxheShXaWRnZXQgd2lkZ2V0KTsKdm9pZCBY bVRleHRFbmFibGVSZWRpc3BsYXkoV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmluZFN0 cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgY2hhciAqc3RyaW5nLAog ICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgWG1UZXh0 UG9zaXRpb24gKnBvc2l0aW9uKTsKQm9vbGVhbiBYbVRleHRGaW5kU3RyaW5nV2NzKFdpZGdldCB3 aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCB3Y2hhcl90ICp3Y3N0cmluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFhtVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFhtVGV4dFBvc2l0 aW9uICpwb3NpdGlvbik7CmludCBYbVRleHRHZXRCYXNlbGluZShXaWRnZXQgd2lkZ2V0KTsKWG1U ZXh0UG9zaXRpb24gWG1UZXh0R2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xl YW4gWG1UZXh0R2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFhtVGV4 dEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCB3aWRnZXQpOwpYbVRleHRQb3NpdGlvbiBYbVRl eHRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRHZXRNYXhMZW5ndGgo V2lkZ2V0IHdpZGdldCk7CmNoYXIgKlhtVGV4dEdldFNlbGVjdGlvbihXaWRnZXQgd2lkZ2V0KTsK Qm9vbGVhbiBYbVRleHRHZXRTZWxlY3Rpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQ b3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0KTsKd2NoYXJfdCAqWG1UZXh0R2V0 U2VsZWN0aW9uV2NzKFdpZGdldCB3aWRnZXQpOwpYbVRleHRTb3VyY2UgWG1UZXh0R2V0U291cmNl KFdpZGdldCB3aWRnZXQpOwpjaGFyICpYbVRleHRHZXRTdHJpbmcoV2lkZ2V0IHdpZGdldCk7Cndj aGFyX3QgKlhtVGV4dEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEdldFN1 YnN0cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFy cywgaW50IGJ1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlcik7 CmludCBYbVRleHRHZXRTdWJzdHJpbmdXY3MoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24g c3RhcnQsIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICpidWZmZXIpOwpYbVRleHRQb3NpdGlvbiBYbVRleHRHZXRUb3BDaGFy YWN0ZXIoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0SW5zZXJ0KFdpZGdldCB3aWRnZXQsIFht VGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2b2lkIFhtVGV4dEluc2VydFdj cyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbiwgd2NoYXJfdCAqd2NzdHJp bmcpOwpCb29sZWFuIFhtVGV4dFBhc3RlKFdpZGdldCB3aWRnZXQpOwpCb29sZWFuIFhtVGV4dFBv c1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4 LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4gWG1UZXh0UmVtb3ZlKFdpZGdldCB3aWRnZXQpOwp2b2lk IFhtVGV4dFJlcGxhY2UoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFht VGV4dFBvc2l0aW9uIHRvX3BvcywKICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlKTsKdm9p ZCBYbVRleHRSZXBsYWNlV2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9z LCBYbVRleHRQb3NpdGlvbiB0b19wb3MsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICp3 Y3N0cmluZyk7CnZvaWQgWG1UZXh0U2Nyb2xsKFdpZGdldCB3aWRnZXQsIGludCBsaW5lcyk7CnZv aWQgWG1UZXh0U2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBY bVRleHRTZXRDdXJzb3JQb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3Np dGlvbik7CnZvaWQgWG1UZXh0U2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCwgQm9vbGVhbiBlZGl0 YWJsZSk7CnZvaWQgWG1UZXh0U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0 aW9uIGxlZnQsIFhtVGV4dFBvc2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZv aWQgWG1UZXh0U2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRp b24gcG9zaXRpb24pOwp2b2lkIFhtVGV4dFNldE1heExlbmd0aChXaWRnZXQgd2lkZ2V0LCBpbnQg bWF4X2xlbmd0aCk7CnZvaWQgWG1UZXh0U2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4 dFBvc2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFht VGV4dFNldFNvdXJjZShXaWRnZXQgd2lkZ2V0LCBYbVRleHRTb3VyY2Ugc291cmNlLCBYbVRleHRQ b3NpdGlvbiB0b3BfY2hhcmFjdGVyLCBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb24pOwp2 b2lkIFhtVGV4dFNldFN0cmluZyhXaWRnZXQgd2lkZ2V0LCBjaGFyICp2YWx1ZSk7CnZvaWQgWG1U ZXh0U2V0U3RyaW5nV2NzKFdpZGdldCB3aWRnZXQsIHdjaGFyX3QgKndjc3RyaW5nKTsKdm9pZCBY bVRleHRTZXRUb3BDaGFyYWN0ZXIoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gdG9wX2No YXJhY3Rlcik7CnZvaWQgWG1UZXh0U2hvd1Bvc2l0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv c2l0aW9uIHBvc2l0aW9uKTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0WFlUb1BvcyhXaWRnZXQgd2lk Z2V0LCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5KTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtTGFiZWxH YWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjICpYbUxhYmVsR2Fk Z2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVjICpYbUxhYmVsR2FkZ2V0 Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqUmVjICpYbUxhYmVsR0NhY2hl T2JqZWN0OwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFy ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKCmV4dGVybiBXaWRnZXQgWG1D cmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3Qs IENhcmRpbmFsIGFyZ2NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHQ2FjaGVPYmpDbGFz c1BhcnQgewogICAgICAgIGludCBmb287Cn0gWG1MYWJlbEdDYWNoZU9iakNsYXNzUGFydDsKCnR5 cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWMgewogICAgICAgIE9iamVjdENs YXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICAgICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog ICAgICAgIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1BhcnQgbGFiZWxfY2xhc3NfY2FjaGU7Cn0gWG1M YWJlbEdDYWNoZU9iakNsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1JlYyB4 bUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdDYWNoZU9i alBhcnQgewogICAgICAgIHVuc2lnbmVkIGNoYXIgbGFiZWxfdHlwZTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIGFsaWdubWVudDsKICAgICAgICBYbVN0cmluZ0RpcmVjdGlvbiBzdHJpbmdfZGlyZWN0 aW9uOwoKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24g bWFyZ2luX3dpZHRoOwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fbGVmdDsKICAgICAgICBEaW1l bnNpb24gbWFyZ2luX3JpZ2h0OwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fdG9wOwogICAgICAg IERpbWVuc2lvbiBtYXJnaW5fYm90dG9tOwoKICAgICAgICBCb29sZWFuIHJlY29tcHV0ZV9zaXpl OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFjazsKCiAgICAgICAgdW5zaWduZWQgY2hhciBt ZW51X3R5cGU7Cn0gWG1MYWJlbEdDYWNoZU9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJl bEdDYWNoZU9ialJlYyB7CiAgICAgICAgT2JqZWN0UGFydCBvYmplY3Q7CiAgICAgICAgWG1FeHRQ YXJ0IGV4dDsKICAgICAgICBYbUxhYmVsR0NhY2hlT2JqUGFydCBsYWJlbF9jYWNoZTsKfSBYbUxh YmVsR0NhY2hlT2JqUmVjOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHYWRnZXRDbGFzc1Bh cnQgewogICAgICAgIFh0V2lkZ2V0UHJvYyBzZXRPdmVycmlkZUNhbGxiYWNrOwogICAgICAgIFht TWVudVByb2MgbWVudVByb2NzOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJl bEdhZGdldENsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVj IHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKICAgIFhtR2FkZ2V0Q2xhc3NQYXJ0 IGdhZGdldF9jbGFzczsKICAgIFhtTGFiZWxHYWRnZXRDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0g WG1MYWJlbEdhZGdldENsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHYWRnZXRDbGFzc1JlYyB4bUxh YmVsR2FkZ2V0Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldFBhcnQgewog ICAgICAgIF9YbVN0cmluZyBfbGFiZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAg ICAgICBLZXlTeW0gbW5lbW9uaWM7CiAgICAgICAgU3RyaW5nIG1uZW1vbmljQ2hhcnNldDsKICAg ICAgICBTdHJpbmcgYWNjZWxlcmF0b3I7CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAg ICBQaXhtYXAgcGl4bWFwOwogICAgICAgIFBpeG1hcCBwaXhtYXBfaW5zZW47CgoKICAgICAgICBH QyBub3JtYWxfR0M7CiAgICAgICAgR0MgaW5zZW5zaXRpdmVfR0M7CgogICAgICAgIFhSZWN0YW5n bGUgVGV4dFJlY3Q7CiAgICAgICAgWFJlY3RhbmdsZSBhY2NfVGV4dFJlY3Q7CgogICAgICAgIFht TGFiZWxHQ2FjaGVPYmpQYXJ0ICpjYWNoZTsKfSBYbUxhYmVsR2FkZ2V0UGFydDsKCnR5cGVkZWYg c3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjIHsKICAgICAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAg ICAgICBSZWN0T2JqUGFydCByZWN0YW5nbGU7CiAgICAgICAgWG1HYWRnZXRQYXJ0IGdhZGdldDsK ICAgICAgICBYbUxhYmVsR2FkZ2V0UGFydCBsYWJlbDsKfSBYbUxhYmVsR2FkZ2V0UmVjOwpleHRl cm4gaW50IF9YbUxhYmVsQ2FjaGVDb21wYXJlKFh0UG9pbnRlciBBLCBYdFBvaW50ZXIgQik7CmV4 dGVybiB2b2lkIF9YbUNhbGNMYWJlbEdEaW1lbnNpb25zKFdpZGdldCB3aWQpOwpleHRlcm4gdm9p ZCBfWG1SZUNhY2hlTGFiRyhXaWRnZXQgdyk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFy Z2luSGVpZ2h0KFhtTGFiZWxHYWRnZXQgbHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lk IF9YbUFzc2lnbkxhYkdfTWFyZ2luV2lkdGgoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZh bHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5MZWZ0KFhtTGFiZWxHYWRnZXQg bHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFyZ2luUmln aHQoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNz aWduTGFiR19NYXJnaW5Ub3AoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0 ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5Cb3R0b20oWG1MYWJlbEdhZGdldCBsdywgRGlt ZW5zaW9uIHZhbHVlKTsKCmV4dGVybiB2b2lkIF9YbVByb2Nlc3NEcmFnKFdpZGdldCB3LCBYRXZl bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4g V2lkZ2V0Q2xhc3MgeG1MYWJlbFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxS ZWMgKlhtTGFiZWxXaWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsQ2xhc3NSZWMgKlhtTGFi ZWxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbChXaWRnZXQgcGFyZW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh cmRpbmFsIGFyZ0NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9YbVN0cmluZyBfbGFi ZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAgICAgICBLZXlTeW0gbW5lbW9uaWM7 CiAgICAgICAgWG1TdHJpbmdDaGFyU2V0IG1uZW1vbmljQ2hhcnNldDsKICAgICAgICBTdHJpbmcg YWNjZWxlcmF0b3I7CiAgICAgICAgdW5zaWduZWQgY2hhciBsYWJlbF90eXBlOwogICAgICAgIHVu c2lnbmVkIGNoYXIgYWxpZ25tZW50OwogICAgICAgIFhtU3RyaW5nRGlyZWN0aW9uIHN0cmluZ19k aXJlY3Rpb247CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAgICBEaW1lbnNpb24gbWFy Z2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoOwoKICAgICAgICBEaW1l bnNpb24gbWFyZ2luX2xlZnQ7CiAgICAgICAgRGltZW5zaW9uIG1hcmdpbl9yaWdodDsKICAgICAg ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK CiAgICAgICAgQm9vbGVhbiByZWNvbXB1dGVfc2l6ZTsKCiAgICAgICAgUGl4bWFwIHBpeG1hcDsK ICAgICAgICBQaXhtYXAgcGl4bWFwX2luc2VuOwoKCiAgICAgICAgR0Mgbm9ybWFsX0dDOwogICAg ICAgIEdDIGluc2Vuc2l0aXZlX0dDOwoKICAgICAgICBYUmVjdGFuZ2xlIFRleHRSZWN0OwogICAg ICAgIFhSZWN0YW5nbGUgYWNjX1RleHRSZWN0OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFj azsKCiAgICAgICAgdW5zaWduZWQgY2hhciBtZW51X3R5cGU7Cn0gWG1MYWJlbFBhcnQ7CgoKdHlw ZWRlZiBzdHJ1Y3QgX1htTGFiZWxSZWMgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAg WG1QcmltaXRpdmVQYXJ0IHByaW1pdGl2ZTsKICAgICAgICBYbUxhYmVsUGFydCBsYWJlbDsKfSBY bUxhYmVsUmVjOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFdpZGdldFByb2Mgc2V0T3Zl cnJpZGVDYWxsYmFjazsKICAgICAgICBYbU1lbnVQcm9jIG1lbnVQcm9jczsKICAgICAgICBTdHJp bmcgdHJhbnNsYXRpb25zOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJlbENs YXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbENsYXNzUmVjIHsKICAgICAgICBDb3Jl Q2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1BhcnQgcHJpbWl0 aXZlX2NsYXNzOwogICAgICAgIFhtTGFiZWxDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0gWG1MYWJl bENsYXNzUmVjOwoKCgpleHRlcm4gWG1MYWJlbENsYXNzUmVjIHhtTGFiZWxDbGFzc1JlYzsKCgoK dm9pZCBfWG1DYWxjTGFiZWxEaW1lbnNpb25zKFdpZGdldCB3KTsKZXh0ZXJuIFhtRm9udExpc3Qg X19YbUZvbnRMaXN0QWxsb2MoaW50IG51bWJlck9mRW50cmllcyk7CmV4dGVybiB2b2lkIF9YbUZv bnRMaXN0RW50cnlGcmVlKFhtRm9udExpc3RFbnRyeSBlbnRyeSk7ClhtRm9udExpc3RFbnRyeSBf WG1Gb250TGlzdEVudHJ5Q3JlYXRlKHZvaWQpOwoKCnZvaWQgX19YbVJlbmRlclRhYmxlRmluYWxp c2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBfWG1TdHJpbmcpOwp2b2lkIF9YbVJlbmRlclRhYmxlRmlu YWxpc2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBYbVN0cmluZyk7CnZvaWQgX1htUmVuZGVyVGFibGVG aW5hbGlzZVRhZyhXaWRnZXQsIFhtRm9udExpc3QsIGNoYXIgKik7CgoKCgoKCnR5cGVkZWYgc3Ry dWN0IF9fWG1SZW5kaXRpb25SZWMgewogICAgICAgIGNoYXIgKnRhZzsKICAgICAgICBYbUZvbnRU eXBlIHR5cGU7CiAgICAgICAgWEZvbnRTZXQgZm9udDsKICAgICAgICBpbnQgY291bnQ7Cn0gKl9Y bVJlbmRpdGlvbjsKCnN0cnVjdCBfX1htUmVuZGVyVGFibGVSZWMgewogICAgICAgIHVuc2lnbmVk IGludCBjb3VudDsKICAgICAgICBEaXNwbGF5ICpkcHk7CiAgICAgICAgX1htUmVuZGl0aW9uICpy ZW5kaXRpb25zOwp9OwoKc3RydWN0IF9YbUZvbnRMaXN0Q29udGV4dFJlYyB7CiAgICBYbUZvbnRM aXN0IGZvbnRsaXN0OwogICAgaW50IGN1cnJlbnRfZW50cnk7Cn07CgpzdHJ1Y3QgX19YbVN0cmlu Z0V4dFJlYyB7CiAgICB1bnNpZ25lZCBjaGFyIHRhZzsKICAgIHVuc2lnbmVkIGNoYXIgbGVuOwog ICAgdW5zaWduZWQgY2hhciBkYXRhWzFdOwp9OwoKc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRS ZWMgewogICAgWG1TdHJpbmdDb21wb25lbnRUeXBlIHR5cGU7CiAgICBpbnQgbGVuZ3RoOwogICAg Y2hhciAqZGF0YTsKICAgIHNob3J0IGZvbnQ7Cn07CnR5cGVkZWYgc3RydWN0IF9fWG1TdHJpbmdD b21wb25lbnRSZWMgX1htU3RyaW5nQ29tcG9uZW50UmVjLCAqX1htU3RyaW5nQ29tcG9uZW50OwoK c3RydWN0IF9fWG1TdHJpbmdSZWMgewogICAgc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRSZWMg Kipjb21wb25lbnRzOwogICAgaW50IG51bWJlcl9vZl9jb21wb25lbnRzOwp9OwoKc3RydWN0IF9f WG1TdHJpbmdDb250ZXh0UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAg ICBpbnQgY3VycmVudF9jb21wb25lbnQ7Cn07CgoKCgoKc3RydWN0IF9YbXRTdHJpbmdDb250ZXh0 UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAgICBpbnQgY3VycmVudF9j b21wb25lbnQ7CiAgICBjaGFyICp0ZXh0OwogICAgc2hvcnQgdGV4dGxlbjsKICAgIGNoYXIgKmNo YXJzZXQ7CiAgICBYbVN0cmluZ0RpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBCb29sZWFuIHNlcGFy YXRvcjsKfTsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhtSU1JbnB1dFBvbGljeTsKCgoKCgp2b2lk IF9YbUltU2VuZFNwb3QoV2lkZ2V0IHcpOwoKWElDIFhtSW1HZXRYSUMoV2lkZ2V0IHcsIFhtSU1J bnB1dFBvbGljeSBpbnB1dF9wb2xpY3ksCiAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5h bCBudW1fYXJncyk7ClhJQyBYbUltU2V0WElDKFdpZGdldCB3LCBYSUMgeGljKTsKCgoKCgpYbVNj cmVlbkluZm8gKl9YbUdldFNjcmVlbkluZm8oV2lkZ2V0IHcpOwoKU3RyaW5nIF9YbU1ha2VEaWFs b2dOYW1lKFN0cmluZyBuYW1lKTsKdm9pZCBfWG1FcnJvcihXaWRnZXQgdywgY29uc3QgY2hhciAq bWVzc2FnZSwgLi4uKTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93 VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgU3dX LCBTd0g7Cn0KWG1TV1ZhbHVlczsKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93 VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgTXdX LCBNd0g7CiAgICBpbnQgbWJ3LCBtYmgsIGN3dywgY3doLCBtd3csIG13aCwgd3d3LCB3d2g7CiAg ICBpbnQgczF3LCBzMWgsIHMydywgczJoLCBzM3csIHMzaDsKICAgIFBvc2l0aW9uIG1ieCwgbWJ5 LCBjd3gsIGN3eSwgbXd4LCBtd3ksIHd3eCwgd3d5OwogICAgUG9zaXRpb24gczF4LCBzMXksIHMy eCwgczJ5LCBzM3gsIHMzeTsKfQpYbU1XVmFsdWVzOwoKCnZvaWQgX1htQ2FzY2FkZVBpeG1hcERl ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCldpZGdldCBfTHRG aW5kVmVuZG9yRXh0KFdpZGdldCk7CgoKCgpYbUZvbnRMaXN0IF9YbUZvbnRMaXN0Q3JlYXRlRGVm YXVsdChEaXNwbGF5ICpkaXNwKTsKWG1Gb250TGlzdEVudHJ5IF9YbUZvbnRMaXN0RW50cnlGcm9t VGFnKFhtRm9udExpc3QgZm9udGxpc3QsIGNoYXIgKnRhZyk7CgoKdm9pZCBfWG1Jbml0UHJvdG9j b2xzKFdpZGdldCB3KTsKdm9pZCBfWG1EZXN0cm95UHJvdG9jb2xzKFdpZGdldCB3KTsKCnZvaWQg X1htTlNFRWRpdFJlc0NoZWNrTWVzc2FnZXMoV2lkZ2V0IHcsIFh0UG9pbnRlciBkYXRhLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmNvbnQp OwoKdm9pZCBfTHRWZW5kb3JVbm1hcChXaWRnZXQgY2hpbGQpOwoKCgp2b2lkIF9YbUxhYmVsR2V0 UGl4bWFwU2l6ZShXaWRnZXQgdywgUGl4bWFwIFBpeCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGltZW5zaW9uICp3aWR0aCwgRGltZW5zaW9uICpoZWlnaHQpOwoKCgoKClh0R2VvbWV0cnlS ZXN1bHQgX1htR01SZXBseVRvUXVlcnlHZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKnJlcXVlc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5 ICpyZXBseSk7Clh0R2VvbWV0cnlSZXN1bHQgX1htR01IYW5kbGVRdWVyeUdlb21ldHJ5KFdpZGdl dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdl b21ldHJ5ICpwcm9wb3NlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgWHRXaWRnZXRHZW9tZXRyeSAqYW5zd2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXNpemVfcG9s aWN5KTsKdm9pZCBfWG1HTUVuZm9yY2VNYXJnaW4oV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAg ICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIERp bWVuc2lvbiBtYXJnaW5faGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHVz ZVNldFZhbHVlcyk7CnZvaWQgX1htR01DYWxjU2l6ZShXaWRnZXQgdywKICAgICAgICAgICAgICAg ICAgIERpbWVuc2lvbiBtYXJnaW5fdywgRGltZW5zaW9uIG1hcmdpbl9oLAogICAgICAgICAgICAg ICAgICAgRGltZW5zaW9uICpyZXR3LCBEaW1lbnNpb24gKnJldGgpOwp2b2lkIF9YbUdNRG9MYXlv dXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3csIERpbWVu c2lvbiBtYXJnaW5faCwKICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzaXplX3Bv bGljeSwgc2hvcnQgYWRqdXN0KTsKWHRHZW9tZXRyeVJlc3VsdCBfWG1HTUhhbmRsZUdlb21ldHJ5 TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdpbl93 aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNp b24gbWFyZ2luX2hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyIHJlc2l6ZV9wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiBhbGxvd19vdmVybGFwKTsKQm9vbGVhbiBfWG1H TU92ZXJsYXAoV2lkZ2V0IHcsIFdpZGdldCBpbnN0aWdhdG9yLAogICAgICAgICAgICAgICAgICAg ICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g d2lkdGgsIERpbWVuc2lvbiBoZWlnaHQpOwoKCnZvaWQgX1htQmJNYXAoV2lkZ2V0IHcpOwp2b2lk IF9YbUJiVW5tYXAoV2lkZ2V0IHcpOwoKCnZvaWQgX1htU2V0dXBJbWFnZUNhY2hlKHZvaWQpOwoK CnZvaWQgX1htRmFrZUV4cG9zZShXaWRnZXQgbWVudV9zaGVsbCk7CkJvb2xlYW4gX1htTWVudUdl dEluUE1Nb2RlKFdpZGdldCB3KTsKCgplbnVtIHsKICBYbU1FTlVfRk9DVVNfU0FWRT0wLAogIFht TUVOVV9GT0NVU19SRVNUT1JFLAogIFhtTUVOVV9GT0NVU19TRVQKfTsKCgp2b2lkIF9YbU1lc3Nh Z2VCb3hJbnN0YWxsSW1hZ2VzKFdpZGdldCB3KTsKCgp2b2lkIF9YbUluc3RhbGxTdGlwcGxlSW1h Z2VzKFdpZGdldCB3KTsKCgoKCgp2b2lkIF9YbVJDU2V0TWFyZ2lucyhXaWRnZXQgcmMpOwpYdEdl b21ldHJ5UmVzdWx0IF9YbVJDQWRqdXN0U2l6ZShXaWRnZXQgcmMsIFdpZGdldCBpbnN0aWcsIFh0 V2lkZ2V0R2VvbWV0cnkgKmluc3RpZ19yZXF1ZXN0KTsKdm9pZCBfWG1SQ1ByZWZlcnJlZFNpemUo V2lkZ2V0IHJjLCBYdFdpZGdldEdlb21ldHJ5ICpyY2cpOwoKCnZvaWQgX1htRXhwb3J0WG1TdHJp bmcoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnZvaWQgX1htRXhwb3J0 U3RyaW5nKFdpZGdldCB3LCBpbnQgb2Zmc2V0LCBYdEFyZ1ZhbCAqdmFsdWUpOwp2b2lkIF9YbU1h bmFnZXJJbnN0YWxsQWNjZWxlcmF0b3IoV2lkZ2V0IG0sIFdpZGdldCB3LCBTdHJpbmcgcyk7CnZv aWQgX1htTWFuYWdlckluc3RhbGxNbmVtb25pYyhXaWRnZXQgbSwgV2lkZ2V0IHcsIEtleVN5bSBt bik7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbEFjY2VsZXJhdG9yKFdpZGdldCBtLCBXaWRnZXQg dyk7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbE1uZW1vbmljKFdpZGdldCBtLCBXaWRnZXQgdyk7 CnZvaWQgX1htU2Nyb2xsZWRXUHJlZmVycmVkU2l6ZShXaWRnZXQgdywgV2lkZ2V0IGluc3RpZ2F0 b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRy eSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7CnZvaWQgX1htU2Nyb2xsZWRX TGF5b3V0KFdpZGdldCB3LCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICppbnN0aWdhdG9yX2dlb20sIFhtU1dW YWx1ZXMgKiB2YWxzKTsKdm9pZCBfWG1TY3JvbGxlZFdDb25maWd1cmVDaGlsZHJlbihXaWRnZXQg dywgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgWHRXaWRnZXRHZW9tZXRyeSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7 CgoKQm9vbGVhbiBfWG1TZWxlY3Rpb25Cb3hNYXRjaChYbVNlbGVjdGlvbkJveFdpZGdldCB3KTsK CgoKdm9pZCBfWG1QdXNoQnV0dG9uU2V0VHJhbnNsYXRpb24oV2lkZ2V0LCBpbnQpOwoKCnZvaWQg X1htQ2hhbmdlVlNCKFhtVGV4dFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpOwp2b2lkIF9Y bVJlZGlzcGxheUhCYXIoWG1UZXh0V2lkZ2V0IHcsIGludCBvZmZzZXQpOwppbnQgX1htRm9udENh bGN1bGF0ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aChXaWRnZXQgdywgWEZvbnRTdHJ1Y3QgKmZzKTsK CnZvaWQgX1htU2V0Rm9jdXNSZXNldEZsYWcoV2lkZ2V0IHcsIEJvb2xlYW4gdmFsdWUpOwpCb29s ZWFuIF9YbUdldEZvY3VzUmVzZXRGbGFnKFdpZGdldCB3KTsKV2lkZ2V0IF9YbUdldEFjdGl2ZVRh Ykdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQg d2lkZ2V0KTsKdHlwZWRlZiBlbnVtIF9YbU1vZGlmaWVyTGV2ZWxzIHsKICAgIEFMVE1vZGlmaWVy ID0gMCwKICAgIE1FVEFNb2RpZmllciwKICAgIFNVUEVSTW9kaWZpZXIsCiAgICBIWVBFUk1vZGlm aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX01PRElGSUVSUwp9 IFhtTW9kaWZpZXJMZXZlbHM7Cgp0eXBlZGVmIE1vZGlmaWVycyBYbU1vZGlmaWVyTWFza1NldFtN QVhfTU9ESUZJRVJTXTsKdHlwZWRlZiBNb2RpZmllcnMgKlhtTW9kaWZpZXJNYXNrU2V0UmVmZXJl bmNlOwoKWG1Nb2RpZmllck1hc2tTZXRSZWZlcmVuY2UgX1htR2V0TW9kaWZpZXJNYXBwaW5nc0Zv ckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1JbnZhbGlkYXRlTW9kaWZpZXJNYXBwaW5n c0ZvckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1SZWZyZXNoVmlydEtleXMoV2lkZ2V0 IHcpOwoKCgp2b2lkIF9YbUFkZEJhY2tncm91bmRUb0NvbG9yQ2FjaGUoU2NyZWVuICpzY3JlZW4s IENvbG9ybWFwIGNvbG9yX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 cmluZyBiYWNrZ3JvdW5kX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcmdiX2ZhbGxiYWNrLCBYcm1WYWx1ZSAqdmFsKTsKdm9pZCBfWG1JbnZhbGlkYXRlQ29sb3JD YWNoZShCb29sZWFuIGRlZmF1bHRfb25seSk7CnZvaWQgX1htUGlja3VwVW5zcGVjaWZpZWRQaXht YXBzKERpc3BsYXkgKmRweSk7CgoKCnZvaWQgX1htU3RyaW5nQmFzZWxpbmVzKFhtRm9udExpc3Qg Zm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0 aW9uIHksIERpbWVuc2lvbiAqYmFzZWxpbmVzKTsKdm9pZCBfWG1TdHJpbmdVcGRhdGUoWG1Gb250 TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZyk7ClBpeGVsIF9YbVdoaXRlUGl4ZWxPZk9i amVjdChXaWRnZXQpOwpQaXhlbCBfWG1CbGFja1BpeGVsT2ZPYmplY3QoV2lkZ2V0KTsKCgoKCnZv aWQgX1htQXBwTG9jayhYdEFwcENvbnRleHQgYXBwYyk7CnZvaWQgX1htQXBwVW5sb2NrKFh0QXBw Q29udGV4dCBhcHBjKTsKdm9pZCBfWG1Qcm9jZXNzTG9jayh2b2lkKTsKdm9pZCBfWG1Qcm9jZXNz VW5sb2NrKHZvaWQpOwp2b2lkIF9YbU9iamVjdExvY2soV2lkZ2V0IHcpOwp2b2lkIF9YbU9iamVj dFVubG9jayhXaWRnZXQgdyk7CgoKCgoKCnZvaWQgX1htUmVnaXN0ZXJOU0VDb252ZXJ0ZXJzKHZv aWQpOwoKCgoKCgp2b2lkIF9YbURyYXdTcXVhcmVCdXR0b24oV2lkZ2V0IHcsIGludCB4LCBpbnQg eSwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2MsIEdDIGJvdHRv bV9nYywgR0Mgc2VsZWN0X2djLCBCb29sZWFuIGZpbGwpOwp2b2lkIF9YbURyYXdEaWFtb25kQnV0 dG9uKFdpZGdldCB3LCBpbnQgeCwgaW50IHksIGludCBzaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgIEdDIHRvcF9nYywgR0MgYm90dG9tX2djLCBHQyBzZWxlY3RfZ2MsIEJvb2xlYW4gZmls bCk7CmV4dGVybiBCb29sZWFuIF9MdENoZWNrQ2xhc3NPZlZlbmRvclNoZWxsKFdpZGdldCB3KTsK ZXh0ZXJuIFdpZGdldENsYXNzIHhtVGV4dEZpZWxkV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVj dCBfWG1UZXh0RmllbGRSZWMgKlhtVGV4dEZpZWxkV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1U ZXh0RmllbGRDbGFzc1JlYyAqWG1UZXh0RmllbGRXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQg WG1DcmVhdGVUZXh0RmllbGQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAq YXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3Vu dCk7CgoKCgoKdm9pZCBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFRp bWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDb3B5KFdpZGdldCB3aWRnZXQsIFRpbWUgdGlt ZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDdXQoV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKaW50 IFhtVGV4dEZpZWxkR2V0QmFzZWxpbmUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFht VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0 RmllbGRHZXRFZGl0YWJsZShXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0Rmll bGRHZXRJbnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1U ZXh0RmllbGRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRGaWVsZEdl dE1heExlbmd0aChXaWRnZXQgd2lkZ2V0KTsKY2hhciAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb24o V2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25Qb3NpdGlvbihX aWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0 KTsKd2NoYXJfdCAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25XY3MoV2lkZ2V0IHdpZGdldCk7CmNo YXIgKlhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCB3aWRnZXQpOwp3Y2hhcl90ICpYbVRleHRG aWVsZEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEZpZWxkR2V0U3Vic3Ry aW5nKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBpbnQgbnVtX2NoYXJzLCBp bnQgYnVmZmVyX3NpemUsIGNoYXIgKmJ1ZmZlcik7CmludCBYbVRleHRGaWVsZEdldFN1YnN0cmlu Z1djcyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFycywg aW50IGJ1ZmZlcl9zaXplLCB3Y2hhcl90ICpidWZmZXIpOwp2b2lkIFhtVGV4dEZpZWxkSW5zZXJ0 KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2 b2lkIFhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBv c2l0aW9uLCB3Y2hhcl90ICp3Y3N0cmluZyk7CkJvb2xlYW4gWG1UZXh0RmllbGRQYXN0ZShXaWRn ZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVRleHRGaWVsZFBvc1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1U ZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4g WG1UZXh0RmllbGRSZW1vdmUoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0RmllbGRSZXBsYWNl KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLCBYbVRleHRQb3NpdGlvbiB0 b19wb3MsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRGaWVsZFJlcGxhY2VXY3MoV2lkZ2V0IHdp ZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFhtVGV4dFBvc2l0aW9uIHRvX3Bvcywgd2No YXJfdCAqd2NzdHJpbmcpOwp2b2lkIFhtVGV4dEZpZWxkU2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0 LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdpZGdl dCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uKTsKdm9pZCBYbVRleHRGaWVsZFNldEVk aXRhYmxlKFdpZGdldCB3aWRnZXQsIEJvb2xlYW4gZWRpdGFibGUpOwp2b2lkIFhtVGV4dEZpZWxk U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBv c2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZvaWQgWG1UZXh0RmllbGRTZXRJ bnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbik7 CnZvaWQgWG1UZXh0RmllbGRTZXRNYXhMZW5ndGgoV2lkZ2V0IHdpZGdldCwgaW50IG1heF9sZW5n dGgpOwp2b2lkIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv c2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFhtVGV4 dEZpZWxkU2V0U3RyaW5nKFdpZGdldCB3aWRnZXQsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRG aWVsZFNldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0LCB3Y2hhcl90ICp3Y3N0cmluZyk7CnZvaWQg WG1UZXh0RmllbGRTaG93UG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9z aXRpb24pOwpYbVRleHRQb3NpdGlvbiBYbVRleHRGaWVsZFhZVG9Qb3MoV2lkZ2V0IHdpZGdldCwg UG9zaXRpb24geCwgUG9zaXRpb24geSk7CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBCb29sZWFu IEVjaG87CiAgICAgICAgQm9vbGVhbiBBbGxvd1NlbGVjdGlvbjsKCgogICAgICAgIGNoYXIgKlNl bGVjdGlvblRleHQ7CiAgICAgICAgaW50IFNlbGVjdGlvbkxlbjsKCiAgICAgICAgWG1UZXh0UG9z aXRpb24gT2xkSGlnaGxpZ2h0U3RhcnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gT2xkSGlnaGxp Z2h0RW5kOwogICAgICAgIFhtVGV4dFBvc2l0aW9uIE9sZEN1cnNvclBvczsKICAgICAgICBpbnQg T2xkQ3Vyc29yWDsKCiAgICAgICAgaW50IEZhc3RJbnNlcnRDdXJzb3JTdGFydDsKICAgICAgICBp bnQgRmFzdEluc2VydFRleHRMZW47CgogICAgICAgIERpbWVuc2lvbiBGb250SGVpZ2h0OwogICAg ICAgIGludCBYRHJhdzsKICAgICAgICBpbnQgWURyYXc7CiAgICAgICAgaW50IFhPZmZzZXQ7CiAg ICAgICAgaW50IE9sZFhPZmZzZXQ7CiAgICAgICAgaW50IFlPZmZzZXQ7CiAgICAgICAgaW50IFRl eHRXaWR0aDsKICAgICAgICBpbnQgT2xkVGV4dFdpZHRoOwp9IFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgYWN0 aXZhdGVfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgZm9jdXNfY2FsbGJhY2s7CiAg ICAgICAgWHRDYWxsYmFja0xpc3QgbG9zaW5nX2ZvY3VzX2NhbGxiYWNrOwogICAgICAgIFh0Q2Fs bGJhY2tMaXN0IG1vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3Qg d2NzX21vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgbW90aW9u X3ZlcmlmeV9jYWxsYmFjazsKCiAgICAgICAgWHRDYWxsYmFja0xpc3QgZ2Fpbl9wcmltYXJ5X2Nh bGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IGxvc2VfcHJpbWFyeV9jYWxsYmFjazsKICAg ICAgICBYdENhbGxiYWNrTGlzdCB2YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrOwogICAgICAgIGNoYXIg KiB2YWx1ZTsKICAgICAgICB3Y2hhcl90ICogd2NfdmFsdWU7CgogICAgICAgIFhtRm9udExpc3Qg Zm9udF9saXN0OwogICAgICAgIFhGb250U3RydWN0ICpmb250OwogICAgICAgIFhtVGV4dFNjYW5U eXBlICpzZWxlY3Rpb25fYXJyYXk7CgogICAgICAgIF9YbUhpZ2hsaWdodERhdGEgaGlnaGxpZ2h0 OwoKICAgICAgICBHQyBnYzsKICAgICAgICBHQyBpbWFnZV9nYzsKICAgICAgICBHQyBzYXZlX2dj OwoKICAgICAgICBQaXhtYXAgaWJlYW1fb2ZmOwogICAgICAgIFBpeG1hcCBhZGRfbW9kZV9jdXJz b3I7CiAgICAgICAgUGl4bWFwIGN1cnNvcjsKICAgICAgICBQaXhtYXAgcHV0YmFjazsKICAgICAg ICBQaXhtYXAgc3RpcHBsZV90aWxlOwogICAgICAgIFBpeG1hcCBpbWFnZV9jbGlwOwoKICAgICAg ICBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb247CiAgICAgICAgWG1UZXh0UG9zaXRpb24g bmV3X2hfb2Zmc2V0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIGhfb2Zmc2V0OwoKICAgICAgICBY bVRleHRQb3NpdGlvbiBvcmlnX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gb3JpZ19yaWdo dDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwcmltX3Bvc19sZWZ0OwogICAgICAgIFhtVGV4dFBv c2l0aW9uIHByaW1fcG9zX3JpZ2h0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIHByaW1fYW5jaG9y OwoKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfcG9zX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9z aXRpb24gc2VjX3Bvc19yaWdodDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfYW5jaG9yOwoK ICAgICAgICBYbVRleHRQb3NpdGlvbiBzdHVmZl9wb3M7CgogICAgICAgIFBvc2l0aW9uIHNlbGVj dF9wb3NfeDsKCiAgICAgICAgVGltZSBwcmltX3RpbWU7CiAgICAgICAgVGltZSBkZXN0X3RpbWU7 CiAgICAgICAgVGltZSBzZWNfdGltZTsKICAgICAgICBUaW1lIGxhc3RfdGltZTsKCiAgICAgICAg WHRJbnRlcnZhbElkIHRpbWVyX2lkOwogICAgICAgIFh0SW50ZXJ2YWxJZCBzZWxlY3RfaWQ7Cgog ICAgICAgIGludCBibGlua19yYXRlOwogICAgICAgIGludCBzZWxlY3Rpb25fYXJyYXlfY291bnQ7 CiAgICAgICAgaW50IHRocmVzaG9sZDsKICAgICAgICBpbnQgc2l6ZV9hbGxvY2Q7CiAgICAgICAg aW50IHN0cmluZ19sZW5ndGg7CgogICAgICAgIGludCBjdXJzb3JfaGVpZ2h0OwogICAgICAgIGlu dCBjdXJzb3Jfd2lkdGg7CiAgICAgICAgaW50IHNhcnJheV9pbmRleDsKICAgICAgICBpbnQgbWF4 X2xlbmd0aDsKCgogICAgICAgIGludCBtYXhfY2hhcl9zaXplOwogICAgICAgIHNob3J0IGNvbHVt bnM7CgogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGg7CiAgICAgICAgRGltZW5zaW9uIG1h cmdpbl9oZWlnaHQ7CiAgICAgICAgRGltZW5zaW9uIGF2ZXJhZ2VfY2hhcl93aWR0aDsKICAgICAg ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK ICAgICAgICBEaW1lbnNpb24gZm9udF9hc2NlbnQ7CiAgICAgICAgRGltZW5zaW9uIGZvbnRfZGVz Y2VudDsKCiAgICAgICAgQm9vbGVhbiByZXNpemVfd2lkdGg7CgogICAgICAgIEJvb2xlYW4gcGVu ZGluZ19kZWxldGU7CgogICAgICAgIEJvb2xlYW4gZWRpdGFibGU7CiAgICAgICAgQm9vbGVhbiB2 ZXJpZnlfYmVsbDsKCgogICAgICAgIEJvb2xlYW4gY3Vyc29yX3Bvc2l0aW9uX3Zpc2libGU7Cgog ICAgICAgIEJvb2xlYW4gdHJhdmVyc2VkOwoKICAgICAgICBCb29sZWFuIGFkZF9tb2RlOwogICAg ICAgIEJvb2xlYW4gaGFzX2ZvY3VzOwoKICAgICAgICBCb29sZWFuIGJsaW5rX29uOwogICAgICAg IHNob3J0IGludCBjdXJzb3Jfb247CiAgICAgICAgQm9vbGVhbiByZWZyZXNoX2liZWFtX29mZjsK CiAgICAgICAgQm9vbGVhbiBoYXZlX2ludmVydGVkX2ltYWdlX2djOwogICAgICAgIEJvb2xlYW4g aGFzX3ByaW1hcnk7CgogICAgICAgIEJvb2xlYW4gaGFzX3NlY29uZGFyeTsKCiAgICAgICAgQm9v bGVhbiBoYXNfZGVzdGluYXRpb247CgogICAgICAgIEJvb2xlYW4gc2VjX2RyYWc7CiAgICAgICAg Qm9vbGVhbiBzZWxlY3Rpb25fbW92ZTsKCiAgICAgICAgQm9vbGVhbiBwZW5kaW5nX29mZjsKICAg ICAgICBCb29sZWFuIGZvbnRsaXN0X2NyZWF0ZWQ7CgogICAgICAgIEJvb2xlYW4gaGFzX3JlY3Q7 CiAgICAgICAgQm9vbGVhbiBkb19kcm9wOwoKCgogICAgICAgIEJvb2xlYW4gY2FuY2VsOwogICAg ICAgIEJvb2xlYW4gZXh0ZW5kaW5nOwogICAgICAgIEJvb2xlYW4gc2VjX2V4dGVuZGluZzsKICAg ICAgICBCb29sZWFuIGNoYW5nZWRfdmlzaWJsZTsKCiAgICAgICAgQm9vbGVhbiBoYXZlX2ZvbnRz ZXQ7CgogICAgICAgIEJvb2xlYW4gaW5fc2V0dmFsdWVzOwogICAgICAgIEJvb2xlYW4gZG9fcmVz aXplOwogICAgICAgIEJvb2xlYW4gcmVkaXNwbGF5OwogICAgICAgIEJvb2xlYW4gb3ZlcnN0cmlr ZTsKICAgICAgICBCb29sZWFuIHNlbF9zdGFydDsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u OwogICAgICAgIEJvb2xlYW4gY2hlY2tfc2V0X3JlbmRlcl90YWJsZTsKICAgICAgICBCb29sZWFu IHVzZV94ZnQ7Cn0gWG1UZXh0RmllbGRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVs ZFJlYyB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBYbVByaW1pdGl2ZVBhcnQgcHJp bWl0aXZlOwogICAgICAgIFhtVGV4dEZpZWxkUGFydCB0ZXh0Owp9IFhtVGV4dEZpZWxkUmVjOwoK CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVGV4dEZp ZWxkQ2xhc3NQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVsZENsYXNzUmVjIHsKICAg ICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1Bh cnQgcHJpbWl0aXZlX2NsYXNzOwogICAgICAgIFhtVGV4dEZpZWxkQ2xhc3NQYXJ0IHRleHRmaWVs ZF9jbGFzczsKfSBYbVRleHRGaWVsZENsYXNzUmVjOwoKCgpleHRlcm4gWG1UZXh0RmllbGRDbGFz c1JlYyB4bVRleHRGaWVsZENsYXNzUmVjOwpleHRlcm4gY29uc3QgY2hhciBfWG1BcnJvd0JfZGVm YXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1CdWxsZXRpbkJfZGVmYXVs dFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9tZW51YmFyX2V2 ZW50c1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9wX2V2ZW50c1tdOwpleHRlcm4g Y29uc3QgY2hhciBfWG1EcmF3aW5nQV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25z dCBjaGFyIF9YbURyYXdpbmdBX3RyYXZlcnNhbFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3Qg Y2hhciBfWG1EcmF3bkJfZGVmYXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBf WG1GcmFtZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbUxhYmVs X2RlZmF1bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGFiZWxfbWVudVRy YW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1MYWJlbF9tZW51X3RyYXZlcnNhbF9l dmVudHNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGlzdF9MaXN0WGxhdGlvbnMxW107CmV4dGVy biBjb25zdCBjaGFyIF9YbUxpc3RfTGlzdFhsYXRpb25zMltdOwpleHRlcm4gY29uc3QgY2hhciBf WG1NYW5hZ2VyX21hbmFnZXJUcmF2ZXJzYWxUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNo YXIgX1htTWFuYWdlcl9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9Y bU1lbnVTaGVsbF90cmFuc2xhdGlvbnMgW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVByaW1pdGl2 ZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVB1c2hCX2RlZmF1 bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUHVzaEJfbWVudVRyYW5zbGF0 aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fbWVudV90cmF2ZXJzYWxfdGFi bGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUm93Q29sdW1uX2Jhcl90YWJsZVtdOwpleHRlcm4g Y29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fb3B0aW9uX3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFy IF9YbVJvd0NvbHVtbl9tZW51X3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNhc2hfZGVm VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbEJhcl9kZWZhdWx0VHJh bnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19TY3JvbGxlZFdpbmRv d1hsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19DbGlwV2luZG93VHJh bnNsYXRpb25UYWJsZVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1TY3JvbGxlZFdfV29ya1dpbmRv d1RyYW5zbGF0aW9uVGFibGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU2VsZWN0aW9CX2RlZmF1 bHRUZXh0QWNjZWxlcmF0b3JzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRlYXJPZmZCX292ZXJy aWRlVHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGlu Z3MxW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MyW107CmV4dGVy biBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFy IF9YbVRleHRJbl9YbVRleHRFdmVudEJpbmRpbmdzMVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1U ZXh0SW5fWG1UZXh0RXZlbnRCaW5kaW5nczJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVGV4dElu X1htVGV4dEV2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRJbl9YbVRl eHRFdmVudEJpbmRpbmdzM1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Ub2dnbGVCX2RlZmF1bHRU cmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVG9nZ2xlQl9tZW51VHJhbnNsYXRp b25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2ZhbGxiYWNrQmluZGluZ1N0cmlu Z1tdOwoKCgpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hY29ybkZhbGxiYWNrQmluZGlu Z1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hcG9sbG9GYWxsYmFja0Jp bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGdGYWxsYmFja0Jp bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGVjRmFsbGJhY2tC aW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2RibGNsa0ZhbGxi YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19ocEZhbGxi YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19pYm1GYWxs YmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfaW5nckZh bGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19tZWdh dGVrRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlz X21vdG9yb2xhRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZp cnRLZXlzX3NnaUZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1W aXJ0S2V5c19zaWVtZW5zV3gyMDBGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0 IGNoYXIgX1htVmlydEtleXNfc2llbWVuczk3MzNGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0 ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfc3VuRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4 dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX3Rla0ZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpl bnVtIHsKICAgIFhtQ2xpcGJvYXJkRmFpbCwKICAgIFhtQ2xpcGJvYXJkU3VjY2VzcywKICAgIFht Q2xpcGJvYXJkVHJ1bmNhdGUsCgogICAgWG1DbGlwYm9hcmRMb2NrZWQgPSA0LAoKICAgIFhtQ2xp cGJvYXJkQmFkRm9ybWF0LAogICAgWG1DbGlwYm9hcmROb0RhdGEKfTsKCgplbnVtIHsKICAgIENs aXBib2FyZEZhaWwsCiAgICBDbGlwYm9hcmRTdWNjZXNzLAogICAgQ2xpcGJvYXJkVHJ1bmNhdGUs CgogICAgQ2xpcGJvYXJkTG9ja2VkID0gNCwKCiAgICBDbGlwYm9hcmRCYWRGb3JtYXQsCiAgICBD bGlwYm9hcmROb0RhdGEKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGxvbmcgRGF0YUlkOwogICAg bG9uZyBQcml2YXRlSWQ7Cn0gWG1DbGlwYm9hcmRQZW5kaW5nUmVjLCAqWG1DbGlwYm9hcmRQZW5k aW5nTGlzdDsKCnR5cGVkZWYgdm9pZCAoKlhtQ3V0UGFzdGVQcm9jKShXaWRnZXQsIGludCAqLCBp bnQgKiwgaW50ICopOwp0eXBlZGVmIHZvaWQgKCpWb2lkUHJvYykoV2lkZ2V0IHcsIGludCAqZGF0 YV9pZCwgaW50ICpwcml2YXRlX2lkLCBpbnQgKnJlYXNvbik7CgoKaW50IFhtQ2xpcGJvYXJkQmVn aW5Db3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAg ICAgICAgICBYbVN0cmluZyBjbGlwX2xhYmVsLCBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgVm9pZFByb2MgY2FsbGJhY2ssIGxvbmcgKml0ZW1faWQpOwoKaW50IFhtQ2xp cGJvYXJkQ2FuY2VsQ29weShEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBsb25nIGl0 ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k b3csIGxvbmcgaXRlbV9pZCwgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAgICAg WHRQb2ludGVyIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGxvbmcgcHJpdmF0ZV9pZCwg bG9uZyAqZGF0YV9pZCk7CmludCBYbUNsaXBib2FyZENvcHlCeU5hbWUoRGlzcGxheSAqZGlzcGxh eSwgV2luZG93IHdpbmRvdywgbG9uZyBkYXRhX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg IFh0UG9pbnRlciBidWZmZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBsb25nIHByaXZhdGVfaWQp OwppbnQgWG1DbGlwYm9hcmRFbmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3cs IGxvbmcgaXRlbV9pZCk7CmludCBYbUNsaXBib2FyZEVuZFJldHJpZXZlKERpc3BsYXkgKmRpc3Bs YXksIFdpbmRvdyB3aW5kb3cpOwppbnQgWG1DbGlwYm9hcmRJbnF1aXJlQ291bnQoRGlzcGxheSAq ZGlzcGxheSwgV2luZG93IHdpbmRvdywgaW50ICpjb3VudCwgdW5zaWduZWQgbG9uZyAqbWF4X2xl bmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVGb3JtYXQoRGlzcGxheSAqZGlzcGxheSwgV2lu ZG93IHdpbmRvdywgaW50IGluZGV4LCBYdFBvaW50ZXIgZm9ybWF0X25hbWVfYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbiwgdW5zaWduZWQg bG9uZyAqY29waWVkX2xlbik7CmludCBYbUNsaXBib2FyZElucXVpcmVMZW5ndGgoRGlzcGxheSAq ZGlzcGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsIHVuc2lnbmVkIGxvbmcg Kmxlbmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVQZW5kaW5nSXRlbXMoRGlzcGxheSAqZGlz cGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgWG1DbGlwYm9hcmRQZW5kaW5nTGlzdCAqaXRlbV9saXN0LCB1bnNp Z25lZCBsb25nICpjb3VudCk7CmludCBYbUNsaXBib2FyZExvY2soRGlzcGxheSAqZGlzcGxheSwg V2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFJlZ2lzdGVyRm9ybWF0KERpc3BsYXkgKmRp c3BsYXksIGNoYXIgKmZvcm1hdF9uYW1lLCBpbnQgZm9ybWF0X2xlbmd0aCk7CmludCBYbUNsaXBi b2FyZFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csIGNoYXIgKmZvcm1h dF9uYW1lLCBYdFBvaW50ZXIgYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGxlbmd0aCwgdW5zaWduZWQgbG9uZyAqbnVtX2J5dGVzLCBsb25nICpwcml2YXRlX2lk KTsKaW50IFhtQ2xpcGJvYXJkU3RhcnRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k b3csIFhtU3RyaW5nIGNsaXBfbGFiZWwsIFRpbWUgdGltZXN0YW1wLAogICAgICAgICAgICAgICAg ICAgICAgICAgV2lkZ2V0IHdpZGdldCwgWG1DdXRQYXN0ZVByb2MgY2FsbGJhY2ssIGxvbmcgKml0 ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRTdGFydFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdp bmRvdyB3aW5kb3csIFRpbWUgdGltZXN0YW1wKTsKaW50IFhtQ2xpcGJvYXJkVW5kb0NvcHkoRGlz cGxheSAqZGlzcGxheSwgV2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFVubG9jayhEaXNw bGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBCb29sZWFuIHJlbW92ZV9hbGxfbG9ja3MpOwpp bnQgWG1DbGlwYm9hcmRXaXRoZHJhd0Zvcm1hdChEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2lu ZG93LCBpbnQgZGF0YV9pZCk7CkF0b20gWG1JbnRlcm5BdG9tKERpc3BsYXkgKmRpc3BsYXksIFN0 cmluZyBuYW1lLCBCb29sZWFuIG9ubHlfaWZfZXhpc3RzKTsKU3RyaW5nIFhtR2V0QXRvbU5hbWUo RGlzcGxheSAqZGlzcGxheSwgQXRvbSBhdG9tKTsKZW51bSB7CiAgICBYbUNSX0RST1BfU0lURV9M RUFWRV9NRVNTQUdFPTEsCiAgICBYbUNSX0RST1BfU0lURV9FTlRFUl9NRVNTQUdFLAogICAgWG1D Ul9EUk9QX1NJVEVfTU9USU9OX01FU1NBR0UsCiAgICBYbUNSX0RST1BfTUVTU0FHRQp9OwoKZW51 bSB7CiAgICBYbU5PX0RST1BfU0lURT0xLAogICAgWG1JTlZBTElEX0RST1BfU0lURSwKICAgIFht VkFMSURfRFJPUF9TSVRFCn07CmVudW0gewogICAgWG1EUkFHX1VOREVSX05PTkUsCiAgICBYbURS QUdfVU5ERVJfUElYTUFQLAogICAgWG1EUkFHX1VOREVSX1NIQURPV19JTiwKICAgIFhtRFJBR19V TkRFUl9TSEFET1dfT1VULAogICAgWG1EUkFHX1VOREVSX0hJR0hMSUdIVAp9OwoKZW51bSB7CiAg ICBYbURST1BfU0lURV9TSU1QTEUsCiAgICBYbURST1BfU0lURV9DT01QT1NJVEUsCiAgICBYbURS T1BfU0lURV9TSU1QTEVfQ0xJUF9PTkxZID0gMTI4LAogICAgWG1EUk9QX1NJVEVfQ09NUE9TSVRF X0NMSVBfT05MWQp9OwoKZW51bSB7CiAgICBYbUFCT1ZFLAogICAgWG1CRUxPVwp9OwplbnVtIHsK ICAgIFhtRFJPUF9TSVRFX0FDVElWRSwKICAgIFhtRFJPUF9TSVRFX0lOQUNUSVZFCn07CgoKdHlw ZWRlZiBzdHJ1Y3QgX1htRHJhZ1Byb2NDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog ICAgWEV2ZW50ICpldmVudDsKICAgIFRpbWUgdGltZVN0YW1wOwogICAgV2lkZ2V0IGRyYWdDb250 ZXh0OwogICAgUG9zaXRpb24geCwgeTsKICAgIHVuc2lnbmVkIGNoYXIgZHJvcFNpdGVTdGF0dXM7 CiAgICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9u czsKICAgIEJvb2xlYW4gYW5pbWF0ZTsKfSBYbURyYWdQcm9jQ2FsbGJhY2tTdHJ1Y3QsICpYbURy YWdQcm9jQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0 IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgVGltZSB0aW1lU3RhbXA7 CiAgICBXaWRnZXQgZHJhZ0NvbnRleHQ7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgdW5zaWduZWQg Y2hhciBkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICAgdW5z aWduZWQgY2hhciBvcGVyYXRpb25zOwogICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwp9IFht RHJvcFByb2NDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFByb2NDYWxsYmFjazsKCnR5cGVkZWYgc3Ry dWN0IF9YbURyb3BTaXRlVmlzdWFsc1JlYyB7CiAgICBQaXhlbCBiYWNrZ3JvdW5kOwogICAgUGl4 ZWwgZm9yZWdyb3VuZDsKICAgIFBpeGVsIHRvcFNoYWRvd0NvbG9yOwogICAgUGl4bWFwIHRvcFNo YWRvd1BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbVNoYWRvd0NvbG9yOwogICAgUGl4bWFwIGJvdHRv bVNoYWRvd1BpeG1hcDsKICAgIERpbWVuc2lvbiBzaGFkb3dUaGlja25lc3M7CiAgICBQaXhlbCBo aWdobGlnaHRDb2xvcjsKICAgIFBpeG1hcCBoaWdobGlnaHRQaXhtYXA7CiAgICBEaW1lbnNpb24g aGlnaGxpZ2h0VGhpY2tuZXNzOwogICAgRGltZW5zaW9uIGJvcmRlcldpZHRoOwp9IFhtRHJvcFNp dGVWaXN1YWxzUmVjLCAqWG1Ecm9wU2l0ZVZpc3VhbHM7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHht RHJvcFNpdGVNYW5hZ2VyT2JqZWN0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZU1h bmFnZXJDbGFzc1JlYyAqWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3RDbGFzczsKdHlwZWRlZiBzdHJ1 Y3QgX1htRHJvcFNpdGVNYW5hZ2VyUmVjICpYbURyb3BTaXRlTWFuYWdlck9iamVjdDsKCgoKCgpl eHRlcm4gdm9pZCBYbURyb3BTaXRlUmVnaXN0ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVucmVnaXN0 ZXIoV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJvcFNpdGVTdGFydFVwZGF0ZShXaWRn ZXQgcmVmV2lkZ2V0KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVwZGF0ZShXaWRnZXQgZW5jbG9z aW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3VudCk7CmV4dGVybiB2b2lk IFhtRHJvcFNpdGVFbmRVcGRhdGUoV2lkZ2V0IHJlZldpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJv cFNpdGVSZXRyaWV2ZShXaWRnZXQgZW5jbG9zaW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2FyZGluYWwgYXJnQ291bnQpOwpleHRlcm4gaW50IFhtRHJvcFNpdGVRdWVyeVN0YWNraW5nT3Jk ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFdpZGdldCAqcGFyZW50X3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFdpZGdldCAqKmNoaWxkcmVuX3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENhcmRpbmFsICpudW1fY2hpbGRyZW5fcnRuKTsKZXh0ZXJuIHZvaWQgWG1Ecm9w U2l0ZUNvbmZpZ3VyZVN0YWNraW5nT3JkZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHNpYmxpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIHN0YWNrX21vZGUpOwpl eHRlcm4gWG1Ecm9wU2l0ZVZpc3VhbHMgWG1Ecm9wU2l0ZUdldEFjdGl2ZVZpc3VhbHMoV2lkZ2V0 IHdpZGdldCk7CmVudW0gewogICAgWG1EUkFHX05PTkUsCiAgICBYbURSQUdfRFJPUF9PTkxZLAog ICAgWG1EUkFHX1BSRUZFUl9QUkVSRUdJU1RFUiwKICAgIFhtRFJBR19QUkVSRUdJU1RFUiwKICAg IFhtRFJBR19QUkVGRVJfRFlOQU1JQywKICAgIFhtRFJBR19EWU5BTUlDLAogICAgWG1EUkFHX1BS RUZFUl9SRUNFSVZFUgp9OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRGlzcGxheUNsYXNzOwoKdHlw ZWRlZiBzdHJ1Y3QgX1htRGlzcGxheVJlYyAqWG1EaXNwbGF5Owp0eXBlZGVmIHN0cnVjdCBfWG1E aXNwbGF5Q2xhc3NSZWMgKlhtRGlzcGxheUNsYXNzOwoKZXh0ZXJuIFdpZGdldCBYbUdldFhtRGlz cGxheShEaXNwbGF5ICpEc3ApOwpleHRlcm4gV2lkZ2V0IFhtR2V0RHJhZ0NvbnRleHQoV2lkZ2V0 IHcsIFRpbWUgdGltZSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IFhtSUQ7CmVudW0gewogICAgWG1U T1BfTEVWRUxfRU5URVIsCiAgICBYbVRPUF9MRVZFTF9MRUFWRSwKICAgIFhtRFJBR19NT1RJT04s CiAgICBYbURST1BfU0lURV9FTlRFUiwKICAgIFhtRFJPUF9TSVRFX0xFQVZFLAogICAgWG1EUk9Q X1NUQVJULAogICAgWG1EUk9QX0ZJTklTSCwKICAgIFhtRFJBR19EUk9QX0ZJTklTSCwKICAgIFht T1BFUkFUSU9OX0NIQU5HRUQKfTsKCgplbnVtIHsKICAgIFhtRFJPUCwKICAgIFhtRFJPUF9IRUxQ LAogICAgWG1EUk9QX0NBTkNFTCwKICAgIFhtRFJPUF9JTlRFUlJVUFQKfTsKZW51bSB7CiAgICBY bURST1BfRkFJTFVSRSwKICAgIFhtRFJPUF9TVUNDRVNTCn07CgoKCmVudW0gewogICAgWG1CTEVO RF9BTEwsCiAgICBYbUJMRU5EX1NUQVRFX1NPVVJDRSwKICAgIFhtQkxFTkRfSlVTVF9TT1VSQ0Us CiAgICBYbUJMRU5EX05PTkUKfTsKCgoKZW51bSB7CiAgICBYbUNSX1RPUF9MRVZFTF9FTlRFUiwK ICAgIFhtQ1JfVE9QX0xFVkVMX0xFQVZFLAogICAgWG1DUl9EUkFHX01PVElPTiwKICAgIFhtQ1Jf RFJPUF9TSVRFX0VOVEVSLAogICAgWG1DUl9EUk9QX1NJVEVfTEVBVkUsCiAgICBYbUNSX0RST1Bf U1RBUlQsCiAgICBYbUNSX0RST1BfRklOSVNILAogICAgWG1DUl9EUkFHX0RST1BfRklOSVNILAog ICAgWG1DUl9PUEVSQVRJT05fQ0hBTkdFRCwKICAgIF9YbU5VTUJFUl9ETkRfQ0JfUkVBU09OUwp9 OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ0NvbnRleHRDbGFzc1JlYyAqWG1EcmFnQ29udGV4dENs YXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnQ29udGV4dFJlYyAqWG1EcmFnQ29udGV4dDsKZXh0 ZXJuIFdpZGdldENsYXNzIHhtRHJhZ0NvbnRleHRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUFu eUlDQ0NhbGxiYWNrU3RydWN0IHsKICAgaW50IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAg VGltZSB0aW1lU3RhbXA7Cn0gWG1BbnlJQ0NDYWxsYmFja1N0cnVjdCwgKlhtQW55SUNDQ2FsbGJh Y2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2tTdHJ1Y3QgewogICBp bnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVu ICpzY3JlZW47CgogICBXaW5kb3cgd2luZG93OwogICBQb3NpdGlvbiB4LHk7CiAgIHVuc2lnbmVk IGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAgIEF0b20gaWNjSGFuZGxlOwp9IFhtVG9wTGV2ZWxF bnRlckNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0 cnVjdCBfWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBY RXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVuICpzY3JlZW47CiAgIFdp bmRvdyB3aW5kb3c7Cn0gWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbVRvcExldmVs TGVhdmVDYWxsYmFjazsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUVudGVyQ2FsbGJh Y2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVT dGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0 aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKICAgUG9zaXRpb24geCwgeTsK fSBYbURyb3BTaXRlRW50ZXJDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFNpdGVFbnRlckNhbGxiYWNr OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IHsKICAgaW50 IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAgVGltZSB0aW1lU3RhbXA7Cn0gWG1Ecm9wU2l0 ZUxlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BTaXRlTGVhdmVDYWxsYmFjazsKCnR5cGVkZWYg c3RydWN0IF9YbURyYWdNb3Rpb25DYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhF dmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlv bjsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRl U3RhdHVzOwogICBQb3NpdGlvbiB4LCB5Owp9IFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0LCAq WG1EcmFnTW90aW9uQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1PcGVyYXRpb25DaGFuZ2Vk Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1l IHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIg b3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKfSBYbU9wZXJhdGlv bkNoYW5nZWRDYWxsYmFja1N0cnVjdCwgKlhtT3BlcmF0aW9uQ2hhbmdlZENhbGxiYWNrOwoKdHlw ZWRlZiBzdHJ1Y3QgX1htRHJvcFN0YXJ0Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwog ICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVy YXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9w U2l0ZVN0YXR1czsKICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwogICBQb3NpdGlvbiB4LCB5 OwogICBXaW5kb3cgd2luZG93OwogICBBdG9tIGljY0hhbmRsZTsKfSBYbURyb3BTdGFydENhbGxi YWNrU3RydWN0LCAqWG1Ecm9wU3RhcnRDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BG aW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhFdmVudCAqZXZlbnQ7CiAg IFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgdW5zaWduZWQg Y2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3RhdHVzOwogICB1bnNp Z25lZCBjaGFyIGRyb3BBY3Rpb247CiAgIHVuc2lnbmVkIGNoYXIgY29tcGxldGlvblN0YXR1czsK fSBYbURyb3BGaW5pc2hDYWxsYmFja1N0cnVjdCwgKlhtRHJvcEZpbmlzaENhbGxiYWNrOwoKdHlw ZWRlZiBzdHJ1Y3QgX1htRHJhZ0Ryb3BGaW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFz b247CiAgIFhFdmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwp9IFhtRHJhZ0Ryb3BGaW5p c2hDYWxsYmFja1N0cnVjdCwgKlhtRHJhZ0Ryb3BGaW5pc2hDYWxsYmFjazsKCgoKZXh0ZXJuIFdp ZGdldCBYbURyYWdTdGFydChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZl bnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAg ICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBudW1BcmdzKTsKCmV4dGVybiB2b2lkIFhtRHJh Z0NhbmNlbChXaWRnZXQgZHJhZ0NvbnRleHQpOwoKZXh0ZXJuIEJvb2xlYW4gWG1UYXJnZXRzQXJl Q29tcGF0aWJsZShEaXNwbGF5ICpkcHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXRvbSAqZXhwb3J0VGFyZ2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDYXJkaW5hbCBudW1FeHBvcnRUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEF0b20gKmltcG9ydFRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtSW1wb3J0VGFyZ2V0cyk7CmVudW0gewogICAg WG1UUkFOU0ZFUl9GQUlMVVJFLAogICAgWG1UUkFOU0ZFUl9TVUNDRVNTCn07CgpleHRlcm4gV2lk Z2V0Q2xhc3MgeG1Ecm9wVHJhbnNmZXJPYmplY3RDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbURy b3BUcmFuc2ZlckNsYXNzUmVjICpYbURyb3BUcmFuc2Zlck9iamVjdENsYXNzOwp0eXBlZGVmIHN0 cnVjdCBfWG1Ecm9wVHJhbnNmZXJSZWMgKlhtRHJvcFRyYW5zZmVyT2JqZWN0OwoKCgoKCnR5cGVk ZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckVudHJ5UmVjIHsKICAgWHRQb2ludGVyIGNsaWVudF9k YXRhOwogICBBdG9tIHRhcmdldDsKfSBYbURyb3BUcmFuc2ZlckVudHJ5UmVjLCAqWG1Ecm9wVHJh bnNmZXJFbnRyeTsKCldpZGdldCBYbURyb3BUcmFuc2ZlclN0YXJ0KFdpZGdldCByZWZXaWRnZXQs IEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgYXJnQ291bnQpOwp2b2lkIFhtRHJvcFRyYW5zZmVyQWRk KFdpZGdldCB3aWRnZXQsIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJzLCBDYXJkaW5hbCBu dW1fdHJhbnNmZXJzKTsKdHlwZWRlZiBXaWRnZXQgKCpYbURyb3BUcmFuc2ZlclN0YXJ0VHJhbnNm ZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXJnTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRHJvcFRyYW5zZmVyQWRkVHJh bnNmZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYbURyb3BUcmFuc2ZlckVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwpOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5z ZmVyQ2xhc3NQYXJ0IHsKICAgIFhtRHJvcFRyYW5zZmVyU3RhcnRUcmFuc2ZlclByb2Mgc3RhcnRf ZHJvcF90cmFuc2ZlcjsKICAgIFhtRHJvcFRyYW5zZmVyQWRkVHJhbnNmZXJQcm9jIGFkZF9kcm9w X3RyYW5zZmVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BUcmFuc2ZlckNsYXNz UGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckNsYXNzUmVjIHsKICAgIE9iamVj dENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BUcmFuc2ZlckNsYXNzUGFydCBkcm9w VHJhbnNmZXJfY2xhc3M7Cn0gWG1Ecm9wVHJhbnNmZXJDbGFzc1JlYzsKCmV4dGVybiBYbURyb3BU cmFuc2ZlckNsYXNzUmVjIHhtRHJvcFRyYW5zZmVyQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBf WG1Ecm9wVHJhbnNmZXJMaXN0UmVjIHsKICAgIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJf bGlzdDsKICAgIENhcmRpbmFsIG51bV90cmFuc2ZlcnM7Cn0gWG1Ecm9wVHJhbnNmZXJMaXN0UmVj LCAqWG1Ecm9wVHJhbnNmZXJMaXN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5zZmVyUGFy dCB7CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5IGRyb3BfdHJhbnNmZXJzOwogICAgQ2FyZGluYWwg bnVtX2Ryb3BfdHJhbnNmZXJzOwogICAgQXRvbSBzZWxlY3Rpb247CiAgICBXaWRnZXQgZHJhZ0Nv bnRleHQ7CiAgICBUaW1lIHRpbWVzdGFtcDsKICAgIEJvb2xlYW4gaW5jcmVtZW50YWw7CiAgICBX aW5kb3cgc291cmNlX3dpbmRvdzsKICAgIHVuc2lnbmVkIGludCB0YWc7CiAgICBYdFNlbGVjdGlv bkNhbGxiYWNrUHJvYyB0cmFuc2Zlcl9jYWxsYmFjazsKICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNm ZXJfc3RhdHVzOwoKICAgIEF0b20gbW90aWZfZHJvcF9hdG9tOwoKICAgIFhtRHJvcFRyYW5zZmVy TGlzdCBkcm9wX3RyYW5zZmVyX2xpc3RzOwogICAgQ2FyZGluYWwgbnVtX2Ryb3BfdHJhbnNmZXJf bGlzdHM7CiAgICBDYXJkaW5hbCBjdXJfZHJvcF90cmFuc2Zlcl9saXN0OwogICAgQ2FyZGluYWwg Y3VyX3hmZXI7CiAgICBBdG9tICpjdXJfdGFyZ2V0czsKICAgIFh0UG9pbnRlciAqY3VyX2NsaWVu dF9kYXRhOwp9IFhtRHJvcFRyYW5zZmVyUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFu c2ZlclJlYyB7CiAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFhtRHJvcFRyYW5zZmVyUGFydCBk cm9wVHJhbnNmZXI7Cn0gWG1Ecm9wVHJhbnNmZXJSZWM7CmV4dGVybiB2b2lkIF9YbUludGVybkF0 b21BbmROYW1lKERpc3BsYXkgKmRpc3BsYXksIEF0b20gYXRvbSwgU3RyaW5nIG5hbWUpOwoKCmV4 dGVybiB2b2lkIF9YbUZsdXNoQXRvbXNGb3JEaXNwbGF5KERpc3BsYXkgKkRzcCk7CnR5cGVkZWYg bG9uZyBJTlQzMjsKCnR5cGVkZWYgc2hvcnQgSU5UMTY7CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg SU5UODsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIENBUkQzMjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgQ0FSRDE2Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQ0FSRDg7Cgp0eXBlZGVmIENBUkQzMiBC SVRTMzI7CnR5cGVkZWYgQ0FSRDE2IEJJVFMxNjsKCgp0eXBlZGVmIENBUkQ4IEJZVEU7CnR5cGVk ZWYgQ0FSRDggQk9PTDsKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ092ZXJTaGVsbFJlYyAqWG1EcmFn T3ZlclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsQ2xhc3NSZWMg KlhtRHJhZ092ZXJTaGVsbFdpZGdldENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRHJhZ092 ZXJTaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHZvaWQgKCpYbURTTUNyZWF0ZUluZm9Qcm9jKShY bURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9p ZCAoKlhtRFNNRGVzdHJveUluZm9Qcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlht RFNNU3RhcnRVcGRhdGVQcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNNUmV0 cmlldmVJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFyZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2FyZGluYWwpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVVwZGF0ZUluZm9Qcm9jKShYbURyb3BTaXRl TWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNN RW5kVXBkYXRlUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1EU01VcGRhdGVQcm9j KShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYdFBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsK dHlwZWRlZiB2b2lkICgqWG1EU01Qcm9jZXNzTW90aW9uUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRl ZiB2b2lkICgqWG1EU01Qcm9jZXNzRHJvcFByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1E U01PcGVyYXRpb25DaGFuZ2VkUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgq WG1EU01DaGFuZ2VSb290UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01JbnNlcnRJbmZv UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01SZW1vdmVJbmZvUHJvYykoWG1Ecm9wU2l0 ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p bnRlcik7CnR5cGVkZWYgdm9pZCAoKlhtRFNNU3luY1RyZWVQcm9jKShYbURyb3BTaXRlTWFuYWdl ck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVk ZWYgaW50ICgqWG1EU01HZXRUcmVlRnJvbURTTVByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lk ICgqWG1EU01DcmVhdGVEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QpOwp0eXBl ZGVmIHZvaWQgKCpYbURTTURlc3Ryb3lEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl Y3QpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVJlZ2lzdGVySW5mb1Byb2MpKFhtRHJvcFNpdGVNYW5h Z2VyT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIpOwp0eXBlZGVm IFh0UG9pbnRlciAoKlhtRFNNV2lkZ2V0VG9JbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQpOwp0 eXBlZGVmIHZvaWQgKCpYbURTTVVucmVnaXN0ZXJJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIp OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWG1EU01DcmVhdGVJbmZvUHJvYyBjcmVhdGVJbmZvOwog ICAgWG1EU01EZXN0cm95SW5mb1Byb2MgZGVzdHJveUluZm87CiAgICBYbURTTVN0YXJ0VXBkYXRl UHJvYyBzdGFydFVwZGF0ZTsKICAgIFhtRFNNUmV0cmlldmVJbmZvUHJvYyByZXRyaWV2ZUluZm87 CiAgICBYbURTTVVwZGF0ZUluZm9Qcm9jIHVwZGF0ZUluZm87CiAgICBYbURTTUVuZFVwZGF0ZVBy b2MgZW5kVXBkYXRlOwoKICAgIFhtRFNNVXBkYXRlUHJvYyB1cGRhdGVEU007CgogICAgWG1EU01Q cm9jZXNzTW90aW9uUHJvYyBwcm9jZXNzTW90aW9uOwogICAgWG1EU01Qcm9jZXNzRHJvcFByb2Mg cHJvY2Vzc0Ryb3A7CiAgICBYbURTTU9wZXJhdGlvbkNoYW5nZWRQcm9jIG9wZXJhdGlvbkNoYW5n ZWQ7CiAgICBYbURTTUNoYW5nZVJvb3RQcm9jIGNoYW5nZVJvb3Q7CgogICAgWG1EU01JbnNlcnRJ bmZvUHJvYyBpbnNlcnRJbmZvOwogICAgWG1EU01SZW1vdmVJbmZvUHJvYyByZW1vdmVJbmZvOwoK ICAgIFhtRFNNU3luY1RyZWVQcm9jIHN5bmNUcmVlOwogICAgWG1EU01HZXRUcmVlRnJvbURTTVBy b2MgZ2V0VHJlZUZyb21EU007CgogICAgWG1EU01DcmVhdGVEU0luZm9UYWJsZSBjcmVhdGVUYWJs ZTsKICAgIFhtRFNNRGVzdHJveURTSW5mb1RhYmxlIGRlc3Ryb3lUYWJsZTsKICAgIFhtRFNNUmVn aXN0ZXJJbmZvUHJvYyByZWdpc3RlckluZm87CiAgICBYbURTTVdpZGdldFRvSW5mb1Byb2Mgd2lk Z2V0VG9JbmZvOwogICAgWG1EU01VbnJlZ2lzdGVySW5mb1Byb2MgdW5yZWdpc3RlckluZm87Cgog ICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydDsKCnR5 cGVkZWYgc3RydWN0IF9YbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjIHsKICAgIE9iamVjdENsYXNz UGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydCBkcm9wTWFu YWdlcl9jbGFzczsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjOwoKZXh0ZXJuIFhtRHJvcFNp dGVNYW5hZ2VyQ2xhc3NSZWMgeG1Ecm9wU2l0ZU1hbmFnZXJDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1 Y3QgX19YbURyb3BTaXRlVXBkYXRlSW5mb1JlYyB7CiAgWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3Qg ZHNtOwogIFdpZGdldCByZWZXaWRnZXQ7CiAgWHRQb2ludGVyICpuZXh0Owp9IF9YbURyb3BTaXRl VXBkYXRlSW5mb1JlYywgKl9YbURyb3BTaXRlVXBkYXRlSW5mbzsKCnR5cGVkZWYgc3RydWN0IF9Y bURyb3BTaXRlTWFuYWdlclBhcnQgewogICAgWHRDYWxsYmFja1Byb2Mgbm90aWZ5UHJvYzsKICAg IFh0Q2FsbGJhY2tQcm9jIHRyZWVVcGRhdGVQcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRh OwogICAgWHRQb2ludGVyIGRyYWdVbmRlckRhdGE7CiAgICBYdFBvaW50ZXIgY3VySW5mbzsKICAg IFRpbWUgY3VyVGltZTsKICAgIFBvc2l0aW9uIGN1clgsIGN1clksIG9sZFgsIG9sZFk7CiAgICB1 bnNpZ25lZCBjaGFyIGN1ckRyb3BTaXRlU3RhdHVzOwogICAgV2lkZ2V0IGN1ckRyYWdDb250ZXh0 OwogICAgQm9vbGVhbiBjdXJBbmltYXRlOwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb25z OwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb247CiAgICBYbVJlZ2lvbiBjdXJBbmNlc3Rv ckNsaXBSZWdpb247CiAgICBYbVJlZ2lvbiBuZXdBbmNlc3RvckNsaXBSZWdpb247CiAgICBYdFBv aW50ZXIgZHNUYWJsZTsKICAgIFh0UG9pbnRlciBkc1Jvb3Q7CiAgICBQb3NpdGlvbiByb290WCwg cm9vdFk7CiAgICBEaW1lbnNpb24gcm9vdFcsIHJvb3RIOwogICAgWHRQb2ludGVyIGNsaXBwZXJM aXN0OwogICAgX1htRHJvcFNpdGVVcGRhdGVJbmZvIHVwZGF0ZUluZm87Cn0gWG1Ecm9wU2l0ZU1h bmFnZXJQYXJ0LCAqWG1Ecm9wU2l0ZU1hbmFnZXJQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1ht RHJvcFNpdGVNYW5hZ2VyUmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1Ecm9wU2l0 ZU1hbmFnZXJQYXJ0IGRyb3BNYW5hZ2VyOwp9IFhtRHJvcFNpdGVNYW5hZ2VyUmVjOwoKZXh0ZXJu IHZvaWQgX1htRFNNVXBkYXRlKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0IGRzbSwKICAgICAgICAg ICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnREYXRhLAogICAgICAgICAgICAgICAgICAg ICAgICAgWHRQb2ludGVyIGNhbGxEYXRhKTsKZXh0ZXJuIGludCBfWG1EU01HZXRUcmVlRnJvbURT TShYbURyb3BTaXRlTWFuYWdlck9iamVjdCBkc20sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgV2lkZ2V0IHNoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p bnRlciBkYXRhUHRyKTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVTaGVsbChXaWRnZXQgd2lk Z2V0KTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVXcmFwcGVyQ2FuZGlkYXRlKFdpZGdldCB3 aWRnZXQpOwpleHRlcm4gV2lkZ2V0IF9YbUdldEFjdGl2ZURyb3BTaXRlKFdpZGdldCB3aWRnZXQp OwpleHRlcm4gdm9pZCBfWG1TeW5jRHJvcFNpdGVUcmVlKFdpZGdldCBzaGVsbCk7CmV4dGVybiB2 b2lkIF9YbUlFbmRVcGRhdGUoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlu dGVydmFsX2lkKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnU3RhcnRQcm9jKShYbURyYWdDb250ZXh0 LCBXaWRnZXQsIFhFdmVudCAqKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnQ2FuY2VsUHJvYykoWG1E cmFnQ29udGV4dCkgOwp0eXBlZGVmIHN0cnVjdCB7CiAgIFhtRHJhZ1N0YXJ0UHJvYyBzdGFydDsK ICAgWG1EcmFnQ2FuY2VsUHJvYyBjYW5jZWw7CiAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1E cmFnQ29udGV4dENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0Q2xhc3NS ZWMgewogICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgIFhtRHJhZ0NvbnRleHRDbGFzc1Bh cnQgZHJhZ19jbGFzczsKfSBYbURyYWdDb250ZXh0Q2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnQ29u dGV4dENsYXNzUmVjIHhtRHJhZ0NvbnRleHRDbGFzc1JlYzsKCgoKCnR5cGVkZWYgc3RydWN0IHsK ICAgV2luZG93IGZyYW1lOwogICBXaW5kb3cgd2luZG93OwogICBXaWRnZXQgc2hlbGw7CiAgIHVu c2lnbmVkIGNoYXIgZmxhZ3M7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAg IGludCB4T3JpZ2luLCB5T3JpZ2luOwogICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKICAg dW5zaWduZWQgaW50IGRlcHRoOwogICBYdFBvaW50ZXIgaWNjSW5mbzsKfSBYbURyYWdSZWNlaXZl ckluZm9TdHJ1Y3QsICpYbURyYWdSZWNlaXZlckluZm87CgoKdHlwZWRlZiB1bmlvbiBfWG1Db252 ZXJ0U2VsZWN0aW9uUmVjIHsKICAgWHRDb252ZXJ0U2VsZWN0aW9uSW5jclByb2Mgc2VsX2luY3I7 CiAgIFh0Q29udmVydFNlbGVjdGlvblByb2Mgc2VsOwp9IFhtQ29udmVydFNlbGVjdGlvblJlYzsK CnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0UGFydCB7CiAgIEF0b20gKmV4cG9ydFRhcmdl dHM7CiAgIENhcmRpbmFsIG51bUV4cG9ydFRhcmdldHM7CiAgIFhtQ29udmVydFNlbGVjdGlvblJl YyBjb252ZXJ0UHJvYzsKICAgWHRQb2ludGVyIGNsaWVudERhdGE7CiAgIFhtRHJhZ0ljb25PYmpl Y3Qgc291cmNlQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9iamVjdCBzdGF0ZUN1cnNvckljb247 CiAgIFhtRHJhZ0ljb25PYmplY3Qgb3BlcmF0aW9uQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9i amVjdCBzb3VyY2VQaXhtYXBJY29uOwogICBQaXhlbCBjdXJzb3JCYWNrZ3JvdW5kOwogICBQaXhl bCBjdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCB2YWxpZEN1cnNvckZvcmVncm91bmQ7CiAgIFBp eGVsIGludmFsaWRDdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCBub25lQ3Vyc29yRm9yZWdyb3Vu ZDsKICAgWHRDYWxsYmFja0xpc3QgZHJhZ01vdGlvbkNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlz dCBvcGVyYXRpb25DaGFuZ2VkQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IHNpdGVFbnRlckNh bGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCBzaXRlTGVhdmVDYWxsYmFjazsKICAgWHRDYWxsYmFj a0xpc3QgdG9wTGV2ZWxFbnRlckNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCB0b3BMZXZlbExl YXZlQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyb3BTdGFydENhbGxiYWNrOwogICBYdENh bGxiYWNrTGlzdCBkcm9wRmluaXNoQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyYWdEcm9w RmluaXNoQ2FsbGJhY2s7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ09wZXJhdGlvbnM7CiAgIEJvb2xl YW4gaW5jcmVtZW50YWw7CiAgIHVuc2lnbmVkIGNoYXIgYmxlbmRNb2RlbDsKCiAgIFdpbmRvdyBz cmNXaW5kb3c7CiAgIFRpbWUgZHJhZ1N0YXJ0VGltZTsKICAgQXRvbSBpY2NIYW5kbGU7CiAgIFdp ZGdldCBzb3VyY2VXaWRnZXQ7CiAgIEJvb2xlYW4gc291cmNlSXNFeHRlcm5hbDsKCiAgIEJvb2xl YW4gdG9wV2luZG93c0ZldGNoZWQ7CiAgIHVuc2lnbmVkIGNoYXIgY29tbVR5cGU7CiAgIHVuc2ln bmVkIGNoYXIgYW5pbWF0aW9uVHlwZTsKCiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICB1 bnNpZ25lZCBjaGFyIG9wZXJhdGlvbnM7CiAgIHVuc2lnbmVkIGludCBsYXN0RXZlbnRTdGF0ZTsK ICAgdW5zaWduZWQgY2hhciBkcmFnQ29tcGxldGlvblN0YXR1czsKICAgdW5zaWduZWQgY2hhciBk cmFnRHJvcENvbXBsZXRpb25TdGF0dXM7CiAgIEJvb2xlYW4gZm9yY2VJUEM7CiAgIEJvb2xlYW4g c2VydmVyR3JhYmJlZDsKICAgQm9vbGVhbiB1c2VMb2NhbDsKICAgQm9vbGVhbiBpbkRyb3BTaXRl OwogICBYdEludGVydmFsSWQgZHJhZ1RpbWVySWQ7CgogICBUaW1lIHJvdW5kT2ZmVGltZTsKICAg VGltZSBsYXN0Q2hhbmdlVGltZTsKICAgVGltZSBjcm9zc2luZ1RpbWU7CgogICBUaW1lIGRyYWdG aW5pc2hUaW1lOwogICBUaW1lIGRyb3BGaW5pc2hUaW1lOwoKICAgQXRvbSBkcm9wU2VsZWN0aW9u OwogICBXaWRnZXQgc3JjU2hlbGw7CiAgIFBvc2l0aW9uIHN0YXJ0WCwgc3RhcnRZOwoKICAgWG1J RCBzaXRlSUQ7CgogICBTY3JlZW4gKmN1cnJTY3JlZW47CiAgIFdpbmRvdyBjdXJyV21Sb290Owog ICBYbURyYWdPdmVyU2hlbGxXaWRnZXQgY3VyRHJhZ092ZXI7CiAgIFhtRHJhZ092ZXJTaGVsbFdp ZGdldCBvcmlnRHJhZ092ZXI7CgogICBYbURyYWdSZWNlaXZlckluZm9TdHJ1Y3QgKmN1cnJSZWNl aXZlckluZm87CiAgIFhtRHJhZ1JlY2VpdmVySW5mb1N0cnVjdCAqcm9vdFJlY2VpdmVySW5mbzsK ICAgWG1EcmFnUmVjZWl2ZXJJbmZvU3RydWN0ICpyZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBu dW1SZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBtYXhSZWNlaXZlckluZm9zOwoKICAgdW5zaWdu ZWQgY2hhciB0cmFja2luZ01vZGU7CiAgIHVuc2lnbmVkIGNoYXIgYWN0aXZlUHJvdG9jb2xTdHls ZTsKICAgdW5zaWduZWQgY2hhciBhY3RpdmVCbGVuZE1vZGVsOwogICBCb29sZWFuIGRyYWdEcm9w Q2FuY2VsRWZmZWN0Owp9IFhtRHJhZ0NvbnRleHRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJh Z0NvbnRleHRSZWMgewogICBDb3JlUGFydCBjb3JlOwogICBYbURyYWdDb250ZXh0UGFydCBkcmFn Owp9IFhtRHJhZ0NvbnRleHRSZWM7CgoKCmV4dGVybiBYbURyYWdSZWNlaXZlckluZm8gX1htQWxs b2NSZWNlaXZlckluZm8oWG1EcmFnQ29udGV4dCBkYyk7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9Y bUdldEFjdGl2ZVByb3RvY29sU3R5bGUoV2lkZ2V0IHcpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBD QVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rpb25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25z OwogICAgSU5UMzIgaW5wdXRfbW9kZTsKICAgIENBUkQzMiBzdGF0dXM7Cn0gTW90aWZXbUhpbnRz LCBNd21IaW50czsKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBmbGFnczsKICAgIFdpbmRvdyB3 bV93aW5kb3c7Cn0gTW90aWZXbUluZm87Cgp0eXBlZGVmIE1vdGlmV21JbmZvIE13bUluZm87CgoK CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rp b25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25zOwogICAgSU5UMzIgaW5wdXRNb2RlOwogICAgQ0FS RDMyIHN0YXR1czsKfSBQcm9wTW90aWZXbUhpbnRzOwoKdHlwZWRlZiBQcm9wTW90aWZXbUhpbnRz IFByb3BNd21IaW50czsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQzMiBmbGFnczsK ICAgIENBUkQzMiB3bVdpbmRvdzsKfSBQcm9wTW90aWZXbUluZm87Cgp0eXBlZGVmIFByb3BNb3Rp ZldtSW5mbyBQcm9wTXdtSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX1htU2hlbGxFeHRSZWMgKlhtU2hl bGxFeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0Q2xhc3NSZWMgKlhtU2hlbGxF eHRPYmplY3RDbGFzczsKCgoKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2hlbGxFeHRDbGFzczsKCgp0 eXBlZGVmIHN0cnVjdCBfWG1TaGVsbEV4dENsYXNzUGFydCB7CiAgICBYdEV2ZW50SGFuZGxlciBz dHJ1Y3R1cmVOb3RpZnlIYW5kbGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNoZWxs RXh0Q2xhc3NQYXJ0LCAqWG1TaGVsbEV4dENsYXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9Y bVNoZWxsRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsKICAg IFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKICAgIFhtRGVza3RvcENsYXNzUGFydCBkZXNrdG9w X2NsYXNzOwogICAgWG1TaGVsbEV4dENsYXNzUGFydCBzaGVsbF9jbGFzczsKfSBYbVNoZWxsRXh0 Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBsb25nIGxhc3RDb25maWd1 cmVSZXF1ZXN0OwogICAgQm9vbGVhbiB1c2VBc3luY0dlb21ldHJ5Owp9IFhtU2hlbGxFeHRQYXJ0 LCAqWG1TaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1TaGVsbEV4dENsYXNzUmVjIHhtU2hlbGxF eHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBh cnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsK ICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxsOwp9IFhtU2hlbGxFeHRSZWM7CnR5cGVkZWYgc3RydWN0 IF9YbVZlbmRvclNoZWxsRXh0UmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Owp0eXBlZGVmIHN0 cnVjdCBfWG1WZW5kb3JTaGVsbEV4dENsYXNzUmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xh c3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xhc3M7CgoKCnR5 cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0ewogICAgWHRDYWxsYmFja1By b2MgZGVsZXRlX3dpbmRvd19oYW5kbGVyOwogICAgWHRDYWxsYmFja1Byb2Mgb2Zmc2V0X2hhbmRs ZXI7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVmVuZG9yU2hlbGxFeHRDbGFzc1BhcnQs ICpYbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVmVuZG9y U2hlbGxFeHRDbGFzc1JlY3sKICAgIE9iamVjdENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBY bUV4dENsYXNzUGFydCBleHRfY2xhc3M7CiAgICBYbURlc2t0b3BDbGFzc1BhcnQgZGVza3RvcF9j bGFzczsKICAgIFhtU2hlbGxFeHRDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICBYbVZlbmRvclNo ZWxsRXh0Q2xhc3NQYXJ0IHZlbmRvcl9jbGFzczsKfSBYbVZlbmRvclNoZWxsRXh0Q2xhc3NSZWM7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgV2lkZ2V0IHc7CiAgICAgICAgU3RyaW5nIHM7Cn0g X1htQWNjZWxlcmF0b3JTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbUZvbnRMaXN0IGRl ZmF1bHRfZm9udF9saXN0OwogICAgdW5zaWduZWQgY2hhciBmb2N1c19wb2xpY3k7CiAgICBYbUZv Y3VzRGF0YSBmb2N1c19kYXRhOwogICAgdW5zaWduZWQgY2hhciBkZWxldGVfcmVzcG9uc2U7CiAg ICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIE13bUhpbnRzIG13bV9oaW50czsKICAgIE13 bUluZm8gbXdtX2luZm87CiAgICBTdHJpbmcgbXdtX21lbnU7CiAgICBYdENhbGxiYWNrTGlzdCBm b2N1c19tb3ZlZF9jYWxsYmFjazsKCiAgICBXaWRnZXQgb2xkX21hbmFnZWQ7CiAgICBQb3NpdGlv biB4QXRNYXAsIHlBdE1hcCwgeE9mZnNldCwgeU9mZnNldDsKICAgIHVuc2lnbmVkIGxvbmcgbGFz dE9mZnNldFNlcmlhbDsKICAgIHVuc2lnbmVkIGxvbmcgbGFzdE1hcFJlcXVlc3Q7CgogICAgQm9v bGVhbiBleHRlcm5hbFJlcG9zaXRpb247CgogICAgdW5zaWduZWQgY2hhciBtYXBTdHlsZTsKICAg IFh0Q2FsbGJhY2tMaXN0IHJlYWxpemVfY2FsbGJhY2s7CiAgICBYdEdyYWJLaW5kIGdyYWJfa2lu ZDsKICAgIHVuc2lnbmVkIGNoYXIgYXVkaWJsZV93YXJuaW5nOwogICAgWG1Gb250TGlzdCBidXR0 b25fZm9udF9saXN0OwogICAgWG1Gb250TGlzdCBsYWJlbF9mb250X2xpc3Q7CiAgICBYbUZvbnRM aXN0IHRleHRfZm9udF9saXN0OwogICAgU3RyaW5nIGlucHV0X21ldGhvZF9zdHJpbmc7CiAgICBT dHJpbmcgcHJlZWRpdF90eXBlX3N0cmluZzsKICAgIHVuc2lnbmVkIGludCBsaWdodF90aHJlc2hv bGQ7CiAgICB1bnNpZ25lZCBpbnQgZGFya190aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgZm9y ZWdyb3VuZF90aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgaW1faGVpZ2h0OwogICAgWHRQb2lu dGVyIGltX2luZm87CiAgICBCb29sZWFuIGltX3ZzX2hlaWdodF9zZXQ7Cgp9IFhtVmVuZG9yU2hl bGxFeHRQYXJ0LCAqWG1WZW5kb3JTaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1WZW5kb3JTaGVs bEV4dENsYXNzUmVjIHhtVmVuZG9yU2hlbGxFeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9Y bVZlbmRvclNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0 IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsKICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxs OwogICAgWG1WZW5kb3JTaGVsbEV4dFBhcnQgdmVuZG9yOwp9IFhtVmVuZG9yU2hlbGxFeHRSZWM7 CgoKCgp1bnNpZ25lZCBjaGFyIF9YbUdldEF1ZGlibGVXYXJuaW5nKFdpZGdldCB3KTsKY2hhciAq X1htR2V0SWNvblBpeG1hcE5hbWUodm9pZCk7CnZvaWQgX1htQ2xlYXJJY29uUGl4bWFwTmFtZSh2 b2lkKTsKdHlwZWRlZiB2b2lkICgqWG1DbG9uZVZpc3VhbFByb2MpKFhtRHJhZ0ljb25PYmplY3Qs IFdpZGdldCwgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1Nb3ZlUGl4bWFwUHJvYykoWG1EcmFn SWNvbk9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9i amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9iamVjdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24sIFBvc2l0aW9uKTsKCnR5 cGVkZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1EcmFnSWNvbkNsYXNz UGFydDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjIHsKICAgIFJlY3RP YmpDbGFzc1BhcnQgcmVjdGFuZ2xlX2NsYXNzOwogICAgWG1EcmFnSWNvbkNsYXNzUGFydCBkcmFn SWNvbl9jbGFzczsKfSBYbURyYWdJY29uQ2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnSWNvbkNsYXNz UmVjIHhtRHJhZ0ljb25DbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENhcmRpbmFsIGRl cHRoOwogICAgUGl4bWFwIHBpeG1hcDsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAg UGl4bWFwIG1hc2s7CiAgICBQb3NpdGlvbiBob3RfeCwgaG90X3k7CiAgICBQb3NpdGlvbiBvZmZz ZXRfeCwgb2Zmc2V0X3k7CiAgICB1bnNpZ25lZCBjaGFyIGF0dGFjaG1lbnQ7CiAgICBCb29sZWFu IGlzRGlydHk7CiAgICBSZWdpb24gcmVnaW9uOwogICAgUmVnaW9uIHJlc3RvcmVfcmVnaW9uOwog ICAgUG9zaXRpb24geF9vZmZzZXQsIHlfb2Zmc2V0Owp9IFhtRHJhZ0ljb25QYXJ0LCAqWG1EcmFn SWNvblBhcnRQdHI7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvblJlYyB7CiAgICBPYmplY3RQ YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtRHJhZ0ljb25QYXJ0 IGRyYWc7Cn0gWG1EcmFnSWNvblJlYzsKCmV4dGVybiBXaWRnZXQgX1htR2V0VGV4dHVhbERyYWdJ Y29uKFdpZGdldCB3KTsKCgoKZXh0ZXJuIHZvaWQgX1htRGVzdHJveURlZmF1bHREcmFnSWNvbihY bURyYWdJY29uT2JqZWN0IGljb24pOwpleHRlcm4gQm9vbGVhbiBfWG1EcmFnSWNvbklzRGlydHko WG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJuIHZvaWQgX1htRHJhZ0ljb25DbGVhbihYbURy YWdJY29uT2JqZWN0IGljb24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNv bk9iamVjdCBpY29uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRHJhZ0ljb25PYmpl Y3QgaWNvbjMpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFht RHJhZ092ZXJTaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdPdmVyU2hlbGxD bGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFz c1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAg ICBXTVNoZWxsQ2xhc3NQYXJ0IHdtX3NoZWxsX2NsYXNzOwogICAgVmVuZG9yU2hlbGxDbGFzc1Bh cnQgdmVuZG9yX3NoZWxsX2NsYXNzOwogICAgWG1EcmFnT3ZlclNoZWxsQ2xhc3NQYXJ0IGRyYWdP dmVyX3NoZWxsX2NsYXNzOwp9IFhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFhtRHJh Z092ZXJTaGVsbENsYXNzUmVjIHhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKdHlwZWRlZiBzdHJ1 Y3QgX1htQmFja2luZ1JlYyB7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgUGl4bWFwIHBpeG1hcDsK fSBYbUJhY2tpbmdSZWMsICpYbUJhY2tpbmc7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlckJs ZW5kUmVjIHsKICAgIFhtRHJhZ0ljb25PYmplY3Qgc291cmNlSWNvbjsKICAgIFBvc2l0aW9uIHNv dXJjZVg7CiAgICBQb3NpdGlvbiBzb3VyY2VZOwogICAgWG1EcmFnSWNvbk9iamVjdCBtaXhlZElj b247CiAgICBHQyBnYzsKfSBYbURyYWdPdmVyQmxlbmRSZWMsICpYbURyYWdPdmVyQmxlbmQ7Cgp0 eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsUGFydCB7CiAgICBQb3NpdGlvbiBob3RYOwog ICAgUG9zaXRpb24gaG90WTsKICAgIHVuc2lnbmVkIGNoYXIgY3Vyc29yU3RhdGU7CiAgICB1bnNp Z25lZCBjaGFyIG1vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGFjdGl2ZU1vZGU7CgogICAgUG9zaXRp b24gaW5pdGlhbFg7CiAgICBQb3NpdGlvbiBpbml0aWFsWTsKCiAgICBYbURyYWdJY29uT2JqZWN0 IHN0YXRlSWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3Qgb3BJY29uOwoKICAgIFhtRHJhZ092ZXJC bGVuZFJlYyBjdXJzb3JCbGVuZDsKICAgIFhtRHJhZ092ZXJCbGVuZFJlYyByb290QmxlbmQ7CiAg ICBQaXhlbCBjdXJzb3JGb3JlZ3JvdW5kOwogICAgUGl4ZWwgY3Vyc29yQmFja2dyb3VuZDsKICAg IEN1cnNvciBuY0N1cnNvcjsKICAgIEN1cnNvciBhY3RpdmVDdXJzb3I7CgogICAgWG1CYWNraW5n UmVjIGJhY2tpbmc7CiAgICBQaXhtYXAgdG1wUGl4OwogICAgUGl4bWFwIHRtcEJpdDsKICAgIEJv b2xlYW4gaXNWaXNpYmxlOwp9IFhtRHJhZ092ZXJTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBf WG1EcmFnT3ZlclNoZWxsUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0 IGNvbXBvc2l0ZTsKICAgIFNoZWxsUGFydCBzaGVsbDsKICAgIFdNU2hlbGxQYXJ0IHdtOwogICAg VmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgIFhtRHJhZ092ZXJTaGVsbFBhcnQgZHJhZzsKfSBY bURyYWdPdmVyU2hlbGxSZWM7CnR5cGVkZWYgc3RydWN0IF9YbURuZFNvdXJjZVByb3AgewogICAg QllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IHRh cmdldF9pbmRleDsKICAgIENBUkQzMiBzZWxlY3Rpb247Cn0gWG1EbmRTb3VyY2VQcm9wOwoKdHlw ZWRlZiBzdHJ1Y3QgX1htRG5kUmVjZWl2ZXJQcm9wIHsKICAgIEJZVEUgYnl0ZV9vcmRlcjsKICAg IEJZVEUgcHJvdG9jb2xfdmVyc2lvbjsKICAgIEJZVEUgcHJvdG9jb2xfc3R5bGU7CiAgICBCWVRF IHBhZDE7CiAgICBDQVJEMzIgcHJveHlfd2luZG93OwogICAgQ0FSRDE2IG51bV9kcm9wX3NpdGVz OwogICAgQ0FSRDE2IHBhZDI7CiAgICBDQVJEMzIgdG90YWxfc2l6ZTsKfSBYbURuZFJlY2VpdmVy UHJvcDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRUb3AgewogICAgQ0FSRDMyIHNyY193aW5k b3c7CiAgICBDQVJEMzIgcHJvcGVydHk7Cn0gWG1EbmRUb3A7Cgp0eXBlZGVmIHN0cnVjdCBfWG1E bmRQb3QgewogICAgSU5UMTYgeDsKICAgIElOVDE2IHk7CiAgICBDQVJEMzIgcHJvcGVydHk7CiAg ICBDQVJEMzIgc3JjX3dpbmRvdzsKfSBYbURuZFBvdDsKCnR5cGVkZWYgc3RydWN0IF9YbURuZE1l c3NhZ2UgewogICAgQllURSByZWFzb247CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAgICBDQVJEMTYg ZmxhZ3M7CiAgICBDQVJEMzIgdGltZTsKICAgIHVuaW9uIHsKICAgICAgICBYbURuZFRvcCB0b3A7 CiAgICAgICAgWG1EbmRQb3QgcG90OwogICAgfSBkYXRhOwp9IFhtRG5kTWVzc2FnZTsKCgoKCnR5 cGVkZWYgc3RydWN0IF9YbURuZFRhcmdldHMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllU RSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IG51bV90YXJnZXRfbGlzdHM7CiAgICBDQVJE MzIgZGF0YV9zaXplOwoKfSBYbURuZFRhcmdldHM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9t UGFpcnMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwog ICAgQ0FSRDE2IG51bV9wYWlyczsKICAgIENBUkQzMiBkYXRhX3NpemU7Cn0gWG1EbmRBdG9tUGFp cnM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9tcyB7CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAg ICBCWVRFIHByb3RvY29sX3ZlcnNpb247CiAgICBDQVJEMTYgbnVtX2F0b21zOwogICAgQ0FSRDMy IGRhdGFfc2l6ZTsKfSBYbURuZEF0b21zOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgYXRv bTsKICAgIENBUkQxNiBuYW1lbGVuOwogICAgQ0FSRDE2IHBhZDsKfSBYbURuZEF0b21QYWlyOwoK dHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBhdG9tOwogICAgVGltZSB0aW1lOwp9IFhtRG5kQXRv bXNUYWJsZUVudHJ5UmVjLCAqWG1EbmRBdG9tc1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZEF0b21zVGFibGVFbnRyeSBlbnRyaWVzOwp9 IFhtRG5kQXRvbXNUYWJsZVJlYywgKlhtRG5kQXRvbXNUYWJsZTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIGludCBudW1fdGFyZ2V0czsKICAgIEF0b20gKnRhcmdldHM7Cn0gWG1EbmRUYXJnZXRzVGFi bGVFbnRyeVJlYywgKlhtRG5kVGFyZ2V0c1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZFRhcmdldHNUYWJsZUVudHJ5IGVudHJpZXM7Cn0g WG1EbmRUYXJnZXRzVGFibGVSZWMsICpYbURuZFRhcmdldHNUYWJsZTsKCgoKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIGNoYXIgKmF0b21zOwogICAgY2hhciAqYXRvbV9wdHI7CiAgICBjaGFyICphdG9t X3N0YXJ0OwogICAgaW50IGF0b21fc2l6ZTsKICAgIGludCBhdG9tX2F2YWlsOwogICAgY2hhciAq bmFtZXM7CiAgICBjaGFyICpuYW1lX3B0cjsKICAgIGNoYXIgKm5hbWVfc3RhcnQ7CiAgICBpbnQg bmFtZV9zaXplOwogICAgaW50IG5hbWVfYXZhaWw7Cn0gWG1EbmRCdWZNZ3JSZWMsICpYbURuZEJ1 Zk1ncjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1TaGVsbERyb3BTaXRlSW5mbyB7CiAgICBYbURu ZEJ1Zk1nclJlYyBpbmZvOwogICAgdW5zaWduZWQgY2hhciBieXRlX29yZGVyOwogICAgaW50IG51 bV9kcm9wX3NpdGVzOwp9IFhtU2hlbGxEcm9wU2l0ZUluZm9SZWMsICpYbVNoZWxsRHJvcFNpdGVJ bmZvOwp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUluZm8gewoKICAgIHN0cnVjdCBfWG1Ecm9w U2l0ZUluZm8gKm5leHQ7CgogICAgQm9vbGVhbiBleHRlcm5hbDsKICAgIEJvb2xlYW4gbGVhZjsK ICAgIEJvb2xlYW4gaW1wbGljaXQ7CiAgICBCb29sZWFuIGlzU2hlbGw7CiAgICBCb29sZWFuIHVz ZXJSZWdpb247CiAgICBCb29sZWFuIHJlZ2lzdGVyZWQ7CgogICAgc3RydWN0IF9YbURyb3BTaXRl SW5mbyAqcGFyZW50OwogICAgc3RydWN0IF9YbURyb3BTaXRlSW5mbyAqKmNoaWxkcmVuOwoKICAg IGludCBpblVwZGF0ZTsKICAgIHNob3J0IHRhcmdldF9pbmRleDsKICAgIHNob3J0IG51bUNoaWxk cmVuOwogICAgc2hvcnQgbWF4Q2hpbGRyZW47CiAgICBYbVJlZ2lvbiByZWdpb247CgogICAgdW5z aWduZWQgY2hhciBkcm9wU2l0ZU9wZXJhdGlvbnM7CiAgICBYdENhbGxiYWNrUHJvYyBkcmFnUHJv YzsKICAgIFh0Q2FsbGJhY2tQcm9jIGRyb3BQcm9jOwogICAgV2lkZ2V0IGRyb3BTaXRlOwogICAg dW5zaWduZWQgY2hhciBkcm9wU2l0ZVR5cGU7CiAgICB1bnNpZ25lZCBjaGFyIGFuaW1hdGlvblN0 eWxlOwogICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZUFjdGl2aXR5OwogICAgQXRvbSAqaW1wb3J0 VGFyZ2V0czsKICAgIENhcmRpbmFsIG51bUltcG9ydFRhcmdldHM7CiAgICBYUmVjdGFuZ2xlICpk cm9wUmVjdGFuZ2xlczsKICAgIENhcmRpbmFsIG51bURyb3BSZWN0YW5nbGVzOwogICAgUGl4bWFw IGFuaW1hdGlvblBpeG1hcDsKICAgIENhcmRpbmFsIGFuaW1hdGlvblBpeG1hcERlcHRoOwogICAg UGl4bWFwIGFuaW1hdGlvbk1hc2s7Cgp9IFhtRHJvcFNpdGVJbmZvUmVjLCAqWG1Ecm9wU2l0ZUlu Zm87CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBudW1fYnVja2V0czsKICAgIFhtRHJv cFNpdGVJbmZvICpidWNrZXRzOwp9IERTSW5mb1RhYmxlOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBp bnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFdpZGdldCB3aWRnZXQ7Cn0gWG1UcmVl VXBkYXRlQ2FsbGJhY2tTdHJ1Y3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBUaW1lIHRpbWU7 CiAgICBXaW5kb3cgd2luZG93OwogICAgV2luZG93IHN1YndpbmRvdzsKICAgIFBvc2l0aW9uIHhy b290LCB5cm9vdDsKICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKfSBYbU1vdGlvblJlYzsKCnR5cGVk ZWYgc3RydWN0IHsKICAgIFhtRHJhZ1JlY2VpdmVySW5mbyBjdXJSZWNlaXZlcjsKICAgIGludCBu dW1fbW90aW9uczsKICAgIGludCBtYXhfbW90aW9uczsKICAgIFhtTW90aW9uUmVjICptb3Rpb25z Owp9IFhtTW90aW9uQnVmZmVyOwoKCgoKdHlwZWRlZiB1bmlvbiB7CiAgICBYbUFueUlDQ0NhbGxi YWNrU3RydWN0IGFueTsKICAgIFhtVG9wTGV2ZWxFbnRlckNhbGxiYWNrU3RydWN0IHRsZTsKICAg IFhtVG9wTGV2ZWxMZWF2ZUNhbGxiYWNrU3RydWN0IHRsbDsKICAgIFhtRHJvcFNpdGVFbnRlckNh bGxiYWNrU3RydWN0IGRzZTsKICAgIFhtRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IGRzbDsK ICAgIFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0IGRtOwogICAgWG1PcGVyYXRpb25DaGFuZ2Vk Q2FsbGJhY2tTdHJ1Y3Qgb2M7CiAgICBYbURyb3BTdGFydENhbGxiYWNrU3RydWN0IGRzOwogICAg WG1Ecm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3QgZGY7CiAgICBYbURyYWdEcm9wRmluaXNoQ2FsbGJh Y2tTdHJ1Y3QgZGRmOwp9IFhtRHJhZ0Ryb3BDYWxsYmFja1N0cnVjdDsKCgoKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIFhtRHJhZ092ZXJTaGVsbFdpZGdldCBkb3M7CiAgICBCb29sZWFuIHNvdXJjZUlz RXh0ZXJuYWw7CiAgICBXaW5kb3cgd2luZG93OwogICAgV2lkZ2V0IHNoZWxsOwogICAgUG9zaXRp b24geE9yaWdpbiwgeU9yaWdpbjsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAgWHRQ b2ludGVyIGljY0luZm87Cn0gWG1EcmFnVG9wTGV2ZWxDbGllbnREYXRhU3RydWN0OwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgWG1EcmFnT3ZlclNoZWxsV2lkZ2V0IGRvczsKICAgIFdpbmRvdyB3aW5k b3c7Cn0gWG1EcmFnTW90aW9uQ2xpZW50RGF0YVN0cnVjdDsKQm9vbGVhbiBfWG1HZXREcmFnUmVj ZWl2ZXJJbmZvKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW4sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYbURyYWdSZWNlaXZlckluZm8gcmkpOwp2b2lkIF9YbVNldERyYWdSZWNl aXZlckluZm8oV2lkZ2V0IHcsIFdpZGdldCB3aWRnZXQpOwp2b2lkIF9YbUNsZWFyRHJhZ1JlY2Vp dmVySW5mbyhXaWRnZXQgc2hlbGwpOwp2b2lkIF9YbUZyZWVEcmFnUmVjZWl2ZXJJbmZvKFhtU2hl bGxEcm9wU2l0ZUluZm8gZGkpOwp1bnNpZ25lZCBjaGFyIF9YbUJ5dGVPcmRlcih2b2lkKTsKaW50 IF9YbU1lc3NhZ2VUeXBlVG9SZWFzb24oQllURSByZWFzb24pOwp2b2lkIF9YbUlDQ0V2ZW50VG9J Q0NDYWxsYmFjayhYbURuZE1lc3NhZ2UgKm1zZywgWG1EcmFnRHJvcENhbGxiYWNrU3RydWN0ICpj YnMpOwoKCmludCBfWG1SZWFkRHJhZ0J1ZmZlcihYbURuZEJ1Zk1nciBibWdyLCBCb29sZWFuIHJl YWRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmV0YnVmLCBpbnQgYnVmc2l6 ZSk7CmludCBfWG1Xcml0ZURyYWdCdWZmZXIoWG1EbmRCdWZNZ3IgYm1nciwgQm9vbGVhbiB3cml0 ZV9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgaW50IHNpemUpOwoK CgoKCmV4dGVybiBYdFJlc291cmNlIF9YbURTUmVzb3VyY2VzW107CmV4dGVybiBpbnQgX1htTnVt RFNSZXNvdXJjZXM7Cgp2b2lkIF9YbURTSUFkZENoaWxkKHZvaWQqIGEsIHZvaWQqIGIsIGludCBj KTsKdm9pZCBfWG1EU0lSZW1vdmVDaGlsZCh2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lE ZXN0cm95KHZvaWQqIGEsIGludCBiKTsKaW50IF9YbURTSUdldEJvcmRlcldpZHRoKHZvaWQqIGEp OwppbnQgX1htRFNJUmVwbGFjZUNoaWxkKHZvaWQqIGEpOwppbnQgX1htRFNJR2V0Q2hpbGRQb3Np dGlvbih2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lTd2FwQ2hpbGRyZW4odm9pZCogYSwg dm9pZCogYiwgdm9pZCogYyk7CgoKdm9pZCBfTHR0ZXh0X3Byb2Nlc3NfZHJvcChXaWRnZXQgdywg WHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKTsKQm9vbGVhbiBfTHRE ZWJ1Z0luaXQodm9pZCk7Cgp2b2lkIF9MdERlYnVnU2V0KEJvb2xlYW4gZmxhZyk7Cgp2b2lkIF9M dERlYnVnVG9nZ2xlKHZvaWQpOwoKQm9vbGVhbiBfTHREZWJ1Z1F1ZXJ5U3RhdGUodm9pZCk7CgoK CnZvaWQgX0x0RGVidWdQcmludFRyZWUoV2lkZ2V0IHcpOwp2b2lkIF9MdERlYnVnUHJpbnRDb21w bGV0ZVRyZWUoV2lkZ2V0IHcpOwoKCgoKY29uc3QgY2hhciAqX0x0RGVidWdTdGF0ZShXaWRnZXQg dyk7CgoKCgp2b2lkIF9MdERlYnVnUHJpbnRBcmdMaXN0KGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQg dywgQXJnTGlzdCBhbCwgaW50IG4sIEJvb2xlYW4gR2V0KTsKCgoKCmNvbnN0IGNoYXIgKl9MdERl YnVnRm9jdXNEZXRhaWwyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1 c01vZGUyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdFdmVudFR5cGUyU3Ry aW5nKGludCB0eXBlKTsKCgoKY29uc3QgY2hhciAqX0x0RGVidWdHZW9BY3Rpb24yU3RyaW5nKGlu dCBhY3Rpb24pOwpjb25zdCBjaGFyICpfTHREZWJ1Z0RlbGV0ZVJlc3BvbnNlMlN0cmluZyhpbnQg ZCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnR2VvbWV0cnlSZXN1bHQyU3RyaW5nKFh0R2VvbWV0cnlS ZXN1bHQgcik7CmNvbnN0IGNoYXIgKl9MdERlYnVnRHJhZ0FuZERyb3BNZXNzYWdlVHlwZTJTdHJp bmcodW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdEcmFnVHlwZTJTdHJpbmco dW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdXaWRnZXRHZW9tZXRyeTJTdHJp bmcoWHRXaWRnZXRHZW9tZXRyeSAqZyk7Cgpjb25zdCBjaGFyICpfTHREZWJ1Z0F0dGFjaG1lbnQy U3RyaW5nKGludCBpKTsKY29uc3QgY2hhciAqX0x0RGVidWdNZW51Rm9jdXNPcDJTdHJpbmcoaW50 IGYpOwpjb25zdCBjaGFyICpfTHREZWJ1Z01lbnVFbnVtMlN0cmluZyhpbnQgZik7CmNvbnN0IGNo YXIgKl9MdERlYnVnTXdtSW5wdXQyU3RyaW5nKGludCBhKTsKY29uc3QgY2hhciAqX0x0RGVidWdC b29sZWFuMlN0cmluZyhCb29sZWFuIGIpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1htU3RyaW5nMlN0 cmluZyhYbVN0cmluZyB4bXMpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1BhY2tpbmcyU3RyaW5nKHVu c2lnbmVkIGNoYXIgcCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnUmNUeXBlMlN0cmluZyh1bnNpZ25l ZCBjaGFyIHQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0FsaWdubWVudDJTdHJpbmcoaW50IG4pOwpj b25zdCBjaGFyICpfTHREZWJ1Z01lbnVUeXBlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9M dERlYnVnTmF2aWdhYmlsaXR5MlN0cmluZyh1bnNpZ25lZCBjaGFyIG4pOwpjb25zdCBjaGFyICpf THREZWJ1Z0hpZ2hsaWdodE1vZGUyU3RyaW5nKGludCBtb2RlKTsKY29uc3QgY2hhciAqX0x0RGVi dWdTZWxlY3Rpb25Qb2xpY3kyU3RyaW5nKGludCBuKTsKY29uc3QgY2hhciAqX0x0RGVidWdSZWFz b24yU3RyaW5nKGludCByZWFzb24pOwoKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1c0NoYW5nZTJT dHJpbmcoWG1Gb2N1c0NoYW5nZSBjKTsKCmNvbnN0IGNoYXIgKl9MdERlYnVnTmF2aWdhdGlvblR5 cGUyU3RyaW5nKFhtTmF2aWdhdGlvblR5cGUgbnQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0VkaXRN b2RlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JEaXNwbGF5UG9saWN5MlN0 cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JQbGFjZW1lbnQyU3RyaW5nKGludCBu KTsKY29uc3QgY2hhciAqX0x0RGVidWdMaXN0U2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwpjb25z dCBjaGFyICpfTHREZWJ1Z1Jlc2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwoKY29uc3QgY2hhciAq X0x0RGVidWdTY3JvbGxpbmdQb2xpY3kyU3RyaW5nKHVuc2lnbmVkIGNoYXIgcik7CmNvbnN0IGNo YXIgKl9MdERlYnVnRGlhbG9nU3R5bGUyU3RyaW5nKGludCBhKTsKCgoKCnZvaWQgX0x0RGVidWco Y29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CnZvaWQgX0x0 RGVidWcyKGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQgdywgV2lkZ2V0IGMsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKTsKdm9pZCBfTHREZWJ1ZzAoY29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBj aGFyICpmbXQsIC4uLik7CnZvaWQgX0x0RGVidWdQcmludFN0cmluZyhjb25zdCBjaGFyICpzKTsK dm9pZCBfTHREZWJ1Z0FjdGlvbihjb25zdCBjaGFyICpmbiwgV2lkZ2V0IHcsIGNvbnN0IFN0cmlu ZyBhY3Rpb24sCiAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgKnBhcmFtcywgY29uc3QgQ2Fy ZGluYWwgKm51bV9wYXJhbXMpOwpCb29sZWFuIF9MdERlYnVnSW5EZWJ1Zyhjb25zdCBjaGFyICpm biwgV2lkZ2V0IHcpOwpzdGF0aWMgaW50IF9YbVRleHRGX0ZvbnRNYXhXaWR0aChXaWRnZXQgdyk7 CgoKCnN0YXRpYyBYdFRyYW5zbGF0aW9ucyB0Zl9ldm50Ml90cmFucyx0Zl9ldm50M190cmFuczsK dHlwZWRlZiB2b2lkICgqUmVkcmF3UHJvYykoWG1UZXh0RmllbGRXaWRnZXQpOwoKc3RhdGljIHZv aWQgX1htVGV4dEZpZWxkU2V0RWRpdGFibGUoV2lkZ2V0IHcsIEJvb2xlYW4gZSk7CnN0YXRpYyB2 b2lkIGNsYXNzX2luaXRpYWxpemUodm9pZCk7CnN0YXRpYyB2b2lkIGNsYXNzX3BhcnRfaW5pdGlh bGl6ZShXaWRnZXRDbGFzcyB3X2NsYXNzKTsKc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShXaWRnZXQs IFdpZGdldCwgQXJnTGlzdCwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlc3Ryb3koV2lkZ2V0 IHcpOwpzdGF0aWMgdm9pZCBleHBvc2UoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy ZWdpb24pOwpzdGF0aWMgdm9pZCByZXNpemUoV2lkZ2V0IHcpOwpzdGF0aWMgQm9vbGVhbiBzZXRf dmFsdWVzKFdpZGdldCwgV2lkZ2V0LCBXaWRnZXQsIEFyZ0xpc3QsIENhcmRpbmFsICopOwpzdGF0 aWMgWHRHZW9tZXRyeVJlc3VsdCBxdWVyeV9nZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcHJvcG9zZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFu c3dlcik7CnN0YXRpYyB2b2lkIHJlYWxpemUoV2lkZ2V0IHcsIFh0VmFsdWVNYXNrICp2YWx1ZV9t YXNrLAogICAgICAgICAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzICphdHRyaWJ1dGVz KTsKc3RhdGljIHZvaWQgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz ZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnN0YXRpYyBCb29sZWFuIGRyYWdfY29udmVydF9wcm9jKFdp ZGdldCB3LCBBdG9tICpzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZV9yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFh0UG9pbnRlciAqdmFsdWVfcmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW5ndGhfcmV0dXJuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9yZXR1cm4pOwpzdGF0aWMgdm9pZCBkcmFnX3Ry YW5zZmVyX3Byb2MoV2lkZ2V0IGR3LCBYdFBvaW50ZXIgY2xpZW50LCBBdG9tICpzZWxlY3Rpb24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b20gKnR5cGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB2YWx1ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKmZvcm1hdCk7CnN0YXRpYyB2b2lkIGRyYWdfZHJvcF9maW5pc2go V2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9k YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpz dGF0aWMgdm9pZCBwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IFh0UG9pbnRlciBjYWxsX2RhdGEpOwoKCmludCBfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdl dCB3LCBjaGFyICpzLCBpbnQgbCk7CgplbnVtIE1vZGlmeVRleHRDdXJzb3JQb3NpdGlvbiB7CiAg Q1BfUmVzZXQsCiAgQ1BfU3RhcnRPZkluc2VydCwKICBDUF9FbmRPZkluc2VydCwKICBDUF9VbmNo YW5nZWQKfSA7CgpzdGF0aWMgWG1UZXh0U2NhblR5cGUgZGVmYXVsdF9zZWxlY3Rpb25fYXJyYXlb XSA9IHsKICAgICAgICBYbVNFTEVDVF9QT1NJVElPTiwKICAgICAgICBYbVNFTEVDVF9XT1JELAog ICAgICAgIFhtU0VMRUNUX0xJTkUsCn07CnN0YXRpYyBpbnQgZGVmYXVsdF9zZWxlY3Rpb25fYXJy YXlfY291bnQgPSAoKENhcmRpbmFsKSAoc2l6ZW9mKGRlZmF1bHRfc2VsZWN0aW9uX2FycmF5KSAv IHNpemVvZihkZWZhdWx0X3NlbGVjdGlvbl9hcnJheVswXSkpKTsKCgoKCgpzdGF0aWMgWHRSZXNv dXJjZSByZXNvdXJjZXNbXSA9CnsKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s0 NjgzXSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1Njld KSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll bGRSZWMgKikwKS0+dGV4dC5hY3RpdmF0ZV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRT dHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAg ICAoKGNoYXIgKikmX1htU3RyaW5nc1s3NzY1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwg KChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3Qp LCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2Fs bGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2 b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNjg1M10p LCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksCiAg ICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVj ICopMCktPnRleHQuZm9jdXNfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sx NTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFy ICopJl9YbVN0cmluZ3NbODEzM10pLCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciop Jlh0U3RyaW5nc1sxNTY5XSksCiAgICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXpl X3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayks CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikw KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTU0XSksICgoY2hh ciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBz aXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+ dGV4dC53Y3NfbW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo KGNoYXIgKikmX1htU3RyaW5nc1s4MTc4XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tb3Rpb25fdmVyaWZ5X2NhbGxi YWNrKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLCAoWHRQb2ludGVyKSgodm9p ZCAqKTApCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJpbmdzWzY5NDddKSwg KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq KTApLT50ZXh0LmdhaW5fcHJpbWFyeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo KGNoYXIgKikmX1htU3RyaW5nc1s3NzQ1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NlX3ByaW1hcnlfY2FsbGJh Y2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lk ICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwg KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq KTApLT50ZXh0LnZhbHVlX2NoYW5nZWRfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3Ry aW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAg KChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTQ5N10pLCAoKGNo YXIqKSZYdFN0cmluZ3NbMTc5N10pLAogICAgICAgIHNpemVvZihTdHJpbmcpLCAoKHNpemVfdCkg JigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAgICAgKChjaGFyKikmWHRT dHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikiIgoKCiAgICB9LAogICAgewogICAgICAgICgoY2hh ciAqKSZfWG1TdHJpbmdzWzEwNTc4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ0OTZdKSwgKChj aGFyICopJl9YbVN0cmluZ3NbMTIwNzldKSwKICAgICAgICBzaXplb2Yod2NoYXJfdCAqKSwgKChz aXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQud2NfdmFsdWUpLAogICAgICAgICgo Y2hhciopJlh0U3RyaW5nc1sxNzk3XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAg ICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLCAoKGNoYXIgKikmX1htU3Ry aW5nc1syNDMzXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzEyMTA2XSksCiAgICAgICAgc2l6ZW9m KERpbWVuc2lvbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0Lm1hcmdp bl9oZWlnaHQpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChYdFBvaW50ZXIp NQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s3OTIxXSksICgoY2hh ciAqKSZfWG1TdHJpbmdzWzI0NzldKSwgKChjaGFyICopJl9YbVN0cmluZ3NbMTEzMTVdKSwKICAg ICAgICBzaXplb2YoRGltZW5zaW9uKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCkt PnRleHQubWFyZ2luX3dpZHRoKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAo WHRQb2ludGVyKTUKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNTYy Nl0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1s3NDVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE0MzVd KSwKICAgICAgICBzaXplb2YoWG1UZXh0UG9zaXRpb24pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICgoY2hhciopJlh0U3Ry aW5nc1sxNjk1XSksIChYdFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikm X1htU3RyaW5nc1s1NDgyXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzY1NV0pLCAoKGNoYXIqKSZY dFN0cmluZ3NbMTc5MV0pLAogICAgICAgIHNpemVvZihzaG9ydCksICgoc2l6ZV90KSAmKChYbVRl eHRGaWVsZFJlYyAqKTApLT50ZXh0LmNvbHVtbnMpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n c1sxNjk1XSksIChYdFBvaW50ZXIpMjAKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9Y bVN0cmluZ3NbNzkzOF0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1syNTA1XSksICgoY2hhciopJlh0 U3RyaW5nc1sxNzE4XSksCiAgICAgICAgc2l6ZW9mKGludCksICgoc2l6ZV90KSAmKChYbVRleHRG aWVsZFJlYyAqKTApLT50ZXh0Lm1heF9sZW5ndGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n c1sxNjk1XSksIChYdFBvaW50ZXIpMjE0NzQ4MzY0NwogICAgfSwKICAgIHsKICAgICAgICAoKGNo YXIgKikmX1htU3RyaW5nc1s1MDA3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMyN10pLCAoKGNo YXIqKSZYdFN0cmluZ3NbMTcxOF0pLAogICAgICAgIHNpemVvZihpbnQpLCAoKHNpemVfdCkgJigo WG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5ibGlua19yYXRlKSwKICAgICAgICAoKGNoYXIqKSZY dFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUwMAogICAgfSwKICAgIHsKICAgICAgICAoKGNo YXIgKikmX1htU3RyaW5nc1s2OTA1XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzE3OTldKSwgKChj aGFyICopJl9YbVN0cmluZ3NbMTEyNzddKSwKICAgICAgICBzaXplb2YoWG1Gb250TGlzdCksICgo c2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LmZvbnRfbGlzdCksCiAgICAgICAg KChjaGFyKikmWHRTdHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQoKICAgIH0s CgogICAgewogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1s2OTZdKSwgKChjaGFyKikmWHRTdHJp bmdzWzEzOTVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3NjddKSwKICAgICAgICBzaXplb2YoWHRQ b2ludGVyKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9u X2FycmF5KSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKWRl ZmF1bHRfc2VsZWN0aW9uX2FycmF5CgogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1ht U3RyaW5nc1s5NTI2XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzM2OThdKSwgKChjaGFyKikmWHRT dHJpbmdzWzE3MThdKSwKICAgICAgICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZp ZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9uX2FycmF5X2NvdW50KSwKICAgICAgICAoKGNoYXIq KSZYdFN0cmluZ3NbMTcxOF0pLCAoWHRQb2ludGVyKSZkZWZhdWx0X3NlbGVjdGlvbl9hcnJheV9j b3VudAoKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbOTA2NV0pLCAo KGNoYXIgKikmX1htU3RyaW5nc1szMzU0XSksICgoY2hhciopJlh0U3RyaW5nc1sxNTYxXSksCiAg ICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+ dGV4dC5yZXNpemVfd2lkdGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChY dFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4NzM0 XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMwNjJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjFd KSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq KTApLT50ZXh0LnBlbmRpbmdfZGVsZXRlKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5 NV0pLCAoWHRQb2ludGVyKTEKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmlu Z3NbNjU3OV0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1sxNjAzXSksICgoY2hhciopJlh0U3RyaW5n c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll bGRSZWMgKikwKS0+dGV4dC5lZGl0YWJsZSksCiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE2 OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJp bmdzWzU2NDFdKSwgKChjaGFyICopJl9YbVN0cmluZ3NbNzYwXSksICgoY2hhciopJlh0U3RyaW5n c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSksCiAgICAgICAgKChjaGFy KikmWHRTdHJpbmdzWzE2OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgo Y2hhciAqKSZfWG1TdHJpbmdzWzEwNTg3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ1MDVdKSwg KChjaGFyKikmWHRTdHJpbmdzWzE1NjFdKSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6 ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LnZlcmlmeV9iZWxsKSwKICAgICAgICAo KGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKSgodW5zaWduZWQgY2hhcikofjAp KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s5NDc4XSksICgoY2hh ciAqKSZfWG1TdHJpbmdzWzM2NTBdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3MThdKSwKICAgICAg ICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQudGhy ZXNob2xkKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUK ICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbODMxOF0pLCAoKGNoYXIg KikmX1htU3RyaW5nc1syNzI4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzExNjQ3XSksCnNpemVv ZihYbU5hdmlnYXRpb25UeXBlKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnBy aW1pdGl2ZS5uYXZpZ2F0aW9uX3R5cGUpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1 XSksIChYdFBvaW50ZXIpWG1UQUJfR1JPVVAKICAgIH0sCn07CgpzdGF0aWMgWG1TeW50aGV0aWNS ZXNvdXJjZSBzeW5fcmVzb3VyY2VzW10gPQp7CiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0 cmluZ3NbNzkyMV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAoKHNpemVfdCkgJigoWG1U ZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5fd2lkdGgpLAogICAgICAgIF9YbUZyb21Ib3Jp em9udGFsUGl4ZWxzLCBfWG1Ub0hvcml6b250YWxQaXhlbHMKICAgIH0sCiAgICB7CiAgICAgICAg KChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAo KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5faGVpZ2h0KSwKICAg ICAgICBfWG1Gcm9tVmVydGljYWxQaXhlbHMsIF9YbVRvVmVydGljYWxQaXhlbHMKICAgIH0sCiAg ICB7CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLAogICAgICAgIHNpemVvZihTdHJp bmcpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAg ICAgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUgLCAoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAg ICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1sxMDU3OF0pLAogICAgICAgIHNpemVvZih3Y2hhcl90 ICopLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC53Y192YWx1ZSksCiAg ICAgICAgKCh2b2lkICopMCkgLCAoKHZvaWQgKikwKQogICAgfSwKfTsKCgoKCnN0YXRpYyB2b2lk IFRleHRTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgY2hhciAqcyk7CnN0YXRpYyB2b2lkIERyYXco WG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdBbGwoWG1UZXh0RmllbGRXaWRn ZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp YyB2b2lkIE1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpOwpzdGF0aWMgdm9p ZCBEcmF3VGV4dFJlcG9zaXRpb24oWG1UZXh0RmllbGRXaWRnZXQpOwpzdGF0aWMgdm9pZCBDbGVh ckhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgRHJhd1NpbmdsZUhp Z2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRHJhdyhYbVRl eHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRXJhc2UoWG1UZXh0RmllbGRXaWRn ZXQgdyk7CnN0YXRpYyBCb29sZWFuIERvQ3Vyc29yTW92ZShYbVRleHRGaWVsZFdpZGdldCB3LCBY RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9z LCBCb29sZWFuIGhpZ2hsaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4g ZHJhd2l0KSA7CnN0YXRpYyBCb29sZWFuIEN1cnNvclBvc2l0aW9uKFhtVGV4dEZpZWxkV2lkZ2V0 IHcpOwpzdGF0aWMgQm9vbGVhbiBDdXJzb3JNYXNzaXZlQWRqdXN0KFhtVGV4dEZpZWxkV2lkZ2V0 IHcpOwpzdGF0aWMgdm9pZCBDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgQm9vbGVhbiBm b2N1cyk7CnN0YXRpYyB2b2lkIFZlcmlmeUJlbGwoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp YyB2b2lkIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZShYbVRleHRGaWVsZFdpZGdldCB3LCBUaW1l IHRpbWUpOwoKdm9pZCBfWG1UZXh0RmllbGRGb2N1c0luKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu ZyAqLCBDYXJkaW5hbCAqKTsKdm9pZCBfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQsIFhFdmVu dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGFjdGl2YXRlKFdpZGdldCwg WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgYmFja3dhcmRfY2hh cmFjdGVyKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv aWQgYmFja3dhcmRfd29yZChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7 CnN0YXRpYyB2b2lkIGJlZXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop OwpzdGF0aWMgdm9pZCBiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcg KiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNsZWFyX3NlbGVjdGlvbihXaWRnZXQsIFhFdmVu dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNvcHlfY2xpcGJvYXJkKFdp ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgY29weV9w cmltYXJ5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv aWQgY29weV90byhXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp YyB2b2lkIGN1dF9jbGlwYm9hcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFs ICopOwpzdGF0aWMgdm9pZCBjdXRfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9uZXh0X2NoYXJhY3RlcihXaWRnZXQsIFhF dmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9wcmV2aW91 c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0 aWMgdm9pZCBkZWxldGVfbmV4dF93b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk aW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRlX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQg KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfc2VsZWN0aW9uKFdp ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRl X3RvX2VuZF9vZl9saW5lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK c3RhdGljIHZvaWQgZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3Ry aW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfYWxsKFdpZGdldCwgWEV2ZW50 ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVzZWxlY3RfYWxsKFdpZGdl dCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZG9fcXVpY2tf YWN0aW9uKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv aWQgZW5kX29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpz dGF0aWMgdm9pZCBlbnRlcihXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7 CnN0YXRpYyB2b2lkIGV4dGVuZF9hZGp1c3QoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh cmRpbmFsICopOwpzdGF0aWMgdm9pZCBleHRlbmRfZW5kKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZXh0ZW5kX3N0YXJ0KFdpZGdldCwgWEV2ZW50 ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZm9yd2FyZF9jaGFyYWN0ZXIo V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBmb3J3 YXJkX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg dm9pZCBncmFiX2ZvY3VzKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK CnN0YXRpYyB2b2lkIGluc2VydF9zdHJpbmcoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh cmRpbmFsICopOwpzdGF0aWMgdm9pZCBrZXlfc2VsZWN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmlu ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQga2lsbF9uZXh0X2NoYXJhY3RlcihXaWRnZXQs IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfbmV4dF93 b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg a2lsbF9wcmV2aW91c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRp bmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwg U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3NlbGVjdGlvbihXaWRnZXQs IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfdG9fZW5k X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg dm9pZCBraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh cmRpbmFsICopOwpzdGF0aWMgdm9pZCBsZWF2ZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIG1vdmVfZGVzdGluYXRpb24oV2lkZ2V0LCBYRXZlbnQg KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBtb3ZlX3RvKFdpZGdldCwgWEV2 ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgbmV4dF90YWJfZ3JvdXAo V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwYWdl X2xlZnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9p ZCBwYWdlX3JpZ2h0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh dGljIHZvaWQgcGFzdGVfY2xpcGJvYXJkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk aW5hbCAqKTsKc3RhdGljIHZvaWQgcGFzdGVfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJp bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByZXZfdGFiX2dyb3VwKFdpZGdldCwgWEV2 ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcHJvY2Vzc19iZHJhZyhX aWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByb2Nl c3NfY2FuY2VsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGlj IHZvaWQgcHJvY2Vzc19ob21lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAq KTsKc3RhdGljIHZvaWQgcHJvY2Vzc19yZXR1cm4oV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICos IENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwcm9jZXNzX3RhYihXaWRnZXQsIFhFdmVudCAqLCBT dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHF1aWNrX2NvcHlfc2V0KFdpZGdldCwg WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcXVpY2tfY3V0X3Nl dChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHJl ZHJhd19kaXNwbGF5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh dGljIHZvaWQgc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2Fy ZGluYWwgKik7CnN0YXRpYyB2b2lkIHNlY29uZGFyeV9ub3RpZnkoV2lkZ2V0LCBYRXZlbnQgKiwg U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWNvbmRhcnlfc3RhcnQoV2lkZ2V0 LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxlY3RfYWRq dXN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg c2VsZWN0X2FsbChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp YyB2b2lkIHNlbGVjdF9lbmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop OwpzdGF0aWMgdm9pZCBzZWxlY3Rfc3RhcnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh cmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxmX2luc2VydChXaWRnZXQsIFhFdmVudCAqLCBTdHJp bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHNldF9hbmNob3IoV2lkZ2V0LCBYRXZlbnQg KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZXRfaW5zZXJ0aW9uX3BvaW50 KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgc2V0 X3NlbGVjdGlvbl9oaW50KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK c3RhdGljIHZvaWQgdG9nZ2xlX2FkZF9tb2RlKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBD YXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdHJhdmVyc2VfaG9tZShXaWRnZXQsIFhFdmVudCAqLCBT dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHRyYXZlcnNlX25leHQoV2lkZ2V0LCBY RXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCB0cmF2ZXJzZV9wcmV2 KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdW5r aWxsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg dW5tYXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwoKc3RhdGljIHZv aWQgU2V0U2luZ2xlSGlnaGxpZ2h0KFdpZGdldCwgaW50LCBpbnQpOwoKCgoKCnN0YXRpYyBYdEFj dGlvbnNSZWMgYWN0aW9uc1tdID0KewogICAgeyJzZWxmLWluc2VydCIsIHNlbGZfaW5zZXJ0fSwK ICAgIHsiZGVsZXRlLXByZXZpb3VzLWNoYXJhY3RlciIsIGRlbGV0ZV9wcmV2aW91c19jaGFyYWN0 ZXJ9LAogICAgeyJkZWxldGUtbmV4dC1jaGFyYWN0ZXIiLCBkZWxldGVfbmV4dF9jaGFyYWN0ZXJ9 LAogICAgeyJkZWxldGUtcHJldmlvdXMtd29yZCIsIGRlbGV0ZV9wcmV2aW91c193b3JkfSwKICAg IHsiZGVsZXRlLW5leHQtd29yZCIsIGRlbGV0ZV9uZXh0X3dvcmR9LAogICAgeyJkZWxldGUtdG8t ZW5kLW9mLWxpbmUiLCBkZWxldGVfdG9fZW5kX29mX2xpbmV9LAogICAgeyJkZWxldGUtdG8tc3Rh cnQtb2YtbGluZSIsIGRlbGV0ZV90b19zdGFydF9vZl9saW5lfSwKICAgIHsiYWN0aXZhdGUiLCBh Y3RpdmF0ZX0sCiAgICB7InByb2Nlc3MtY2FuY2VsIiwgcHJvY2Vzc19jYW5jZWx9LAogICAgeyJw cm9jZXNzLWJkcmFnIiwgcHJvY2Vzc19iZHJhZ30sCiAgICB7ImJhY2t3YXJkLWNoYXJhY3RlciIs IGJhY2t3YXJkX2NoYXJhY3Rlcn0sCiAgICB7ImZvcndhcmQtY2hhcmFjdGVyIiwgZm9yd2FyZF9j aGFyYWN0ZXJ9LAogICAgeyJiYWNrd2FyZC13b3JkIiwgYmFja3dhcmRfd29yZH0sCiAgICB7ImZv cndhcmQtd29yZCIsIGZvcndhcmRfd29yZH0sCiAgICB7ImVuZC1vZi1saW5lIiwgZW5kX29mX2xp bmV9LAogICAgeyJiZWdpbm5pbmctb2YtbGluZSIsIGJlZ2lubmluZ19vZl9saW5lfSwKICAgIHsi cGFnZS1sZWZ0IiwgcGFnZV9sZWZ0fSwKICAgIHsicGFnZS1yaWdodCIsIHBhZ2VfcmlnaHR9LAog ICAgeyJrZXktc2VsZWN0Iiwga2V5X3NlbGVjdH0sCiAgICB7ImdyYWItZm9jdXMiLCBncmFiX2Zv Y3VzfSwKICAgIHsibW92ZS1kZXN0aW5hdGlvbiIsIG1vdmVfZGVzdGluYXRpb259LAogICAgeyJl eHRlbmQtc3RhcnQiLCBleHRlbmRfc3RhcnR9LAogICAgeyJleHRlbmQtYWRqdXN0IiwgZXh0ZW5k X2FkanVzdH0sCiAgICB7ImV4dGVuZC1lbmQiLCBleHRlbmRfZW5kfSwKICAgIHsiZGVsZXRlLXNl bGVjdGlvbiIsIGRlbGV0ZV9zZWxlY3Rpb259LAogICAgeyJjbGVhci1zZWxlY3Rpb24iLCBjbGVh cl9zZWxlY3Rpb259LAogICAgeyJjdXQtcHJpbWFyeSIsIGN1dF9wcmltYXJ5fSwKICAgIHsiY29w eS1wcmltYXJ5IiwgY29weV9wcmltYXJ5fSwKICAgIHsic2V0LWFuY2hvciIsIHNldF9hbmNob3J9 LAoKICAgIHsidG9nZ2xlLWFkZC1tb2RlIiwgdG9nZ2xlX2FkZF9tb2RlfSwKICAgIHsic2VsZWN0 LWFsbCIsIHNlbGVjdF9hbGx9LAogICAgeyJkZXNlbGVjdC1hbGwiLCBkZXNlbGVjdF9hbGx9LAog ICAgeyJzZWNvbmRhcnktc3RhcnQiLCBzZWNvbmRhcnlfc3RhcnR9LAogICAgeyJzZWNvbmRhcnkt YWRqdXN0Iiwgc2Vjb25kYXJ5X2FkanVzdH0sCiAgICB7ImNvcHktdG8iLCBjb3B5X3RvfSwKICAg IHsibW92ZS10byIsIG1vdmVfdG99LAogICAgeyJxdWljay1jdXQtc2V0IiwgcXVpY2tfY3V0X3Nl dH0sCiAgICB7InF1aWNrLWNvcHktc2V0IiwgcXVpY2tfY29weV9zZXR9LAogICAgeyJkby1xdWlj ay1hY3Rpb24iLCBkb19xdWlja19hY3Rpb259LAogICAgeyJjdXQtY2xpcGJvYXJkIiwgY3V0X2Ns aXBib2FyZH0sCiAgICB7ImNvcHktY2xpcGJvYXJkIiwgY29weV9jbGlwYm9hcmR9LAogICAgeyJw YXN0ZS1jbGlwYm9hcmQiLCBwYXN0ZV9jbGlwYm9hcmR9LAogICAgeyJ0cmF2ZXJzZS1uZXh0Iiwg dHJhdmVyc2VfbmV4dH0sCiAgICB7InRyYXZlcnNlLXByZXYiLCB0cmF2ZXJzZV9wcmV2fSwKICAg IHsidHJhdmVyc2UtaG9tZSIsIHRyYXZlcnNlX2hvbWV9LAogICAgeyJuZXh0LXRhYi1ncm91cCIs IG5leHRfdGFiX2dyb3VwfSwKICAgIHsicHJldi10YWItZ3JvdXAiLCBwcmV2X3RhYl9ncm91cH0s CiAgICB7ImZvY3VzSW4iLCBfWG1UZXh0RmllbGRGb2N1c0lufSwKICAgIHsiZm9jdXNPdXQiLCBf WG1UZXh0RmllbGRGb2N1c091dH0sCiAgICB7ImVudGVyIiwgZW50ZXJ9LAogICAgeyJsZWF2ZSIs IGxlYXZlfSwKCiAgICB7ImJlZXAiLCBiZWVwfSwKICAgIHsiZGVsZXRlLWFsbCIsIGRlbGV0ZV9h bGx9LAogICAgeyJIZWxwIiwgX1htUHJpbWl0aXZlSGVscH0sCgoKCiAgICB7Imluc2VydC1zdHJp bmciLCBpbnNlcnRfc3RyaW5nfSwKICAgIHsia2lsbC1uZXh0LWNoYXJhY3RlciIsIGtpbGxfbmV4 dF9jaGFyYWN0ZXJ9LAogICAgeyJraWxsLW5leHQtd29yZCIsIGtpbGxfbmV4dF93b3JkfSwKICAg IHsia2lsbC1wcmV2aW91cy1jaGFyYWN0ZXIiLCBraWxsX3ByZXZpb3VzX2NoYXJhY3Rlcn0sCiAg ICB7ImtpbGwtcHJldmlvdXMtd29yZCIsIGtpbGxfcHJldmlvdXNfd29yZH0sCiAgICB7ImtpbGwt c2VsZWN0aW9uIiwga2lsbF9zZWxlY3Rpb259LAogICAgeyJraWxsLXRvLWVuZC1vZi1saW5lIiwg a2lsbF90b19lbmRfb2ZfbGluZX0sCiAgICB7ImtpbGwtdG8tc3RhcnQtb2YtbGluZSIsIGtpbGxf dG9fc3RhcnRfb2ZfbGluZX0sCiAgICB7InBhc3RlLXByaW1hcnkiLCBwYXN0ZV9wcmltYXJ5fSwK ICAgIHsicHJvY2Vzcy1ob21lIiwgcHJvY2Vzc19ob21lfSwKICAgIHsicHJvY2Vzcy1yZXR1cm4i LCBwcm9jZXNzX3JldHVybn0sCiAgICB7InByb2Nlc3MtdGFiIiwgcHJvY2Vzc190YWJ9LAogICAg eyJyZWRyYXctZGlzcGxheSIsIHJlZHJhd19kaXNwbGF5fSwKICAgIHsic2Vjb25kYXJ5LW5vdGlm eSIsIHNlY29uZGFyeV9ub3RpZnl9LAogICAgeyJzZWxlY3QtYWRqdXN0Iiwgc2VsZWN0X2FkanVz dH0sCiAgICB7InNlbGVjdC1lbmQiLCBzZWxlY3RfZW5kfSwKICAgIHsic2VsZWN0LXN0YXJ0Iiwg c2VsZWN0X3N0YXJ0fSwKICAgIHsic2V0LWluc2VydGlvbi1wb2ludCIsIHNldF9pbnNlcnRpb25f cG9pbnR9LAogICAgeyJzZXQtc2VsZWN0aW9uLWhpbnQiLCBzZXRfc2VsZWN0aW9uX2hpbnR9LAog ICAgeyJ1bmtpbGwiLCB1bmtpbGx9LAogICAgeyJ1bm1hcCIsIHVubWFwfSwKfTsKWG1QcmltaXRp dmVDbGFzc0V4dFJlYyBfWG1UZXh0RlByaW1DbGFzc0V4dFJlYyA9CnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCh2b2lkICopMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgoWHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWG1QcmltaXRpdmVDbGFzc0V4dFJlYyksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCh2b2lkICopMCkKfTsKClhtVGV4dEZpZWxkQ2xhc3NSZWMgeG1UZXh0RmllbGRDbGFzc1JlYyA9 CnsKCiAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2lkZ2V0Q2xhc3Mp ICYgeG1QcmltaXRpdmVDbGFzc1JlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlhtVGV4dEZpZWxkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKFhtVGV4dEZpZWxkUmVjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xhc3NfaW5pdGlhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh c3NfcGFydF9pbml0aWFsaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWN0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChD YXJkaW5hbCkgKHNpemVvZihhY3Rpb25zKSAvIHNpemVvZihhY3Rpb25zWzBdKSkpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoQ2FyZGluYWwpIChzaXplb2YocmVzb3VyY2VzKSAvIHNpemVv ZihyZXNvdXJjZXNbMF0pKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo WHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4cG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0 X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWHRBbG1vc3RQcm9jKSBfWHRJ bmhlcml0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEgKiAxMDAwICsgNiksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfWG1UZXh0Rl9FdmVudEJpbmRpbmdzMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcXVlcnlfZ2VvbWV0cnksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgodm9pZCAqKTApICwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogIH0sCgogIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChYdFdpZGdldFByb2MpIF9YdEluaGVyaXQpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFh0V2lkZ2V0UHJvYykgX1h0SW5oZXJpdCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3luX3Jlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKChDYXJkaW5hbCkgKHNpemVvZihzeW5fcmVzb3VyY2VzKSAvIHNpemVv ZihzeW5fcmVzb3VyY2VzWzBdKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoWHRQb2ludGVyKSAmIF9YbVRleHRGUHJpbUNsYXNzRXh0UmVjLAogIH0sCgogIHsKICAgICAg ICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCkKICB9Cn07CgoKV2lkZ2V0Q2xhc3MgeG1UZXh0 RmllbGRXaWRnZXRDbGFzcyA9IChXaWRnZXRDbGFzcykmeG1UZXh0RmllbGRDbGFzc1JlYzsKCgoK CgoKc3RhdGljIHZvaWQKRm9udFNpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIFht Rm9udExpc3RFbnRyeSBlbnRyeSA9ICgodm9pZCAqKTApOwogICAgICAgIFhGb250U3RydWN0ICpm cyA9ICgodm9pZCAqKTApOwogICAgICAgIGludCBpLCBqLCBudW0sIG1heCwgbWluOwoKICAgIGZv ciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVu ZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAgICAgICBpZiAoIV9fZXh0 ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFu dF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRf cCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z W2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1 NDRdKSksIF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksICghKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpID09IDEpIHx8IF9fczFfbGVuID49 IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt PnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgo X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSwgKF9fY29uc3Qg Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k aXRpb25zW2ldLT50YWcpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9s ZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEy NTQ0XSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKGNoYXIgKikmX1htU3RyaW5nc1sx MjU0NF0pKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5n c1sxMjU0NF0pKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoY2hhciAqKSZfWG1TdHJp bmdzWzEyNTQ0XSkpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh ZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl bmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo KChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv bnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAo X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1 NDRdKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld LT50YWcpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop Jl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikm X1htU3RyaW5nc1sxMjU0NF0pKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtIF9fczJb MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0 cmluZ3NbMTI1NDRdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1 bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gX19zMlszXSk7IH0g fSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6 ZV90KShjb25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf bGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld LT50YWcpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpLCBfX3MyX2xlbiA8IDQp ID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAm JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRd KSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0 cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp dGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzJdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1 NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld LT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z dCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKTsgcmVnaXN0ZXIgaW50IF9f cmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0 aW9uc1tpXS0+dGFnKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k aXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5y ZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+ cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgo Y2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSkpKTsgfSkpCiAgICAgICAgewogICAg ICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0 KS0+cmVuZGl0aW9uc1tpXTsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNpemU6IFhtRk9OVExJU1RfREVGQVVMVF9UQUdcbiIp OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghZW50cnkpCiAg ICB7CgogICAgICAgIGZvciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAg ICAgICAgICAgaWYgKCFfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47 IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAmJiBfX2J1 aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp c3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICop Jl9YbVN0cmluZ3NbMF0pKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09IDEpIHx8IF9fczFfbGVu ID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w ICgoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpLCAoX19jb25zdCBj aGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp dGlvbnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xl bikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0p KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09 IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSwgX19z MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6ZV90KShj b25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt PnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp ID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJp bmdzWzBdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb aV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hh ciAqKSZfWG1TdHJpbmdzWzBdKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp LT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVsyXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzNdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBf X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf X3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7 IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVswXSAtIF9fczJbMF0pOyBp ZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3Nb MF0pKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+ IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbM10gLSBfX3My WzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp dGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksIF9fczJf bGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBd KSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSA9 PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5n c1swXSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld LT50YWcpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIg KikmX1htU3RyaW5nc1swXSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+ cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop Jl9YbVN0cmluZ3NbMF0pKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMF07IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlm IChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7 IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSwg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld LT50YWcpKSkpOyB9KSkgewoKICAgICAgICAgICAgICAgIGVudHJ5ID0gKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldOwogICAgICAgICAgICAg ICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNp emU6IFhtU1RSSU5HX0RFRkFVTFRfQ0hBUlNFVFxuIik7CgogICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCFlbnRyeSkKICAgIHsKCiAg ICAgICAgZm9yIChpID0gMDsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp c3QpLT5yZW5kaXRpb25zW2ldLT50YWcgIT0gKCh2b2lkICopMCk7IGkrKykgewogICAgICAgICAg ICBpZiAoIV9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVp bHRpbl9jb25zdGFudF9wICgiIikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSAmJiAo X19zMV9sZW4gPSBzdHJsZW4gKCIiKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIi KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0t PnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpID09IDEpIHx8IF9fczJf bGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoIiIpLCAoX19jb25zdCBjaGFy ICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv bnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIiIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgiIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIiIpID09IDEpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAoIiIpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb aV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3Rl ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIiIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z W2ldLT50YWcpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikp WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzJdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm IChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiIpKVszXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7 IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpOyByZWdpc3Rl ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIiIpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIiIpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIiIpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCIiKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl bmRpdGlvbnNbaV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3Ry bGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv bnNbaV0tPnRhZyksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCIiKSAm JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCIiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzBdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsg aWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMV0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzFdKTsgaWYgKF9fczJf bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiIikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9f czFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh ZykpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo X19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+ dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tp XS0+dGFnKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0 ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb aV0tPnRhZykpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wICgiIiwgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKSkp OyB9KSkgewogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV07CiAgICAgICAgICAgICAgICBfTHREZWJ1 ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJGb250U2l6ZTogZW1wdHkg dGFnXG4iKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgIH0KCiAgICBpZiAoISBlbnRyeSkgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmZvbnRfbGlzdCkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5mb250X2xpc3QpLT5yZW5kaXRpb25zKQogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF07CiAgICB9 CgoKCgoKCgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC51 c2VfeGZ0KSA9IDA7CgoKICAgIGlmICghZW50cnkpIHsKICAgICAgICBYbUZvbnRMaXN0IGZsID0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpOwogICAgICAgICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSA9IF9YbUZvbnRMaXN0Q3JlYXRl RGVmYXVsdCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSk7CiAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9Y bS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiVEYgRm9udFNpemU6IG92ZXJ3cml0aW5nIEZvbnRMaXN0 IChvbGQgJXAgbmV3ICVwKVxuIiwgZmwsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu Zm9udF9saXN0KSk7CgoKICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1swXTsKICAgIH0KCgoKCgoKCiAgICBpZiAoZW50 cnktPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAgICBYRm9udFN0cnVjdCAqKmZv bzsKICAgICAgICBjaGFyICoqYmFyOwoKICAgICAgICBpZiAoKG51bSA9IFhGb250c09mRm9udFNl dCgoWEZvbnRTZXQpKGVudHJ5LT5mb250KSwgJmZvbywgJmJhcikpIDwgMSkgewogICAgICAgICAg ICBmcyA9ICgodm9pZCAqKTApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZzID0gZm9v WzBdOwogICAgICAgICAgICBtYXggPSAwOyBtaW4gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICBm b3IgKGo9MDsgajxudW07IGorKyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvb1tqXS0+bWF4 X2JvdW5kcy53aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGZv b1tqXS0+bWF4X2JvdW5kcy53aWR0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9vW2pdLT5t aW5fYm91bmRzLndpZHRoIDwgbWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluID0g Zm9vW2pdLT5taW5fYm91bmRzLndpZHRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSA9IChtYXggKyBt aW4pIC8gMjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZzID0gKFhGb250U3RydWN0 ICopZW50cnktPmZvbnQ7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5h dmVyYWdlX2NoYXJfd2lkdGgpID0KICAgICAgICAgICAgICAgIChmcy0+bWF4X2JvdW5kcy53aWR0 aCArIGZzLT5taW5fYm91bmRzLndpZHRoKSAvIDI7CiAgICB9CiAgICAoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmZvbnQpID0gZnM7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv bikpLT5Gb250SGVpZ2h0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+ bWF4X2JvdW5kcy5hc2NlbnQpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250 LT5tYXhfYm91bmRzLmRlc2NlbnQpOwoKICAgIGlmICggKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpIDw9IDAgKSB7CiAgICAgICAgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpID0gX1htRm9udENhbGN1bGF0 ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCgoV2lkZ2V0KXcsIGZzKTsKICAgIH0KfQoKc3RhdGljIHZv aWQKRm9udEluaXRpYWxpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewoKCgogICAgaWYgKCEoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpCiAgICB7CiAgICAgICAgV2lk Z2V0IHBhcmVudCA9ICgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50KTsKCiAgICAgICAgd2hp bGUgKHBhcmVudCkKICAgICAgICB7CiAgICAgICAgICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAo KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5v YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP YmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl bnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChY bUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgo KE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4 dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFz dFB0ciktPmZsYWdzKVsoKFhtQlVMTEVUSU5fQk9BUkRfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY bUJVTExFVElOX0JPQVJEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkgfHwgWHRJc1N1YmNs YXNzKHBhcmVudCwgdmVuZG9yU2hlbGxXaWRnZXRDbGFzcykpIHsKICAgICAgICAgICAgICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlRGIEZvbnRJbml0 aWFsaXplOiBvdmVyd3JpdGluZyBGb250TGlzdFxuIik7CgogICAgICAgICAgICAgICAgWHRWYUdl dFZhbHVlcyhwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKSZf WG1TdHJpbmdzWzEwMDUyXSksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf bGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApKTsKCiAgICAg ICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBY bUZvbnRMaXN0Q29weSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkp OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlz dF9jcmVhdGVkKSA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgcGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCk7CiAg ICAgICAgfQoKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5m b250X2xpc3QpKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5mb250X2xpc3QpID0gX1htR2V0RGVmYXVsdEZvbnRMaXN0KChXaWRnZXQpdywgWG1U RVhUX0ZPTlRMSVNUKTsKCgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmZvbnRsaXN0X2NyZWF0ZWQpID0gMTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7 CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udGxpc3RfY3JlYXRl ZCkgPSAxOwogICAgfQoKICAgIEZvbnRTaXplKHcpOwp9CgpzdGF0aWMgdm9pZApDaGFuZ2VEcmF3 R0MoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NN YXNrIG1hc2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmdjKSkgewoKCgogICAgICAgWEZyZWVHQygoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5nYykpOwoKICAgICB9CgoKCgoKICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgx TDw8OCkgfCAoMUw8PDIpIHwgKDFMPDwzKTsKICAgIGR5bmFtaWMgPSAoMUw8PDE5KSB8ICgxTDw8 MTcpIHwgKDFMPDwxOCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZG9udGNhcmUg PSAwOwoKICAgIHZhbHVlcy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0g MDsKICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKCgoKCgoKICAgIG1hc2sgfD0gKDFMPDwxNCk7 CiAgICB2YWx1ZXMuZm9udCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCkt PmZpZDsKCiAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt PnByaW1pdGl2ZS5mb3JlZ3JvdW5kKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoV2lkZ2V0 KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCk7CiAgICB2YWx1ZXMuY2xpcF94X29yaWdpbiA9 IDA7CiAgICB2YWx1ZXMuY2xpcF95X29yaWdpbiA9IDA7CgogICAgICAgIGlmICghIHctPmNvcmUu c2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBTY3JlZW4gKnMgPSAoKCgoT2JqZWN0KSgoV2lk Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdp ZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuKTsKCiAgICAgICAgICAgICAgICBt YXNrIHw9ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgdmFsdWVzLmZpbGxfc3R5bGUgPSAyOwog ICAgICAgICAgICAgICAgdmFsdWVzLnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgocywgIjUw X2ZvcmVncm91bmQiLCAxLCAwLCAxKTsKICAgICAgICB9CgoKCgoKICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuZ2MpID0gWENyZWF0ZUdDKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0 KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu dC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwg bWFzaywgJnZhbHVlcyk7CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXZl X2ludmVydGVkX2ltYWdlX2djKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApHQ0luaXRpYWxpemUoWG1U ZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NNYXNrIG1h c2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZ2MpID0gKCh2b2lkICopMCk7CiAgICBDaGFuZ2VEcmF3R0Modyk7CgoKCgoKICAgIHZhbHVl cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m aWxsX3N0eWxlID0gMjsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gKCgoWG1QcmltaXRpdmVXaWRn ZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgdmFsdWVzLmJhY2tncm91bmQgPSAo KChXaWRnZXQpKHcpKS0+Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIG1hc2sgPSAoMUw8PDUp IHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZHlu YW1pYyA9ICgxTDw8MTIpIHwgKDFMPDwxMykgfCAoMUw8PDExKTsKICAgIGRvbnRjYXJlID0gMDsK CgoKCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2djKSA9IFhDcmVh dGVHQygoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6 ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgo KE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRl ZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5v YmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksIG1hc2ssICZ2YWx1ZXMpOwoKCgoKCgogICAgdmFs dWVzLmxpbmVfc3R5bGUgPSAwOwogICAgdmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgdmFsdWVz LmZpbGxfc3R5bGUgPSAwOwogICAgdmFsdWVzLmZvcmVncm91bmQgPSAoKChXaWRnZXQpKHcpKS0+ Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoWG1Qcmlt aXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgbWFzayA9ICgxTDw8 NSkgfCAoMUw8PDQpIHwgKDFMPDw4KSB8CiAgICAgICAgKDFMPDwyKSB8ICgxTDw8Myk7CgogICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zYXZlX2djKSA9IFh0R2V0R0MoKFdpZGdl dCl3LCBtYXNrLCAmdmFsdWVzKTsKfQoKc3RhdGljIHZvaWQKR0NQaXhtYXAoWG1UZXh0RmllbGRX aWRnZXQgdykKewogICAgc3RhdGljIGNoYXIgZG90c1tdID0KICAgIHsyLCAxLCAxfTsKICAgIEdD IGdjOwogICAgaW50IHdpZHRoLCB3aWR0aF9lcmFzZSwgaGVpZ2h0OwogICAgRGlzcGxheSAqZGlz cGxheTsKICAgIFhHQ1ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdDTWFzayBtYXNrOwoKICAgIHZhbHVl cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m aWxsX3N0eWxlID0gMDsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gMDsKICAgIHZhbHVlcy5iYWNr Z3JvdW5kID0gMDsKCiAgICBkaXNwbGF5ID0gKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVj dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl dCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQp dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aWR0aCA9IDU7 CiAgICB3aWR0aF9lcmFzZSA9IDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv bnQpLT5tYXhfYm91bmRzLndpZHRoOwogICAgaGVpZ2h0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv bikpLT5Gb250SGVpZ2h0KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5jdXJzb3IpKQogICAgewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQp dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp ID8gKChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0 KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQoKICAgICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAg ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdGlwcGxlX3RpbGUpKQogICAg ewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lk Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChX aWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+ b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICBp ZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9vZmYpKQogICAgewogICAg ICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQp dykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0 LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmliZWFtX29mZikpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuaWJlYW1fb2ZmKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSA9IDA7CgogICAgaWYgKGhlaWdo dCA+IDApIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikg PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkg PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPQog ICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5z Y3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu KSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoX2VyYXNlLCBoZWlnaHQs IHctPmNvcmUuZGVwdGgpOwoKICAgICAgICB2YWx1ZXMubGluZV9zdHlsZSA9IDA7CiAgICAgICAg dmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKICAg ICAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9IDA7CiAgICAgICAgdmFsdWVzLmJhY2tncm91bmQgPSAw OwogICAgICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICAg ICAoMUw8PDIpIHwgKDFMPDwzKTsKICAgICAgICBnYyA9IFhDcmVhdGVHQyhkaXNwbGF5LCAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciksIG1hc2ssICZ2YWx1ZXMpOwoKICAg ICAgICBYRmlsbFJlY3RhbmdsZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmN1cnNvciksIGdjLAogICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWln aHQpOwogICAgICAgIFhGaWxsUmVjdGFuZ2xlKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgMCwg MCwgd2lkdGgsIGhlaWdodCk7CgogICAgICAgIFhTZXRGb3JlZ3JvdW5kKGRpc3BsYXksIGdjLCAx KTsKICAgICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5jdXJzb3IpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7 CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuY3Vyc29yKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDAsIDAsIDQsIDApOwogICAgICAgIFhE cmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciks IGdjLAogICAgICAgICAgICAgICAgICAwLCBoZWlnaHQgLSAxLCA0LCBoZWlnaHQgLSAxKTsKCiAg ICAgICAgWFNldExpbmVBdHRyaWJ1dGVzKGRpc3BsYXksIGdjLCAwLCAxLCAyLCAxKTsKICAgICAg ICBYU2V0RGFzaGVzKGRpc3BsYXksIGdjLCAwLCAmZG90c1sxXSwgKGludClkb3RzWzBdKTsKICAg ICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z dGlwcGxlX3RpbGUpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7 CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDEsIDAsIDMsIDApOwogICAg ICAgIFhEcmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0 aXBwbGVfdGlsZSksIGdjLAogICAgICAgICAgICAgICAgICAxLCBoZWlnaHQgLSAxLCAzLCBoZWln aHQgLSAxKTsKCiAgICAgICAgWEZyZWVHQyhkaXNwbGF5LCBnYyk7CiAgICB9Cn0KCnN0YXRpYyB2 b2lkCkdDQ2xpcChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICAgICAgWFJlY3RhbmdsZSBjbGlw OwogICAgICAgIERpbWVuc2lvbiBidywgYmg7CgogICAgICAgIGJ3ID0gKCgoWG1QcmltaXRpdmVX aWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsgKCgoWG1QcmltaXRpdmVX aWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpCiAgICAgICAgICAgICAg ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3dpZHRoKTsKICAgICAg ICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tu ZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhp Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 Lm1hcmdpbl9oZWlnaHQpOwogICAgICAgIGNsaXAueCA9IDA7CiAgICAgICAgY2xpcC55ID0gMDsK ICAgICAgICBjbGlwLndpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJn aW5fYm90dG9tKTsKICAgICAgICBjbGlwLmhlaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQubWFyZ2luX3RvcCk7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v VGV4dEYuYyIsIChXaWRnZXQpdywgIkdDQ2xpcCglZCwlZClcbiIsICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQubWFyZ2luX3RvcCkpOwogICAgICAgIHsKCiAgICAgICAgICAgICAgICBYU2V0Q2xpcFJl Y3RhbmdsZXMoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50 LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu Z2MpLAogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE cmF3KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksICZjbGlwLCAxLCAwKTsKICAg ICAgICB9CgogICAgICAgIEdDUGl4bWFwKHcpOwogICAgICAgIEN1cnNvclNldCh3LCAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhhc19mb2N1cykpOwp9CgpzdGF0aWMgdm9pZApTaXpl UmVjYWxjKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgICAgICBEaW1lbnNpb24gYncsIGJoOwoK ICAgICAgICBidyA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3df dGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGln aHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0Lm1hcmdpbl93aWR0aCk7CiAgICAgICAgYmggPSAoKChYbVByaW1pdGl2ZVdpZGdldCko dykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChYbVByaW1pdGl2ZVdpZGdldCko dykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5faGVpZ2h0KTsKCiAgICAgICAgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSA9ICgoKFdpZGdldCko dykpLT5jb3JlLndpZHRoKSAtIDIgKiBidzsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u KSktPlhEcmF3KSA9IGJ3OwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcp ID0gYmg7CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFy dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl bnNpb24pKS0+WU9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSArICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+bWF4X2JvdW5kcy5hc2NlbnQpOwog ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9w KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+Rm9udEhlaWdodCk7CiAgICAgICAgfQoKICAg ICAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykgKyAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApID4gKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVp Z2h0KQogICAgICAgICAgICAgICAgICAgICAgICAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt PnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3 KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSkgewogICAgICAgICAgICAgICAgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSA9ICgoKFdpZGdldCkodykpLT5j b3JlLmhlaWdodCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSAtCiAgICAgICAg ICAgICAgICAgICAgICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdo bGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5z aGFkb3dfdGhpY2tuZXNzKTsKICAgICAgICB9CiAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAg ICBpZiAoKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSkKICAgICAgICAgICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgo KChXaWRnZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNr bmVzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKGludClfWG1UZXh0Rl9Gb250TWF4 V2lkdGgoKFdpZGdldCl3KTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSkKICAgICAgICAgICAgICAgICAg ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgoKChXaWRn ZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIg KiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpOwoKICAgICAgICB9CgogICAgICAgIF9MdERlYnVnKCIu Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlNpemVSZWNhbGMgc2l6ZSAlZCAl ZCAtPiBvZmZzZXQgJWQsJWQgdmlldyBkaW0gJWQgJWQgY29scyAlZFxuIiwgKCgoV2lkZ2V0KSh3 KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpLCAoKChYbVRleHRG aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZz ZXQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pLCAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLCAoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmNvbHVtbnMpKTsKCgoKCgp9CgpzdGF0aWMgdm9pZApUZXh0Rl9Jbml0 aWFsaXNlSGlnaGxpZ2h0KFdpZGdldCB3KQp7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRDYWxsb2Mo OCwgc2l6ZW9mKF9YbUhpZ2hsaWdodFJlYykpOwogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtID0gODsKICAgICAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID0gMjsKICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFswXS5wb3NpdGlvbiA9IDA7 CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rb MF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsxXS5wb3NpdGlvbiA9IDIxNDc0ODM2NDc7CiAg ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMV0u bW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQucHJpbV9wb3NfcmlnaHQpID0gLTE7Cn0KCgoKCgpzdGF0aWMgdm9pZApjbGFzc19pbml0aWFs aXplKHZvaWQpCnsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoKHZv aWQgKikwKSwgIlhtVGV4dEZpZWxkIGNsYXNzX2luaXRpYWxpemVcbiIpOwogICAgdGZfZXZudDJf dHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRCaW5kaW5nczIpOwog ICAgdGZfZXZudDNfdHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRC aW5kaW5nczMpOwp9CgoKc3RhdGljIHZvaWQKY2xhc3NfcGFydF9pbml0aWFsaXplKFdpZGdldENs YXNzIHdpZGdldF9jbGFzcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j IiwgKCh2b2lkICopMCksICJYbVRleHRGaWVsZCBjbGFzc19wYXJ0X2luaXRpYWxpemVcbiIpOwog ICAgeyBpZiAoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz KSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs YXNzRXh0KSgoKFdpZGdldENsYXNzKSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNp b24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYo KChXaWRnZXRDbGFzcykod2lkZ2V0X2NsYXNzKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDog KChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xh c3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKHdpZGdldF9jbGFzcykp LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp ICgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3NbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0gfD0gKDEg PDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSkgOyB9Owp9CgoKc3RhdGljIHZvaWQKaW5p dGlhbGl6ZShXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IHRuZXcsIEFyZ0xpc3QgYXJncywgQ2FyZGlu YWwgKm51bSkKewogICAgICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRn ZXQpdG5ldzsKICAgICAgICBBdG9tIGltcG9ydF90YXJnZXRbM107CiAgICAgICAgQXJnIGRzX2Fy Z3NbNl07CiAgICAgICAgaW50IG4gPSAwOwogICAgICAgIGNoYXIgKnRlbXA7CgogICAgICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHRuZXcsICJpbml0aWFsaXplIDogJWkg YXJnc1xuIiAiXHRyZXF1ZXN0IFggJTVpIFkgJTVpIFcgJTVpIEggJTVpXG4iICJcdCAgbmV3X3cg WCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIsICpudW0sICgoKFdpZGdldCkocmVxdWVzdCkpLT5j b3JlLngpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShyZXF1ZXN0 KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS5oZWlnaHQpLCAoKChX aWRnZXQpKHRuZXcpKS0+Y29yZS54KSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUueSksICgoKFdp ZGdldCkodG5ldykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUuaGVpZ2h0 KSk7CiAgICAgICAgX0x0RGVidWdQcmludEFyZ0xpc3QoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j IiwgdG5ldywgYXJncywgKm51bSwgMCk7CgoKCiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z KChXaWRnZXQpdyx0Zl9ldm50Ml90cmFucyk7CiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z KChXaWRnZXQpdyx0Zl9ldm50M190cmFucyk7CgoKICAgICAgICB3LT50ZXh0LmV4dGVuc2lvbiA9 CiAgICAgICAgICAgICAgICAoWHRQb2ludGVyKVh0TWFsbG9jKHNpemVvZihYbVRleHRGaWVsZFBh cnRMZXNzdGlmRXh0ZW5zaW9uKSk7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt PlNlbGVjdGlvblRleHQpID0gKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu c2lvbikpLT5UZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lk dGgpID0gMDsKCgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv bnRfbGlzdCkpIHsKICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZmwgPSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgIH0KICAgICAgICBG b250SW5pdGlhbGl6ZSh3KTsKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQudmFsdWUpKQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IHN0cmxlbigoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnZhbHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IDA7CgogICAgICAgICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIDI1NjsKCiAgICAgICAgdGVtcCA9IChjaGFyICop WHRNYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9jZCkpOwog ICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSkKICAgICAg ICAgICAgICAgIHN0cmNweSh0ZW1wLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh bHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3RyY3B5KHRlbXAsICIiKTsKICAg ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSA9IHRlbXA7CgogICAg ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK CgogICAgICAgIGlmICgoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS53aWR0aCkgPT0gKERpbWVu c2lvbikwKSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAg ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp KHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hs aWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmNvbHVt bnMpICogKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSk7CgogICAgICAgICAg ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAg ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykg PSAoKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190 aGlja25lc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyICogKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpKSAvCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KTsKCiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoV2lkZ2V0KShyZXF1ZXN0 KSktPmNvcmUuaGVpZ2h0KSA9PSAoRGltZW5zaW9uKTApIHsKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVpZ2h0KSA9ICgyICog KCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp KHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAyICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5f aGVpZ2h0KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5Gb250SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgICBTaXplUmVjYWxjKHcpOwoKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDApIHsKICAgICAgICAgICAgICAgIGlmICgoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CiAgICAgICAgfQoKICAgICAg ICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpID0gLTE7CiAgICAgICAgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CgogICAgICAgICgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdD0oX1htSGlnaGxpZ2h0UmVj KilYdE1hbGxvYyhzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSk7CiAgICAgICAgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdC0+bW9kZSkgPSBYbUhJR0hMSUdIVF9O T1JNQUw7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRIaWdobGlnaHRTdGFy dCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAtMTsKICAg ICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5PbGRYT2Zmc2V0KSA9IDA7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnRpbWVyX2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNlbGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7Cgog ICAgICAgIHctPnRleHQubGFzdF90aW1lID0gKFRpbWUpMDsKCiAgICAgICAgdy0+dGV4dC5zYXJy YXlfaW5kZXggPSAwOwoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pID0g MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0aW9uKSA9IDE7 CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNfZm9jdXMpID0gMDsK CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXht YXApKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z dGlwcGxlX3RpbGUpID0gKFBpeG1hcCkoKHZvaWQgKikwKTsKICAgICAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPSAoUGl4bWFwKSgodm9pZCAqKTApOwoKCiAg ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYykgPSAoKHZvaWQgKikwKTsK CgogICAgICAgIGltcG9ydF90YXJnZXRbMF0gPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodG5l dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp ID8gKChXaWRnZXQpKHRuZXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodG5l dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhU IiwgMCk7CiAgICAgICAgaW1wb3J0X3RhcmdldFsxXSA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0 KSh0bmV3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkodG5ldykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0 KSh0bmV3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAw KTsKICAgICAgICBpbXBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CiAgICAgICAgKCh2b2lk KSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNzIxMF0pKSwgKGRz X2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShpbXBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAg ICAgICgodm9pZCkoIChkc19hcmdzW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0 NzldKSksIChkc19hcmdzW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoMykgKSk7IG4rKzsKICAgICAg ICAoKHZvaWQpKCAoZHNfYXJnc1tuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NDg4 XSkpLCAoZHNfYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgxTCA8PCAxKXwoMUwgPDwgMCkp ICkpOyBuKys7CiAgICAgICAgKCh2b2lkKSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICop Jl9YbVN0cmluZ3NbNjM4Ml0pKSwgKGRzX2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShwcm9j ZXNzX2Ryb3ApICkpOyBuKys7CgogICAgICAgIFhtRHJvcFNpdGVSZWdpc3Rlcih0bmV3LCBkc19h cmdzLCBuKTsKCiAgICAgICAgVGV4dEZfSW5pdGlhbGlzZUhpZ2hsaWdodCh0bmV3KTsKICAgICAg ICB3LT50ZXh0Lm1heF9jaGFyX3NpemUgPSAxOwp9CgoKc3RhdGljIHZvaWQKcmVhbGl6ZShXaWRn ZXQgYXcsIFh0VmFsdWVNYXNrICp2YWx1ZV9tYXNrLCBYU2V0V2luZG93QXR0cmlidXRlcyAqYXR0 cmlidXRlcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClh dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJy ZWFsaXplXG4iKTsKCgogICAgKCooJnhtUHJpbWl0aXZlQ2xhc3NSZWMpLT5jb3JlX2NsYXNzLnJl YWxpemUpIChhdywgdmFsdWVfbWFzaywgYXR0cmlidXRlcyk7CgoKICAgIEdDSW5pdGlhbGl6ZSh3 KTsKICAgIEdDQ2xpcCh3KTsKICAgIEN1cnNvckRyYXcodyk7CgogICAgX1htVGV4dEZpZWxkU2V0 RWRpdGFibGUoYXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpKTsK fQoKCnN0YXRpYyB2b2lkCmRlc3Ryb3koV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdpZGdl dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv WG0vVGV4dEYuYyIsIGF3LCAiZGVzdHJveSIpOwoKCgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRX aWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgIHsKICAgICAgICBYdFJlbW92ZVRpbWVP dXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSA9IDA7CiAgICB9Cgog ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShhdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgIHsK ICAgICAgICBYdFJlbW92ZVRpbWVPdXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQu dGltZXJfaWQpKTsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkoYXcpKS0+dGV4dC50aW1l cl9pZCkgPSAwOwogICAgfQogICAgaWYoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsK ICAgICAgIFhGcmVlR0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4t PmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlz cGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpKTsKICAgICAgIFhGcmVl R0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpKTsKICAgIH0KCiAgICBYdFJlbGVh c2VHQygoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2F2ZV9nYykp OwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRsaXN0X2NyZWF0 ZWQpKSB7CiAgICAgICAgWG1Gb250TGlzdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5mb250X2xpc3QpKTsKICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5TZWxlY3Rpb25UZXh0KSkgewogICAgICAgIFh0RnJlZSgoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u KSktPlNlbGVjdGlvblRleHQpKTsKICAgIH0KCiAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC52YWx1ZSkpOwoKCgoKCiAgICBYdEZyZWUoKGNoYXIgKil3LT50ZXh0LmV4 dGVuc2lvbik7CiAgICBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucyhhdyk7CiAgICBYdEZyZWUoKGNo YXIgKikoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0Lmxpc3QpOwoKCgoK fQoKCnN0YXRpYyB2b2lkCmV4cG9zZShXaWRnZXQgYXcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy ZWdpb24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7 CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJleHBvc2VcbiIp OwoKICAgIGlmICghKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6 ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsKICAgICAgICBy ZXR1cm47CiAgICB9CgoKCgogICAgaWYgKGV2ZW50LT54ZXhwb3NlLmNvdW50ICE9IDApIHJldHVy bjsKCgogICAgQ3Vyc29yRXJhc2Uodyk7CiAgICBEcmF3QWxsKHcpOwoKICAgIF9YbURyYXdTaGFk b3dzKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDog KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAg ICAgICAgICAgICAgICAgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg ICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUudG9wX3NoYWRvd19H QyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp dmUuYm90dG9tX3NoYWRvd19HQyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdp ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksICgoKFhtUHJpbWl0aXZl V2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAg ICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdp ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAg ICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpIC0gMiAqICgoKFhtUHJpbWl0aXZlV2lk Z2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAgICAg ICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz KSwKICAgICAgICAgICAgICAgICAgIFhtU0hBRE9XX0lOKTsKICAgIGlmICgoKChYbVByaW1pdGl2 ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0ZWQpKSB7CiAgICAgICAgKCooKChYbVBy aW1pdGl2ZUNsYXNzUmVjICopKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkp LT5wcmltaXRpdmVfY2xhc3MuYm9yZGVyX2hpZ2hsaWdodCkpIChhdyk7CiAgICB9IGVsc2Ugewog ICAgICAgICgqKCgoWG1QcmltaXRpdmVDbGFzc1JlYyAqKSgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKS0+cHJpbWl0aXZlX2NsYXNzLmJvcmRlcl91bmhpZ2hsaWdodCkpIChh dyk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApyZXNpemUoV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRG aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8u Li8uLi9saWIvWG0vVGV4dEYuYyIsIGF3LCAicmVzaXplID0+IHdpZCAlZCBodCAlZFxuIiwgKCgo V2lkZ2V0KShhdykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCkp OwoKCiAgICBTaXplUmVjYWxjKHcpOwoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5nYykpIHsKICAgICAgICBHQ0NsaXAodyk7CiAgICB9CgogICAgaWYgKCgoKChPYmpl Y3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoYXcpKS0+b2Jq ZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKSB7CiAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcodyk7 CiAgICB9Cn0KCgpzdGF0aWMgQm9vbGVhbgpzZXRfdmFsdWVzKFdpZGdldCBjdXJyZW50LCBXaWRn ZXQgcmVxdWVzdCwgV2lkZ2V0IHJlcGx5LAogICAgICAgICAgIEFyZ0xpc3QgYXJncywgQ2FyZGlu YWwgKm5hcmdzKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0 KWN1cnJlbnQ7CiAgICBYbVRleHRGaWVsZFdpZGdldCBuZXdfdyA9IChYbVRleHRGaWVsZFdpZGdl dClyZXBseTsKICAgIEJvb2xlYW4gcmVkcmF3ID0gMDsKICAgIGludCBhdmVfd2lkdGg7CgogICAg X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAl aSBhcmdzXG4iICJcdCAgICBvbGQgWCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIgIlx0cmVxdWVz dCBYICU1aSBZICU1aSBXICU1aSBIICU1aVxuIiAiXHQgIG5ld193IFggJTVpIFkgJTVpIFcgJTVp IEggJTVpXG4iLCAqbmFyZ3MsICgoKFdpZGdldCkoY3VycmVudCkpLT5jb3JlLngpLCAoKChXaWRn ZXQpKGN1cnJlbnQpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShjdXJyZW50KSktPmNvcmUud2lkdGgp LCAoKChXaWRnZXQpKGN1cnJlbnQpKS0+Y29yZS5oZWlnaHQpLCAoKChXaWRnZXQpKHJlcXVlc3Qp KS0+Y29yZS54KSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUueSksICgoKFdpZGdldCkocmVx dWVzdCkpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUuaGVpZ2h0KSwg KCgoV2lkZ2V0KShyZXBseSkpLT5jb3JlLngpLCAoKChXaWRnZXQpKHJlcGx5KSktPmNvcmUueSks ICgoKFdpZGdldCkocmVwbHkpKS0+Y29yZS53aWR0aCksICgoKFdpZGdldCkocmVwbHkpKS0+Y29y ZS5oZWlnaHQpKTsKICAgIF9MdERlYnVnUHJpbnRBcmdMaXN0KCIuLi8uLi8uLi9saWIvWG0vVGV4 dEYuYyIsIHJlcGx5LCBhcmdzLCAqbmFyZ3MsIDApOwoKICAgICAgICBpZiAobmV3X3ctPmNvcmUu c2Vuc2l0aXZlICE9IHctPmNvcmUuc2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBYR0NWYWx1 ZXMgdjsKICAgICAgICAgICAgICAgIGludCBtOwoKICAgICAgICAgICAgICAgIGlmICghIG5ld193 LT5jb3JlLnNlbnNpdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBtID0gKDFMPDw4KSB8 ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgICAgICAgICB2LmZpbGxfc3R5bGUgPSAyOwogICAg ICAgICAgICAgICAgICAgICAgICB2LnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgoKCgoKE9i amVjdCkobmV3X3cpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0 ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLnNjcmVlbiA6ICgoT2JqZWN0KShu ZXdfdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbiksICI1MF9mb3JlZ3JvdW5kIiwgMSwg MCwgMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBt ID0gKDFMPDw4KTsKICAgICAgICAgICAgICAgICAgICAgICAgdi5maWxsX3N0eWxlID0gMDsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoKCgoKE9iamVjdCkobmV3X3cpKS0+ b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgo V2lkZ2V0KShuZXdfdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qu cGFyZW50LT5jb3JlLndpbmRvdykpCiAgICAgICAgICAgICAgICAgICAgICAgIFhDaGFuZ2VHQygo KCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5 IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5 KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZ2MpLCBtLCAmdik7CiAgICAg ICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCgoKCgogICAgICAgIGlmICgoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj dC5wYXJlbnQtPmNvcmUud2luZG93KSAmJiAoKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJp bWl0aXZlLmZvcmVncm91bmQpICE9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShuZXdfdykpLT5wcmlt aXRpdmUuZm9yZWdyb3VuZCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdl dCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpICE9ICgoKFdpZGdldCkobmV3X3cpKS0+Y29y ZS5iYWNrZ3JvdW5kX3BpeGVsKSkpIHsKCgoKCiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChP YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmdjKSk7CiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChPYmpl Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmltYWdlX2djKSk7CgogICAgICAgICAgICAgICAgWHRSZWxlYXNlR0Mo KFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNhdmVfZ2MpKTsKCiAg ICAgICAgICAgICAgICBHQ0luaXRpYWxpemUobmV3X3cpOwogICAgICAgICAgICAgICAgR0NDbGlw KG5ld193KTsKCiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCiAgICAgICAg aWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgIT0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkgfHwK ICAgICAgICAgICAgICAgICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbl92aXNpYmxlKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5j dXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpKSB7CiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwog ICAgICAgIH0KICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1 ZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpKSB7CiAgICAg ICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IHZjX2NiczsKICAgICAgICAgICAgICAgIGNo YXIgKnRlbXA7CgogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKCgogICAgICAgICAgICAgICAg dGVtcCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlKTsKCgogICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpID0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSk7CgoKICAgICAgICAgICAgICAg IFRleHRTZXQobmV3X3csIHRlbXApOwoKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VI aWdobGlnaHQoKFdpZGdldCluZXdfdyk7CgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CgogICAgICAgICAgICAg ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlX2NoYW5nZWRf Y2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5yZWFzb24gPSBYbUNS X1ZBTFVFX0NIQU5HRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9ICgo dm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdl dCluZXdfdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Nicyk7CiAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0 Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAlc1xuIiwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l d193KSktPnRleHQudmFsdWUpKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l d193KSktPnRleHQuZWRpdGFibGUpKSB7CiAgICAgICAgICAgICAgICBfWG1UZXh0RmllbGRTZXRF ZGl0YWJsZSgoV2lkZ2V0KW5ld193LCAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4 dC5lZGl0YWJsZSkpOwogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKICAgICAgICB9CgoKCgoK CgogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIGF2ZV93aWR0aCA9IChpbnQpX1htVGV4dEZf Rm9udE1heFdpZHRoKChXaWRnZXQpdyk7CgogICAgICAgIH0KCiAgICAgICAgaWYgKCgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSAhPSAoKChYbVRleHRGaWVsZFdpZGdl dCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKSB7CgoKCiAgICAgICAgICAgICAgICBpZiAoKCgo WG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udF9saXN0KSA9PSAoKHZvaWQgKikw KSkgewogICAgICAgICAgICAgICAgICAgICAgICBGb250SW5pdGlhbGl6ZShuZXdfdyk7CiAgICAg ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlzdF9jcmVhdGVkKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RnJlZSgoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4v Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KW5ld193LCAiVEYgU2V0VmFsdWVzOiBjb3B5 aW5nIEZvbnRMaXN0XG4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KShuZXdfdykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl eHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKTsKICAgICAgICAgICAgICAg ICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udGxpc3RfY3Jl YXRlZCkgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEZvbnRTaXplKG5l d193KTsKCgoKCgogICAgICAgIGlmICgoKCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193 KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu d2luZG93KSkgewogICAgICAgICAgICAgICAgQ2hhbmdlRHJhd0dDKG5ld193KTsKICAgICAgICB9 CgogICAgICAgIHJlZHJhdyA9IDE7CgoKICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS53aWR0 aCkgPSAoMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhp Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+ cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgIDIgKiAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkgKwogICAgICAgICAgICAg ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7 CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j b2x1bW5zKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5jb2x1bW5zKSkg ewogICAgICAgICAgICAgICAgKCgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLndpZHRoKSA9ICgyICog KCgoWG1QcmltaXRpdmVXaWRnZXQpKG5ld193KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShu ZXdfdykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAg ICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5tYXJnaW5f d2lkdGgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko bmV3X3cpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7CiAgICAgICAgICAgICAgICAoKChX aWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpID0gKDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykp LT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgICAgICAgICAy ICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25l c3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQubWFyZ2luX2hlaWdodCkgKwogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPkZvbnRIZWlnaHQpKTsKICAgICAgICB9CgogICAgICAgIHJldHVy biByZWRyYXc7Cn0KCgpzdGF0aWMgWHRHZW9tZXRyeVJlc3VsdApxdWVyeV9nZW9tZXRyeShXaWRn ZXQgYXcsIFh0V2lkZ2V0R2VvbWV0cnkgKnByb3Bvc2VkLCBYdFdpZGdldEdlb21ldHJ5ICphbnN3 ZXIpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAg ICBYdFdpZGdldEdlb21ldHJ5IGE7CgogICAgaWYgKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3 KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k b3cpKSB7CiAgICAgICAgYS5yZXF1ZXN0X21vZGUgPSAoMTw8MikgfCAoMTw8Myk7CiAgICAgICAg YS53aWR0aCA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRv d190aGlja25lc3MpICsgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5o aWdobGlnaHRfdGhpY2tuZXNzKSArCiAgICAgICAgICAgICAgICAgICAyICogKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykgKiAoaW50KV9YbVRleHRGX0Zv bnRNYXhXaWR0aCgoV2lkZ2V0KXcpKTsKCiAgICAgICAgYS5oZWlnaHQgPSAoMiAqICgoKFhtUHJp bWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArIDIgKiAoKChY bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwog ICAgICAgICAgICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h cmdpbl9oZWlnaHQpICsKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmZvbnQpLT5tYXhfYm91bmRzLmFzY2VudCArCiAgICAgICAgICAgICAgICAgICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250KS0+bWF4X2JvdW5kcy5kZXNjZW50 KTsKCgogICAgICAgICphbnN3ZXIgPSBhOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGFu c3dlci0+d2lkdGggPSAoKChXaWRnZXQpKGF3KSktPmNvcmUud2lkdGgpOwogICAgICAgIGFuc3dl ci0+aGVpZ2h0ID0gKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCk7CiAgICB9CgogICAgcmV0 dXJuIF9YbUdNUmVwbHlUb1F1ZXJ5R2VvbWV0cnkoYXcsIHByb3Bvc2VkLCBhbnN3ZXIpOwp9CgoK CgoKc3RhdGljIHZvaWQKVGV4dFNldChYbVRleHRGaWVsZFdpZGdldCB3LCBjaGFyICpzKQp7CiAg ICBpbnQgbGVuOwoKICAgIGlmIChzKQogICAgewogICAgICAgIGxlbiA9IHN0cmxlbihzKTsKICAg ICAgICBpZiAobGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9j ZCkpCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LnNpemVfYWxsb2NkKSArPSBsZW47CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQudmFsdWUpID0gWHRSZWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7 CiAgICAgICAgfQoKICAgICAgICBzdHJjcHkoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC52YWx1ZSksIHMpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0 cmluZ19sZW5ndGgpID0gbGVuOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4 dFdpZHRoKSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSA9CiAgICAg ICAgICAgIChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgaWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0Lm1heF9sZW5ndGgpID4gMCkgJiYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuc3RyaW5nX2xlbmd0aCkgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h eF9sZW5ndGgpKSkKICAgICAgICB7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQubWF4X2xlbmd0aCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0 cmluZ19sZW5ndGgpOwogICAgICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkClRleHREZWxldGUo WG1UZXh0RmllbGRXaWRnZXQgdywgaW50IHN0YXJ0LCBpbnQgbGVuKQp7CiAgICBpbnQgaTsKCiAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJUZXh0RGVs ZXRlKGZyb20gJWQgbGVuICVkKVxuIiwgc3RhcnQsIGxlbik7CgoKICAgIGlmIChsZW4gPiAwKQog ICAgewogICAgICAgIGZvciAoaSA9IHN0YXJ0ICsgbGVuOyBpIDwgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbaSAtIGxlbl0gPSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpXTsKICAgICAgICB9CgogICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLT0gbGVuOwogICAg ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKV0gPSAwOwogICAgfQp9CgoKCgpz dGF0aWMgQm9vbGVhbgpUZXh0SW5zZXJ0KFhtVGV4dEZpZWxkV2lkZ2V0IHcsIGNoYXIgKmJ1Ziwg aW50IGxlbikKewogICAgaW50IGk7CiAgICBCb29sZWFuIGZhc3RfaW5zZXJ0OwoKICAgIGZhc3Rf aW5zZXJ0ID0gMTsKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIGlmICgoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXhfbGVuZ3RoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZl cmlmeUJlbGwodyk7CiAgICAgICAgICAgIGZhc3RfaW5zZXJ0ID0gMDsKICAgICAgICB9CiAgICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgZmFzdF9pbnNl cnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIGxlbiA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBp ID0gMjU2OwogICAgICAgICAgICAgICAgaWYgKGkgPCBsZW4pCiAgICAgICAgICAgICAgICAgICAg aSA9IGxlbjsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu c2l6ZV9hbGxvY2QpICs9IGkgKyAxOwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC52YWx1ZSkgPSBYdFJlYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxv Y2QpKTsKCiAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi LCAoV2lkZ2V0KXcsICIlczogJWRcbiIsICJUZXh0SW5zZXJ0OiBBbGxvY2VkIG5ldyBzcGFjZVxu IiwgKGludCkoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLSAxOyBpID49ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpICsgbGVuXSA9ICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldOwogICAgICAgICAgICB9Cgog ICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGJ1ZikgJiYg X19idWlsdGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuIChidWYpICsgMSA+PSAoKHNpemVf dCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp b24pXSwgYnVmLCBsZW4pIDogc3RybmNweSAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9u KV0sIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p XSwgYnVmLCBsZW4pKSk7CgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkZh c3RJbnNlcnRDdXJzb3JTdGFydCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1 cnNvcl9wb3NpdGlvbik7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFz dEluc2VydFRleHRMZW4pID0gbGVuOwogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICs9IGxlbjsKCiAgICAgICAgICAgICgoKFhtVGV4dEZp ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo V2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCldID0gMDsKICAgICAgICB9CiAgICB9CgogICAgcmV0 dXJuIGZhc3RfaW5zZXJ0Owp9CgoKCgoKCnN0YXRpYyB2b2lkCk1vZGlmeVRleHQoWG1UZXh0Rmll bGRXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGNo YXIgKnN0ciwgaW50IGxlbiwKICAgICAgICAgICBSZWRyYXdQcm9jIHJlZHJhdywgZW51bSBNb2Rp ZnlUZXh0Q3Vyc29yUG9zaXRpb24gY3Vyc29ybW92ZSkKewogICAgWG1UZXh0VmVyaWZ5Q2FsbGJh Y2tTdHJ1Y3QgbXZfY2JzOwogICAgWG1UZXh0QmxvY2tSZWMgdGI7CiAgICBCb29sZWFuIHRleHRf d2FzX21vZGlmaWVkID0gMTsKICAgIFhtQW55Q2FsbGJhY2tTdHJ1Y3QgdmNfY2JzOwogICAgWG1U ZXh0UG9zaXRpb24gY3Vyc29ycG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j dXJzb3JfcG9zaXRpb24pOwogICAgWG1UZXh0UG9zaXRpb24gc2F2ZWRfY3Vyc29ycG9zID0gKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwoKICAgIG12X2Ni cy5yZWFzb24gPSBYbUNSX01PRElGWUlOR19URVhUX1ZBTFVFOwogICAgbXZfY2JzLmRvaXQgPSAx OwogICAgbXZfY2JzLmV2ZW50ID0gZXY7CgogICAgaWYgKHN0YXJ0IDwgZW5kKQogICAgewogICAg ICAgIG12X2Nicy5zdGFydFBvcyA9IHN0YXJ0OwogICAgICAgIG12X2Nicy5lbmRQb3MgPSBlbmQ7 CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLnN0YXJ0UG9zID0gZW5kOwogICAg ICAgIG12X2Nicy5lbmRQb3MgPSBzdGFydDsKCiAgICB9CgoKCiAgICBtdl9jYnMuY3Vyckluc2Vy dCA9IGN1cnNvcnBvczsKICAgIGlmKG12X2Nicy5zdGFydFBvcyAhPSBtdl9jYnMuZW5kUG9zKQog ICAgewogICAgICAgIG12X2Nicy5uZXdJbnNlcnQgPSBtdl9jYnMuc3RhcnRQb3MgKyBsZW47CiAg ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLm5ld0luc2VydCA9IGN1cnNvcnBvczsK ICAgIH0KCiAgICBpZiAoc3RyKQogICAgewogICAgICAgIHRiLnB0ciA9IFh0TWFsbG9jKGxlbiAr IDEpOwogICAgICAgIHRiLmxlbmd0aCA9IGxlbjsKICAgICAgICB0Yi5mb3JtYXQgPSAoKFhtVGV4 dEZvcm1hdCkgKChBdG9tKSAzMSkpOwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoc3RyKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJsZW4g KHN0cikgKyAxID49ICgoc2l6ZV90KSAobGVuKSkgPyAoY2hhciAqKSBtZW1jcHkgKHRiLnB0ciwg c3RyLCBsZW4pIDogc3RybmNweSAodGIucHRyLCBzdHIsIGxlbikpIDogc3RybmNweSAodGIucHRy LCBzdHIsIGxlbikpKTsKICAgICAgICB0Yi5wdHJbbGVuXSA9ICdcMCc7CiAgICB9CiAgICBlbHNl CiAgICB7CgogICAgICAgIHRiLnB0ciA9ICgodm9pZCAqKTApOwogICAgICAgIHRiLmxlbmd0aCA9 IDA7CiAgICAgICAgdGIuZm9ybWF0ID0gKChYbVRleHRGb3JtYXQpICgoQXRvbSkgMzEpKTsKICAg IH0KICAgIG12X2Nicy50ZXh0ID0gJnRiOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgWHRDYWxsQ2Fs bGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbODEzM10pLCAmbXZfY2JzKTsK ICAgIH0KICAgIGlmIChtdl9jYnMuZG9pdCkKICAgIHsKICAgICAgICBpZiAobXZfY2JzLnN0YXJ0 UG9zIDwgbXZfY2JzLmVuZFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywg bXZfY2JzLnN0YXJ0UG9zLCBtdl9jYnMuZW5kUG9zIC0gbXZfY2JzLnN0YXJ0UG9zKTsKICAgICAg ICAgICAgY3Vyc29ycG9zID0gbXZfY2JzLnN0YXJ0UG9zOwogICAgICAgICAgICB0ZXh0X3dhc19t b2RpZmllZCA9IDEgOwogICAgICAgIH0KICAgICAgICBpZiAobXZfY2JzLmVuZFBvcyA8IG12X2Ni cy5zdGFydFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywgbXZfY2JzLmVu ZFBvcywgbXZfY2JzLnN0YXJ0UG9zIC0gbXZfY2JzLmVuZFBvcyk7CiAgICAgICAgICAgIGN1cnNv cnBvcyA9IG12X2Nicy5lbmRQb3M7CiAgICAgICAgICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7 CiAgICAgICAgfQoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNv cl9wb3NpdGlvbikgPSBjdXJzb3Jwb3M7CgogICAgICAgIGlmICgobGVuID0gbXZfY2JzLnRleHQt Pmxlbmd0aCkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgY2hhciAqYnVmID0gbXZfY2JzLnRl eHQtPnB0cjsKCiAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5t YXhfbGVuZ3RoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmVyaWZ5QmVsbCh3KTsK ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoKICAgICAgICAg ICAgICAgIGlmIChyZWRyYXcgPT0gRHJhdyAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnByaW1fcG9zX2xlZnQpIDwgMCAmJgogICAgICAgICAgICAgICAgICAgICF0ZXh0X3dhc19t b2RpZmllZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZWRyYXcgPSBE cmF3SW5zZXJ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQ3Vyc29yRXJhc2Uo dyk7CiAgICAgICAgICAgICAgICBUZXh0SW5zZXJ0KHcsIGJ1ZiwgbGVuKTsKICAgICAgICAgICAg ICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7CiAgICAgICAgICAgICAgICBpZiAoY3Vyc29ybW92 ZSA9PSBDUF9FbmRPZkluc2VydCkKICAgICAgICAgICAgICAgICAgY3Vyc29ycG9zICs9IGxlbjsK ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRleHRfd2FzX21vZGlmaWVkKQog ICAgICAgIHsKICAgICAgICAgICAgcmVkcmF3KHcpOwogICAgICAgICAgICBpZiAoKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrKSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgdmNfY2JzLnJlYXNvbiA9IFhtQ1JfVkFMVUVfQ0hBTkdFRDsK ICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9IGV2OwogICAgICAgICAgICAgICAgWHRDYWxs Q2FsbGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Ni cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gc2F2ZWRfY3Vyc29ycG9zOwogICAgICAgIGlm IChjdXJzb3Jtb3ZlID09IENQX1Jlc2V0KQogICAgICAgICAgY3Vyc29ycG9zID0gMDsKICAgICAg ICBpZiAoY3Vyc29ybW92ZSA9PSBDUF9VbmNoYW5nZWQpCiAgICAgICAgICBjdXJzb3Jwb3MgPSBz YXZlZF9jdXJzb3Jwb3M7CiAgICAgICAgRG9DdXJzb3JNb3ZlKHcsIGV2LCBjdXJzb3Jwb3MsIDEs IDEpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIFZlcmlmeUJlbGwodyk7CgogICAgfQog ICAgaWYgKHRiLnB0cikKICAgIHsKICAgICAgICBYdEZyZWUodGIucHRyKTsKICAgIH0KfQoKCnN0 YXRpYyBYbVRleHRQb3NpdGlvbgpUZXh0UGl4ZWxUb1NlbGVjdGlvblBvcyhYbVRleHRGaWVsZFdp ZGdldCB3LCBpbnQgeCkKewogICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgIHBvcyA9IDA7Cgog ICAgeCAtPSAoaW50KSgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0 RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKCgogICAgaWYgKHggPD0gMCkKICAgIHsKICAgICAg ICBwb3MgPSAwOwogICAgfQoKCiAgICBlbHNlIGlmICh4ID4gKGludClfWG1UZXh0Rl9Gb250VGV4 dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSks ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpKQogICAgewog ICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0 aCk7CiAgICB9CgoKICAgIGVsc2UKICAgIHsKICAgICAgICBpbnQgcHJldlRvdCwgdG90LCBpLCBk aWZmLCBtYjsKCiAgICAgICAgcHJldlRvdCA9IHRvdCA9IDA7CiAgICAgICAgcG9zID0gLTE7CiAg ICAgICAgZGlmZiA9IHg7CiAgICAgICAgbWIgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspCiAgICAg ICAgewogICAgICAgICAgICB0b3QgPSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdl dCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgaSk7CiAgICAgICAg ICAgIGlmICh4IDwgdG90KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwog ICAgICAgICAgICAgICAgaWYgKHRvdCAtIHggPiBkaWZmKQogICAgICAgICAgICAgICAgICAgIHBv cyA9IHBvcyAtIDEgLSBtYjsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog ICAgICAgICAgICBpZiAoaSAmJiBwcmV2VG90ID09IHRvdCkKICAgICAgICAgICAgICAgIG1iKys7 CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG1iID0gMDsKICAgICAgICAgICAgcHJl dlRvdCA9IHRvdDsKICAgICAgICAgICAgZGlmZiA9IHggLSB0b3Q7CiAgICAgICAgfQoKICAgICAg ICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAgfQoKICAgIH0KICAgIHJl dHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KVGV4dFBpeGVsVG9Qb3MoWG1UZXh0 RmllbGRXaWRnZXQgdywgaW50IHgpCnsKICAgIFhtVGV4dFBvc2l0aW9uIGksIHRvdCwgY3VyLCBw b3M7CgogICAgcG9zID0gMDsKCiAgICB4IC09IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKCiAgICBpZiAo eCA8PSAwKQogICAgewogICAgICAgIHBvcyA9IDA7CiAgICB9CgoKICAgIGVsc2UgaWYgKHggPiAo aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnZhbHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp bmdfbGVuZ3RoKSkpCiAgICB7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KCiAgICBlbHNlCiAgICB7CiAgICAgICAgdG90 ID0gMDsKICAgICAgICBwb3MgPSAtMTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAg ICAgICAgICAgY3VyID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldLCAxKTsKICAgICAgICAgICAg aWYgKHggPCB0b3QgKyBjdXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBvcyA9IGk7 CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0b3QgKz0g Y3VyOwogICAgICAgIH0KICAgICAgICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAg IHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAg ICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoKCgpzdGF0aWMgQm9vbGVhbgpNYWtl UG9zaXRpb25WaXNpYmxlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykK ewogICAgICAgIGludCB4LCBzdGFydCwgZW5kOwogICAgICAgIEJvb2xlYW4gbW92ZWQ7CgogICAg ICAgIG1vdmVkID0gMDsKICAgICAgICB4ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChX aWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksIHBvcyk7CiAg ICAgICAgc3RhcnQgPSAtKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKICAgICAg ICBlbmQgPSBzdGFydCArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv dHRvbSk7CgogICAgICAgIGlmICh4IDwgc3RhcnQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4 dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAteDsKICAgICAgICAgICAgICAgIG1vdmVkID0g MTsKICAgICAgICB9IGVsc2UgaWYgKHggPiBlbmQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4 dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0Lm1hcmdpbl9ib3R0b20pIC0geDsKICAgICAgICAgICAgICAgIG1vdmVkID0gMTsKICAgICAg ICB9CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp dywgIk1ha2VQb3NpdGlvblZpc2libGUocG9zICVkKSBzdGFydD0lZCBlbmQ9JWQgeD0lZCBtb3Zl ZD0lc1xuIiwgcG9zLCBzdGFydCwgZW5kLCB4LCBfTHREZWJ1Z0Jvb2xlYW4yU3RyaW5nKG1vdmVk KSk7CgoKCiAgICAgICAgcmV0dXJuIG1vdmVkOwp9CnN0YXRpYyB2b2lkCkRyYXdUZXh0KFhtVGV4 dEZpZWxkV2lkZ2V0IHcsIGludCBzdGFydCwgaW50IGVuZCwgWG1IaWdobGlnaHRNb2RlIGhpZ2hs aWdodCkKewogICAgICAgIGludCB4LCBsZW47CiAgICAgICAgRGltZW5zaW9uIHdpZCwgYncsIGJo OwogICAgICAgIFBvc2l0aW9uIGU7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v VGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0KCVkICVkICVkKVxuIiwgc3RhcnQsIGVuZCwg aGlnaGxpZ2h0KTsKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hv KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGVuPWVuZC1z dGFydDsKICAgICAgICBpZiAobGVuIDw9IDApCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgoK CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n dGgpID4gMCkgewogICAgICAgICAgICAgICAgWG1IaWdobGlnaHRNb2RlIG1vZGUgPSBoaWdobGln aHQ7CgogICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wOwoKICAgICAgICAgICAgICAgICAgICAgICAg dGVtcCA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAg ICAgICAgICAgICAgICAgICAgZW5kID0gdGVtcDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmlu Z19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoZW5kID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp bmdfbGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArICgoKFht VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAo aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnZhbHVlKSwgc3RhcnQpOwogICAgICAgICAgICAgICAgd2lkID0gKGludClf WG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC52YWx1ZSkgKyBzdGFydCwgbGVuKTsKCgogICAgICAgICAgICAgICAgYncgPSAoKChY bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChY bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykKICAg ICAgICAgICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h cmdpbl93aWR0aCk7CiAgICAgICAgICAgICAgICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3 KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3 KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgICAgICAg ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2hlaWdodCk7CgogICAg ICAgICAgICAgICAgaWYgKHggKyB3aWQgKyBidyA+ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRo KSkgewogICAgICAgICAgICAgICAgICAgICAgICB3aWQgPSAoKChXaWRnZXQpKHcpKS0+Y29yZS53 aWR0aCkgLSBidyAtIHg7CiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8u Li9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0OiBjbGlwICVkXG4iLCB3aWQp OwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUgPSB3aWQgKyAoKChYbVRleHRG aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwogICAgICAgICAgICAgICAgaWYgKG1vZGU9PVhtSElH SExJR0hUX1NFTEVDVEVEICYmICEoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhhdmVf aW52ZXJ0ZWRfaW1hZ2VfZ2MpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1Zygi Li4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dC1hXG4iKTsKICAg ICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmpl Y3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRn ZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFy ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkp OwogICAgICAgICAgICAgICAgICAgICAgICBYRmlsbFJlY3RhbmdsZSgoKCgoT2JqZWN0KSgoV2lk Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i amVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykp LT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYyksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYncsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lk dGgpIC0gMiAqIGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCko dykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgWFNl dEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLCAoKChXaWRnZXQpKHcpKS0+ Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNr Z3JvdW5kKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5 IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwgKCgoWG1QcmltaXRpdmVXaWRnZXQp KHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAx OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaWdobGlnaHQgPT0gWG1ISUdITElHSFRfTk9S TUFMICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFn ZV9nYykpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv WG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0LWJcbiIpOwogICAgICAgICAgICAgICAg ICAgICAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn ZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2Jq ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu d2luZG93KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidywgYmgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpIC0gMiAq IGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3Jl LmhlaWdodCkgLSAyICogYmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cgog ICAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCgoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5nYyksICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5mb3JlZ3JvdW5k KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kKCgoKChPYmplY3QpKHcp KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2Jq ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmdjKSwgKCgoV2lkZ2V0KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCkpOwoK ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o YXZlX2ludmVydGVkX2ltYWdlX2djKSA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgewoKCiAg ICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs IChXaWRnZXQpdywgIkRyYXdUZXh0LWMgeCAlZCBidyAlZCBlICVkIHdpZCAlZFxuIiwgeCwgYncs IGUsIHdpZCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPCBidykgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkIC0gYncgKyB4ID4gMCkgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSgo V2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg JiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5 KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJ3LCBiaCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd2lkIC0gYncgKyB4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQp IC0gMiAqIGJoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJl YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu c2NyZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5j b3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5k b3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBiaCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCko dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp ID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5v YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9y ZWdyb3VuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCgoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3 KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5nYyksICgoKFdpZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4 ZWwpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAwOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBd LT50eXBlID09IFhtRk9OVF9JU19GT05UU0VUKSB7CgoKCgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFhtYkRyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj cmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93 IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5nYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCAo KChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp W3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCgoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWERyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5v YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3 KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k b3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9m ZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbc3RhcnRdLCBsZW4pOwogICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IFhtSElHSExJ R0hUX1NFQ09OREFSWV9TRUxFQ1RFRCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgd2lkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWQ9KGludClfWG1U ZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQudmFsdWUpW3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYRHJhd0xpbmUoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgs ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9mZnNldCkgKyAxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeCArIHdpZCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5ZT2Zmc2V0KSArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgfQp9CgpzdGF0aWMgdm9pZApEcmF3VGV4dFJhbmdlKFhtVGV4dEZpZWxkV2lk Z2V0IHcsIGludCBzdGFydCwgaW50IGVuZCkKewogICAgICAgIGludCBpOwogICAgICAgIFhtSGln aGxpZ2h0TW9kZSBtb2RlOwoKICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRG LmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFJhbmdlWyVkICVkXVxuIiwgc3RhcnQsIGVuZCk7CiAg ICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKSB7CiAgICAgICAgICAg ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LnN0cmluZ19sZW5ndGgpID4gMCkgewogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAg ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg ICAgICAgICAgICAgICBpbnQgdGVtcDsKCiAgICAgICAgICAgICAgICB0ZW1wID0gc3RhcnQ7CiAg ICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAgICAgICAgICAgIGVuZCA9IHRlbXA7CiAg ICAgICAgfQoKICAgICAgICBtb2RlID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o aWdobGlnaHQpLmxpc3RbMF0ubW9kZTsKICAgICAgICBmb3IgKGk9MDsgaTwoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyLTE7IGkrKykgewogICAgICAgICAg ICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0 W2ldLnBvc2l0aW9uID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u IDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3Rh cnQsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0u cG9zaXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7 CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgc3RhcnQgJiYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGFydCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu aGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv c2l0aW9uICE9IHN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0 KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv c2l0aW9uLCBzdGFydCwgbW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9uIDwg ZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3RhcnQs ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9z aXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwogICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7CiAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRpb24gJiYKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCku bGlzdFtpKzFdLnBvc2l0aW9uIDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdU ZXh0KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ld LnBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o aWdobGlnaHQpLmxpc3RbaV0ubW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7 CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGVuZCkgewoKICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp c3RbaV0ucG9zaXRpb24gPCBlbmQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bmQgPCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFd LnBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtp XS5tb2RlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgfQogICAg ICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkCkRyYXdUZXh0UmVwb3NpdGlvbihYbVRleHRGaWVs ZFdpZGdldCB3KQp7CiAgICBpbnQgeHNyYywgeGRlc3QsIHdpZHRoLCBzdGFydCwgZW5kOwoKICAg IGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgIHsKICAgICAgICByZXR1 cm47CiAgICB9CiAgICBpZiAoISgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn ZXQpdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVu dC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+T2xkWE9mZnNldCkpCiAgICB7CiAgICAgICAgeHNyYyA9ICgoKFhtVGV4dEZpZWxkUGFydExl c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp b24pKS0+T2xkWE9mZnNldCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog ICAgICAgIHhkZXN0ID0gMDsKICAgICAgICB3aWR0aCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQubWFyZ2luX2JvdHRvbSkgLSB4c3JjICsgMTsKCgogICAgICAgIGVuZCA9ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICBzdGFy dCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsKICAgIH0KICAgIGVs c2UgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPiAoKChYbVRleHRGaWVs ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu ZXh0ZW5zaW9uKSktPk9sZFhPZmZzZXQpKQogICAgewogICAgICAgIHhzcmMgPSAwOwogICAgICAg IHhkZXN0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSAtICgoKFhtVGV4dEZp ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCk7CiAgICAgICAgd2lkdGggPSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0geGRlc3QgKyAxOwoKCgogICAgICAg IHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsK ICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHdpZHRo ID4gMCkKICAgIHsKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0v VGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4v Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJSZXBvc2l0aW9uOiB4b2ZmPSVkIG9s ZD0lZCBzcmM9JWQgZGVzdD0lZCIgIiB3aWR0aD0lZCByZWZyZXNoICVkLSVkXG4iLCAoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9s ZFhPZmZzZXQpLCB4c3JjLCB4ZGVzdCwgd2lkdGgsIHN0YXJ0LCBlbmQpOwoKCgoKICAgICAgICB9 CgogICAgICAgIFhDb3B5QXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNj cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu LT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAo KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksICgoKChPYmplY3QpKHcp KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu dC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5YRHJhdykgKyB4c3JjLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAg ICAgICAgICAgICAgKHVuc2lnbmVkIGludCl3aWR0aCwgKHVuc2lnbmVkIGludCkoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLAogICAgICAgICAgICAgICAgICAoKChY bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0LCAoKChYbVRleHRGaWVsZFBhcnRM ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z aW9uKSktPllEcmF3KSk7CgoKCgoKICAgICAgICBpZiAoeGRlc3QgPCB4c3JjKQogICAgICAgIHsK ICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny ZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCArIHdp ZHRoLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAgICAgICAgICAgICAg ICAgICB4c3JjIC0geGRlc3QsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgICAgICAwKTsKCiAgICAgICAg ICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl dCl3KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiUmVwb3NpdGlvbjogZXJhc2luZyB4PSVkIHk9JWQg dz0lZCBoPSVkXG4iLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0ICsg d2lkdGgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLCB4c3JjIC0geGRlc3QsICh1 bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSk7 CgoKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQog ICAgICAgIHsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQoKICAgICAgICBEcmF3VGV4dFJh bmdlKHcsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgZWxzZQogICAgewoKICAgICAgICBzdGFydCA9 IFRleHRQaXhlbFRvUG9zKHcsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpKTsKICAg ICAgICBlbmQgPSBUZXh0UGl4ZWxUb1Bvcyh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE cmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpICsg MTsKCiAgICAgICAgRHJhd1RleHRSYW5nZSh3LCBzdGFydCwgZW5kKTsKCiAgICAgICAgaWYgKF9M dERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAg ICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdp ZGdldCl3LCAiUmVwb3NpdGlvbjogeG9mZj0lZCBvbGQ9JWQgcmVmcmVzaCAlZC0lZFxuIiwgKCgo WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5PbGRYT2Zmc2V0KSwgc3RhcnQsIGVuZCk7CgoKICAgICAgICB9CgogICAgfQoKICAgICgoKFht VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u KSktPlhPZmZzZXQpOwp9CgoKc3RhdGljIHZvaWQKRXJhc2VYUmFuZ2UoWG1UZXh0RmllbGRXaWRn ZXQgdywgaW50IHN0YXJ0LCBpbnQgZW5kKQp7CiAgICBpbnQgeDEsIHgyOwoKICAgIHgxID0gKCgo WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSArIHN0YXJ0OwogICAgeDIgPSAoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpICsgZW5kOwogICAgaWYgKHgxIDwgMCkKICAgIHsK ICAgICAgICB4MSA9IDA7CiAgICB9CiAgICBpZiAoeDIgPiAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIHgyID0gKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKTsKICAgIH0KICAgIGlmICh4MiA+IHgx KQogICAgewogICAgICAgIFhDbGVhckFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+ Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3Jl LnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+ Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2lu ZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4MSwgKCgoWG1U ZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAgICAgICB4MiAtIHgxICsg MSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFy Z2luX3RvcCksIDApOwogICAgfQp9CgoKc3RhdGljIHZvaWQKRHJhd1RleHRXaXRoQ29weUFyZWEo WG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaW50IHgsIGluc2VydF93aWR0aDsKICAgIGludCB4 c3JjLCB4ZGVzdCwgd2lkdGg7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVj aG8pKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghKCgoKE9iamVjdCkoKFdp ZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChX aWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0 dXJuOwogICAgfQoKICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog ICAgaW5zZXJ0X3dpZHRoID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywg JigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkUGFy dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl bnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KV0sICgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+RmFzdEluc2VydFRleHRMZW4pKTsKCgoKICAgIGlmIChDdXJzb3JQb3NpdGlvbih3KSkKICAg IHsKCgoKCgogICAgICAgIHhzcmMgPSAwOwogICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5PbGRDdXJzb3JYKSArIHg7CiAgICAgICAgeGRlc3QgPSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0gKHggKyAoKChYbVRleHRGaWVsZFBh cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0 ZW5zaW9uKSktPk9sZEN1cnNvclgpKSAtIGluc2VydF93aWR0aDsKCiAgICAgICAgWENvcHlBcmVh KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19p bml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChP YmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj dC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAg ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLAogICAg ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhzcmMsICgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAgICAgICAgICAgICAgICAodW5zaWdu ZWQgaW50KXdpZHRoLCAodW5zaWduZWQgaW50KSgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQubWFyZ2luX3RvcCksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+WERyYXcpICsgeGRlc3QsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpKTsKCiAg ICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk Z2V0KXcpKQogICAgICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRHJhd1RleHRXQ0E6IHg9JWQgeHNyYz0lZCB4ZGVzdD0lZCB3 aWR0aD0lZFxuIiwgeCwgeHNyYywgeGRlc3QsIHdpZHRoKTsKCgogICAgICAgIH0KCiAgICB9CiAg ICBlbHNlCiAgICB7CgoKCgoKICAgICAgICB4c3JjID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdp ZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KSkgKyB4OwoKCgog ICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90 dG9tKSAtIHhzcmM7CiAgICAgICAgeGRlc3QgPSB4c3JjICsgaW5zZXJ0X3dpZHRoOwoKICAgICAg ICBYQ29weUFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu d2luZG93KSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5nYyksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcp ICsgeHNyYywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBpbnQpd2lkdGgsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll bGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4 dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Z RHJhdykpOwoKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4 dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4v Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFdDQTogeD0lZCB4c3JjPSVk IHhkZXN0PSVkIHdpZHRoPSVkXG4iLCB4LCB4c3JjLCB4ZGVzdCwgd2lkdGgpOwoKCiAgICAgICAg fQogICAgfQoKICAgIERyYXdUZXh0UmFuZ2UodywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4 dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5G YXN0SW5zZXJ0Q3Vyc29yU3RhcnQpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBh cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0 ZW5zaW9uKSktPkZhc3RJbnNlcnRDdXJzb3JTdGFydCkgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u KSktPkZhc3RJbnNlcnRUZXh0TGVuKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+VGV4dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkK ICAgIHsKICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRl eHRXaWR0aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9 CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0 RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmV4dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5PbGRYT2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7Cn0KCgpz dGF0aWMgdm9pZApEcmF3QWxsVGV4dChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAg fQoKICAgIERyYXdUZXh0UmFuZ2UodywgMCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5zdHJpbmdfbGVuZ3RoKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4 dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkKICAgIHsK ICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRleHRXaWR0 aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9CgogICAg KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRY T2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7CiAgICAoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u KSktPk9sZEhpZ2hsaWdodEVuZCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy aW1fcG9zX3JpZ2h0KTsKfQoKCgoKc3RhdGljIEJvb2xlYW4KQ3Vyc29yUG9zaXRpb24oWG1UZXh0 RmllbGRXaWRnZXQgdykKewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu YyIsIChXaWRnZXQpdywgIkN1cnNvclBvc2l0aW9uKCVkKVxuIiwgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKTsKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgMCkgewogICAgICAgICAgICAg ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gMDsK ICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y X3Bvc2l0aW9uKSA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0 aCkpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vy c29yX3Bvc2l0aW9uKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl bmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpOwp9CgoKc3Rh dGljIEJvb2xlYW4KQ3Vyc29yTWFzc2l2ZUFkanVzdChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg ICBpbnQgc3RhcnQsIGVuZCwgbGFzdDsKICAgIEJvb2xlYW4gbW92ZWQ7CgogICAgbW92ZWQgPSAw OwogICAgZW5kID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkKICAgIHsKICAgICAgICBzdGFydCA9IChp bnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs aWdodCkubGlzdFsxXS5wb3NpdGlvbik7CgoKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBz dGFydCA9IGVuZDsKICAgIH0KCiAgICBpZiAoZW5kIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5tYXJnaW5fYm90dG9tKSkKICAgIHsKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5YT2Zmc2V0KSA8IDApCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRG aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gMDsKICAgICAgICAgICAgbW92ZWQgPSAxOwogICAg ICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHN0YXJ0ID49ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+WE9mZnNldCkgJiYKICAgICAgICAgICAgIGVuZCA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0 aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p KS0+WE9mZnNldCkgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0 b20pKQogICAgewogICAgICAgIHJldHVybiBtb3ZlZDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAg ICAgICBsYXN0ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpOwogICAgICAgIGlmIChzdGFydCAtIGVuZCA+ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg ICAgICAgICBpZiAobGFzdCAtIGVuZCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu bWFyZ2luX2JvdHRvbSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 Lm1hcmdpbl9ib3R0b20pIC0gbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9m ZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0g ZW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGVuZCA+ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg ICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSAtIGVuZDsKICAgICAgICB9CiAgICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4 dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y T2Zmc2V0KSA9IDA7CiAgICAgICAgfQogICAgICAgIG1vdmVkID0gMTsKICAgIH0KCiAgICByZXR1 cm4gbW92ZWQ7Cn0KCgpzdGF0aWMgdm9pZApDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywg Qm9vbGVhbiBmb2N1cykKewogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNf Zm9jdXMpID0gZm9jdXM7CgoKICAgIGlmIChmb2N1cykKICAgIHsKICAgICAgICBYU2V0U3RpcHBs ZSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu c2NyZWVuLT5kaXNwbGF5KSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmltYWdlX2djKSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAg IFhTZXRTdGlwcGxlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBh cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAgICAgICAgICAgICAgICAgICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpLAogICAgICAgICAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSk7CiAgICB9Cn0KCgpz dGF0aWMgdm9pZApDdXJzb3JTYXZlVW5kZXJJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBpbnQg eCkKewogICAgaWYgKCEoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFz cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcp KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNv cmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIFhGbHVzaCgoKCgo T2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRp c3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu LT5kaXNwbGF5KSk7CgoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykp LT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8g KChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgo V2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuc2F2ZV9nYyksCiAgICAgICAgICAgICAgICAgICAwLCAwLCA1LCAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApKTsKCiAgICBYQ29weUFyZWEoKCgo KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5k aXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl bi0+ZGlzcGxheSksICgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp LT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29y ZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksCiAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAg ICAgICAgICAgICAgeCAtIDIsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAg ICAgICAgICAgIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3RvcCks IDAsIDApOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVh bV9vZmYpID0gMTsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvclJlc3RvcmVVbmRlcklCZWFtKFhtVGV4 dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGludCB4OwoKICAgIGlmICghKCgoKE9iamVjdCkoKFdpZGdl dCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgw NCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChXaWRn ZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJu OwogICAgfQoKCiAgICBYRmx1c2goKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdp ZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5v YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpOwoKICAgIHggPSAoKChYbVRleHRG aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpICsgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4 dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y RHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgIFhDb3B5QXJl YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu c2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9v ZmYpLCAoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53 aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93 KSwKICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2dj KSwgMCwgMCwgNSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwK ICAgICAgICAgICAgICB4IC0gMiwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykpOwoK ICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVhbV9vZmYpID0g MDsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvckRyYXdJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBp bnQgeCkKewoKICAgIEN1cnNvclNhdmVVbmRlcklCZWFtKHcsIHgpOwoKCiAgICBYU2V0VFNPcmln aW4oKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2Ny ZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3Jl LnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2Vf Z2MpLAogICAgICAgICAgICAgICAgIHggLSAyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllP ZmZzZXQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250LT5tYXhfYm91bmRz LmFzY2VudCkpOwoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5v YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX aWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lk Z2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0 KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0 ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVj dCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAgICAgICAgICAgICAgICAgICB4IC0gMiwg KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQubWFyZ2luX3RvcCkpOwp9CgoKc3RhdGljIHZvaWQKQ3Vyc29yRHJhdyhYbVRl eHRGaWVsZFdpZGdldCB3KQp7CiAgICBpbnQgeDsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpCiAgICB7CiAgICAgICAgeCA9 IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1 cnNvcl9wb3NpdGlvbikpOwoKICAgICAgICBDdXJzb3JFcmFzZSh3KTsKICAgICAgICAoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclBvcykgPSAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv bikpLT5PbGRDdXJzb3JYKSA9IHg7CgogICAgICAgIHggKz0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv bikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgICAg ICBDdXJzb3JEcmF3SUJlYW0odywgeCk7CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuYmxpbmtfb24pID0gMTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCkN1cnNvckVyYXNl KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSkKICAgIHsKICAgICAgICBDdXJzb3JSZXN0b3JlVW5k ZXJJQmVhbSh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmJs aW5rX29uKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApDbGVhckhpZ2hsaWdodChYbVRleHRGaWVsZFdp ZGdldCB3KQp7CiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKQog ICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA+PSAwKSB7CiAgICAgICAgICAgICAgICBDdXJzb3JF cmFzZSh3KTsKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VIaWdobGlnaHQoKFdpZGdl dCl3KTsKCgoKCgoKICAgICAgICAgICAgICAgIERyYXdBbGxUZXh0KHcpOwoKICAgICAgICAgICAg ICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5wcmltX3Bvc19yaWdodCkgPSAtMTsKICAgICAgICB9CgogICAgICAgICgoKFhtVGV4dEZpZWxk UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l eHRlbnNpb24pKS0+T2xkSGlnaGxpZ2h0U3RhcnQpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5PbGRIaWdobGlnaHRFbmQpID0gLTE7Cn0KCnN0YXRpYyB2b2lkClNldFNpbmdsZUhpZ2hsaWdo dChXaWRnZXQgdywgaW50IGxlZnQsIGludCByaWdodCkKewogICAgICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBsZWZ0OwogICAgICAgICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gcmlnaHQ7CgogICAgICAg IGlmIChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXIgPSA0OwogICAgICAgICAgICAgICAgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMF0ucG9zaXRpb24gPSAw OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGln aHQpLmxpc3RbMF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzFdLnBvc2l0aW9u ID0gbGVmdDsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu aGlnaGxpZ2h0KS5saXN0WzFdLm1vZGUgPSBYbUhJR0hMSUdIVF9TRUxFQ1RFRDsKICAgICAgICAg ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzJd LnBvc2l0aW9uID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5tb2RlID0gWG1ISUdITElHSFRfTk9STUFMOwog ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQp Lmxpc3RbM10ucG9zaXRpb24gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbNF0ubW9kZSA9IFhtSElHSExJ R0hUX05PUk1BTDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVGV4dEZfSW5pdGlh bGlzZUhpZ2hsaWdodCh3KTsKICAgICAgICB9Cn0KCnN0YXRpYyB2b2lkCkRyYXdTaW5nbGVIaWdo bGlnaHQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIGludCBsLCByOwoKICAgICAgICBp ZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpIHsKICAgICAgICAgICAgICAgIHJl dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcp KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRv dykpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID09IDQpIHsKICAg ICAgICAgICAgICAgIGwgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdo dCkubGlzdFsxXS5wb3NpdGlvbjsKICAgICAgICAgICAgICAgIHIgPSAoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5wb3NpdGlvbjsKCiAgICAgICAgICAg ICAgICBEcmF3VGV4dCh3LCBsLCByLCAxKTsKICAgICAgICB9Cn0KCgoKCnN0YXRpYyB2b2lkCkRy YXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSkt Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo KFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQt PmNvcmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIERyYXdUZXh0 V2l0aENvcHlBcmVhKHcpOwogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCnN0YXRpYyB2b2lkCkRy YXdNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5v YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX aWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5j b3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEN1cnNvckVyYXNl KHcpOwogICAgaWYgKEN1cnNvclBvc2l0aW9uKHcpKQogICAgewogICAgICAgIERyYXdUZXh0UmVw b3NpdGlvbih3KTsKICAgIH0KCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQK RHJhdyhYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk Z2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y ZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBDdXJzb3JFcmFzZSh3 KTsKCiAgICBDdXJzb3JQb3NpdGlvbih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJz b3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQKRHJhd0FsbChYbVRleHRGaWVsZFdpZGdldCB3 KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDog KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAg IHJldHVybjsKICAgIH0KCiAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3 KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+ Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl LndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwKICAg ICAgICAgICAgICAgKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdo dF90aGlja25lc3MpLAogICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5w cmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCko dykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp dmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5j b3JlLmhlaWdodCkgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhp Z2hsaWdodF90aGlja25lc3MpLAogICAgICAgICAgICAgICAwKTsKCiAgICBDdXJzb3JQb3NpdGlv bih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKCnN0 YXRpYyB2b2lkCk1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlm ICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwog ICAgfQoKICAgIEN1cnNvckVyYXNlKHcpOwoKICAgIEN1cnNvck1hc3NpdmVBZGp1c3Qodyk7Cgog ICAgRHJhd0FsbFRleHQodyk7CgogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCgoKc3RhdGljIEJv b2xlYW4KSW5Xb3JkKGNoYXIgcykKewogICAgc3dpdGNoIChzKQogICAgewogICAgY2FzZSAnICc6 CiAgICBjYXNlICdcdCc6CiAgICBjYXNlICdcbic6CiAgICBjYXNlICchJzoKICAgIGNhc2UgJz8n OgoKCgoKCiAgICBjYXNlICcsJzoKICAgICAgICByZXR1cm4gMDsKCiAgICBkZWZhdWx0OgogICAg ICAgIHJldHVybiAxOwogICAgfQp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uCldvcmRFbmQoWG1U ZXh0RmllbGRXaWRnZXQgdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICB3aGlsZSAoKHBvcyA8 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpICYmIEluV29y ZCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtwb3NdKSkKICAgIHsKICAg ICAgICBwb3MrKzsKICAgIH0KCiAgICByZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0 aW9uCldvcmRTdGFydChYbVRleHRGaWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsK ICAgIHdoaWxlICgocG9zID4gMCkgJiYgSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNraXBGb3J3YXJkKFhtVGV4dEZp ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgd2hpbGUgKChwb3MgPCAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSAmJiAhSW5Xb3JkKCgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW3Bvc10pKQogICAgewogICAgICAg IHBvcysrOwogICAgfQoKICAgIHJldHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24K U2tpcEJhY2t3YXJkKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewog ICAgd2hpbGUgKChwb3MgPiAwKSAmJiAhSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFNjYW5UeXBlClNjYW5UeXBlKFhtVGV4dEZpZWxk V2lkZ2V0IHcpCnsKICAgIFhtVGV4dFNjYW5UeXBlIHR5cGU7CgogICAgaWYgKCgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KSkKICAgIHsKICAgICAgICBpZiAo dy0+dGV4dC5zYXJyYXlfaW5kZXggPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z ZWxlY3Rpb25fYXJyYXlfY291bnQpKQogICAgICAgIHsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy YXlfaW5kZXggPSAwOwogICAgICAgIH0KCiAgICAgICAgdHlwZSA9ICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KVt3LT50ZXh0LnNhcnJheV9pbmRleF07CiAg ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgc3dpdGNoICh3LT50ZXh0LnNhcnJheV9pbmRleCkK ICAgICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICB0eXBlID0gWG1TRUxFQ1RfV09S RDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgdHlwZSA9 IFhtU0VMRUNUX0FMTDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAg ICAgICAgIHR5cGUgPSBYbVNFTEVDVF9QT1NJVElPTjsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy YXlfaW5kZXggPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0 dXJuIHR5cGU7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KU2NhblR5cGVTdGFydChYbVRleHRG aWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUo dykpCiAgICB7CiAgICBjYXNlIFhtU0VMRUNUX1dPUkQ6CiAgICAgICAgcG9zID0gV29yZFN0YXJ0 KHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgog ICAgICAgIHBvcyA9IFNraXBCYWNrd2FyZCh3LCBwb3MpOwogICAgICAgIGJyZWFrOwoKICAgIGNh c2UgWG1TRUxFQ1RfTElORToKICAgIGNhc2UgWG1TRUxFQ1RfUEFSQUdSQVBIOgogICAgY2FzZSBY bVNFTEVDVF9BTEw6CiAgICAgICAgcG9zID0gMDsKICAgICAgICBicmVhazsKCiAgICBjYXNlIFht U0VMRUNUX1BPU0lUSU9OOgogICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgIH0KCiAgICBy ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNjYW5UeXBlRW5kKFhtVGV4dEZp ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgc3dpdGNoIChTY2FuVHlwZSh3 KSkKICAgIHsKICAgIGNhc2UgWG1TRUxFQ1RfV09SRDoKICAgICAgICBwb3MgPSBXb3JkRW5kKHcs IHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgogICAg ICAgIHBvcyA9IFNraXBGb3J3YXJkKHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBY bVNFTEVDVF9MSU5FOgogICAgY2FzZSBYbVNFTEVDVF9QQVJBR1JBUEg6CiAgICBjYXNlIFhtU0VM RUNUX0FMTDoKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0 cmluZ19sZW5ndGgpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgWG1TRUxFQ1RfUE9TSVRJT046 CiAgICBkZWZhdWx0OgogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoK CgpzdGF0aWMgdm9pZApWZXJpZnlCZWxsKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZlcmlmeV9iZWxsKSkKICAgIHsKICAgICAg ICBYQmVsbCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgNTApOwogICAgfQp9CgoKc3RhdGljIEJvb2xlYW4KRG9D dXJzb3JNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICBY bVRleHRQb3NpdGlvbiBwb3MsIEJvb2xlYW4gaGlnaGxpZ2h0LCBCb29sZWFuIGRyYXdpdCkKewog ICAgWG1UZXh0VmVyaWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwoKICAgIGlmIChwb3MgPiAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHBv cyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9 CgogICAgY2JzLmRvaXQgPSAxOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQubW90aW9uX3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgY2JzLnJlYXNvbiA9IFht Q1JfTU9WSU5HX0lOU0VSVF9DVVJTT1I7CiAgICAgICAgY2JzLmV2ZW50ID0gZXY7CiAgICAgICAg Y2JzLmN1cnJJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbik7CiAgICAgICAgY2JzLm5ld0luc2VydCA9IHBvczsKICAgICAgICBjYnMuc3RhcnRQ b3MgPSBjYnMuZW5kUG9zID0gMDsKICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAg ICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdldCl3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTc4 XSksICZjYnMpOwoKICAgICAgICBpZiAoY2JzLmRvaXQpCiAgICAgICAgewogICAgICAgICAgICBw b3MgPSBjYnMubmV3SW5zZXJ0OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoY2JzLmRvaXQpCiAg ICB7CiAgICAgICAgaWYgKGhpZ2hsaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIENsZWFySGln aGxpZ2h0KHcpOwogICAgICAgIH0KCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gcG9zOwogICAgICAgIGlmIChkcmF3aXQpCiAgICAgICAg ewogICAgICAgICAgICBEcmF3TW92ZSh3KTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7 CiAgICAgICAgVmVyaWZ5QmVsbCh3KTsKICAgIH0KCiAgICAodm9pZClfWG1JbVNlbmRTcG90KChX aWRnZXQpdyk7CiAgICByZXR1cm4gY2JzLmRvaXQ7Cn0KCgpzdGF0aWMgdm9pZApEb0luc2VydChY bVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBjaGFyICpidWYsIGludCBsZW4pCnsKICAg IGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBWZXJp ZnlCZWxsKHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX0x0RGVidWdJbkRlYnVn KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICB7CiAgICBjaGFyICp0 bXA7CgoKICAgICAgICB0bXAgPSBYdE1hbGxvYyhsZW4rMSk7CiAgICAgICAgKF9fZXh0ZW5zaW9u X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs ZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICopIG1l bWNweSAodG1wLCBidWYsIGxlbikgOiBzdHJuY3B5ICh0bXAsIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5 ICh0bXAsIGJ1ZiwgbGVuKSkpOwogICAgICAgIHRtcFtsZW5dID0gJ1wwJzsKICAgICAgICBfTHRE ZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEb0luc2VydChidWYg JyVzJyBsZW4gJWQpXG4iLCB0bXAsIGxlbik7CgogICAgICAgIFh0RnJlZSh0bXApOwogICAgfQoK ICAgIGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHct PnRleHQuaGFzX3ByaW1hcnkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wZW5k aW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1 cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv c19sZWZ0KSAmJgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y X3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3Jp Z2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAg IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1l OjBMKTsKICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgc3RhcnQs IGVuZCwKICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLAogICAgICAgICAgICAgICAgICAgTWFz c2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4 dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1lOjBMKTsK ICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAgICAgICAgICBidWYsIGxl biwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKc3Rh dGljIHZvaWQKRG9TY2FuVHlwZShYbVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBYbVRl eHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUodykpCiAgICB7CiAgICBjYXNl IFhtU0VMRUNUX1BPU0lUSU9OOgogICAgICAgIERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAx KTsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX2FuY2hvcikg PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg ICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LnByaW1fYW5jaG9yKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp bV9wb3NfbGVmdCkgPQogICAgICAgICAgICBTY2FuVHlwZVN0YXJ0KHcsIHBvcyk7CiAgICAgICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPSBTY2FuVHlw ZUVuZCh3LCBwb3MpOwoKCiAgICAgICAgUHJpbWFyeVNlbGVjdGlvbkNvbXBsZXRlKHcsIGV2LT54 YnV0dG9uLnRpbWUpOwogICAgICAgIERyYXcodyk7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KCgoK CgoKCnN0YXRpYyB2b2lkCkV4dGVuZEhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg ICBpbnQgeCwgcG9zOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5BbGxvd1Nl bGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHggPSB3LT50ZXh0LnNl bGVjdF9wb3NfeDsKCiAgICBpZiAoeCA8IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4 dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y RHJhdykpCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Qb3ModywgKGlu dCkwKTsKICAgICAgICBpZiAocG9zID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcy0tOwog ICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHggPiAoaW50KSgoKChYbVRleHRGaWVsZFBhcnRM ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z aW9uKSktPlhEcmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv dHRvbSkpKQogICAgewogICAgICAgIHBvcyA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu c2lvbikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9i b3R0b20pKSk7CiAgICAgICAgaWYgKHBvcyA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuc3RyaW5nX2xlbmd0aCkpCiAgICAgICAgewogICAgICAgICAgICBwb3MrKzsKICAgICAgICB9 CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Q b3ModywgeCk7CiAgICB9CgogICAgaWYgKHBvcyA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg RG9DdXJzb3JNb3ZlKHcsICgodm9pZCAqKTApLCBwb3MsIDAsIDEpOwoKICAgIGlmIChwb3MgPCAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAg ICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0g U2NhblR5cGVTdGFydCh3LCBwb3MpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IFNjYW5UeXBlRW5kKHcsICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQucHJpbV9hbmNob3IpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg ICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gU2NhblR5 cGVTdGFydCh3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSk7 CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf cmlnaHQpID0gU2NhblR5cGVFbmQodywgcG9zKTsKICAgIH0KCiAgICBTZXRTaW5nbGVIaWdobGln aHQoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xl ZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSk7CiAg ICBDdXJzb3JFcmFzZSh3KTsKCiAgICBpZiAoTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCBwb3MpKQog ICAgewogICAgICAgIERyYXdUZXh0UmVwb3NpdGlvbih3KTsKICAgIH0KCiAgICAgICAgRHJhd1Np bmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICBDdXJzb3JEcmF3KHcpOwp9CgoKc3RhdGljIHZvaWQK RXh0ZW5kVGltZXIoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlkcCkKewog ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldCljbGllbnRfZGF0YTsK ICAgIGludCBoaWdobGlnaHRfdGltZTsKCiAgICBoaWdobGlnaHRfdGltZSA9IFh0R2V0TXVsdGlD bGlja1RpbWUoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50 LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpIC8gMjsKCiAgICBFeHRlbmRIaWdobGlnaHQodyk7Cgog ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zZWxlY3RfaWQpID0gWHRBcHBBZGRU aW1lT3V0KFh0V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQoKFdpZGdldCl3KSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWhpZ2hsaWdodF90 aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kVGltZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwoK fQoKCnN0YXRpYyBCb29sZWFuCkNvbnZlcnRTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxl Y3Rpb24sIEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBYdFBvaW50 ZXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpsZW5ndGgsIGludCAqZm9ybWF0KQp7CiAgICBYbVRl eHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgQXRvbSBhdG9tX2Nv bXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv WG0vVGV4dEYuYyIsIGF3LCAiQ29udmVydFNlbGVjdGlvblxuIik7CgogICAgYXRvbV9jb21wX3Rl eHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+ Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNj cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy bkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks ICJURVhUIiwgMCk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICps ZW5ndGggPSAobG9uZykoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CgoK CgogICAgICAgICp2YWx1ZSA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25U ZXh0KSkgIT0gKCh2b2lkICopMCkgPyAoc3RyY3B5KFh0TWFsbG9jKCh1bnNpZ25lZClzdHJsZW4o KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgKyAxKSwgKCgoWG1UZXh0 RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkpOwogICAgICAg ICp0eXBlID0gKChBdG9tKSAzMSk7CiAgICB9CiAgICBlbHNlIGlmICgqdGFyZ2V0ID09IGF0b21f Y29tcF90ZXh0IHx8ICp0YXJnZXQgPT0gYXRvbV90ZXh0KXsKCiAgICAgICAgICAgIFhUZXh0UHJv cGVydHkgcHJvcDsKICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICBpbnQgcmV0OwoK ICAgICAgICAgICAgYnVmID0gWHRNYWxsb2MoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxl Y3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgJiYgX19i dWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVu KSkgPyAoc3RybGVuICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpKSAr IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikp KSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj dGlvblRleHQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3Ry bmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAoKChY bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpKSA6IHN0cm5jcHkgKGJ1ZiwgKCgo WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu c2lvbikpLT5TZWxlY3Rpb25MZW4pKSkpOwogICAgICAgICAgICBidWZbKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pXSA9ICdcMCc7CgogICAgICAgICAgICByZXQgPSBYbWJU ZXh0TGlzdFRvVGV4dFByb3BlcnR5KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkpLCAmYnVmLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhD b21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAg ICAgICAgIGlmIChyZXQgIT0gMCl7CiAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAg ICAgICAgICAgICp2YWx1ZSA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAgICAg IGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEpOwog ICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwogICAg ICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAqbGVu Z3RoID0gcHJvcC5uaXRlbXM7CiAgICAgICAgICAgICAgICAqdmFsdWUgPSBidWY7CiAgICAgICAg ICAgIH0KICAgICAgICAgICAqdHlwZSA9IGF0b21fY29tcF90ZXh0OwoKICAgIH0KICAgIGVsc2UK ICAgICAgICByZXR1cm4gMDsKCiAgICAqZm9ybWF0ID0gODsKICAgIHJldHVybiAxOwp9CgoKCnN0 YXRpYyB2b2lkCkxvc2VTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxlY3Rpb24pCnsKICAg ICAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgICAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCBhdywgIkxvc2VTZWxlY3Rpb25c biIpOwoKICAgICAgICBpZih3LT50ZXh0Lmhhc19wcmltYXJ5KSB7CiAgICAgICAgICAgICAgICB3 LT50ZXh0Lmhhc19wcmltYXJ5ID0gMDsKICAgICAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVs ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu ZXh0ZW5zaW9uKSktPkVjaG8pICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp bV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JFcmFzZSh3 KTsKICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5wcmltX3Bvc19yaWdodCksIDApOwogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JE cmF3KHcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExl c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp b24pKS0+T2xkSGlnaGxpZ2h0RW5kKSA9IC0xOwogICAgICAgIH0KfQoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgWEV2ZW50ICpldjsKICAgIGludCB1c2VfY3RleHQ7Cn0gU2VsZWN0aW9uQ2xpZW50 RGF0YTsKCgoKc3RhdGljIHZvaWQKUmVxdWVzdFNlbGVjdGlvbihXaWRnZXQgYXcsIFh0UG9pbnRl ciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBY dFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0aCwgaW50ICpmb3JtYXQpCnsKICAg IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBTZWxlY3Rp b25DbGllbnREYXRhICpjbGllbnRfZGF0YSA9IChTZWxlY3Rpb25DbGllbnREYXRhKiljbGllbnQ7 CiAgICBYRXZlbnQgKmV2ID0gKFhFdmVudCopY2xpZW50X2RhdGEtPmV2OwoKICAgIF9MdERlYnVn KCJDT1BZVE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpXG5cdCVzID4lczwgbGVuZ3Ro ICVkXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAzNTg4LCAqc2VsZWN0aW9uID09ICgo QXRvbSkgMSkgPyAiWEFfUFJJTUFSWSIgOiAiWEFfU0VDT05EQVJZIiwgIXZhbHVlID8gIk5VTEwi IDogdmFsdWUsICpsZW5ndGgpOwoKCgoKCiAgICBpZiAoKCF2YWx1ZSkgfHwgKCpsZW5ndGggPT0g MCkpCiAgICB7CiAgICAgICAgaWYgKCpzZWxlY3Rpb24gPT0gKChBdG9tKSAyKSkKICAgICAgICB7 CiAgICAgICAgICAgIGlmIChjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID09IDEpewogICAgICAgICAg ICAgICAgY2xpZW50X2RhdGEtPnVzZV9jdGV4dCA9IDA7CiAgICAgICAgICAgICAgICBYdEdldFNl bGVjdGlvblZhbHVlKGF3LCAoKEF0b20pIDIpLCAoKEF0b20pIDMxKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZXF1ZXN0U2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChYdFBvaW50ZXIpY2xpZW50X2RhdGEsIGV2LT54YnV0dG9uLnRpbWUpOwogICAg ICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+ dXNlX2N0ZXh0ID0gMTsKICAgICAgICAgICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgo QXRvbSkgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1JbnRlcm5BdG9tKCgo KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p dGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i amVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9V TkRfVEVYVCIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxl Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRf ZGF0YSwgZXYtPnhidXR0b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNsaWVudF9kYXRhLT51c2VfY3RleHQgPT0g MSl7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID0gMDsKICAgICAgICAg ICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgoQXRvbSkgMSksICgoQXRvbSkgMzEpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRfZGF0YSwgZXYtPnhidXR0 b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi UmVxdWVzdFNlbGVjdGlvbjogbm8gc2VsZWN0aW9uIGF2YWlsYWJsZSIpOwogICAgICAgICAgICAg ICAgWHRGcmVlKChjaGFyICopY2xpZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K ICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAoKnNlbGVjdGlvbiA9PSAoKEF0b20pIDIpKQogICAg ICAgIHsKICAgICAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgICAgICBpbnQgY291 bnQsIGk7CiAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAgICAgaWYgKCp0eXBlID09 ICgoQXRvbSkgMzEpKXsKICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKCiAgICAgICAgICAgICAg ICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7CiAgICAgICAgICAgICAgICAoX19leHRlbnNp b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9j b25zdGFudF9wICgqbGVuZ3RoKSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNp emVfdCkgKCpsZW5ndGgpKSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAq bGVuZ3RoKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNw eSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgYnVmWyps ZW5ndGhdID0gJ1wwJzsKCgogICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0 eSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgo T2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1Ziwg MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZw cm9wKTsKCiAgICAgICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgIH0KICAgICAg ICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAq KXZhbHVlOwogICAgICAgICAgICAgICAgcHJvcC5lbmNvZGluZyA9ICp0eXBlOwogICAgICAgICAg ICAgICAgcHJvcC5mb3JtYXQgPSAqZm9ybWF0OwogICAgICAgICAgICAgICAgcHJvcC5uaXRlbXMg PSAqbGVuZ3RoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBYbWJUZXh0UHJvcGVydHlUb1Rl eHRMaXN0KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5 IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAm cHJvcCwgJmxpc3QsICZjb3VudCk7CgogICAgICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKysp ewogICAgICAgICAgICAgICAgRG9JbnNlcnQodywgZXYsIGxpc3RbaV0sIHN0cmxlbihsaXN0W2ld KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgICAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9T ZWxlY3Rpb25Qb3ModywgZXYtPnhidXR0b24ueCk7CiAgICAgICAgICAgIF9MdERlYnVnKCJDT1BZ VE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpIC0gJWQgJWRcbiIsICIuLi8uLi8uLi9s aWIvWG0vVGV4dEYuYyIsIDM2NjIsIGV2LT54YnV0dG9uLngsIHBvcyk7CgoKICAgICAgICAgICAg X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXM6ICVkXG4i LCAiZXZlbnQgcG9zIiwgKGludClwb3MpOwoKICAgICAgICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1 ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0 KXcsICJSZXF1ZXN0U2VsZWN0aW9uOiBpbnNlcnRpbmcgJyVzJyBsZW5ndGg9JWQgYXQgcG9zOiAl ZFxuIiwgKGNoYXIgKil2YWx1ZSwgKGludCkoKmxlbmd0aCksIHBvcyk7CgoKICAgICAgICAgICAg fQoKICAgICAgICAgICAgaWYgKERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAxKSkKICAgICAg ICAgICAgewoKICAgICAgICAgICAgICAgIFhUZXh0UHJvcGVydHkgcHJvcDsKICAgICAgICAgICAg ICAgIGludCBjb3VudCwgaTsKICAgICAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAg ICAgICAgIGlmICgqdHlwZSA9PSAoKEF0b20pIDMxKSl7CiAgICAgICAgICAgICAgICAgICAgY2hh ciAqYnVmOwoKICAgICAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7 CiAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9w ICgoY2hhciAqKXZhbHVlKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKmxlbmd0aCkgPyAoc3Ry bGVuICgoY2hhciAqKXZhbHVlKSArIDEgPj0gKChzaXplX3QpICgqbGVuZ3RoKSkgPyAoY2hhciAq KSBtZW1jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkgOiBzdHJuY3B5IChidWYsIChj aGFyICopdmFsdWUsICpsZW5ndGgpKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxl bmd0aCkpKTsKICAgICAgICAgICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg ICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgoKCgoT2JqZWN0KSh3KSkt Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo KFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVj dC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAg ICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl bHNlewogICAgICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAqKXZh bHVlOwogICAgICAgICAgICAgICAgICAgIHByb3AuZW5jb2RpbmcgPSAqdHlwZTsKICAgICAgICAg ICAgICAgICAgICBwcm9wLmZvcm1hdCA9ICpmb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgcHJv cC5uaXRlbXMgPSAqbGVuZ3RoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFht YlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj cmVlbi0+ZGlzcGxheSksICZwcm9wLCAmbGlzdCwgJmNvdW50KTsKCiAgICAgICAgICAgICAgICBm b3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICAgICAgICAgIERvSW5zZXJ0KHcsIGV2 LCBsaXN0W2ldLCBzdHJsZW4obGlzdFtpXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICAgIFh0RnJlZSgoY2hhciAqKWNsaWVudCk7CiAgICAgICAgWHRG cmVlKChjaGFyICopdmFsdWUpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKUHJpbWFyeVNlbGVjdGlv bkNvbXBsZXRlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFRpbWUgdGltZSkKewogICAgaW50IGxlbjsK CiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAgIHsK ICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSk7 CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9ICgo dm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pID0g MDsKICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAg ICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5wcmltX3Bvc19yaWdodCkpOwoKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIHctPnRl eHQuaGFzX3ByaW1hcnkgPSAxOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2Vs ZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj dGlvblRleHQpID0gWHRNYWxsb2MobGVuKTsKICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWls dGluX2NvbnN0YW50X3AgKCYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVso KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpXSkgJiYgX19idWls dGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19s ZWZ0KV0pICsgMSA+PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgoKChYbVRl eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv c19sZWZ0KV0sIGxlbikgOiBzdHJuY3B5ICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj dGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0sIGxlbikpIDogc3RybmNw eSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdp ZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSk7CgoKCiAgICAgICAgWHRPd25TZWxlY3Rpb24oKFdp ZGdldCl3LCAoKEF0b20pIDEpLCB0aW1lLAogICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRT ZWxlY3Rpb24sIExvc2VTZWxlY3Rpb24sICgodm9pZCAqKTApKTsKCgoKCgoKCiAgICB9CiAgICBl bHNlCiAgICB7CgoKCiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oKFdpZGdldCl3LC0x LC0xLHRpbWUpOwogICAgfQp9CgoKCgoKCgpzdGF0aWMgdm9pZApfQmxpbmtDdXJzb3JDYWxsYmFj ayhYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0SW50ZXJ2YWxJZCAqaWRwKQp7CiAgICBYbVRleHRG aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWNsaWVudF9kYXRhOwoKCgogICAgWG1J bVNldEZvY3VzVmFsdWVzKChXaWRnZXQpY2xpZW50X2RhdGEsICgodm9pZCAqKTApLCAwKTsKCiAg ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5ibGlua19vbikpCiAgICB7CiAg ICAgICAgQ3Vyc29yRXJhc2Uodyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgQ3Vyc29y RHJhdyh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnRpbWVy X2lkKSA9IFh0QXBwQWRkVGltZU91dChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KChXaWRn ZXQpdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuYmxpbmtfcmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwp9CgoKCgpleHRlcm4gdm9pZApfWG1U ZXh0RmllbGRGb2N1c0luKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAg ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0VmVy aWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4 dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg KFdpZGdldCl3LCAiJXNcbiIsICJfWG1UZXh0RmllbGRGb2N1c0luIik7CgogICAgaWYgKCBldmVu dC0+dHlwZSA9PSA5ICYmIGV2ZW50LT54YW55LnNlbmRfZXZlbnQgJiYgISgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpICkKICAgIHsKICAgICAgICBDdXJzb3JFcmFz ZSh0ZncpOwogICAgICAgIEN1cnNvclNldCh0ZncsIDEpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmJsaW5rX3JhdGUpID4gMCAmJiAhKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHRmdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgICAgICB7CiAgICAgICAgICAgICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkgPSBYdEFwcEFkZFRpbWVP dXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldFRvQXBwbGlj YXRpb25Db250ZXh0KChXaWRnZXQpdGZ3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5i bGlua19yYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlcil0ZncpOwogICAgICAgIH0KICAgICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBDdXJzb3JEcmF3KHRmdyk7CiAgICAgICAgfQoK ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmZvY3VzX2NhbGxi YWNrKSkKICAgICAgICB7CiAgICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0ZPQ1VTOwogICAg ICAgICAgICBjYnMuZXZlbnQgPSBldmVudDsKICAgICAgICAgICAgY2JzLmN1cnJJbnNlcnQgPSBj YnMubmV3SW5zZXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbik7CiAgICAgICAgICAgIGNicy5zdGFydFBvcyA9IGNicy5lbmRQb3MgPSAwOwogICAg ICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAgICAgICAgICAgWHRDYWxsQ2FsbGJh Y2tMaXN0KChXaWRnZXQpdGZ3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZm9j dXNfY2FsbGJhY2spLCAmY2JzKTsKICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVs ZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1J bVNldEZvY3VzVmFsdWVzKHcsICgodm9pZCAqKTApLCAwKTsKICAgICAgICB9CgogICAgfQogICAg WHRDYWxsQWN0aW9uUHJvYygoV2lkZ2V0KXRmdywgIlByaW1pdGl2ZUZvY3VzSW4iLCBldmVudCwK ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgKm51bV9wYXJhbXMpOwoKfQoKCgpleHRl cm4gdm9pZApfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwKICAg ICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7 CiAgICBYbVRleHRWZXJpZnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBYbVRleHRGaWVsZFdpZGdl dCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli L1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgIl9YbVRleHRGaWVsZEZvY3VzT3V0Iik7 CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpKQog ICAgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJf aWQpKQogICAgICAgIHsKICAgICAgICAgICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkpOwogICAgICAgICAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJfaWQpID0gMDsKICAgICAgICB9CgogICAgICAgIEN1 cnNvckVyYXNlKHRmdyk7CiAgICAgICAgQ3Vyc29yU2V0KHRmdywgMCk7CiAgICAgICAgQ3Vyc29y RHJhdyh0ZncpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0 Lmxvc2luZ19mb2N1c19jYWxsYmFjaykpCiAgICAgICAgewogICAgICAgICAgICBjYnMucmVhc29u ID0gWG1DUl9MT1NJTkdfRk9DVVM7CiAgICAgICAgICAgIGNicy5ldmVudCA9IGV2ZW50OwogICAg ICAgICAgICBjYnMuY3Vyckluc2VydCA9IGNicy5uZXdJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdp ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgY2JzLnN0YXJ0 UG9zID0gY2JzLmVuZFBvcyA9IDA7CiAgICAgICAgICAgIGNicy50ZXh0ID0gKCh2b2lkICopMCk7 CgogICAgICAgICAgICBpZiAoKCgoWG1HYWRnZXQpKHcpKS0+cmVjdGFuZ2xlLm1hbmFnZWQpKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoKFdpZGdldCl0 ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2FsbGJh Y2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNicyk7CiAgICAgICAgICAgIH0K ICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQu ZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1JbVVuc2V0Rm9jdXMoKFdpZGdldCl0 ZncpOwogICAgICAgIH0KICAgIH0KCgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChXaWRnZXQpdGZ3 LCAiUHJpbWl0aXZlRm9jdXNPdXQiLCBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIHBh cmFtcywgKm51bV9wYXJhbXMpOwp9CgoKc3RhdGljIHZvaWQKYWN0aXZhdGUoV2lkZ2V0IHcsIFhF dmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg WG1BbnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBXaWRnZXQgcGFyZW50OwoKICAgIF9MdERlYnVn KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYWN0aXZhdGUi KTsKCgogICAgY2JzLnJlYXNvbiA9IFhtQ1JfQUNUSVZBVEU7CiAgICBjYnMuZXZlbnQgPSBldmVu dDsKCiAgICBYdENhbGxDYWxsYmFja0xpc3QodywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKChYbVRl eHRGaWVsZFdpZGdldCl3KSktPnRleHQuYWN0aXZhdGVfY2FsbGJhY2spLCAmY2JzKTsKCgoKCgog ICAgcGFyZW50ID0gdzsKICAgIHdoaWxlICgocGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+ b2JqZWN0LnBhcmVudCkpICE9ICgodm9pZCAqKTApKQogICAgewogICAgICAgIGlmICgoKCgoKF9Y bV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0 KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFy ZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+ cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl dENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0 ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+ Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVNFTEVDVElPTl9CT1hfQklUKSA+PiAzKV0p ICYgKDEgPDwgKChYbVNFTEVDVElPTl9CT1hfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSB8 fCAoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo KChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq ZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z aW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgm KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNz KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0 Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCop KCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xh c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUVTU0FHRV9CT1hfQklUKSA+ PiAzKV0pICYgKDEgPDwgKChYbU1FU1NBR0VfQk9YX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAw KSkpICYmICgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz cykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJh c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQp KS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu ZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NF eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkocGFyZW50KSktPm9i amVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo T2JqZWN0KSgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3QucGFyZW50KSkpLT5vYmplY3Qud2lk Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgq X1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbURJQUxPR19TSEVM TF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtRElBTE9HX1NIRUxMX0JJVCkgJiAweDA3KSkgPyAx IDogMCkgOiAwKSkpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli L1htL1RleHRGLmMiLCBwYXJlbnQsICJNYW5hZ2VyIHBhcmVudCBhY3RpdmF0ZSBpbiBUZXh0Rlxu Iik7CgoKICAgICAgICAgICAgWHRDYWxsQWN0aW9uUHJvYyhwYXJlbnQsICJNYW5hZ2VyUGFyZW50 QWN0aXZhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LCBwYXJhbXMsICpu dW1fcGFyYW1zKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApiYWNrd2FyZF9jaGFy YWN0ZXIoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBh cmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9 IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0 Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJiYWNrd2FyZF9jaGFyYWN0ZXIiKTsKCiAgICBpZiAo KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQog ICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAg ICAgaW50IG5leHQsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp KS0+dGV4dC52YWx1ZSk7CiAgICAgICAgbmV4dCA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0 aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy c29yX3Bvc2l0aW9uKS0xKTsKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3 KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKS0xOwogICAgICAgIGZvcihpPSgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTI7IGk+PTA7IGktLSl7CiAgICAg ICAgICAgIGlmIChuZXh0ID4gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3 LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBvcyA9IGkgKyAxOwogICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5leHQgPT0gKGludClfWG1UZXh0 Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBv cyA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29yTW92ZSh0Zncs IGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKYmFja3dhcmRfd29yZChXaWRn ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwg Km51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdp ZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3 LCAiJXNcbiIsICJiYWNrd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQ b3NpdGlvbiBwb3M7CgogICAgICAgIHBvcyA9IFdvcmRTdGFydCh0ZncsIFNraXBCYWNrd2FyZCh0 ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKSk7 CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3Rh dGljIHZvaWQKYmVlcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICBTdHJpbmcgKnBhcmFtcywg Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4 dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYmVlcCIpOwoKICAgIFhCZWxsKCgoKChPYmplY3Qp KHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0 KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+ b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCA1MCk7Cn0KCgpzdGF0aWMgdm9p ZApiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAg ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVs ZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4v Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImJlZ2lubmluZ19vZl9saW5l Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9z aXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgICAgIHBv cyA9IDA7CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9 CgoKc3RhdGljIHZvaWQKY2xlYXJfc2VsZWN0aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CmludCBw b3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg ImNsZWFyX3NlbGVjdGlvbiIpOwoKCgoKCgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCko dGZ3KSktPnRleHQuZWRpdGFibGUpIHx8ICF0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICB7CiAg ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IocG9z ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpO3Bvczwo KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpO3BvcysrKQog ICAgewogICAgICAgIGlmKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSlb cG9zXSAhPSAnXG4nKQogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl eHQudmFsdWUpW3Bvc10gPSAnICc7CiAgICB9CiAgICBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9u KHcsZXYtPnhrZXkudGltZSk7Cn0Kc3RhdGljIHZvaWQKY29weV9jbGlwYm9hcmQoV2lkZ2V0IHcs IFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVt X3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl dCl3LCAiJXNcbiIsICJjb3B5X2NsaXBib2FyZCIpOwoKICAgIFhtVGV4dEZpZWxkQ29weSh3LCBl di0+eGtleS50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmNvcHlfcHJpbWFyeShXaWRnZXQgdywgWEV2 ZW50ICpldiwKICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFt cykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi JXNcbiIsICJjb3B5X3ByaW1hcnkiKTsKCgoKfQoKCnN0YXRpYyB2b2lkCmNvcHlfdG8oV2lkZ2V0 IHcsIFhFdmVudCAqZXYsCiAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy YW1zKQp7CgoKCgogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0 KXc7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl c1xuIiwgImNvcHlfdG8iKTsKICAgIF9MdERlYnVnKCJDT1BZVE8iLCB3LCAiJXM6Y29weV90bygl ZCkgLSAlZFxuIiwgIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgNDA4NCwgZXYtPnhidXR0b24u eCk7CgoKICAgIGlmICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+QWxsb3dTZWxlY3Rpb24p KQogICAgewogICAgICAgIFNlbGVjdGlvbkNsaWVudERhdGEgKmNsaWVudF9kYXRhOwoKICAgICAg ICBjbGllbnRfZGF0YSA9ICgoU2VsZWN0aW9uQ2xpZW50RGF0YSAqKSBYdE1hbGxvYygodW5zaWdu ZWQpIHNpemVvZihTZWxlY3Rpb25DbGllbnREYXRhKSkpOwogICAgICAgIGNsaWVudF9kYXRhLT5l diA9ICgoWEV2ZW50ICopIFh0TWFsbG9jKCh1bnNpZ25lZCkgc2l6ZW9mKFhFdmVudCkpKTsKCiAg ICAgICAgKmNsaWVudF9kYXRhLT5ldiA9ICpldjsKICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0 ZXh0ID0gMTsKCiAgICAgICAgWHRHZXRTZWxlY3Rpb25WYWx1ZSh3LCAoKEF0b20pIDIpLAogICAg ICAgICAgICAgICAgICAgICAgICBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qu d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50 LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCksCiAgICAgICAgICAg ICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIChY dFBvaW50ZXIpY2xpZW50X2RhdGEgLCBldi0+eGJ1dHRvbi50aW1lKTsKICAgIH0KfQoKCnN0YXRp YyB2b2lkCmN1dF9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAg U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZEN1 dCh3LCBldi0+eGJ1dHRvbi50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmN1dF9wcmltYXJ5KFdpZGdl dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51 bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn ZXQpdywgIiVzXG4iLCAiY3V0X3ByaW1hcnkiKTsKfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0 X2NoYXJhY3RlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0 cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfbmV4dF9jaGFyYWN0ZXIi KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg ICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp KS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3 KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3 KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoK ICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf bGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmlt X3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+ eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAg ICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAg ICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVs c2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAg ewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAg aW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+ dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo V2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29y X3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50 ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQp KHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQp KHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8 IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAg ICAgICAgICAgICBwb3MgPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICB9CgogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgICAg ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCBwb3Ms CiAgICAgICAgICAgICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBEcmF3 LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlvdXNf Y2hhcmFjdGVyKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAg IFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRX aWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4u L2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfcHJldmlvdXNfY2hh cmFjdGVyIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRp dGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAg ICB9CgogICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQs IGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy aW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl eHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEs LTEsZXYtPnhrZXkudGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAg ICAgICAgICAgc3RhcnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAg ICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9 CiAgICBlbHNlIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv c2l0aW9uKSA+IDApCiAgICB7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwogICAgICAgIGNo YXIgKnB0cjsKICAgICAgICBpbnQgbmV4dCwgaTsKCiAgICAgICAgcHRyID0gKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHRmdykpLT50ZXh0LnZhbHVlKTsKICAgICAgICBuZXh0ID0gKGludClfWG1UZXh0 Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0 ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTEpOwogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTE7CiAgICAgICAgZm9yKGk9 KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiktMjsgaT49 MDsgaS0tKXsKICAgICAgICAgICAgaWYgKG5leHQgPiAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lk dGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAgICAgICAgICAgICAgcG9zID0gaSArIDE7CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV4dCA9 PSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAg ICAgICAgICAgICAgcG9zID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgTW9k aWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgcG9zLCAoKChYbVRleHRGaWVsZFdp ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwKICAgICAgICAgICAgICAgICAgIChj aGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAg IH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0X3dvcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYs CiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7 CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBf THREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRl bGV0ZV9uZXh0X3dvcmQiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+ dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJl dHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRG aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGlu dCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rp b24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAg ICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikw LCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0 KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j dXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmlu Z19sZW5ndGgpKQogICAgewogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAg ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p LAogICAgICAgICAgICAgICAgICAgU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAg ICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VE cmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlv dXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgU3RyaW5n ICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0 ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRlbGV0ZV9wcmV2aW91c193b3JkIik7Cgog ICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAg ewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg KHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl eHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50 ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50 ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAg ICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf cmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXku dGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgc3Rh cnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAg ICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9CiAgICBlbHNlIGlm ICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDAp CiAgICB7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgV29y ZFN0YXJ0KHRmdywgU2tpcEJhY2t3YXJkKHRmdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICAgICAgICAg ICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQ X0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9zZWxlY3Rpb24oV2lk Z2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp bmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0Rmll bGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk Z2V0KXcsICIlc1xuIiwgImRlbGV0ZV9zZWxlY3Rpb24iKTsKCiAgICBpZiAoISgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVs bCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmlt YXJ5KQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAg WG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBN b2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAg ICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5n ZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19l bmRfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0 cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfdG9fZW5kX29mX2xpbmUi KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikg PCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7 CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsK ICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICAoKChYbVRleHRG aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgKGNo YXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9m SW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19zdGFydF9vZl9saW5lKFdp ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFt cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChY bVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu YyIsIChXaWRnZXQpdywgIiVzXG4iLCAiZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUiKTsKCiAgICBp ZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAg ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAg ewogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXkudGltZSk7 CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgMCwgKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAg ICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJh dywgQ1BfRW5kT2ZJbnNlcnQpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZGVsZXRlX2FsbChXaWRn ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51 bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdl dCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi JXNcbiIsICJkZWxldGVfYWxsIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3 KSktPnRleHQuZWRpdGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAg ICByZXR1cm47CiAgICB9CgogICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+ eGtleS50aW1lKTsKICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgMCwgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAg ICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9S ZXNldCk7Cn0KCgpzdGF0aWMgdm9pZApkZXNlbGVjdF9hbGwoV2lkZ2V0IHcsIFhFdmVudCAqZXYs CiAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi ZGVzZWxlY3RfYWxsIik7CiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LC0xLC0xLGV2LT54 a2V5LnRpbWUpOwp9CgoKc3RhdGljIHZvaWQKZG9fcXVpY2tfYWN0aW9uKFdpZGdldCB3LCBYRXZl bnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy YW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcs ICIlc1xuIiwgImRvX3F1aWNrX2FjdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKZW5kX29mX2xpbmUo V2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h bCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxk V2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl dCl3LCAiJXNcbiIsICJlbmRfb2ZfbGluZSIpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0 ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBw b3M7CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJp bmdfbGVuZ3RoKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAg ICB9Cn0KCgpzdGF0aWMgdm9pZAplbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3Ry aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CgogICAgX0x0RGVidWcoIi4uLy4u Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJlbnRlciIpOwoKCgogICAg WHRDYWxsQWN0aW9uUHJvYyh3LCAiUHJpbWl0aXZlRW50ZXIiLCBldiwgcGFyYW1zLCAqbnVtX3Bh cmFtcyk7Cgp9CgoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9hZGp1c3QoV2lkZ2V0IHcsIFhFdmVu dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg ImV4dGVuZF9hZGp1c3QiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5B bGxvd1NlbGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRmdy0+dGV4 dC5zZWxlY3RfcG9zX3ggPSBldi0+eGJ1dHRvbi54OwoKICAgIGlmIChldi0+eGJ1dHRvbi54IDwg KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSB8fAogICAgICAgIGV2LT54YnV0dG9u LnggPiAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIGlmICgoKChY bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgICAgICB7CiAgICAg ICAgICAgIEV4dGVuZEhpZ2hsaWdodCh0ZncpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgICBFeHRlbmRUaW1lcigoWHRQb2ludGVyKXRmdywgKFh0SW50ZXJ2YWxJ ZCkwKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKCgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxlY3RfaWQpKQogICAgICAgIHsKICAgICAgICAg ICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxl Y3RfaWQpKTsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNl bGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7CiAgICAgICAgfQoKICAgICAgICBFeHRlbmRIaWdo bGlnaHQodGZ3KTsKICAgIH0KfQoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9lbmQoV2lkZ2V0IHcs IFhFdmVudCAqZXYsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgICAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg ImV4dGVuZF9lbmQiKTsKCiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+ QWxsb3dTZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAg ICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNlbGVjdF9pZCkpIHsK ICAgICAgICAgICAgICAgIFh0UmVtb3ZlVGltZU91dCgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3 KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICB9Cgog ICAgICAgIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZSh0ZncsIGV2LT54YnV0dG9uLnRpbWUpOwp9 CgoKCgoKCgpzdGF0aWMgdm9pZApleHRlbmRfc3RhcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFht VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgaW50IHBvczsK CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xu IiwgImV4dGVuZF9zdGFydCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCh3LCBYbVRSQVZFUlNF X0NVUlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2Vs ZWN0aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVs VG9TZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKICAgIERvQ3Vyc29yTW92ZSh0Zncs IGV2LCBwb3MsIDAsIDEpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl eHQucHJpbV9wb3NfbGVmdCkgPCAwKQogICAgewogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPQogICAgICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9hbmNob3IpID0gKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICB9CgogICAgaWYgKCgoKFht VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0 RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAgICAoKChY bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAoKChYbVRleHRG aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgIH0KICAgIGVsc2UK ICAgIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3Nf cmlnaHQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv bik7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApmb3J3YXJkX2NoYXJhY3RlcihXaWRnZXQgdywgWEV2 ZW50ICpldiwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f cGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQp dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl c1xuIiwgImZvcndhcmRfY2hhcmFjdGVyIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBv czsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgaW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9 IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRG aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg ICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv bikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgp OyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0 aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29y TW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZm9yd2FyZF93 b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENh cmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0 RmllbGRXaWRnZXQpdzsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChX aWRnZXQpdywgIiVzXG4iLCAiZm9yd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0 aW9uIHBvczsKCiAgICAgICAgcG9zID0gU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKTsKCiAgICAg ICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9p ZApncmFiX2ZvY3VzKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFy YW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0g KFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgX0x0RGVi dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJncmFiX2Zv Y3VzIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNFX0NV UlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0 aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVsVG9T ZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKCiAgICBpZiAoKHRmdy0+dGV4dC5sYXN0 X3RpbWUgKyBYdEdldE11bHRpQ2xpY2tUaW1lKCgoKChPYmplY3QpKChXaWRnZXQpdGZ3KSktPm9i amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp ZGdldCkoKFdpZGdldCl0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdp ZGdldCl0ZncpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpKSkgPgogICAg ICAgIGV2LT54YnV0dG9uLnRpbWUpCiAgICB7CiAgICAgICAgdGZ3LT50ZXh0LnNhcnJheV9pbmRl eCsrOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHRmdy0+dGV4dC5zYXJyYXlfaW5kZXgg PSAwOwogICAgfQoKICAgIERvU2NhblR5cGUodGZ3LCBldiwgcG9zKTsKCiAgICB0ZnctPnRleHQu bGFzdF90aW1lID0gZXYtPnhidXR0b24udGltZTsKfQpzdGF0aWMgdm9pZAppbnNlcnRfc3RyaW5n KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJk aW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j IiwgKFdpZGdldCl3LCAiJXNcbiIsICJpbnNlcnRfc3RyaW5nIik7Cn0KCgpzdGF0aWMgdm9pZApr ZXlfc2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFht VGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBvbGQsbGVmdCxyaWdodDsKICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi a2V5X3NlbGVjdCIpOwoKICAgIGlmKCpudW1fcGFyYW1zID09IDApCiAgICB7CiAgICAgICAgcmV0 dXJuOwogICAgfQoKICAgIG9sZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j dXJzb3JfcG9zaXRpb24pOwogICAgbGVmdCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+ dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGlmKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90 IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm IF9fYnVpbHRpbl9jb25zdGFudF9wICgibGVmdCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAocGFy YW1zWzBdKSwgX19zMl9sZW4gPSBzdHJsZW4gKCJsZWZ0IiksICghKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBd KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgi bGVmdCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgfHwgX19z Ml9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pLCAoX19j b25zdCBjaGFyICopICgibGVmdCIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDog X19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHBhcmFtc1swXSkgJiYgKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHBhcmFtc1swXSks IF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJsZWZ0IikgJiYgKChzaXpl X3QpKGNvbnN0IHZvaWQgKikoKCJsZWZ0IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko ImxlZnQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0p KVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImxlZnQi KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlb MV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgibGVmdCIp KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsy XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0Iikp WzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0IikpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJsZWZ0Iik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtIF9fczJbMF0pOyBpZiAoX19z MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMV0gLSBfX3MyWzFdKTsg aWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gX19z MlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10g LSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgi bGVmdCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgibGVmdCIpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgibGVm dCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm ICgoc2l6ZV90KShjb25zdCB2b2lkICopKChwYXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopKCJsZWZ0IikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoImxlZnQiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo cGFyYW1zWzBdKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgibGVmdCIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFy YW1zWzBdKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgibGVmdCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19j b25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChwYXJhbXNbMF0pOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQiKSlb MF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQi KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo X19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJs ZWZ0IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9 IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo ImxlZnQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHBhcmFtc1swXSwgImxl ZnQiKSkpKTsgfSkgPT0gMCkKICAgIHsKICAgICAgICBiYWNrd2FyZF9jaGFyYWN0ZXIodyxldixw YXJhbXMsbnVtX3BhcmFtcyk7CiAgICAgICAgaWYgKG9sZCA9PSAoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkKICAgICAgICB7CiAgICAgICAgICAgIHJl dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICh0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICAg ICAgewogICAgICAgICAgICBpZiAob2xkID09IGxlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv c2l0aW9uKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYob2xkID09IHJpZ2h0KQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICByaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0 ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdl dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgcmlnaHQgPSBvbGQ7 CiAgICAgICAgfQoKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LGxlZnQscmlnaHQs ZXYtPnhrZXkudGltZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfX2V4dGVuc2lv bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo cGFyYW1zWzBdKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoInJpZ2h0IikgJiYgKF9fczFfbGVu ID0gc3RybGVuIChwYXJhbXNbMF0pLCBfX3MyX2xlbiA9IHN0cmxlbiAoInJpZ2h0IiksICghKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikocGFyYW1zWzBdKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmln aHQiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikg KHBhcmFtc1swXSksIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpLCAoX19zMV9sZW4gPCBfX3My X2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3Ag KHBhcmFtc1swXSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBz dHJsZW4gKHBhcmFtc1swXSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3Ag KCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJl Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikoInJpZ2h0IikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChwYXJhbXNbMF0pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1sw XSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChw YXJhbXNbMF0pKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAocGFyYW1zWzBdKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkg OiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAx KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJyaWdodCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVp bHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChw YXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkg PyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJyaWdodCIpKVswXSk7IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsxXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsxXSk7IGlmIChf X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsyXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChf X3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBd KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbMV0pOyBpZiAoX19zMl9sZW4g PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChfX3My X2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBf X3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAocGFyYW1zWzBdLCAicmlnaHQiKSkpKTsgfSkgPT0gMCkK ICAgIHsKICAgICAgICBmb3J3YXJkX2NoYXJhY3Rlcih3LGV2LHBhcmFtcyxudW1fcGFyYW1zKTsK ICAgICAgICBpZiAob2xkID09ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJz b3JfcG9zaXRpb24pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg ICAgICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSkKICAgICAgICB7CiAgICAgICAgICAgIGlm IChvbGQgPT0gbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGVmdCA9ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAg ICB9CgogICAgICAgICAgICBpZihvbGQgPT0gcmlnaHQpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgcmlnaHQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy c29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgbGVmdCA9IG9sZDsKICAgICAgICB9CgogICAgICAg IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsbGVmdCxyaWdodCxldi0+eGtleS50aW1lKTsKICAg ICAgICByZXR1cm47CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApraWxsX25leHRfY2hhcmFjdGVyKFdp ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBD YXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4 dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg KFdpZGdldCl3LCAiJXNcbiIsICJraWxsX25leHRfY2hhcmFjdGVyIik7CgogICAgZGVsZXRlX25l eHRfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoKCnN0 YXRpYyB2b2lkCmtpbGxfbmV4dF93b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAg ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZp ZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8u Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF9uZXh0X3dvcmQi KTsKCiAgICBkZWxldGVfbmV4dF93b3JkKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFy YW1zKTsKfQoKCnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfY2hhcmFjdGVyKFdpZGdldCB3LCBY RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu YWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVs ZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn ZXQpdywgIiVzXG4iLCAia2lsbF9wcmV2aW91c19jaGFyYWN0ZXIiKTsKCiAgICBkZWxldGVfcHJl dmlvdXNfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoK CnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewog ICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0 RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxs X3ByZXZpb3VzX3dvcmQiKTsKCiAgICBkZWxldGVfcHJldmlvdXNfd29yZCgoV2lkZ2V0KXRmdywg ZXYsIHBhcmFtcywgbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3NlbGVjdGlvbihX aWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp bmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi LCAoV2lkZ2V0KXcsICIlc1xuIiwgImtpbGxfc2VsZWN0aW9uIik7Cn0KCgpzdGF0aWMgdm9pZApr aWxsX3RvX2VuZF9vZl9saW5lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAg ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxsX3RvX2Vu ZF9vZl9saW5lIik7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0 IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2Fy ZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu YyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF90b19zdGFydF9vZl9saW5lIik7Cn0KCgpzdGF0 aWMgdm9pZApsZWF2ZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3RyaW5nICpwYXJhbXMs IENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1U ZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi LCAoV2lkZ2V0KXcsICIlc1xuIiwgImxlYXZlIik7CgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChX aWRnZXQpdGZ3LCAiUHJpbWl0aXZlTGVhdmUiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cgp9 CgoKc3RhdGljIHZvaWQKbW92ZV9kZXN0aW5hdGlvbihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi bW92ZV9kZXN0aW5hdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKbW92ZV90byhXaWRnZXQgdywgWEV2 ZW50ICpldiwKICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i LCAibW92ZV90byIpOwp9CgoKc3RhdGljIHZvaWQKbmV4dF90YWJfZ3JvdXAoV2lkZ2V0IHcsIFhF dmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3Bh cmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3 LCAiJXNcbiIsICJuZXh0X3RhYl9ncm91cCIpOwoKICAgIFh0Q2FsbEFjdGlvblByb2ModywgIlBy aW1pdGl2ZU5leHRUYWJHcm91cCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKfQoKCnN0YXRp YyB2b2lkCnBhZ2VfbGVmdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgIFN0cmluZyAq cGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3 ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwYWdlX2xlZnQiKTsKCiAgICBpZiAoKCgoWG1U ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAgewog ICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKCiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3Mo dGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpIC0gKCgoWG1UZXh0RmllbGRX aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3Zl KHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApwYWdlX3JpZ2h0KFdp ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAq bnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lk Z2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3 LCAiJXNcbiIsICJwYWdlX3JpZ2h0Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0 ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp LT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsK CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3ModGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNz dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNp b24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9i b3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9 Cn0KCgpzdGF0aWMgdm9pZApwYXN0ZV9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi cGFzdGVfY2xpcGJvYXJkIik7CgogICAgWG1UZXh0RmllbGRQYXN0ZSh3KTsKfQoKCnN0YXRpYyB2 b2lkCnBhc3RlX3ByaW1hcnkoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInBhc3RlX3ByaW1hcnkiKTsK fQoKCnN0YXRpYyB2b2lkCnByZXZfdGFiX2dyb3VwKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicHJl dl90YWJfZ3JvdXAiKTsKCiAgICBYdENhbGxBY3Rpb25Qcm9jKHcsICJQcmltaXRpdmVQcmV2VGFi R3JvdXAiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApwcm9jZXNz X2JkcmFnKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1z LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgQXRvbSBleHBvcnRfdGFyZ2V0WzNdOwogICAg QXJnIGFyZ3NbMTBdOwogICAgaW50IG4gPSAwOwogICAgV2lkZ2V0IGRjOwogICAgWG1UZXh0Rmll bGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBw b3NpdGlvbjsKCiAgICBfWG1PYmplY3RMb2NrKHcpOwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2JkcmFnIik7CgoKCiAg ICBwb3NpdGlvbiA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgZXYtPnhidXR0b24ueCk7 CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCl8fAog ICAgICAgIHBvc2l0aW9uIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1f cG9zX2xlZnQpIHx8CiAgICAgICAgcG9zaXRpb24gPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKCiAgICAgICAgX1htT2JqZWN0VW5sb2Nr KHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCgogICAgZXhwb3J0X3RhcmdldFswXSA9IFhtSW50 ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3Mu Y2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg IkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGV4cG9ydF90YXJnZXRbMV0gPSBYbUludGVybkF0b20o KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i amVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJURVhUIiwg MCk7CiAgICBleHBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CgogICAgKCh2b2lkKSggKGFy Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjY2M10pKSwgKGFyZ3Nbbl0pLnZh bHVlID0gKFh0QXJnVmFsKShleHBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFy Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ2Ml0pKSwgKGFyZ3Nbbl0pLnZh bHVlID0gKFh0QXJnVmFsKSgzKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUg PSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjMwMF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJn VmFsKSgoMUwgPDwgMSl8KDFMIDw8IDApKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0p Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNTQ2MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0g KFh0QXJnVmFsKSh3KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUgPSAoKChj aGFyICopJl9YbVN0cmluZ3NbNTU4MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShk cmFnX2NvbnZlcnRfcHJvYykgKSk7IG4rKzsKICAgICgodm9pZCkoIChhcmdzW25dKS5uYW1lID0g KCgoY2hhciAqKSZfWG1TdHJpbmdzWzk3ODldKSksIChhcmdzW25dKS52YWx1ZSA9IChYdEFyZ1Zh bCkoX1htR2V0VGV4dHVhbERyYWdJY29uKHcpKSApKTsgbisrOwoKICAgIGRjID0gWG1EcmFnU3Rh cnQodywgZXYsIGFyZ3MsIG4pOwoKICAgIGlmIChkYykKICAgIHsKICAgICAgICBYdEFkZENhbGxi YWNrKGRjLCAoKGNoYXIgKikmX1htU3RyaW5nc1s2MjE3XSksIGRyYWdfZHJvcF9maW5pc2gsICgo dm9pZCAqKTApKTsKICAgIH0KICAgIF9YbU9iamVjdFVubG9jayh3KTsKfQoKCnN0YXRpYyB2b2lk CmRyYWdfZHJvcF9maW5pc2goV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu dGVyIGNhbGxfZGF0YSkKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg dywgIiVzOmRyYWdfZHJvcF9maW5pc2goJWQpXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi LCA0OTczKTsKCn0KCgpzdGF0aWMgQm9vbGVhbgpkcmFnX2NvbnZlcnRfcHJvYyhXaWRnZXQgdywg QXRvbSAqc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICBBdG9tICp0YXJnZXQsIEF0b20gKnR5 cGVfcmV0dXJuLAogICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgKnZhbHVlX3JldHVybiwKICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoX3JldHVybiwKICAgICAgICAgICAg ICAgICAgaW50ICpmb3JtYXRfcmV0dXJuKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0Znc7CiAg ICBXaWRnZXQgc3JjOwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0 OwogICAgQXRvbSBhdG9tX21vdGlmX2Ryb3A7CiAgICBBdG9tIGF0b21fZGVsZXRlOwoKICAgIGF0 b21fY29tcF90ZXh0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl dF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSkt PmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y ZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9VTkRfVEVYVCIsIDApOwogICAgYXRvbV90ZXh0ID0g WG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5k aXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs YXkpLCAiVEVYVCIsIDApOwogICAgYXRvbV9tb3RpZl9kcm9wID0gWG1JbnRlcm5BdG9tKCgoKChP YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiX01PVElGX0RST1Ai LCAwKTsKICAgIGF0b21fZGVsZXRlID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk Z2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBh cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CgogICAgaWYgKCpzZWxl Y3Rpb24gIT0gYXRvbV9tb3RpZl9kcm9wKQogICAgewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8u Li9saWIvWG0vVGV4dEYuYyIsIHcsICJzZWxlY3Rpb24gaXMgbm90IE1PVElGX0RST1BcbiIpOwog ICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4 dEYuYyIsIHcsICJXZSdyZSBkZWFsaW5nIHdpdGggTU9USUZfRFJPUFxuIik7CgogICAgWHRWYUdl dFZhbHVlcyh3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s1NDYwXSksICZzcmMsICgodm9pZCAqKTAp KTsKICAgIHRmdyA9IChYbVRleHRGaWVsZFdpZGdldClzcmM7CiAgICBfWG1PYmplY3RMb2NrKHNy Yyk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICpsZW5ndGhfcmV0 dXJuID0gKGxvbmcpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CiAg ICAgICAgKnZhbHVlX3JldHVybiA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj dGlvblRleHQpKSAhPSAoKHZvaWQgKikwKSA/IChzdHJjcHkoWHRNYWxsb2MoKHVuc2lnbmVkKXN0 cmxlbigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSksICgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkp OwogICAgICAgICp0eXBlX3JldHVybiA9ICgoQXRvbSkgMzEpOwogICAgfQogICAgZWxzZSBpZiAo KnRhcmdldCA9PSBhdG9tX2NvbXBfdGV4dCB8fCAqdGFyZ2V0ID09IGF0b21fdGV4dCl7CgogICAg ICAgICAgICBYVGV4dFByb3BlcnR5IHByb3A7CiAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAg ICAgICAgaW50IHJldDsKCiAgICAgICAgICAgIGJ1ZiA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxk UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0 LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lv bl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl bGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0 ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpID8gKHN0cmxlbiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVz c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5z aW9uKSktPlNlbGVjdGlvblRleHQpKSArIDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBh cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l eHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSkpID8gKGNoYXIgKikgbWVtY3B5IChidWYsICgoKFht VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0 ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3RybmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBh cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5T ZWxlY3Rpb25MZW4pKSkgOiBzdHJuY3B5IChidWYsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZF eHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikp LT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxl bikpKSk7CiAgICAgICAgICAgIGJ1ZlsoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0 aW9uTGVuKV0gPSAnXDAnOwoKICAgICAgICAgICAgcmV0ID0gWG1iVGV4dExpc3RUb1RleHRQcm9w ZXJ0eSgoKCgoT2JqZWN0KSh0ZncpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3Bs YXkgOiAoKE9iamVjdCkodGZ3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5 KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0 U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAgIFh0RnJlZShidWYpOwogICAgICAgICAgICBpZiAo cmV0ICE9IDApewogICAgICAgICAgICAgICAgKmxlbmd0aF9yZXR1cm4gPSAwOwogICAgICAgICAg ICAgICAgKnZhbHVlX3JldHVybiA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAg ICAgIGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEp OwogICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwog ICAgICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAq bGVuZ3RoX3JldHVybiA9IHByb3Aubml0ZW1zOwogICAgICAgICAgICAgICAgKnZhbHVlX3JldHVy biA9IGJ1ZjsKICAgICAgICAgICAgfQogICAgICAgICAgICp0eXBlX3JldHVybiA9IGF0b21fY29t cF90ZXh0OwoKICAgIH0KICAgIGVsc2UgaWYgKCp0YXJnZXQgPT0gYXRvbV9kZWxldGUpCiAgICB7 CgogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxk V2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0 KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbigoV2lkZ2V0KXNyYywtMSwtMSwwTCk7 CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg c3RhcnQsCiAgICAgICAgICAgICAgICAgICBlbmQsCiAgICAgICAgICAgICAgICAgICAoY2hhciAq KTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJhdywgQ1BfRW5kT2ZJbnNl cnQpOwoKICAgICAgICAqdmFsdWVfcmV0dXJuID0gKCh2b2lkICopMCk7CiAgICAgICAgKnR5cGVf cmV0dXJuID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkpLCAiTlVMTCIsIDApOwogICAgICAgICpsZW5ndGhfcmV0dXJuID0gMDsKICAg IH0KICAgIGVsc2UKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soc3JjKTsKICAgICAgICBy ZXR1cm4gMDsKICAgIH0KCiAgICAqZm9ybWF0X3JldHVybiA9IDg7CgogICAgX1htT2JqZWN0VW5s b2NrKHNyYyk7CiAgICByZXR1cm4gMTsKfQoKCnN0YXRpYyB2b2lkCmRyYWdfdHJhbnNmZXJfcHJv YyhXaWRnZXQgZHcsIFh0UG9pbnRlciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlw ZSwKICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0 aCwgaW50ICpmb3JtYXQpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRX aWRnZXQpY2xpZW50OwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0 OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBcmcgYXJnc1syXTsKICAgIGNoYXIgKmF0b21fbmFt ZTsKCiAgICBhdG9tX2NvbXBfdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGF0 b21fdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny ZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAwKTsKICAgIGF0b21fbnVsbCA9IFhtSW50ZXJuQXRvbSgo KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p dGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2Jq ZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIk5VTEwiLCAw KTsKCiAgICBhdG9tX25hbWUgPSBYR2V0QXRvbU5hbWUoKCgoKE9iamVjdCkoZHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0 KShkdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShkdykpLT5vYmplY3QucGFy ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICp0eXBlKTsKCiAgICBpZiAoKnR5cGUgIT0gYXRv bV9udWxsICYmICghdmFsdWUgfHwKICAgICAgICAoKnR5cGUgIT0gYXRvbV9jb21wX3RleHQgJiYg KnR5cGUgIT0gYXRvbV90ZXh0ICYmICp0eXBlICE9ICgoQXRvbSkgMzEpKSkpCiAgICB7CgogICAg ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i LCAiZHJhZ190cmFuc2Zlcl9wcm9jOiBEbkQgVHJhbnNmZXIgRmFpbGVkKFRleHRGaWVsZCkiKTsK CiAgICAgICAgKCh2b2lkKSggKGFyZ3NbMF0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3Nb MTAzMjhdKSksIChhcmdzWzBdKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlMVVJF KSApKTsKICAgICAgICAoKHZvaWQpKCAoYXJnc1sxXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3Ry aW5nc1s4NDQ1XSkpLCAoYXJnc1sxXSkudmFsdWUgPSAoWHRBcmdWYWwpKDApICkpOwogICAgICAg IFh0U2V0VmFsdWVzKGR3LCBhcmdzLCAyKTsKCiAgICB9CiAgICBlbHNlIGlmICgqdHlwZSAhPSBh dG9tX251bGwpCiAgICB7CiAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgIGludCBj b3VudCwgaTsKICAgICAgICBjaGFyICoqbGlzdDsKCiAgICAgICAgaWYgKCp0eXBlID09ICgoQXRv bSkgMzEpKXsKICAgICAgICAgICAgY2hhciAqYnVmOwoKICAgICAgICAgICAgYnVmID0gWHRNYWxs b2MoKmxlbmd0aCArIDEpOwogICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv bnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgqbGVuZ3Ro KSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNpemVfdCkgKCpsZW5ndGgpKSA/ IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSA6IHN0cm5jcHkg KGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNweSAoYnVmLCAoY2hhciAqKXZh bHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg ICAgICAgIFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50 LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICZidWYsIDEsCiAgICAgICAgICAgICAgICAgICAgICAg IFhDb21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAg ICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQg Y2hhciAqKXZhbHVlOwogICAgICAgICAgICBwcm9wLmVuY29kaW5nID0gKnR5cGU7CiAgICAgICAg ICAgIHByb3AuZm9ybWF0ID0gKmZvcm1hdDsKICAgICAgICAgICAgcHJvcC5uaXRlbXMgPSAqbGVu Z3RoOwogICAgICAgIH0KCiAgICAgICAgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3 KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJnByb3AsICZsaXN0LCAm Y291bnQpOwoKICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICBEb0lu c2VydCh3LCAoKHZvaWQgKikwKSwgbGlzdFtpXSwgc3RybGVuKGxpc3RbaV0pKTsKICAgICAgICB9 CgogICAgfQoKICAgIGlmICh2YWx1ZSkKICAgICAgICBYdEZyZWUoKGNoYXIgKil2YWx1ZSk7Cn0K CgpzdGF0aWMgdm9pZApwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0 YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKewogICAgWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0ICpE cm9wSW5mbyA9CiAgICAgICAgKFhtRHJvcFByb2NDYWxsYmFja1N0cnVjdCAqKSBjYWxsX2RhdGE7 CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5UmVjIGVudHJ5WzJdOwogICAgQXRvbSBhdG9tX2NvbXBf dGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBdG9tICpl eHBvcnRfdGFyZ2V0czsKICAgIEF0b20gdGFyZ2V0OwogICAgQ2FyZGluYWwgbnVtX2V4cG9ydF90 YXJnZXRzOwogICAgQXJnIGFyZ3NbMTBdOwogICAgQ2FyZGluYWwgbiA9IDA7CiAgICBYbVRleHRQ b3NpdGlvbiBwb3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRn ZXQpdzsKICAgIEJvb2xlYW4gY29tcF90ZXh0LCB0ZXh0LCBzdHJpbmc7CgogICAgYXRvbV9jb21w X3RleHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5z Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy bkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNs YXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkg OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJU RVhUIiwgMCk7CiAgICBhdG9tX251bGwgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5v YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJOVUxMIiwgMCk7CgogICAgaWYgKChEcm9w SW5mby0+ZHJvcEFjdGlvbiA9PSBYbURST1ApICYmCiAgICAgICAgKChEcm9wSW5mby0+b3BlcmF0 aW9uID09ICgxTCA8PCAxKSkgfHwKICAgICAgICAgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFM IDw8IDApKSkpCiAgICB7CgoKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9ICgoKGNo YXIgKikmX1htU3RyaW5nc1s2NjYzXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCZl eHBvcnRfdGFyZ2V0cykgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9 ICgoKGNoYXIgKikmX1htU3RyaW5nc1s4NDYyXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdW YWwpKCZudW1fZXhwb3J0X3RhcmdldHMpICkpOyBuKys7CiAgICAgICAgWHRHZXRWYWx1ZXMoRHJv cEluZm8tPmRyYWdDb250ZXh0LCBhcmdzLCBuKTsKICAgICAgICBjb21wX3RleHQgPSB0ZXh0ID0g c3RyaW5nID0gMDsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbnVtX2V4cG9ydF90YXJnZXRzOyBu KyspIHsKICAgICAgICAgICAgaWYgKGV4cG9ydF90YXJnZXRzW25dID09IGF0b21fY29tcF90ZXh0 KQogICAgICAgICAgICAgICAgY29tcF90ZXh0ID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAoZXhw b3J0X3RhcmdldHNbbl0gPT0gYXRvbV90ZXh0KQogICAgICAgICAgICAgICAgdGV4dCA9IDE7CiAg ICAgICAgICAgIGVsc2UgaWYgKGV4cG9ydF90YXJnZXRzW25dID09ICgoQXRvbSkgMzEpKQogICAg ICAgICAgICAgICAgc3RyaW5nID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBfdGV4dCkK ICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV9jb21wX3RleHQ7CiAgICAgICAgZWxzZSBpZiAodGV4 dCkKICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV90ZXh0OwogICAgICAgIGVsc2UgaWYgKHN0cmlu ZykKICAgICAgICAgICAgdGFyZ2V0ID0gKChBdG9tKSAzMSk7CiAgICAgICAgZWxzZQogICAgICAg ICAgICB0YXJnZXQgPSBhdG9tX251bGw7CgogICAgICAgIGVudHJ5WzBdLnRhcmdldCA9IHRhcmdl dDsKICAgICAgICBlbnRyeVswXS5jbGllbnRfZGF0YSA9IChYdFBvaW50ZXIpIHc7CgogICAgICAg IG4gPSAwOwogICAgICAgIGlmICh0YXJnZXQgPT0gYXRvbV9udWxsKQogICAgICAgIHsKICAgICAg ICAgICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEw MzI4XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShYbVRSQU5TRkVSX0ZBSUxVUkUp ICkpOyBuKys7CiAgICAgICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp KTsgbisrOwogICAgICAgICAgICBEcm9wSW5mby0+b3BlcmF0aW9uID0gMEw7CiAgICAgICAgICAg IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtSU5WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAg fQogICAgICAgIGVsc2UgaWYgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFMIDw8IDApKQogICAg ICAgIHsKICAgICAgICAgICAgZW50cnlbMV0udGFyZ2V0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmpl Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CiAg ICAgICAgICAgIGVudHJ5WzFdLmNsaWVudF9kYXRhID0gKFh0UG9pbnRlcikgdzsKICAgICAgICAg ICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0NDVd KSksIChhcmdzIFtuXSkudmFsdWUgPSAoWHRBcmdWYWwpKDIpICkpOyBuKys7CiAgICAgICAgICAg IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtVkFMSURfRFJPUF9TSVRFOwogICAgICAgIH0K ICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0pLm5h bWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ0NV0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChY dEFyZ1ZhbCkoMSkgKSk7IG4rKzsKICAgICAgICAgICAgRHJvcEluZm8tPmRyb3BTaXRlU3RhdHVz ID0gWG1WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAgfQogICAgICAgICgodm9pZCkoIChhcmdzIFtu XSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NTU2XSkpLCAoYXJncyBbbl0pLnZhbHVl ID0gKFh0QXJnVmFsKShlbnRyeSkgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0p Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTAzMTVdKSksIChhcmdzIFtuXSkudmFsdWUg PSAoWHRBcmdWYWwpKGRyYWdfdHJhbnNmZXJfcHJvYykgKSk7IG4rKzsKCgogICAgICAgIHBvcyA9 IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgRHJvcEluZm8tPngpOwogICAgICAgIERvQ3Vy c29yTW92ZSh0ZncsICgodm9pZCAqKTApLCBwb3MsIDEsIDEpOwogICAgfQogICAgZWxzZQogICAg ewogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5n c1sxMDMyOF0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlM VVJFKSApKTsgbisrOwogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp KTsgbisrOwogICAgICAgIERyb3BJbmZvLT5vcGVyYXRpb24gPSAwTDsKICAgICAgICBEcm9wSW5m by0+ZHJvcFNpdGVTdGF0dXMgPSBYbUlOVkFMSURfRFJPUF9TSVRFOwogICAgfQoKICAgIFhtRHJv cFRyYW5zZmVyU3RhcnQgKERyb3BJbmZvLT5kcmFnQ29udGV4dCwgYXJncywgbik7Cgp9CgoKc3Rh dGljIHZvaWQKcHJvY2Vzc19jYW5jZWwoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAg ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2Nh bmNlbCIpOwoKCgoKICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50 KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAo KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSgoKChPYmplY3Qp KHcpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmpl Y3QucGFyZW50KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp b24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdl bmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9i amVjdCkoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xh c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUFOQUdFUl9CSVQpID4+IDMp XSkgJiAoMSA8PCAoKFhtTUFOQUdFUl9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAg ewogICAgICAgIFh0Q2FsbEFjdGlvblByb2MoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQp LCAiTWFuYWdlclBhcmVudENhbmNlbCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKICAgIH0K fQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfaG9tZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNz X2hvbWUiKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfcmV0dXJuKFdpZGdldCB3LCBYRXZlbnQg KmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMp CnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVz XG4iLCAicHJvY2Vzc19yZXR1cm4iKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfdGFiKFdpZGdl dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51 bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn ZXQpdywgIiVzXG4iLCAicHJvY2Vzc190YWIiKTsKfQoKCnN0YXRpYyB2b2lkCnF1aWNrX2NvcHlf c2V0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywg Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4 dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicXVpY2tfY29weV9zZXQiKTsKfQoKCnN0YXRpYyB2 b2lkCnF1aWNrX2N1dF9zZXQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInF1aWNrX2N1dF9zZXQiKTsK fQoKCnN0YXRpYyB2b2lkCnJlZHJhd19kaXNwbGF5KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicmVk cmF3X2Rpc3BsYXkiKTsKICAgIERyYXcoKFhtVGV4dEZpZWxkV2lkZ2V0KXcpOwp9CgoKc3RhdGlj IHZvaWQKc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2Vjb25kYXJ5 X2FkanVzdCIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5X25vdGlmeShXaWRnZXQgdywgWEV2 ZW50ICpldiwKICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w YXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp dywgIiVzXG4iLCAic2Vjb25kYXJ5X25vdGlmeSIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5 X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJh bXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlY29uZGFyeV9zdGFydCIpOwp9CgoKc3Rh dGljIHZvaWQKc2VsZWN0X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg ICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIu Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FkanVz dCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2FsbChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg ICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4 dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIu Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FsbCIp OwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX2FuY2hvcikgPSAo KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAwOwogICAg KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9ICgoKFht VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKCgogICAgUHJpbWFy eVNlbGVjdGlvbkNvbXBsZXRlKHRmdywgZXYtPnhidXR0b24udGltZSk7CgogICAgRHJhdyh0Zncp Owp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2VuZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2Vu ZCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAog ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBY bVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1 ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlbGVjdF9z dGFydCIpOwoKICAgIGdyYWJfZm9jdXMoKFdpZGdldCl0ZncsIGV2LCBwYXJhbXMsIG51bV9wYXJh bXMpOwp9CgoKc3RhdGljIHZvaWQKc2VsZl9pbnNlcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg ICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewoKICAgIFht VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgY2hhciBidWZb MTI4XSwgKmJ1ZjI7CiAgICBLZXlTeW0ga2V5c3ltOwogICAgaW50IGxlbiwgc3RhdHVzOwoKICAg IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi c2VsZl9pbnNlcnQiKTsKCiAgICBsZW4gPSBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0Zncs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhLZXlQcmVzc2VkRXZlbnQgKilldiwgYnVm LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAma2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXMpOwoK CiAgICBidWYyID0gWHRNYWxsb2MobGVuKzEpOwogICAgaWYgKHN0YXR1cyA9PSAtMSkKICAgICAg ICBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0ZncsIChYS2V5UHJlc3NlZEV2ZW50ICopZXYs IGJ1ZjIsIGxlbiwgJmtleXN5bSwgJnN0YXR1cyk7CiAgICBlbHNlCiAgICAgICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9w IChsZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICop IG1lbWNweSAoYnVmMiwgYnVmLCBsZW4pIDogc3RybmNweSAoYnVmMiwgYnVmLCBsZW4pKSA6IHN0 cm5jcHkgKGJ1ZjIsIGJ1ZiwgbGVuKSkpOwoKICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4u Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl0ZncpKQogICAgewogICAgICAgIF9MdERlYnVn KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiWG1JbU1iTG9va3VwU3Ry aW5nID0+ICVkXG4iLCBsZW4pOwoKCiAgICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0v VGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRTdGF0dXMgJXNcbiIsIChzdGF0dXMgPT0gMSkgPyAi bm9uZSIgOiAoc3RhdHVzID09IDIpID8gImNoYXJzIiA6IChzdGF0dXMgPT0gNCkgPyAiYm90aCIg OiAoc3RhdHVzID09IDMpID8gImtleXN5bSIgOiAoc3RhdHVzID09IC0xKSA/ICJvdmVyZmxvdyIg OiAiPz8/PyIpOwoKCgoKCgogICAgICAgIGlmIChzdGF0dXMgPT0gNCB8fCBzdGF0dXMgPT0gMykK ICAgICAgICB7CiAgICAgICAgICAgIF9MdERlYnVnMCgiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi LCAoV2lkZ2V0KXRmdywgIlx0S2V5U3ltIDB4JVhcbiIsIGtleXN5bSk7CgogICAgICAgIH0KICAg ICAgICBpZiAobGVuID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBpOwoKICAgICAgICAg ICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRC dWZmZXIgIik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg KFdpZGdldCl0ZncsICIgJVgiLCAweEZGICYgYnVmW2ldKTsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAi XG4iKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxlbiA+IDApCiAgICB7CiAgICAgICAgaWYg KHN0YXR1cyA9PSA0IHx8IHN0YXR1cyA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgRG9JbnNl cnQodGZ3LCBldiwgYnVmMiwgbGVuKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApz ZXRfYW5jaG9yKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfYW5jaG9yIik7Cn0KCgpzdGF0aWMgdm9p ZApzZXRfaW5zZXJ0aW9uX3BvaW50KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAg ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfaW5z ZXJ0aW9uX3BvaW50Iik7Cn0KCgpzdGF0aWMgdm9pZApzZXRfc2VsZWN0aW9uX2hpbnQoV2lkZ2V0 IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu YWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs IChXaWRnZXQpdywgIiVzXG4iLCAic2V0X3NlbGVjdGlvbl9oaW50Iik7Cn0KCgpzdGF0aWMgdm9p ZAp0b2dnbGVfYWRkX21vZGUoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICBT dHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8u Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidG9nZ2xlX2FkZF9tb2Rl Iik7Cn0KCgpzdGF0aWMgdm9pZAp0cmF2ZXJzZV9ob21lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAog ICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg WG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVi dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJ0cmF2ZXJz ZV9ob21lIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNF X0hPTUUpOwp9CgoKc3RhdGljIHZvaWQKdHJhdmVyc2VfbmV4dChXaWRnZXQgdywgWEV2ZW50ICpl diwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidHJh dmVyc2VfbmV4dCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCgoV2lkZ2V0KXRmdywgWG1UUkFW RVJTRV9ORVhUKTsKfQoKCnN0YXRpYyB2b2lkCnRyYXZlcnNlX3ByZXYoV2lkZ2V0IHcsIFhFdmVu dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg InRyYXZlcnNlX3ByZXYiKTsKCiAgICBYbVByb2Nlc3NUcmF2ZXJzYWwoKFdpZGdldCl0ZncsIFht VFJBVkVSU0VfUFJFVik7Cn0KCgpzdGF0aWMgdm9pZAp1bmtpbGwoV2lkZ2V0IHcsIFhFdmVudCAq ZXYsCiAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidW5r aWxsIik7Cn0KCgpzdGF0aWMgdm9pZAp1bm1hcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4v Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInVubWFwIik7Cn0KCgoK CgoKZXh0ZXJuIFdpZGdldApYbUNyZWF0ZVRleHRGaWVsZChXaWRnZXQgcGFyZW50LCBjaGFyICpu YW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ0NvdW50KQp7CiAgICAgICAgV2lkZ2V0IHI7 CgogICAgICAgIF9YbU9iamVjdExvY2socGFyZW50KTsKICAgICAgICByID0gWHRDcmVhdGVXaWRn ZXQobmFtZSwgeG1UZXh0RmllbGRXaWRnZXRDbGFzcywgcGFyZW50LAogICAgICAgICAgICAgICAg ICAgICAgICAgIGFyZ2xpc3QsIGFyZ0NvdW50KTsKICAgICAgICBfWG1PYmplY3RVbmxvY2socGFy ZW50KTsKICAgICAgICByZXR1cm4gcjsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkQ2xlYXJT ZWxlY3Rpb24oV2lkZ2V0IGF3LCBUaW1lIHRpbWUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcg PSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CgogICAgaWYg KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1P YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFhtVGV4dEZpZWxkU2V0 U2VsZWN0aW9uKGF3LC0xLC0xLHRpbWUpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQpCb29s ZWFuClhtVGV4dEZpZWxkQ29weShXaWRnZXQgYXcsIFRpbWUgdGltZSkKewogICAgWG1UZXh0Rmll bGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIERpc3BsYXkgKmRweTsKICAg IFdpbmRvdyB3aW47CiAgICBpbnQgcjsKICAgIGxvbmcgaXRlbV9pZDsKICAgIFhtU3RyaW5nIGxi ID0gKCh2b2lkICopMCk7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1f ZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko YXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYg KCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlw ZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgo KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo T2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp b24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIp LT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklF TERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVjdFVubG9j ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkg fHwgKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0 KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykgPT0gMCkgewogICAgICAgIF9YbU9i amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgZHB5ID0gKCgoKE9i amVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg JiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0 KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aW4gPSAo KCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKGF3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKGF3 KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQ YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4 dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9PSAoKHZvaWQgKikwKSkgewogICAgICAgIF9YbU9i amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbGIgPSBYbVN0cmlu Z0NyZWF0ZUxvY2FsaXplZCgiWG1UZXh0RmllbGQiKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBi b2FyZFN0YXJ0Q29weShkcHksIHdpbiwgbGIsIHRpbWUsCiAgICAgICAgICAgICAgICAoKHZvaWQg KikwKSwgKCh2b2lkICopMCksICZpdGVtX2lkKSkgPT0gWG1DbGlwYm9hcmRMb2NrZWQpCiAgICAg ICAgOwoKICAgIFhtU3RyaW5nRnJlZShsYik7CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNj ZXNzKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAg IH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQsICJT VFJJTkciLAogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rp b25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pLAogICAgICAg ICAgICAgICAgMCwgKCh2b2lkICopMCkpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAgICA7 CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgKHZvaWQpIFhtQ2xp cGJvYXJkRW5kQ29weShkcHksIHdpbiwgaXRlbV9pZCk7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy ZEVuZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAg ICA7CgogICAgaWYgKHIgPT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgX1htT2JqZWN0 VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSB7CiAgICAgICAgX1htT2Jq ZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KfQoKCmV4dGVybiBCb29sZWFu ClhtVGV4dEZpZWxkQ3V0KFdpZGdldCBhdywgVGltZSB0aW1lKQp7CiAgICBYbVRleHRGaWVsZFdp ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgaW50IGZpcnN0LGxhc3Q7CgogICAg X1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VD bGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgo KFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5j b3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFht QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53 aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NF eHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFz ZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpf WG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9C SVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDAp IDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsK ICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9 PSAoKHZvaWQgKikwKSB8fCAhKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJs ZSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg fQoKICAgIGlmIChYbVRleHRGaWVsZENvcHkoYXcsIHRpbWUpID09IDApIHsKICAgICAgICBfWG1P YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0g KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRl eHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVu dCAqKTAsZmlyc3QsbGFzdCwoKHZvaWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX1VuY2hh bmdlZCk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAxOwp9CgoKZXh0ZXJu IGludApYbVRleHRGaWVsZEdldEJhc2VsaW5lKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGludCBiOwoKICAgIF9YbU9iamVj dExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRD bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz cy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFz c0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1ht R2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4 dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQ dHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAz KV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkK ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg fQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpOwogICAgX1htT2Jq ZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClht VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdp ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gcDsKCiAg ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw OwogICAgfQoKICAgIHAgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbik7CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRl cm4gQm9vbGVhbgpYbVRleHRGaWVsZEdldEVkaXRhYmxlKFdpZGdldCBhdykKewogICAgWG1UZXh0 RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xlYW4gYjsKCiAg ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw OwogICAgfQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxl KTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gYjsKfQoKCmV4dGVybiBYbVRl eHRQb3NpdGlvbgpYbVRleHRGaWVsZEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCBhdykKewog ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4 dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFz dFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgo KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53 aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09 IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp KSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJp Y0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0 KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxY bVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdz KVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQp ICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK ICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJl dHVybiBwOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClhtVGV4dEZpZWxkR2V0TGFzdFBvc2l0 aW9uKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdp ZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAg ICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp KS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdp ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl X2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVu c2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns YXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpf WG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAo KFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAg IF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcCA9ICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICBfWG1PYmpl Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxkR2V0 TWF4TGVuZ3RoKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRG aWVsZFdpZGdldClhdzsKICAgIGludCBsOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYg KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVj dFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbCA9ICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0aCk7CiAgICBfWG1PYmplY3RVbmxvY2soYXcp OwogICAgcmV0dXJuIGw7Cn0KCgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U2VsZWN0aW9u KFdpZGdldCBhdykKewogICAgY2hhciAqc3Vic3RyOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9 IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICgh KCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgo T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv bikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNv cmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xh c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu ZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRy ICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3Mp KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0 ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0 UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhU X0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RV bmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgoKICAgIGlmKCgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgIT0gKCh2b2lkICopMCkpIHsK ICAgICAgICBpbnQgbmNoYXJzID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25M ZW4pOwoKICAgICAgICBzdWJzdHIgPSBYdE1hbGxvYyhuY2hhcnMrMSk7CiAgICAgICAgKF9fZXh0 ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt PlNlbGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobmNoYXJzKSA/IChzdHJs ZW4gKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSA+PSAoKHNp emVfdCkgKG5jaGFycykpID8gKGNoYXIgKikgbWVtY3B5IChzdWJzdHIsICgoKFhtVGV4dEZpZWxk UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykgOiBzdHJuY3B5IChzdWJzdHIsICgo KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykpIDogc3RybmNw eSAoc3Vic3RyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCBuY2hh cnMpKSk7CiAgICAgICAgc3Vic3RyW25jaGFyc10gPSAnXDAnOwoKICAgICAgICBfWG1PYmplY3RV bmxvY2soYXcpOwogICAgICAgIHJldHVybiBzdWJzdHI7CiAgICB9CgogICAgX1htT2JqZWN0VW5s b2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4 dEZpZWxkR2V0U2VsZWN0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFhtVGV4dFBvc2l0aW9uICpsZWZ0LCBYbVRleHRQb3NpdGlvbiAqcmlnaHQp CnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBC b29sZWFuIGI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0 ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5v YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFht UW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0 KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6 ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0Ns YXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3 KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFt b3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVso KFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYg MHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg ICAgICByZXR1cm4gMDsKICAgIH0KCgoKICAgICpsZWZ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgICpyaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgYiA9IHctPnRleHQuaGFzX3ByaW1h cnk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIHdj aGFyX3QgKgpYbVRleHRGaWVsZEdldFNlbGVjdGlvbldjcyhXaWRnZXQgYXcpCnsKICAgIFhtVGV4 dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9j ayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChX aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y ZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz KSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4 dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0 KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRD bGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0Kiko JigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp ID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkg JiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAg ICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAg ICB9CgoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0K CgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCBhdykKewogICAgWG1U ZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGNoYXIgKnJldDsK CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx IDogMCkgOiAwKSkpIHsKICAgICAgICByZXQgPSBYdE1hbGxvYygxKTsKICAgICAgICAqcmV0ID0g J1wwJzsKCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gcmV0Owog ICAgfQoKICAgIHJldCA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu c3RyaW5nX2xlbmd0aCkgKyAxKTsKICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSkpICYmIF9fYnVpbHRp bl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n dGgpKSA/IChzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpKSAr IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19s ZW5ndGgpKSkgPyAoY2hhciAqKSBtZW1jcHkgKHJldCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl bmd0aCkpIDogc3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh bHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpIDog c3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgKCgo WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpKTsKICAgIHJldFso KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpXSA9ICdcMCc7Cgog ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXQ7Cn0KCgpleHRlcm4gd2NoYXJf dCAqClhtVGV4dEZpZWxkR2V0U3RyaW5nV2NzKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsK ICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENs YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz LmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u KSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgo V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0 ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf Y2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgo Kl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8 ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBf WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgog ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVy biBpbnQKWG1UZXh0RmllbGRHZXRTdWJzdHJpbmcoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBz dGFydCwgaW50IG51bV9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9z aXplLCBjaGFyICpidWZmZXIpCnsKICAgIGludCBsZW47CiAgICBpbnQgcmV0dmFsID0gMTsKICAg IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2Jq ZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4 dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRn ZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf Y2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNl Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQg KilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNs YXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1ht X2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklU KSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6 IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw OwogICAgfQoKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9j ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIGlmIChudW1fY2hhcnMgPiBidWZm ZXJfc2l6ZSkKICAgIHsKICAgICAgICBsZW4gPSBudW1fY2hhcnM7CiAgICB9CiAgICBlbHNlCiAg ICB7CiAgICAgICAgbGVuID0gYnVmZmVyX3NpemUgLSAxOwogICAgICAgIHJldHZhbCA9IDI7CiAg ICB9CgogICAgaWYgKHN0YXJ0ICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBsZW4gPSAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpIC0gc3RhcnQ7CiAgICB9CgogICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnZhbHVlKSArIHN0YXJ0KSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJs ZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQpICsgMSA+ PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5IChidWZmZXIsICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikgOiBzdHJuY3B5IChidWZm ZXIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikp IDogc3RybmNweSAoYnVmZmVyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVl KSArIHN0YXJ0LCBsZW4pKSk7CiAgICBidWZmZXJbbGVuXSA9ICdcMCc7CgogICAgX1htT2JqZWN0 VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXR2YWw7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxk R2V0U3Vic3RyaW5nV2NzKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gc3RhcnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqYnVmZmVyKQp7CiAgICBYbVRleHRGaWVsZFdp ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwog ICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xh c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu ZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9i amVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24p KSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChX aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y ZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRl bnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j bGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgq X1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwg KChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAg ICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgICBfWG1P YmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs ZEluc2VydChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIHBvcywgY2hhciAqc3RyKQp7CiAgICBY bVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9z aXRpb24gbGVuOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQ dHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+ b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChY bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBY bVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkg OiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWND bGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1R bW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylb KChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAm IDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcp OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoc3RyICYmICgobGVuID0gc3RybGVuKHN0 cikpID4gMCkgJiYgcG9zID49IDAgJiYgcG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+ dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp bV9wb3NfcmlnaHQpID0gcG9zOwogICAgICAgIFRleHRJbnNlcnQodywgc3RyLCBsZW4pOwogICAg ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK fQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCBhdywgWG1UZXh0UG9z aXRpb24gcG9zaXRpb24sIHdjaGFyX3QgKndjc3RyaW5nKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAg aWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0 ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkt PnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j bGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNp b25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz cy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1ht X2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY bVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBf WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBfWG1PYmplY3RV bmxvY2soYXcpOwp9CmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUGFzdGUoV2lkZ2V0IGF3KQp7 CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgRGlz cGxheSAqZHB5OwogICAgV2luZG93IHdpbjsKICAgIGludCByOwogICAgdW5zaWduZWQgbG9uZyBs ZW4sIG5ieXRlczsKICAgIGxvbmcgcHJpdmF0ZV9pZDsKICAgIGNoYXIgKmJ1ZjsKICAgIFhtVGV4 dFBvc2l0aW9uIHBvczsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9m YXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3 KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgo KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u KSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5l cmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmpl Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkp LFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+Zmxh Z3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJ VCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkp IHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoK ICAgIGRweSA9ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRp c3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs YXkpOwogICAgd2luID0gKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRv dyA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyk7CgogICAgaWYg KHdpbiA9PSAwKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4g MDsKICAgIH0KCgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJY bVRleHRGaWVsZFBhc3RlXG4iKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZFN0YXJ0UmV0 cmlldmUoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko YXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgWHRMYXN0 VGltZXN0YW1wUHJvY2Vzc2VkKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5z Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl ZW4tPmRpc3BsYXkpKSkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKICAgIGlmIChy ICE9IFhtQ2xpcGJvYXJkU3VjY2VzcykgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAg ICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIHdoaWxlICgociA9IFhtQ2xpcGJvYXJkSW5xdWly ZUxlbmd0aChkcHksIHdpbiwgIlNUUklORyIsICZsZW4pKQogICAgICAgICAgICAgICAgPT0gWG1D bGlwYm9hcmRMb2NrZWQpCiAgICAgICAgOwogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNz KSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0K CiAgICBidWYgPSBYdE1hbGxvYyhsZW4gKyAxKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy ZFJldHJpZXZlKGRweSwgd2luLCAiU1RSSU5HIiwKICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLCAm bmJ5dGVzLCAmcHJpdmF0ZV9pZCkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKCiAg ICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZyZWUoYnVmKTsKICAg ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgX0x0 RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYbVRleHRGaWVsZFBhc3RlOiBz aG91bGQgYmUgZ2V0dGluZyAlbGQgYnl0ZXNcbiIsIG5ieXRlcyk7CgoKICAgIHdoaWxlICgociA9 IFhtQ2xpcGJvYXJkRW5kUmV0cmlldmUoZHB5LCB3aW4pKSA9PSBYbUNsaXBib2FyZExvY2tlZCkK ICAgICAgICA7CiAgICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZy ZWUoYnVmKTsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwog ICAgfQoKCiAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w b3NpdGlvbik7CgogICAgaWYgKERvQ3Vyc29yTW92ZSh3LCAoKHZvaWQgKikwKSwgcG9zLCAxLCAx KSkKICAgIHsKICAgICAgICBEb0luc2VydCh3LCAoKHZvaWQgKikwKSwgKGNoYXIgKilidWYsIGxl bik7CiAgICB9CiAgICBYdEZyZWUoYnVmKTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICBy ZXR1cm4gMTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUG9zVG9YWShXaWRnZXQgYXcs IFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBQb3NpdGlvbiAqeCwgUG9zaXRpb24gKnkpCnsKICAg IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgcGl4 ZWw7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgo KChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu d2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlm KSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSkt Pm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1C YXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0 KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikp KSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVY VF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykp ID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg ICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+ICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAg ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwaXhl bCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKyAoaW50KV9YbVRleHRGX0Zv bnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh bHVlKSwgcG9zaXRpb24pOwogICAgaWYgKHBpeGVsIDwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5YRHJhdykgfHwgcGl4ZWwgPiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKSkKICAgIHsKICAg ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICp4 ID0gKFBvc2l0aW9uKXBpeGVsOwogICAgKnkgPSAoUG9zaXRpb24pKCgoWG1UZXh0RmllbGRQYXJ0 TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu c2lvbikpLT5ZT2Zmc2V0KTsKCiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7 Cn0KCgpleHRlcm4gQm9vbGVhbgpYbVRleHRGaWVsZFJlbW92ZShXaWRnZXQgYXcpCnsKICAgIFht VGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgZmlyc3Qs bGFzdDsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0g KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNl Q2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90 aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChY bUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NF eHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+ b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlm KSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1U RVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3 KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg ICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0 ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl bGVjdGlvblRleHQpID09ICgodm9pZCAqKTApIHx8ICEoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAg ICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihh dywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVudCAqKTAsZmlyc3QsbGFzdCwoKHZv aWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX0VuZE9mSW5zZXJ0KTsKCiAgICBfWG1PYmpl Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFJl cGxhY2UoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBmaXJzdCwKICAgICAgICAgICAgICAgICAg IFhtVGV4dFBvc2l0aW9uIGxhc3QsIGNoYXIgKnN0cikKewogICAgWG1UZXh0RmllbGRXaWRnZXQg dyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIGxlbjsKCiAgICBf WG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNs YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgo V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv cmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1C YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4 dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNl Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl dF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9Y bV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJ VCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkg OiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47 CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKICAg ICAgICBpZiAobGFzdCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl bmd0aCkpCiAgICAgICAgICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LnN0cmluZ19sZW5ndGgpOwogICAgICAgIGlmIChmaXJzdCA8PSBsYXN0KQogICAgICAgIHsKICAg ICAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oYXcsLTEsLTEsMEwpOwogICAgICAgICAg ICBNb2RpZnlUZXh0KHcsIChYRXZlbnQgKikwLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0 LCBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIHN0ciwgbGVuLAogICAgICAgICAgICAgICAg ICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICAgICAgfQogICAg fQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkUmVw bGFjZVdjcyhXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgWG1UZXh0UG9zaXRpb24gdG9fcG9zLCB3Y2hhcl90ICp3Y3N0cmluZykKewogICAg WG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmpl Y3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0 KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0 Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9Y bUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NF eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0 UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4g MyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkp CiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9 CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0 QWRkTW9kZShXaWRnZXQgYXcsIEJvb2xlYW4gc3RhdGUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0 IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBp ZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcyko KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl bnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0 KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+ cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns YXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lv blB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENs YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz LmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1f ZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFht VEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9Y bU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVu bG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdp ZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0g KFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEo KCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29y ZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l eHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIg KChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcyko KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl bnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQ dHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRf RklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmpl Y3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAocG9zID49IDAgJiYg cG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAg ICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp b24pID0gcG9zOwogICAgICAgICh2b2lkKV9YbUltU2VuZFNwb3QoKFdpZGdldClhdyk7CgogICAg ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK fQoKCnN0YXRpYyB2b2lkCl9YbVRleHRGaWVsZFNldEVkaXRhYmxlKFdpZGdldCB3LCBCb29sZWFu IGUpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAg ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlKQogICAgewogICAgICAgIEFyZyBhcmdzWzEwXTsK ICAgICAgICBpbnQgbmFyZ3M7CgogICAgICAgIFhtSW1SZWdpc3Rlcih3LCAwKTsKCiAgICAgICAg bmFyZ3MgPSAwOwogICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIq KSZYdFN0cmluZ3NbNTJdKSksIChhcmdzW25hcmdzXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgoKFdp ZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpKSApKTsKICAgICAgICBuYXJncysrOwog ICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIqKSZYdFN0cmluZ3Nb MjE0XSkpLCAoYXJnc1tuYXJnc10pLnZhbHVlID0gKFh0QXJnVmFsKSgoKChYbVByaW1pdGl2ZVdp ZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkpICkpOwogICAgICAgIG5hcmdzKys7CiAg ICAgICAgWG1JbVNldFZhbHVlcyh3LCBhcmdzLCBuYXJncyk7CiAgICB9CiAgICBlbHNlCiAgICB7 CiAgICAgICAgWG1JbVVucmVnaXN0ZXIodyk7CiAgICB9Cn0KCgpleHRlcm4gdm9pZApYbVRleHRG aWVsZFNldEVkaXRhYmxlKFdpZGdldCBhdywgQm9vbGVhbiBlZGl0YWJsZSkKewogICAgWG1UZXh0 RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2Nr KGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdp ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl X2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0 ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQq KSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENs YXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgm KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkg PyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAm ICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7 CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpICE9IGVkaXRhYmxl KQogICAgewogICAgICAgIF9YbVRleHRGaWVsZFNldEVkaXRhYmxlKGF3LCBlZGl0YWJsZSk7CiAg ICB9CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgPSBlZGl0 YWJsZTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs ZFNldEhpZ2hsaWdodChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBvc2l0 aW9uIHJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUhpZ2hsaWdodE1vZGUgbW9kZSkK ewogICAgICAgIGludCBpLCBqOwogICAgICAgIFhtSGlnaGxpZ2h0TW9kZSBlbTsKCgoKCgogICAg ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgICAg IF9YbU9iamVjdExvY2soYXcpOwogICAgICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx IDogMCkgOiAwKSkpIHsKICAgICAgICAgICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXItMTsgaSsrKQogICAgICAg ICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5s aXN0W2ldLnBvc2l0aW9uIDwgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm JiByaWdodCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0 W2krMV0ucG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIGVtID0gKCgoWG1UZXh0Rmll bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ubW9kZTsKCgogICAgICAgIGZv ciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1i ZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt PnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGxlZnQpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp c3RbaV0ubW9kZSA9IG1vZGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgbGVmdAog ICAgICAgICAgICAgICAgICAgICAgICAmJiBsZWZ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaSsxXS5wb3NpdGlvbikgewogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51 bWJlciA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11 bSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0 KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtICs9IDg7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp c3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRSZWFsbG9jKAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKikoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LmhpZ2hsaWdodCkubGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihfWG1IaWdobGlnaHRSZWMpICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4 dC5oaWdobGlnaHQpLm1heGltdW0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0 KS5udW1iZXIgKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0oKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyOyBqPmk7IGotLSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhp Z2hsaWdodCkubGlzdFtqXSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxp Z2h0KS5saXN0W2otMV07CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24gPSBsZWZ0OwogICAg ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs aWdodCkubGlzdFtpKzFdLm1vZGUgPSBtb2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K CgogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGln aGxpZ2h0KS5udW1iZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxk V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IHJpZ2h0KSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu aGlnaGxpZ2h0KS5saXN0W2ldLm1vZGUgPSBlbTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRp b24gPCByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAmJiByaWdodCA8ICgoKFhtVGV4dEZp ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu aGlnaGxpZ2h0KS5udW1iZXIgPT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdo bGlnaHQpLm1heGltdW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11bSArPSA4OwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu aGlnaGxpZ2h0KS5saXN0ID0gKF9YbUhpZ2hsaWdodFJlYyAqKVh0UmVhbGxvYygKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSAqICgoKFhtVGV4dEZpZWxkV2lk Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtKTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LmhpZ2hsaWdodCkubnVtYmVyICsrOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9 KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51bWJlcjsgaj5pOyBq LS0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rbal0gPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp LT50ZXh0LmhpZ2hsaWdodCkubGlzdFtqLTFdOwogICAgICAgICAgICAgICAgICAgICAgICAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u ID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ubW9kZSA9IGVtOwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk ClhtVGV4dEZpZWxkU2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlv biBwb3MpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7 CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChY bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNz RXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkg PyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNl Q2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0Kiko KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkg JiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9G SUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8g MSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAg cmV0dXJuOwogICAgfQoKICAgIGlmIChwb3MgPj0gMCAmJiBwb3MgPD0gKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPSBwb3M7CgogICAgICAgIE1h c3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4 dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0TWF4TGVuZ3RoKFdpZGdldCBhdywgaW50IG1heF9sZW5n dGgpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0 KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53 aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6 IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0 dXJuOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0 aCkgPSBtYXhfbGVuZ3RoOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0 LnN0cmluZ19sZW5ndGgpID4gbWF4X2xlbmd0aCkKICAgIHsKICAgICAgICAoKChYbVRleHRGaWVs ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpID0gbWF4X2xlbmd0aDsKICAgICAgICAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVttYXhfbGVuZ3RoXSA9ICdcMCc7 CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3Np dGlvbikgPiBtYXhfbGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX aWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gbWF4X2xlbmd0aDsKICAgICAgICB9 CgogICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2Nr KGF3KTsKfQoKCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldFNlbGVjdGlvbihXaWRnZXQgYXcs IFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBYbVRleHRQb3NpdGlvbiBlbmQsIFRpbWUgdGltZSkKewog ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xl YW4gZ2FpbiA9IDA7CiAgICBpbnQgbGVuOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v VGV4dEYuYyIsICgodm9pZCAqKTApLCAiWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24gJWQgJWRcbiIs IHN0YXJ0LCBlbmQpOwoKCiAgICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KGF3LCBzdGFydCwgZW5k KTsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgo KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53 aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xh c3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYp KSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+ b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJh c2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQq KSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkp KSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhU X0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkg PyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAg ICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSkK ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0K CgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAg IHsKICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0 KSk7CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9 ICgodm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4p ID0gMDsKCiAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0 cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KICAgIGlmIChlbmQgPiAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIGVuZCA9 ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9Cgog ICAgaWYgKHN0YXJ0ID49IGVuZCkKICAgIHsKCiAgICAgICAgaWYoIXctPnRleHQuaGFzX3ByaW1h cnkpCiAgICAgICAgewogICAgICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgICAg ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBYdERpc293blNlbGVjdGlvbihhdywgKChBdG9t KSAxKSwgdGltZSk7CiAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDA7CiAgICAgICAgaWYo KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgICAgICB7CiAgICAgICAgICAgIEN1 cnNvckVyYXNlKHcpOwogICAgICAgICAgICBEcmF3VGV4dCh3LCAoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnByaW1fcG9zX3JpZ2h0KSwgMCk7CiAgICAgICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAg ICAgfQoKCgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0 YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAt MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAo KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IC0xOwogICAg ICAgIHctPnRleHQucHJpbV90aW1lID0gdGltZTsKICAgIH0KICAgIGVsc2UKICAgIHsKCiAgICAg ICAgZ2FpbiA9ICh3LT50ZXh0Lmhhc19wcmltYXJ5ID09IDApOwoKCiAgICAgICAgX0x0RGVidWco Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYdE93blNlbGVjdGlvbihfLCBYQV9QUklN QVJZLCAuLi4pXG4iKTsKCgogICAgICAgIGlmIChYdE93blNlbGVjdGlvbihhdywgKChBdG9tKSAx KSwgdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRTZWxlY3Rpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3NlU2VsZWN0aW9uLCAoKHZvaWQgKikwKSkpCiAg ICAgICAgewoKICAgICAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDE7CiAgICAgICAgICAg ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBzdGFydDsK CgoKCiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf cmlnaHQpID0gZW5kOwogICAgICAgICAgICB3LT50ZXh0LnByaW1fdGltZSA9IHRpbWU7CiAgICAg ICAgICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAg ICAgICAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFht VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp KS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAgICAgICAg ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgPSBYdE1hbGxvYyhsZW4p OwogICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgm KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0pICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs ZW4pID8gKHN0cmxlbiAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygo KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldKSArIDEgPj0gKChz aXplX3QpIChsZW4pKSA/IChjaGFyICopIG1lbWNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp LT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp WygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pIDog c3RybmNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFht VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3 KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSA6IHN0cm5jcHkgKCgoKFhtVGV4dEZpZWxk UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50 ZXh0LnZhbHVlKVsoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp XSwgbGVuKSkpOwoKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCgoKFhtVGV4dEZpZWxk UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l eHRlbnNpb24pKS0+RWNobykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEN1cnNvckVy YXNlKHcpOwogICAgICAgICAgICAgICAgRHJhd1NpbmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICAg ICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgIHsKICAgICAgICAgICAgZ2FpbiA9IDA7CiAgICAgICAgfQoKCiAgICAgICAgaWYg KGdhaW4pCiAgICAgICAgewogICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IGNiczsKCiAg ICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0dBSU5fUFJJTUFSWTsKICAgICAgICAgICAgY2Jz LmV2ZW50ID0gKCh2b2lkICopMCk7CgogICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoYXcs ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2Fpbl9wcmltYXJ5X2NhbGxiYWNrKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYdFBvaW50ZXIpJmNicyk7CiAgICAgICAg fQogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZp ZWxkU2V0U3RyaW5nKFdpZGdldCBhdywgY2hhciAqc3RyKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gbGVuID0gMDsK CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0 LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx IDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICBy ZXR1cm47CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3Ry KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICAgICAg TW9kaWZ5VGV4dCh3LCAoWEV2ZW50ICopMCwKICAgICAgICAgICAgICAgICAgIDAsICgoKFhtVGV4 dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCksCiAgICAgICAgICAgICAgICAg ICBzdHIsIGxlbiwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9SZXNl dCk7CiAgICB9CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwp9CgoKZXh0ZXJuIHZvaWQKWG1UZXh0 RmllbGRTZXRTdHJpbmdXY3MoV2lkZ2V0IGF3LCB3Y2hhcl90ICp3Y192YWx1ZSkKewogICAgX1ht T2JqZWN0TG9jayhhdyk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk ClhtVGV4dEZpZWxkU2hvd1Bvc2l0aW9uKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zaXRp b24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0 X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0 KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53 aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6 IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0 dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gWG1UZXh0UG9z aXRpb24KWG1UZXh0RmllbGRYWVRvUG9zKFdpZGdldCBhdywgUG9zaXRpb24geCwgUG9zaXRpb24g eSkKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAg IFhtVGV4dFBvc2l0aW9uIHI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChf WG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAm JiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5 cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgo KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv bikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0cikt PmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVM RF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVu bG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgciA9IFRleHRQaXhlbFRvU2Vs ZWN0aW9uUG9zKHcsIHgpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByOwp9 CgoKc3RhdGljIHZvaWQKX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz ZXQsIFh0QXJnVmFsICp2YWx1ZSkKewogICAgKnZhbHVlID0gKFh0QXJnVmFsKVhtVGV4dEZpZWxk R2V0U3RyaW5nKHcpOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHcs ICJfWG1UZXh0RmllbGRFeHBvcnRWYWx1ZTogdmFsdWUgJyVzJ1xuIiwgKGNoYXIgKikqdmFsdWUp OwoKCn0KZXh0ZXJuIGludApfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdldCB3LCBjaGFyICpz LCBpbnQgbCkKewoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf bGlzdCktPnJlbmRpdGlvbnNbMF0tPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAg ICByZXR1cm4gWG1iVGV4dEVzY2FwZW1lbnQoKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdpZGdl dCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLCBzLCBsKTsKICAg IH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBYVGV4dFdpZHRoKCgoWG1UZXh0RmllbGRXaWRn ZXQpKHcpKS0+dGV4dC5mb250LCBzLCBsKTsKICAgIH0KCn0KCgoKc3RhdGljIGludApfWG1UZXh0 Rl9Gb250TWF4V2lkdGgoV2lkZ2V0IHcpCnsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBdLT50eXBlID09IFhtRk9OVF9JU19G T05UU0VUKSB7CiAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb287CiAgICAgICAgY2hhciAqKmJhcjsK ICAgICAgICBpbnQgaSwgbnVtLCBtYXg7CgogICAgICAgIG51bSA9IFhGb250c09mRm9udFNldCgo WEZvbnRTZXQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k aXRpb25zWzBdLT5mb250LCAmZm9vLCAmYmFyKTsKICAgICAgICBtYXggPSAwOwogICAgICAgIGZv ciAoaT0wOyBpPG51bTsgaSsrKXsKICAgICAgICAgICAgaWYgKGZvb1tpXS0+bWF4X2JvdW5kcy53 aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgIG1heCA9IGZvb1tpXS0+bWF4X2JvdW5kcy53aWR0 aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1heDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0 dXJuICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCktPm1heF9ib3VuZHMud2lk dGg7CiAgICB9Cgp9Cg==