From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21670 invoked by alias); 8 May 2003 01:26:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 21650 invoked by uid 71); 8 May 2003 01:26:00 -0000 Resent-Date: 8 May 2003 01:26:00 -0000 Resent-Message-ID: <20030508012600.21649.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, rth@redhat.com Resent-Reply-To: gcc-gnats@gcc.gnu.org, peter@yahoo-inc.com Received: (qmail 21476 invoked by uid 48); 8 May 2003 01:25:02 -0000 Message-Id: <20030508012502.21475.qmail@sources.redhat.com> Date: Thu, 08 May 2003 01:26:00 -0000 From: peter@yahoo-inc.com Reply-To: peter@yahoo-inc.com To: gcc-gnats@gcc.gnu.org Cc: rth@redhat.com X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: rth@redhat.com Subject: target/10673: Internal Compiler Error for x86-64 on freebsd libc vfprintf.c source X-SW-Source: 2003-05/txt/msg00531.txt.bz2 List-Id: >Number: 10673 >Category: target >Synopsis: Internal Compiler Error for x86-64 on freebsd libc vfprintf.c source >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Thu May 08 01:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Peter Wemm >Release: gcc version 3.3 20030505 (prerelease) >Organization: >Environment: Target is FreeBSD/amd64, bug appears both when cross compiling and when natively hosted. Native compiler passes 'make bootstrap' tests. >Description: gcc ICE's on src/lib/libc/stdio/vfprintf.c in the FreeBSD source tree. vp.c is a preprocessed copy of the file: hammer# gcc -c vp.c hammer# gcc -c -O vp.c vp.c: In function `__vfprintf': vp.c:2904: internal compiler error: in change_address_1, at emit-rtl.c:2017 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: Compile as above, with -O or higher. >Fix: Not-really-a-fix: remove -O. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="vp.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vp.c" X19hc21fXygiLmlkZW50XHRcIiIgIiRGcmVlQlNEOiBzcmMvbGliL2xpYmMvc3RkaW8vdmZwcmlu dGYuYyx2IDEuNTkgMjAwMy8wNC8xOSAyMzo1MzoxOSBkYXMgRXhwICQiICJcIiIpOwoKCgoKCgoK dHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWlu dDhfdDsKdHlwZWRlZiBzaG9ydCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191 aW50MTZfdDsKdHlwZWRlZiBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp bnQzMl90Owp0eXBlZGVmIGxvbmcgX19pbnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191 aW50NjRfdDsKCgoKCnR5cGVkZWYgX19pbnQzMl90IF9fY2xvY2tfdDsKdHlwZWRlZiBfX2ludDY0 X3QgX19jcml0aWNhbF90Owp0eXBlZGVmIGRvdWJsZSBfX2RvdWJsZV90Owp0eXBlZGVmIGRvdWJs ZSBfX2Zsb2F0X3Q7CnR5cGVkZWYgX19pbnQ2NF90IF9faW50ZnB0cl90Owp0eXBlZGVmIF9faW50 NjRfdCBfX2ludG1heF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2ludHB0cl90Owp0eXBlZGVmIF9f aW50MzJfdCBfX2ludF9mYXN0OF90Owp0eXBlZGVmIF9faW50MzJfdCBfX2ludF9mYXN0MTZfdDsK dHlwZWRlZiBfX2ludDMyX3QgX19pbnRfZmFzdDMyX3Q7CnR5cGVkZWYgX19pbnQ2NF90IF9faW50 X2Zhc3Q2NF90Owp0eXBlZGVmIF9faW50OF90IF9faW50X2xlYXN0OF90Owp0eXBlZGVmIF9faW50 MTZfdCBfX2ludF9sZWFzdDE2X3Q7CnR5cGVkZWYgX19pbnQzMl90IF9faW50X2xlYXN0MzJfdDsK dHlwZWRlZiBfX2ludDY0X3QgX19pbnRfbGVhc3Q2NF90Owp0eXBlZGVmIF9faW50NjRfdCBfX3B0 cmRpZmZfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19yZWdpc3Rlcl90Owp0eXBlZGVmIF9faW50NjRf dCBfX3NlZ3N6X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3NpemVfdDsKdHlwZWRlZiBfX2ludDY0 X3QgX19zc2l6ZV90Owp0eXBlZGVmIF9faW50NjRfdCBfX3RpbWVfdDsKdHlwZWRlZiBfX3VpbnQ2 NF90IF9fdWludGZwdHJfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fdWludG1heF90Owp0eXBlZGVm IF9fdWludDY0X3QgX191aW50cHRyX3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3VpbnRfZmFzdDhf dDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fdWludF9mYXN0MTZfdDsKdHlwZWRlZiBfX3VpbnQzMl90 IF9fdWludF9mYXN0MzJfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fdWludF9mYXN0NjRfdDsKdHlw ZWRlZiBfX3VpbnQ4X3QgX191aW50X2xlYXN0OF90Owp0eXBlZGVmIF9fdWludDE2X3QgX191aW50 X2xlYXN0MTZfdDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fdWludF9sZWFzdDMyX3Q7CnR5cGVkZWYg X191aW50NjRfdCBfX3VpbnRfbGVhc3Q2NF90Owp0eXBlZGVmIF9fdWludDY0X3QgX191X3JlZ2lz dGVyX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3ZtX29mZnNldF90Owp0eXBlZGVmIF9faW50NjRf dCBfX3ZtX29vZmZzZXRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fdm1fcGFkZHJfdDsKdHlwZWRl ZiBfX3VpbnQ2NF90IF9fdm1fcGluZGV4X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3ZtX3NpemVf dDsKCgoKCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX192YV9saXN0OwoKCnR5cGVkZWYgX192 YV9saXN0IF9fZ251Y192YV9saXN0OwoKCgoKdHlwZWRlZiBfX2ludDMyX3QgX19jbG9ja2lkX3Q7 CnR5cGVkZWYgX191aW50MzJfdCBfX2ZmbGFnc190Owp0eXBlZGVmIF9fdWludDY0X3QgX19mc2Js a2NudF90Owp0eXBlZGVmIF9fdWludDY0X3QgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdWludDMy X3QgX19naWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19pZF90Owp0eXBlZGVmIF9fdWludDMyX3Qg X19pbm9fdDsKdHlwZWRlZiBsb25nIF9fa2V5X3Q7CnR5cGVkZWYgX191aW50MTZfdCBfX21vZGVf dDsKdHlwZWRlZiBpbnQgX19ubF9pdGVtOwp0eXBlZGVmIF9fdWludDE2X3QgX19ubGlua190Owp0 eXBlZGVmIF9faW50NjRfdCBfX29mZl90Owp0eXBlZGVmIF9faW50MzJfdCBfX3BpZF90Owp0eXBl ZGVmIF9faW50NjRfdCBfX3JsaW1fdDsKdHlwZWRlZiBfX3VpbnQ4X3QgX19zYV9mYW1pbHlfdDsK dHlwZWRlZiBfX3VpbnQzMl90IF9fc29ja2xlbl90Owp0eXBlZGVmIGxvbmcgX19zdXNlY29uZHNf dDsKdHlwZWRlZiBfX2ludDMyX3QgX190aW1lcl90Owp0eXBlZGVmIF9fdWludDMyX3QgX191ZGV2 X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vz ZWNvbmRzX3Q7CnR5cGVkZWYgaW50IF9fY3RfcnVuZV90Owp0eXBlZGVmIF9fY3RfcnVuZV90IF9f cnVuZV90Owp0eXBlZGVmIF9fY3RfcnVuZV90IF9fd2NoYXJfdDsKdHlwZWRlZiBfX2N0X3J1bmVf dCBfX3dpbnRfdDsKdHlwZWRlZiBfX3VkZXZfdCBfX2Rldl90OwoKCgoKCgp0eXBlZGVmIHVuaW9u IHsKICAgICAgICBjaGFyIF9fbWJzdGF0ZThbMTI4XTsKICAgICAgICBfX2ludDY0X3QgX21ic3Rh dGVMOwp9IF9fbWJzdGF0ZV90OwpzdGF0aWMgX19pbmxpbmUgX191aW50NjRfdApfX2Jzd2FwNjQo X191aW50NjRfdCBfeCkKewoKICAgICAgICByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgX191aW50NjRfdCBfX1ggPSAoX3gpOyBfX2FzbSAoImJzd2FwICUwIiA6ICIrciIgKF9fWCkp OyBfX1g7IH0pKTsKfQoKc3RhdGljIF9faW5saW5lIF9fdWludDMyX3QKX19ic3dhcDMyKF9fdWlu dDMyX3QgX3gpCnsKCiAgICAgICAgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIF9f dWludDMyX3QgX19YID0gKF94KTsgX19hc20gKCJic3dhcCAlMCIgOiAiK3IiIChfX1gpKTsgX19Y OyB9KSk7Cn0KCnN0YXRpYyBfX2lubGluZSBfX3VpbnQxNl90Cl9fYnN3YXAxNihfX3VpbnQxNl90 IF94KQp7CgogICAgICAgIHJldHVybiAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBfX3VpbnQx Nl90IF9fWCA9IChfeCk7IF9fYXNtICgieGNoZ2IgJWgwLCAlYjAiIDogIitRIiAoX19YKSk7IF9f WDsgfSkpOwp9CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyB1X2xvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVm IHVuc2lnbmVkIGludCB1aW50OwoKCgoKCgp0eXBlZGVmIF9faW50OF90IGludDhfdDsKCgoKCnR5 cGVkZWYgX19pbnQxNl90IGludDE2X3Q7CgoKCgp0eXBlZGVmIF9faW50MzJfdCBpbnQzMl90OwoK CgoKdHlwZWRlZiBfX2ludDY0X3QgaW50NjRfdDsKCgoKCnR5cGVkZWYgX191aW50OF90IHVpbnQ4 X3Q7CgoKCgp0eXBlZGVmIF9fdWludDE2X3QgdWludDE2X3Q7CgoKCgp0eXBlZGVmIF9fdWludDMy X3QgdWludDMyX3Q7CgoKCgp0eXBlZGVmIF9fdWludDY0X3QgdWludDY0X3Q7CgoKCgp0eXBlZGVm IF9faW50cHRyX3QgaW50cHRyX3Q7CnR5cGVkZWYgX191aW50cHRyX3QgdWludHB0cl90OwoKCgp0 eXBlZGVmIF9fdWludDhfdCB1X2ludDhfdDsKdHlwZWRlZiBfX3VpbnQxNl90IHVfaW50MTZfdDsK dHlwZWRlZiBfX3VpbnQzMl90IHVfaW50MzJfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IHVfaW50NjRf dDsKCnR5cGVkZWYgX191aW50NjRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgcXVhZF90 Owp0eXBlZGVmIHF1YWRfdCAqIHFhZGRyX3Q7Cgp0eXBlZGVmIGNoYXIgKiBjYWRkcl90Owp0eXBl ZGVmIGNvbnN0IGNoYXIgKiBjX2NhZGRyX3Q7CnR5cGVkZWYgdm9sYXRpbGUgY2hhciAqdl9jYWRk cl90OwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgp0eXBlZGVmIF9fY2xvY2tpZF90 IGNsb2NraWRfdDsKCgoKdHlwZWRlZiBfX2NyaXRpY2FsX3QgY3JpdGljYWxfdDsKdHlwZWRlZiBf X2ludDY0X3QgZGFkZHJfdDsKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9f ZmZsYWdzX3QgZmZsYWdzX3Q7CgoKCnR5cGVkZWYgX191aW50MzJfdCBmaXhwdF90OwoKCnR5cGVk ZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250 X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fdWludDMyX3QgaW5f YWRkcl90OwoKCgoKdHlwZWRlZiBfX3VpbnQxNl90IGluX3BvcnRfdDsKCgoKCnR5cGVkZWYgX19p ZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgp0eXBlZGVmIF9fa2V5X3Qg a2V5X3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190 IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg cGlkX3Q7CgoKCnR5cGVkZWYgX19yZWdpc3Rlcl90IHJlZ2lzdGVyX3Q7CgoKdHlwZWRlZiBfX3Js aW1fdCBybGltX3Q7CgoKCnR5cGVkZWYgX19zZWdzel90IHNlZ3N6X3Q7CgoKdHlwZWRlZiBfX3Np emVfdCBzaXplX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBf X3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoK Cgp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwoKCgp0eXBlZGVmIF9fdV9yZWdpc3Rlcl90IHVf cmVnaXN0ZXJfdDsKdHlwZWRlZiBfX3VkZXZfdCB1ZGV2X3Q7CgoKdHlwZWRlZiBfX3VpZF90IHVp ZF90OwoKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3Zt X29mZnNldF90IHZtX29mZnNldF90Owp0eXBlZGVmIF9fdm1fb29mZnNldF90IHZtX29vZmZzZXRf dDsKdHlwZWRlZiBfX3ZtX3BhZGRyX3Qgdm1fcGFkZHJfdDsKdHlwZWRlZiBfX3ZtX3BpbmRleF90 IHZtX3BpbmRleF90Owp0eXBlZGVmIF9fdm1fc2l6ZV90IHZtX3NpemVfdDsKdHlwZWRlZiBzdHJ1 Y3QgX19zaWdzZXQgewogICAgICAgIF9fdWludDMyX3QgX19iaXRzWzRdOwp9IF9fc2lnc2V0X3Q7 CnN0cnVjdCB0aW1ldmFsIHsKICAgICAgICBsb25nIHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNf dCB0dl91c2VjOwp9OwpzdHJ1Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0dl9zZWM7CiAg ICAgICAgbG9uZyB0dl9uc2VjOwp9OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZmRfbWFzazsK CnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0 X3Q7CnR5cGVkZWYgc3RydWN0IGZkX3NldCB7CiAgICAgICAgX19mZF9tYXNrIF9fZmRzX2JpdHNb KCgoMTAyNFUpICsgKCgoc2l6ZW9mKF9fZmRfbWFzaykgKiA4KSkgLSAxKSkgLyAoKHNpemVvZihf X2ZkX21hc2spICogOCkpKV07Cn0gZmRfc2V0OwoKaW50IHBzZWxlY3QoaW50LCBmZF9zZXQgKiwg ZmRfc2V0ICosIGZkX3NldCAqLAogICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBjb25z dCBzaWdzZXRfdCAqKTsKCgoKaW50IF9zZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZk X3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgppbnQgZnRydW5jYXRlKGludCwgb2ZmX3Qp OwoKCgpvZmZfdCBsc2VlayhpbnQsIG9mZl90LCBpbnQpOwoKCgp2b2lkICogbW1hcCh2b2lkICos IHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpOwoKCgppbnQgdHJ1bmNhdGUoY29uc3QgY2hh ciAqLCBvZmZfdCk7CgoKCgppbnQgaXNhbG51bShpbnQpOwppbnQgaXNhbHBoYShpbnQpOwppbnQg aXNjbnRybChpbnQpOwppbnQgaXNkaWdpdChpbnQpOwppbnQgaXNncmFwaChpbnQpOwppbnQgaXNs b3dlcihpbnQpOwppbnQgaXNwcmludChpbnQpOwppbnQgaXNwdW5jdChpbnQpOwppbnQgaXNzcGFj ZShpbnQpOwppbnQgaXN1cHBlcihpbnQpOwppbnQgaXN4ZGlnaXQoaW50KTsKaW50IHRvbG93ZXIo aW50KTsKaW50IHRvdXBwZXIoaW50KTsKCgppbnQgX3RvbG93ZXIoaW50KTsKaW50IF90b3VwcGVy KGludCk7CmludCBpc2FzY2lpKGludCk7CmludCB0b2FzY2lpKGludCk7CgoKCmludCBkaWdpdHRv aW50KGludCk7CmludCBpc2JsYW5rKGludCk7CmludCBpc2hleG51bWJlcihpbnQpOwppbnQgaXNp ZGVvZ3JhbShpbnQpOwppbnQgaXNudW1iZXIoaW50KTsKaW50IGlzcGhvbm9ncmFtKGludCk7Cmlu dCBpc3J1bmUoaW50KTsKaW50IGlzc3BlY2lhbChpbnQpOwoKCgp1bnNpZ25lZCBsb25nIF9fX3J1 bmV0eXBlKF9fY3RfcnVuZV90KTsKX19jdF9ydW5lX3QgX19fdG9sb3dlcihfX2N0X3J1bmVfdCk7 Cl9fY3RfcnVuZV90IF9fX3RvdXBwZXIoX19jdF9ydW5lX3QpOwoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgICAgIF9fcnVuZV90IG1pbjsKICAgICAgICBfX3J1bmVfdCBtYXg7CiAgICAgICAgX19ydW5l X3QgbWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgKnR5cGVzOwp9IF9SdW5lRW50cnk7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG5yYW5nZXM7CiAgICAgICAgX1J1bmVFbnRyeSAqcmFu Z2VzOwp9IF9SdW5lUmFuZ2U7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgY2hhciBtYWdpY1s4 XTsKICAgICAgICBjaGFyIGVuY29kaW5nWzMyXTsKCiAgICAgICAgX19ydW5lX3QgKCpzZ2V0cnVu ZSkoY29uc3QgY2hhciAqLCBfX3NpemVfdCwgY2hhciBjb25zdCAqKik7CiAgICAgICAgaW50ICgq c3B1dHJ1bmUpKF9fcnVuZV90LCBjaGFyICosIF9fc2l6ZV90LCBjaGFyICoqKTsKICAgICAgICBf X3J1bmVfdCBpbnZhbGlkX3J1bmU7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgcnVuZXR5cGVbKDEg PDw4ICldOwogICAgICAgIF9fcnVuZV90IG1hcGxvd2VyWygxIDw8OCApXTsKICAgICAgICBfX3J1 bmVfdCBtYXB1cHBlclsoMSA8PDggKV07CgoKCgoKCiAgICAgICAgX1J1bmVSYW5nZSBydW5ldHlw ZV9leHQ7CiAgICAgICAgX1J1bmVSYW5nZSBtYXBsb3dlcl9leHQ7CiAgICAgICAgX1J1bmVSYW5n ZSBtYXB1cHBlcl9leHQ7CgogICAgICAgIHZvaWQgKnZhcmlhYmxlOwogICAgICAgIGludCB2YXJp YWJsZV9sZW47Cn0gX1J1bmVMb2NhbGU7CgoKCmV4dGVybiBfUnVuZUxvY2FsZSBfRGVmYXVsdFJ1 bmVMb2NhbGU7CmV4dGVybiBfUnVuZUxvY2FsZSAqX0N1cnJlbnRSdW5lTG9jYWxlOwoKc3RhdGlj IF9faW5saW5lIGludApfX21hc2tydW5lKF9fY3RfcnVuZV90IF9jLCB1bnNpZ25lZCBsb25nIF9m KQp7CiAgICAgICAgcmV0dXJuICgoX2MgPCAwIHx8IF9jID49ICgxIDw8OCApKSA/IF9fX3J1bmV0 eXBlKF9jKSA6CiAgICAgICAgICAgICAgICBfQ3VycmVudFJ1bmVMb2NhbGUtPnJ1bmV0eXBlW19j XSkgJiBfZjsKfQoKc3RhdGljIF9faW5saW5lIGludApfX2lzdHlwZShfX2N0X3J1bmVfdCBfYywg dW5zaWduZWQgbG9uZyBfZikKewogICAgICAgIHJldHVybiAoISFfX21hc2tydW5lKF9jLCBfZikp Owp9CgpzdGF0aWMgX19pbmxpbmUgaW50Cl9faXNjdHlwZShfX2N0X3J1bmVfdCBfYywgdW5zaWdu ZWQgbG9uZyBfZikKewogICAgICAgIHJldHVybiAoX2MgPCAwIHx8IF9jID49ICgxIDw8OCApKSA/ IDAgOgogICAgICAgICAgICAgICAhIShfRGVmYXVsdFJ1bmVMb2NhbGUucnVuZXR5cGVbX2NdICYg X2YpOwp9CgpzdGF0aWMgX19pbmxpbmUgX19jdF9ydW5lX3QKX190b3VwcGVyKF9fY3RfcnVuZV90 IF9jKQp7CiAgICAgICAgcmV0dXJuIChfYyA8IDAgfHwgX2MgPj0gKDEgPDw4ICkpID8gX19fdG91 cHBlcihfYykgOgogICAgICAgICAgICAgICBfQ3VycmVudFJ1bmVMb2NhbGUtPm1hcHVwcGVyW19j XTsKfQoKc3RhdGljIF9faW5saW5lIF9fY3RfcnVuZV90Cl9fdG9sb3dlcihfX2N0X3J1bmVfdCBf YykKewogICAgICAgIHJldHVybiAoX2MgPCAwIHx8IF9jID49ICgxIDw8OCApKSA/IF9fX3RvbG93 ZXIoX2MpIDoKICAgICAgICAgICAgICAgX0N1cnJlbnRSdW5lTG9jYWxlLT5tYXBsb3dlcltfY107 Cn0KCgpzdHJ1Y3QgbGNvbnYgewogICAgICAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgICAgICAg Y2hhciAqdGhvdXNhbmRzX3NlcDsKICAgICAgICBjaGFyICpncm91cGluZzsKICAgICAgICBjaGFy ICppbnRfY3Vycl9zeW1ib2w7CiAgICAgICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogICAgICAg IGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogICAgICAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2Vw OwogICAgICAgIGNoYXIgKm1vbl9ncm91cGluZzsKICAgICAgICBjaGFyICpwb3NpdGl2ZV9zaWdu OwogICAgICAgIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgICAgICAgY2hhciBpbnRfZnJhY19kaWdp dHM7CiAgICAgICAgY2hhciBmcmFjX2RpZ2l0czsKICAgICAgICBjaGFyIHBfY3NfcHJlY2VkZXM7 CiAgICAgICAgY2hhciBwX3NlcF9ieV9zcGFjZTsKICAgICAgICBjaGFyIG5fY3NfcHJlY2VkZXM7 CiAgICAgICAgY2hhciBuX3NlcF9ieV9zcGFjZTsKICAgICAgICBjaGFyIHBfc2lnbl9wb3NuOwog ICAgICAgIGNoYXIgbl9zaWduX3Bvc247CiAgICAgICAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsK ICAgICAgICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwogICAgICAgIGNoYXIgaW50X3Bfc2VwX2J5 X3NwYWNlOwogICAgICAgIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwogICAgICAgIGNoYXIgaW50 X3Bfc2lnbl9wb3NuOwogICAgICAgIGNoYXIgaW50X25fc2lnbl9wb3NuOwp9OwoKc3RydWN0IGxj b252ICpsb2NhbGVjb252KHZvaWQpOwpjaGFyICpzZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyICop OwoKdHlwZWRlZiBfX3B0cmRpZmZfdCBwdHJkaWZmX3Q7CgoKCnR5cGVkZWYgX19ydW5lX3QgcnVu ZV90Owp0eXBlZGVmIF9fd2NoYXJfdCB3Y2hhcl90Owp0eXBlZGVmIF9faW50X2xlYXN0OF90IGlu dF9sZWFzdDhfdDsKdHlwZWRlZiBfX2ludF9sZWFzdDE2X3QgaW50X2xlYXN0MTZfdDsKdHlwZWRl ZiBfX2ludF9sZWFzdDMyX3QgaW50X2xlYXN0MzJfdDsKdHlwZWRlZiBfX2ludF9sZWFzdDY0X3Qg aW50X2xlYXN0NjRfdDsKCnR5cGVkZWYgX191aW50X2xlYXN0OF90IHVpbnRfbGVhc3Q4X3Q7CnR5 cGVkZWYgX191aW50X2xlYXN0MTZfdCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiBfX3VpbnRfbGVh c3QzMl90IHVpbnRfbGVhc3QzMl90Owp0eXBlZGVmIF9fdWludF9sZWFzdDY0X3QgdWludF9sZWFz dDY0X3Q7Cgp0eXBlZGVmIF9faW50X2Zhc3Q4X3QgaW50X2Zhc3Q4X3Q7CnR5cGVkZWYgX19pbnRf ZmFzdDE2X3QgaW50X2Zhc3QxNl90Owp0eXBlZGVmIF9faW50X2Zhc3QzMl90IGludF9mYXN0MzJf dDsKdHlwZWRlZiBfX2ludF9mYXN0NjRfdCBpbnRfZmFzdDY0X3Q7Cgp0eXBlZGVmIF9fdWludF9m YXN0OF90IHVpbnRfZmFzdDhfdDsKdHlwZWRlZiBfX3VpbnRfZmFzdDE2X3QgdWludF9mYXN0MTZf dDsKdHlwZWRlZiBfX3VpbnRfZmFzdDMyX3QgdWludF9mYXN0MzJfdDsKdHlwZWRlZiBfX3VpbnRf ZmFzdDY0X3QgdWludF9mYXN0NjRfdDsKCnR5cGVkZWYgX19pbnRtYXhfdCBpbnRtYXhfdDsKdHlw ZWRlZiBfX3VpbnRtYXhfdCB1aW50bWF4X3Q7CnR5cGVkZWYgX19vZmZfdCBmcG9zX3Q7CnR5cGVk ZWYgX192YV9saXN0IHZhX2xpc3Q7CnN0cnVjdCBfX3NidWYgewogICAgICAgIHVuc2lnbmVkIGNo YXIgKl9iYXNlOwogICAgICAgIGludCBfc2l6ZTsKfTsKCgpzdHJ1Y3QgX19zRklMRVg7CnR5cGVk ZWYgc3RydWN0IF9fc0ZJTEUgewogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9wOwogICAgICAgIGlu dCBfcjsKICAgICAgICBpbnQgX3c7CiAgICAgICAgc2hvcnQgX2ZsYWdzOwogICAgICAgIHNob3J0 IF9maWxlOwogICAgICAgIHN0cnVjdCBfX3NidWYgX2JmOwogICAgICAgIGludCBfbGJmc2l6ZTsK CgogICAgICAgIHZvaWQgKl9jb29raWU7CiAgICAgICAgaW50ICgqX2Nsb3NlKSh2b2lkICopOwog ICAgICAgIGludCAoKl9yZWFkKSh2b2lkICosIGNoYXIgKiwgaW50KTsKICAgICAgICBmcG9zX3Qg KCpfc2Vlaykodm9pZCAqLCBmcG9zX3QsIGludCk7CiAgICAgICAgaW50ICgqX3dyaXRlKSh2b2lk ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKCgogICAgICAgIHN0cnVjdCBfX3NidWYgX3ViOwogICAg ICAgIHN0cnVjdCBfX3NGSUxFWCAqX2V4dHJhOwogICAgICAgIGludCBfdXI7CgoKICAgICAgICB1 bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CgoK ICAgICAgICBzdHJ1Y3QgX19zYnVmIF9sYjsKCgogICAgICAgIGludCBfYmxrc2l6ZTsKICAgICAg ICBmcG9zX3QgX29mZnNldDsKfSBGSUxFOwoKCmV4dGVybiBGSUxFICpfX3N0ZGlucDsKZXh0ZXJu IEZJTEUgKl9fc3Rkb3V0cDsKZXh0ZXJuIEZJTEUgKl9fc3RkZXJycDsKCgoKCgp2b2lkIGNsZWFy ZXJyKEZJTEUgKik7CmludCBmY2xvc2UoRklMRSAqKTsKaW50IGZlb2YoRklMRSAqKTsKaW50IGZl cnJvcihGSUxFICopOwppbnQgZmZsdXNoKEZJTEUgKik7CmludCBmZ2V0YyhGSUxFICopOwppbnQg ZmdldHBvcyhGSUxFICogLCBmcG9zX3QgKiApOwpjaGFyICpmZ2V0cyhjaGFyICogLCBpbnQsIEZJ TEUgKiApOwpGSUxFICpmb3Blbihjb25zdCBjaGFyICogLCBjb25zdCBjaGFyICogKTsKaW50IGZw cmludGYoRklMRSAqICwgY29uc3QgY2hhciAqICwgLi4uKTsKaW50IGZwdXRjKGludCwgRklMRSAq KTsKaW50IGZwdXRzKGNvbnN0IGNoYXIgKiAsIEZJTEUgKiApOwpzaXplX3QgZnJlYWQodm9pZCAq ICwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKiApOwpGSUxFICpmcmVvcGVuKGNvbnN0IGNoYXIgKiAs IGNvbnN0IGNoYXIgKiAsIEZJTEUgKiApOwppbnQgZnNjYW5mKEZJTEUgKiAsIGNvbnN0IGNoYXIg KiAsIC4uLik7CmludCBmc2VlayhGSUxFICosIGxvbmcsIGludCk7CmludCBmc2V0cG9zKEZJTEUg KiwgY29uc3QgZnBvc190ICopOwpsb25nIGZ0ZWxsKEZJTEUgKik7CnNpemVfdCBmd3JpdGUoY29u c3Qgdm9pZCAqICwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKiApOwppbnQgZ2V0YyhGSUxFICopOwpp bnQgZ2V0Y2hhcih2b2lkKTsKY2hhciAqZ2V0cyhjaGFyICopOwp2b2lkIHBlcnJvcihjb25zdCBj aGFyICopOwppbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiAsIC4uLik7CmludCBwdXRjKGludCwgRklM RSAqKTsKaW50IHB1dGNoYXIoaW50KTsKaW50IHB1dHMoY29uc3QgY2hhciAqKTsKaW50IHJlbW92 ZShjb25zdCBjaGFyICopOwppbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK dm9pZCByZXdpbmQoRklMRSAqKTsKaW50IHNjYW5mKGNvbnN0IGNoYXIgKiAsIC4uLik7CnZvaWQg c2V0YnVmKEZJTEUgKiAsIGNoYXIgKiApOwppbnQgc2V0dmJ1ZihGSUxFICogLCBjaGFyICogLCBp bnQsIHNpemVfdCk7CmludCBzcHJpbnRmKGNoYXIgKiAsIGNvbnN0IGNoYXIgKiAsIC4uLik7Cmlu dCBzc2NhbmYoY29uc3QgY2hhciAqICwgY29uc3QgY2hhciAqICwgLi4uKTsKRklMRSAqdG1wZmls ZSh2b2lkKTsKY2hhciAqdG1wbmFtKGNoYXIgKik7CmludCB1bmdldGMoaW50LCBGSUxFICopOwpp bnQgdmZwcmludGYoRklMRSAqICwgY29uc3QgY2hhciAqICwKICAgICAgICAgICAgX192YV9saXN0 KTsKaW50IHZwcmludGYoY29uc3QgY2hhciAqICwgX192YV9saXN0KTsKaW50IHZzcHJpbnRmKGNo YXIgKiAsIGNvbnN0IGNoYXIgKiAsCiAgICAgICAgICAgIF9fdmFfbGlzdCk7CgoKaW50IHNucHJp bnRmKGNoYXIgKiAsIHNpemVfdCwgY29uc3QgY2hhciAqICwKICAgICAgICAgICAgLi4uKSBfX2F0 dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwppbnQgdmZzY2FuZihG SUxFICogLCBjb25zdCBjaGFyICogLCBfX3ZhX2xpc3QpCiAgICAgICAgICAgIF9fYXR0cmlidXRl X18oKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKaW50IHZzY2FuZihjb25zdCBjaGFy ICogLCBfX3ZhX2xpc3QpIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwg MCkpKTsKaW50IHZzbnByaW50ZihjaGFyICogLCBzaXplX3QsIGNvbnN0IGNoYXIgKiAsCiAgICAg ICAgICAgIF9fdmFfbGlzdCkgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywg MywgMCkpKTsKaW50IHZzc2NhbmYoY29uc3QgY2hhciAqICwgY29uc3QgY2hhciAqICwgX192YV9s aXN0KQogICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIs IDApKSk7CmNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hh ciAqKTsKaW50IGZpbGVubyhGSUxFICopOwoKCgppbnQgcGNsb3NlKEZJTEUgKik7CkZJTEUgKnBv cGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgoKaW50IGZ0cnlsb2NrZmlsZShGSUxF ICopOwp2b2lkIF9mbG9ja2ZpbGUoRklMRSAqKTsKdm9pZCBfZnVubG9ja2ZpbGUoRklMRSAqKTsK CgoKCgppbnQgZ2V0Y191bmxvY2tlZChGSUxFICopOwppbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lk KTsKaW50IHB1dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOwppbnQgcHV0Y2hhcl91bmxvY2tlZChp bnQpOwoKCnZvaWQgY2xlYXJlcnJfdW5sb2NrZWQoRklMRSAqKTsKaW50IGZlb2ZfdW5sb2NrZWQo RklMRSAqKTsKaW50IGZlcnJvcl91bmxvY2tlZChGSUxFICopOwppbnQgZmlsZW5vX3VubG9ja2Vk KEZJTEUgKik7CgoKCmludCBmc2Vla28oRklMRSAqLCBfX29mZl90LCBpbnQpOwpfX29mZl90IGZ0 ZWxsbyhGSUxFICopOwoKCgppbnQgZ2V0dyhGSUxFICopOwppbnQgcHV0dyhpbnQsIEZJTEUgKik7 CgoKCmNoYXIgKnRlbXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoKCgoKCgppbnQg YXNwcmludGYoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18oKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmNoYXIgKmN0ZXJtaWRfcihjaGFyICopOwpjaGFy ICpmZ2V0bG4oRklMRSAqLCBzaXplX3QgKik7CgoKCgoKY29uc3QgY2hhciAqZm10Y2hlY2soY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X2FyZ19fKDIp KSk7CmludCBmcHVyZ2UoRklMRSAqKTsKdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIGlu dCk7CmludCBzZXRsaW5lYnVmKEZJTEUgKik7CmludCB2YXNwcmludGYoY2hhciAqKiwgY29uc3Qg Y2hhciAqLCBfX3ZhX2xpc3QpCiAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBjb25zdCBpbnQgc3lzX25lcnI7CmV4 dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtdOwoKCgoKRklMRSAqZnVub3Blbihj b25zdCB2b2lkICosCiAgICAgICAgICAgIGludCAoKikodm9pZCAqLCBjaGFyICosIGludCksCiAg ICAgICAgICAgIGludCAoKikodm9pZCAqLCBjb25zdCBjaGFyICosIGludCksCiAgICAgICAgICAg IGZwb3NfdCAoKikodm9pZCAqLCBmcG9zX3QsIGludCksCiAgICAgICAgICAgIGludCAoKikodm9p ZCAqKSk7CmludCBfX3NyZ2V0KEZJTEUgKik7CmludCBfX3N3YnVmKGludCwgRklMRSAqKTsKCgoK CgoKCnN0YXRpYyBfX2lubGluZSBpbnQgX19zcHV0YyhpbnQgX2MsIEZJTEUgKl9wKSB7CiAgICAg ICAgaWYgKC0tX3AtPl93ID49IDAgfHwgKF9wLT5fdyA+PSBfcC0+X2xiZnNpemUgJiYgKGNoYXIp X2MgIT0gJ1xuJykpCiAgICAgICAgICAgICAgICByZXR1cm4gKCpfcC0+X3ArKyA9IF9jKTsKICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gKF9fc3didWYoX2MsIF9wKSk7Cn0KCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgcXVvdDsKICAgICAgICBpbnQgcmVtOwp9IGRpdl90 OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcgcXVvdDsKICAgICAgICBsb25nIHJlbTsK fSBsZGl2X3Q7CmV4dGVybiBpbnQgX19tYl9jdXJfbWF4OwoKCgp2b2lkIGFib3J0KHZvaWQpIF9f YXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOwppbnQgYWJzKGludCkgX19hdHRyaWJ1dGVfXygo X19jb25zdF9fKSk7CmludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOwpkb3VibGUgYXRvZihjb25z dCBjaGFyICopOwppbnQgYXRvaShjb25zdCBjaGFyICopOwpsb25nIGF0b2woY29uc3QgY2hhciAq KTsKdm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAogICAg ICAgICAgICBzaXplX3QsIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKdm9p ZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKZGl2X3QgZGl2KGludCwgaW50KSBfX2F0dHJpYnV0 ZV9fKChfX2NvbnN0X18pKTsKdm9pZCBleGl0KGludCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVy bl9fKSk7CnZvaWQgZnJlZSh2b2lkICopOwpjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKbG9u ZyBsYWJzKGxvbmcpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpsZGl2X3QgbGRpdihsb25n LCBsb25nKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKdm9pZCAqbWFsbG9jKHNpemVfdCk7 CmludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBtYnN0b3djcyh3Y2hhcl90 ICogLCBjb25zdCBjaGFyICogLCBzaXplX3QpOwppbnQgbWJ0b3djKHdjaGFyX3QgKiAsIGNvbnN0 IGNoYXIgKiAsIHNpemVfdCk7CnZvaWQgcXNvcnQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAg ICAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwppbnQgcmFuZCh2 b2lkKTsKdm9pZCAqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CnZvaWQgc3JhbmQodW5zaWduZWQp Owpkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiAsIGNoYXIgKiogKTsKZmxvYXQgc3RydG9mKGNv bnN0IGNoYXIgKiAsIGNoYXIgKiogKTsKbG9uZyBzdHJ0b2woY29uc3QgY2hhciAqICwgY2hhciAq KiAsIGludCk7CmxvbmcgZG91YmxlCiAgICAgICAgIHN0cnRvbGQoY29uc3QgY2hhciAqICwgY2hh ciAqKiApOwp1bnNpZ25lZCBsb25nCiAgICAgICAgIHN0cnRvdWwoY29uc3QgY2hhciAqICwgY2hh ciAqKiAsIGludCk7CmludCBzeXN0ZW0oY29uc3QgY2hhciAqKTsKaW50IHdjdG9tYihjaGFyICos IHdjaGFyX3QpOwpzaXplX3Qgd2NzdG9tYnMoY2hhciAqICwgY29uc3Qgd2NoYXJfdCAqICwgc2l6 ZV90KTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcgbG9uZyBxdW90OwogICAgICAgIGxv bmcgbG9uZyByZW07Cn0gbGxkaXZfdDsKCgpsb25nIGxvbmcKICAgICAgICAgYXRvbGwoY29uc3Qg Y2hhciAqKTsKCmxvbmcgbG9uZwogICAgICAgICBsbGFicyhsb25nIGxvbmcpIF9fYXR0cmlidXRl X18oKF9fY29uc3RfXykpOwoKbGxkaXZfdCBsbGRpdihsb25nIGxvbmcsIGxvbmcgbG9uZykgX19h dHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cgpsb25nIGxvbmcKICAgICAgICAgc3RydG9sbChjb25z dCBjaGFyICogLCBjaGFyICoqICwgaW50KTsKCnVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICBz dHJ0b3VsbChjb25zdCBjaGFyICogLCBjaGFyICoqICwgaW50KTsKCgp2b2lkIF9FeGl0KGludCkg X19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CmludCByYW5kX3IodW5zaWduZWQgKik7Cmlu dCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CnZvaWQgdW5zZXRlbnYo Y29uc3QgY2hhciAqKTsKZG91YmxlIGRyYW5kNDgodm9pZCk7Cgpkb3VibGUgZXJhbmQ0OCh1bnNp Z25lZCBzaG9ydFszXSk7CgoKCmludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwg Y2hhciAqKik7CgoKaW50IGdyYW50cHQoaW50KTsKY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkIGxv bmcgLCBjaGFyICosIGxvbmcpOwpsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOwoKdm9p ZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0WzddKTsKbG9uZyBscmFuZDQ4KHZvaWQpOwoKaW50IG1r c3RlbXAoY2hhciAqKTsKCgoKY2hhciAqbWt0ZW1wKGNoYXIgKik7CgoKbG9uZyBtcmFuZDQ4KHZv aWQpOwpsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOwppbnQgcG9zaXhfb3BlbnB0KGlu dCk7CmNoYXIgKnB0c25hbWUoaW50KTsKaW50IHB1dGVudihjb25zdCBjaGFyICopOwpsb25nIHJh bmRvbSh2b2lkKTsKY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyIHJlc29sdmVkX3Bh dGhbXSk7CnVuc2lnbmVkIHNob3J0CiAgICAgICAgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7 CgppbnQgc2V0a2V5KGNvbnN0IGNoYXIgKik7CgoKY2hhciAqc2V0c3RhdGUoIGNoYXIgKik7CnZv aWQgc3JhbmQ0OChsb25nKTsKdm9pZCBzcmFuZG9tKHVuc2lnbmVkIGxvbmcpOwppbnQgdW5sb2Nr cHQoaW50KTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKl9tYWxsb2Nfb3B0aW9uczsKZXh0ZXJuIHZv aWQgKCpfbWFsbG9jX21lc3NhZ2UpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7Cgp2b2lkICphbGxvY2Eoc2l6ZV90KTsK X191aW50MzJfdAogICAgICAgICBhcmM0cmFuZG9tKHZvaWQpOwp2b2lkIGFyYzRyYW5kb21fYWRk cmFuZG9tKHVuc2lnbmVkIGNoYXIgKmRhdCwgaW50IGRhdGxlbik7CnZvaWQgYXJjNHJhbmRvbV9z dGlyKHZvaWQpOwpjaGFyICpnZXRic2l6ZShpbnQgKiwgbG9uZyAqKTsKCmNoYXIgKmNnZXRjYXAo Y2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CmludCBjZ2V0Y2xvc2Uodm9pZCk7CmludCBjZ2V0 ZW50KGNoYXIgKiosIGNoYXIgKiosIGNvbnN0IGNoYXIgKik7CmludCBjZ2V0Zmlyc3QoY2hhciAq KiwgY2hhciAqKik7CmludCBjZ2V0bWF0Y2goY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpp bnQgY2dldG5leHQoY2hhciAqKiwgY2hhciAqKik7CmludCBjZ2V0bnVtKGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBsb25nICopOwppbnQgY2dldHNldChjb25zdCBjaGFyICopOwppbnQgY2dldHN0cihj aGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CmludCBjZ2V0dXN0cihjaGFyICosIGNvbnN0 IGNoYXIgKiwgY2hhciAqKik7CgppbnQgZGFlbW9uKGludCwgaW50KTsKY2hhciAqZGV2bmFtZShp bnQsIGludCk7CmludCBnZXRsb2FkYXZnKGRvdWJsZSBbXSwgaW50KTsKY29uc3QgY2hhciAqCiAg ICAgICAgIF9nZXRwcm9nbmFtZSh2b2lkKTsKCmludCBoZWFwc29ydCh2b2lkICosIHNpemVfdCwg c2l6ZV90LCBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmludCBtZXJnZXNv cnQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKikpOwp2b2lkIHFzb3J0X3Iodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqLAogICAg ICAgICAgICBpbnQgKCopKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKaW50 IHJhZGl4c29ydChjb25zdCB1bnNpZ25lZCBjaGFyICoqLCBpbnQsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKiwKICAgICAgICAgICAgdW5zaWduZWQpOwp2b2lkICpyZWFsbG9jZih2b2lkICosIHNpemVf dCk7CnZvaWQgc2V0cHJvZ25hbWUoY29uc3QgY2hhciAqKTsKaW50IHNyYWRpeHNvcnQoY29uc3Qg dW5zaWduZWQgY2hhciAqKiwgaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg IHVuc2lnbmVkKTsKdm9pZCBzcmFuZGRldih2b2lkKTsKdm9pZCBzcmFuZG9tZGV2KHZvaWQpOwoK Cl9faW50NjRfdAogICAgICAgICBzdHJ0b3EoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpf X3VpbnQ2NF90CiAgICAgICAgIHN0cnRvdXEoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwoK CgppbnQgYmNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKdm9pZCBiY29w eShjb25zdCB2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKdm9pZCBiemVybyh2b2lkICosIHNpemVf dCk7CmludCBmZnMoaW50KTsKY2hhciAqaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwpjaGFyICpy aW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwppbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKCgoKdm9pZCAqbWVtY2NweSh2b2lkICogLCBjb25zdCB2b2lkICogLCBpbnQsIHNp emVfdCk7Cgp2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CmludCBtZW1j bXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKm1lbWNweSh2b2lk ICogLCBjb25zdCB2b2lkICogLCBzaXplX3QpOwp2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qg dm9pZCAqLCBzaXplX3QpOwp2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CgpjaGFy ICpzdHBjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJjYXNlc3RyKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKCmNoYXIgKnN0cmNhdChjaGFyICogLCBjb25zdCBjaGFyICog KTsKY2hhciAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IHN0cmNtcChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CmludCBzdHJjb2xsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKY2hhciAqc3RyY3B5KGNoYXIgKiAsIGNvbnN0IGNoYXIgKiApOwpzaXplX3Qgc3RyY3Nwbihj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgpjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsK CmNoYXIgKnN0cmVycm9yKGludCk7CgppbnQgc3RyZXJyb3JfcihpbnQsIGNoYXIgKiwgc2l6ZV90 KTsKCgpzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKc2l6ZV90 IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CgpzaXplX3Qgc3RybGVuKGNv bnN0IGNoYXIgKik7Cgp2b2lkIHN0cm1vZGUoaW50LCBjaGFyICopOwoKY2hhciAqc3RybmNhdChj aGFyICogLCBjb25zdCBjaGFyICogLCBzaXplX3QpOwppbnQgc3RybmNtcChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqc3RybmNweShjaGFyICogLCBjb25zdCBjaGFy ICogLCBzaXplX3QpOwoKY2hhciAqc3RybnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKCmNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFy ICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKCmNoYXIgKnN0cnNlcChjaGFyICoqLCBjb25z dCBjaGFyICopOwpjaGFyICpzdHJzaWduYWwoaW50KTsKCnNpemVfdCBzdHJzcG4oY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwpjaGFyICpzdHJ0b2soY2hhciAqICwgY29uc3QgY2hhciAqICk7CgpjaGFyICpzdHJ0b2tf cihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgpzaXplX3Qgc3RyeGZybShjaGFyICog LCBjb25zdCBjaGFyICogLCBzaXplX3QpOwoKdm9pZCBzd2FiKGNvbnN0IHZvaWQgKiwgdm9pZCAq LCBzaXplX3QpOwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90Owp0eXBlZGVmIF9fd2lu dF90IHdpbnRfdDsKc3RydWN0IF9fc0ZJTEU7CnN0cnVjdCB0bTsKCgp3aW50X3QgYnRvd2MoaW50 KTsKd2ludF90IGZnZXR3YyhzdHJ1Y3QgX19zRklMRSAqKTsKd2NoYXJfdCAqCiAgICAgICAgZmdl dHdzKHdjaGFyX3QgKiAsIGludCwgc3RydWN0IF9fc0ZJTEUgKiApOwp3aW50X3QgZnB1dHdjKHdj aGFyX3QsIHN0cnVjdCBfX3NGSUxFICopOwppbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3QgKiAsIHN0 cnVjdCBfX3NGSUxFICogKTsKaW50IGZ3aWRlKHN0cnVjdCBfX3NGSUxFICosIGludCk7CmludCBm d3ByaW50ZihzdHJ1Y3QgX19zRklMRSAqICwgY29uc3Qgd2NoYXJfdCAqICwgLi4uKTsKaW50IGZ3 c2NhbmYoc3RydWN0IF9fc0ZJTEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIC4uLik7CndpbnRfdCBn ZXR3YyhzdHJ1Y3QgX19zRklMRSAqKTsKd2ludF90IGdldHdjaGFyKHZvaWQpOwpzaXplX3QgbWJy bGVuKGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICogKTsKc2l6ZV90IG1icnRvd2Mo d2NoYXJfdCAqICwgY29uc3QgY2hhciAqICwgc2l6ZV90LAogICAgICAgICAgICBtYnN0YXRlX3Qg KiApOwppbnQgbWJzaW5pdChjb25zdCBtYnN0YXRlX3QgKik7CnNpemVfdCBtYnNydG93Y3Mod2No YXJfdCAqICwgY29uc3QgY2hhciAqKiAsIHNpemVfdCwKICAgICAgICAgICAgbWJzdGF0ZV90ICog KTsKd2ludF90IHB1dHdjKHdjaGFyX3QsIHN0cnVjdCBfX3NGSUxFICopOwp3aW50X3QgcHV0d2No YXIod2NoYXJfdCk7CmludCBzd3ByaW50Zih3Y2hhcl90ICogLCBzaXplX3QgbiwgY29uc3Qgd2No YXJfdCAqICwKICAgICAgICAgICAgLi4uKTsKaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqICwg Y29uc3Qgd2NoYXJfdCAqICwgLi4uKTsKd2ludF90IHVuZ2V0d2Mod2ludF90LCBzdHJ1Y3QgX19z RklMRSAqKTsKaW50IHZmd3ByaW50ZihzdHJ1Y3QgX19zRklMRSAqICwgY29uc3Qgd2NoYXJfdCAq ICwKICAgICAgICAgICAgX192YV9saXN0KTsKaW50IHZzd3ByaW50Zih3Y2hhcl90ICogLCBzaXpl X3QgbiwgY29uc3Qgd2NoYXJfdCAqICwKICAgICAgICAgICAgX192YV9saXN0KTsKaW50IHZ3cHJp bnRmKGNvbnN0IHdjaGFyX3QgKiAsIF9fdmFfbGlzdCk7CnNpemVfdCB3Y3J0b21iKGNoYXIgKiAs IHdjaGFyX3QsIG1ic3RhdGVfdCAqICk7CndjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICogLCBjb25z dCB3Y2hhcl90ICogKTsKd2NoYXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7 CmludCB3Y3NjbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwppbnQgd2NzY29s bChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKndjc2NweSh3Y2hh cl90ICogLCBjb25zdCB3Y2hhcl90ICogKTsKc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAq LCBjb25zdCB3Y2hhcl90ICopOwpzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCAqICwgc2l6ZV90LCBj b25zdCB3Y2hhcl90ICogLAogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKiApOwpzaXplX3Qg d2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqICwgY29u c3Qgd2NoYXJfdCAqICwKICAgICAgICAgICAgc2l6ZV90KTsKaW50IHdjc25jbXAoY29uc3Qgd2No YXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CndjaGFyX3QgKndjc25jcHkod2NoYXJf dCAqICwgY29uc3Qgd2NoYXJfdCAqICwgc2l6ZV90KTsKd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3 Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKndjc3JjaHIoY29uc3Qgd2NoYXJf dCAqLCB3Y2hhcl90KTsKc2l6ZV90IHdjc3J0b21icyhjaGFyICogLCBjb25zdCB3Y2hhcl90ICoq ICwgc2l6ZV90LAogICAgICAgICAgICBtYnN0YXRlX3QgKiApOwpzaXplX3Qgd2Nzc3BuKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqd2Nzc3RyKGNvbnN0IHdjaGFy X3QgKiAsIGNvbnN0IHdjaGFyX3QgKiApOwpzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICogLCBjb25z dCB3Y2hhcl90ICogLCBzaXplX3QpOwppbnQgd2N0b2Iod2ludF90KTsKZG91YmxlIHdjc3RvZChj b25zdCB3Y2hhcl90ICogLCB3Y2hhcl90ICoqICk7CndjaGFyX3QgKndjc3Rvayh3Y2hhcl90ICog LCBjb25zdCB3Y2hhcl90ICogLAogICAgICAgICAgICB3Y2hhcl90ICoqICk7Cmxvbmcgd2NzdG9s KGNvbnN0IHdjaGFyX3QgKiAsIHdjaGFyX3QgKiogLCBpbnQpOwp1bnNpZ25lZCBsb25nCiAgICAg ICAgIHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiAsIGludCk7CndjaGFyX3Qg KndtZW1jaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOwppbnQgd21lbWNtcChj b25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKd2NoYXJfdCAqd21lbWNw eSh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOwp3Y2hhcl90ICp3bWVtbW92 ZSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKd2NoYXJfdCAqd21lbXNldCh3 Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CmludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiAs IC4uLik7CmludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqICwgLi4uKTsKCgppbnQgdmZ3c2NhbmYo c3RydWN0IF9fc0ZJTEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsCiAgICAgICAgICAgIF9fdmFfbGlz dCk7CmludCB2c3dzY2FuZihjb25zdCB3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLAogICAg ICAgICAgICBfX3ZhX2xpc3QpOwppbnQgdndzY2FuZihjb25zdCB3Y2hhcl90ICogLCBfX3ZhX2xp c3QpOwpmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiApOwpsb25nIGRv dWJsZQogICAgICAgIHdjc3RvbGQoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiApOwoKCmxv bmcgbG9uZwogICAgICAgIHdjc3RvbGwoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiAsIGlu dCk7Cgp1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgd2NzdG91bGwoY29uc3Qgd2NoYXJfdCAq ICwgd2NoYXJfdCAqKiAsIGludCk7CgoKCgppbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAqLCBz aXplX3QpOwppbnQgd2N3aWR0aCh3Y2hhcl90KTsKCgoKc2l6ZV90IHdjc2xjYXQod2NoYXJfdCAq LCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CnNpemVfdCB3Y3NsY3B5KHdjaGFyX3QgKiwgY29u c3Qgd2NoYXJfdCAqLCBzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBfX2lzdGhyZWFkZWQ7CnR5cGVk ZWYgZW51bSB7CiAgICAgICAgUEpUX0NPTkRfQlJPQURDQVNULAogICAgICAgIFBKVF9DT05EX0RF U1RST1ksCiAgICAgICAgUEpUX0NPTkRfSU5JVCwKICAgICAgICBQSlRfQ09ORF9TSUdOQUwsCiAg ICAgICAgUEpUX0NPTkRfV0FJVCwKICAgICAgICBQSlRfR0VUU1BFQ0lGSUMsCiAgICAgICAgUEpU X0tFWV9DUkVBVEUsCiAgICAgICAgUEpUX0tFWV9ERUxFVEUsCiAgICAgICAgUEpUX01BSU5fTlAs CiAgICAgICAgUEpUX01VVEVYX0RFU1RST1ksCiAgICAgICAgUEpUX01VVEVYX0lOSVQsCiAgICAg ICAgUEpUX01VVEVYX0xPQ0ssCiAgICAgICAgUEpUX01VVEVYX1RSWUxPQ0ssCiAgICAgICAgUEpU X01VVEVYX1VOTE9DSywKICAgICAgICBQSlRfTVVURVhBVFRSX0RFU1RST1ksCiAgICAgICAgUEpU X01VVEVYQVRUUl9JTklULAogICAgICAgIFBKVF9NVVRFWEFUVFJfU0VUVFlQRSwKICAgICAgICBQ SlRfT05DRSwKICAgICAgICBQSlRfUldMT0NLX0RFU1RST1ksCiAgICAgICAgUEpUX1JXTE9DS19J TklULAogICAgICAgIFBKVF9SV0xPQ0tfUkRMT0NLLAogICAgICAgIFBKVF9SV0xPQ0tfVFJZUkRM T0NLLAogICAgICAgIFBKVF9SV0xPQ0tfVFJZV1JMT0NLLAogICAgICAgIFBKVF9SV0xPQ0tfVU5M T0NLLAogICAgICAgIFBKVF9SV0xPQ0tfV1JMT0NLLAogICAgICAgIFBKVF9TRUxGLAogICAgICAg IFBKVF9TRVRTUEVDSUZJQywKICAgICAgICBQSlRfU0lHTUFTSywKICAgICAgICBQSlRfTUFYCn0g cGp0X2luZGV4X3Q7Cgp0eXBlZGVmIGludCAoKnB0aHJlYWRfZnVuY190KSh2b2lkKTsKdHlwZWRl ZiBwdGhyZWFkX2Z1bmNfdCBwdGhyZWFkX2Z1bmNfZW50cnlfdFsyXTsKCmV4dGVybiBwdGhyZWFk X2Z1bmNfZW50cnlfdCBfX3Rocl9qdGFibGVbXTsKCgoKCgppbnQgX3lwX2NoZWNrKGNoYXIgKiop OwoKCgoKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKl9fcHJvZ25hbWU7CnN0cnVjdCB0aW1lem9uZSB7 CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1lOwp9Owpz dHJ1Y3QgYmludGltZSB7CiAgICAgICAgdGltZV90IHNlYzsKICAgICAgICB1aW50NjRfdCBmcmFj Owp9OwoKc3RhdGljIF9faW5saW5lIHZvaWQKYmludGltZV9hZGR4KHN0cnVjdCBiaW50aW1lICpi dCwgdWludDY0X3QgeCkKewogICAgICAgIHVpbnQ2NF90IHU7CgogICAgICAgIHUgPSBidC0+ZnJh YzsKICAgICAgICBidC0+ZnJhYyArPSB4OwogICAgICAgIGlmICh1ID4gYnQtPmZyYWMpCiAgICAg ICAgICAgICAgICBidC0+c2VjKys7Cn0KCnN0YXRpYyBfX2lubGluZSB2b2lkCmJpbnRpbWVfYWRk KHN0cnVjdCBiaW50aW1lICpidCwgc3RydWN0IGJpbnRpbWUgKmJ0MikKewogICAgICAgIHVpbnQ2 NF90IHU7CgogICAgICAgIHUgPSBidC0+ZnJhYzsKICAgICAgICBidC0+ZnJhYyArPSBidDItPmZy YWM7CiAgICAgICAgaWYgKHUgPiBidC0+ZnJhYykKICAgICAgICAgICAgICAgIGJ0LT5zZWMrKzsK ICAgICAgICBidC0+c2VjICs9IGJ0Mi0+c2VjOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZApiaW50 aW1lX3N1YihzdHJ1Y3QgYmludGltZSAqYnQsIHN0cnVjdCBiaW50aW1lICpidDIpCnsKICAgICAg ICB1aW50NjRfdCB1OwoKICAgICAgICB1ID0gYnQtPmZyYWM7CiAgICAgICAgYnQtPmZyYWMgLT0g YnQyLT5mcmFjOwogICAgICAgIGlmICh1IDwgYnQtPmZyYWMpCiAgICAgICAgICAgICAgICBidC0+ c2VjLS07CiAgICAgICAgYnQtPnNlYyAtPSBidDItPnNlYzsKfQpzdGF0aWMgX19pbmxpbmUgdm9p ZApiaW50aW1lMnRpbWVzcGVjKHN0cnVjdCBiaW50aW1lICpidCwgc3RydWN0IHRpbWVzcGVjICp0 cykKewoKICAgICAgICB0cy0+dHZfc2VjID0gYnQtPnNlYzsKICAgICAgICB0cy0+dHZfbnNlYyA9 ICgodWludDY0X3QpMTAwMDAwMDAwMCAqICh1aW50MzJfdCkoYnQtPmZyYWMgPj4gMzIpKSA+PiAz MjsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKdGltZXNwZWMyYmludGltZShzdHJ1Y3QgdGltZXNw ZWMgKnRzLCBzdHJ1Y3QgYmludGltZSAqYnQpCnsKCiAgICAgICAgYnQtPnNlYyA9IHRzLT50dl9z ZWM7CgogICAgICAgIGJ0LT5mcmFjID0gdHMtPnR2X25zZWMgKiAodWludDY0X3QpMTg0NDY3NDQw NzNMTDsKfQoKc3RhdGljIF9faW5saW5lIHZvaWQKYmludGltZTJ0aW1ldmFsKHN0cnVjdCBiaW50 aW1lICpidCwgc3RydWN0IHRpbWV2YWwgKnR2KQp7CgogICAgICAgIHR2LT50dl9zZWMgPSBidC0+ c2VjOwogICAgICAgIHR2LT50dl91c2VjID0gKCh1aW50NjRfdCkxMDAwMDAwICogKHVpbnQzMl90 KShidC0+ZnJhYyA+PiAzMikpID4+IDMyOwp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZAp0aW1ldmFs MmJpbnRpbWUoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgYmludGltZSAqYnQpCnsKCiAgICAg ICAgYnQtPnNlYyA9IHR2LT50dl9zZWM7CgogICAgICAgIGJ0LT5mcmFjID0gdHYtPnR2X3VzZWMg KiAodWludDY0X3QpMTg0NDY3NDQwNzM3MDlMTDsKfQpzdHJ1Y3QgaXRpbWVydmFsIHsKICAgICAg ICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF92 YWx1ZTsKfTsKCgoKCnN0cnVjdCBjbG9ja2luZm8gewogICAgICAgIGludCBoejsKICAgICAgICBp bnQgdGljazsKICAgICAgICBpbnQgc3BhcmU7CiAgICAgICAgaW50IHN0YXRoejsKICAgICAgICBp bnQgcHJvZmh6Owp9OwpzdHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50 IHRtX21pbjsKICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAg ICBpbnQgdG1fbW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5Owog ICAgICAgIGludCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKICAgICAgICBsb25nIHRt X2dtdG9mZjsKICAgICAgICBjaGFyICp0bV96b25lOwp9OwoKCmV4dGVybiBjaGFyICp0em5hbWVb XTsKCgoKY2hhciAqYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0gKik7CmNsb2NrX3QgY2xvY2sodm9p ZCk7CmNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwg dGltZV90KTsKc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpzdHJ1Y3QgdG0gKmxv Y2FsdGltZShjb25zdCB0aW1lX3QgKik7CnRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOwpzaXpl X3Qgc3RyZnRpbWUoY2hhciAqICwgc2l6ZV90LCBjb25zdCBjaGFyICogLAogICAgY29uc3Qgc3Ry dWN0IHRtICogKTsKdGltZV90IHRpbWUodGltZV90ICopOwoKCnZvaWQgdHpzZXQodm9pZCk7CgoK CmludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmludCBjbG9j a19nZXR0aW1lKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwppbnQgY2xvY2tfc2V0dGlt ZShjbG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKaW50IG5hbm9zbGVlcChjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOwoKCgpjaGFyICphc2N0aW1l X3IoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7CmNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90 ICosIGNoYXIgKik7CnN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0 bSAqKTsKc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICop OwoKCgpjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICogLCBjb25zdCBjaGFyICogLAogICAgc3Ry dWN0IHRtICogKTsKCgoKY2hhciAqdGltZXpvbmUoaW50LCBpbnQpOwp2b2lkIHR6c2V0d2FsbCh2 b2lkKTsKdGltZV90IHRpbWVsb2NhbChzdHJ1Y3QgdG0gKiBjb25zdCk7CnRpbWVfdCB0aW1lZ20o c3RydWN0IHRtICogY29uc3QpOwoKCgoKCgppbnQgYWRqdGltZShjb25zdCBzdHJ1Y3QgdGltZXZh bCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKaW50IGZ1dGltZXMoaW50LCBjb25zdCBzdHJ1Y3QgdGlt ZXZhbCAqKTsKaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwgKik7CmludCBnZXR0 aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV6b25lICopOwppbnQgbHV0aW1l cyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOwppbnQgc2V0aXRpbWVyKGlu dCwgY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgc2V0 dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsICosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSAq KTsKaW50IHV0aW1lcyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOwoKdHlw ZWRlZiBsb25nIHNpZ19hdG9taWNfdDsKc3RydWN0IHNpZ2NvbnRleHQgewogICAgICAgIHN0cnVj dCBfX3NpZ3NldCBzY19tYXNrOwogICAgICAgIGxvbmcgc2Nfb25zdGFjazsKICAgICAgICBsb25n IHNjX3IxNTsKICAgICAgICBsb25nIHNjX3IxNDsKICAgICAgICBsb25nIHNjX3IxMzsKICAgICAg ICBsb25nIHNjX3IxMjsKICAgICAgICBsb25nIHNjX3IxMTsKICAgICAgICBsb25nIHNjX3IxMDsK ICAgICAgICBsb25nIHNjX3I5OwogICAgICAgIGxvbmcgc2Nfcjg7CiAgICAgICAgbG9uZyBzY19y ZGk7CiAgICAgICAgbG9uZyBzY19yc2k7CiAgICAgICAgbG9uZyBzY19yYnA7CiAgICAgICAgbG9u ZyBzY19yYng7CiAgICAgICAgbG9uZyBzY19yZHg7CiAgICAgICAgbG9uZyBzY19yY3g7CiAgICAg ICAgbG9uZyBzY19yYXg7CiAgICAgICAgbG9uZyBzY190cmFwbm87CiAgICAgICAgbG9uZyBzY19l cnI7CiAgICAgICAgbG9uZyBzY19yaXA7CiAgICAgICAgbG9uZyBzY19jczsKICAgICAgICBsb25n IHNjX3JmbGFnczsKICAgICAgICBsb25nIHNjX3JzcDsKICAgICAgICBsb25nIHNjX3NzOwogICAg ICAgIGxvbmcgc2NfbGVuOwoKCgoKICAgICAgICBsb25nIHNjX2ZwZm9ybWF0OwogICAgICAgIGxv bmcgc2Nfb3duZWRmcDsKICAgICAgICBsb25nIHNjX3NwYXJlMVsxXTsKICAgICAgICBsb25nIHNj X2Zwc3RhdGVbMTI4XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygxNikpKTsKICAgICAgICBs b25nIHNjX3NwYXJlMls4XTsKfTsKdHlwZWRlZiB2b2lkIF9fc2lnaGFuZGxlcl90KGludCk7CnVu aW9uIHNpZ3ZhbCB7CgogICAgICAgIGludCBzaWd2YWxfaW50OwogICAgICAgIHZvaWQgKnNpZ3Zh bF9wdHI7Cn07CgoKCnN0cnVjdCBzaWdldmVudCB7CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsK ICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBpbnQgX19zaWdldl9zaWdubzsKICAgICAg ICAgICAgICAgIGludCBfX3NpZ2V2X25vdGlmeV9rcXVldWU7CiAgICAgICAgfSBfX3NpZ2V2X3U7 CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOwoKCgp9Owp0eXBlZGVmIHN0cnVjdCBf X3NpZ2luZm8gewogICAgICAgIGludCBzaV9zaWdubzsKICAgICAgICBpbnQgc2lfZXJybm87CgoK CgoKCiAgICAgICAgaW50IHNpX2NvZGU7CiAgICAgICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAg X191aWRfdCBzaV91aWQ7CiAgICAgICAgaW50IHNpX3N0YXR1czsKICAgICAgICB2b2lkICpzaV9h ZGRyOwogICAgICAgIHVuaW9uIHNpZ3ZhbCBzaV92YWx1ZTsKICAgICAgICBsb25nIHNpX2JhbmQ7 CiAgICAgICAgaW50IF9fc3BhcmVfX1s3XTsKfSBzaWdpbmZvX3Q7CgoKCnN0cnVjdCBfX3NpZ2lu Zm87CgoKCgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAg ICB2b2lkICgqX19zYV9oYW5kbGVyKShpbnQpOwogICAgICAgICAgICAgICAgdm9pZCAoKl9fc2Ff c2lnYWN0aW9uKShpbnQsIHN0cnVjdCBfX3NpZ2luZm8gKiwgdm9pZCAqKTsKICAgICAgICB9IF9f c2lnYWN0aW9uX3U7CiAgICAgICAgaW50IHNhX2ZsYWdzOwogICAgICAgIHNpZ3NldF90IHNhX21h c2s7Cn07CnR5cGVkZWYgX19zaWdoYW5kbGVyX3QgKnNpZ190Owp0eXBlZGVmIHZvaWQgX19zaWdp bmZvaGFuZGxlcl90KGludCwgc3RydWN0IF9fc2lnaW5mbyAqLCB2b2lkICopOwoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewoKCgogICAgICAgIGNoYXIgKnNzX3NwOwogICAgICAg IF9fc2l6ZV90IHNzX3NpemU7CiAgICAgICAgaW50IHNzX2ZsYWdzOwp9IHN0YWNrX3Q7CnN0cnVj dCBzaWd2ZWMgewogICAgICAgIF9fc2lnaGFuZGxlcl90ICpzdl9oYW5kbGVyOwogICAgICAgIGlu dCBzdl9tYXNrOwogICAgICAgIGludCBzdl9mbGFnczsKfTsKc3RydWN0IHNpZ3N0YWNrIHsKCiAg ICAgICAgY2hhciAqc3Nfc3A7CiAgICAgICAgaW50IHNzX29uc3RhY2s7Cn07CgpfX3NpZ2hhbmRs ZXJfdCAqc2lnbmFsKGludCwgX19zaWdoYW5kbGVyX3QgKik7CgoKc3RydWN0IHNjaGVkX3BhcmFt IHsKICAgICAgICBpbnQgc2NoZWRfcHJpb3JpdHk7Cn07CgoKCgpzdHJ1Y3QgdGltZXNwZWM7CgoK aW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50KTsKaW50IHNjaGVkX2dldF9wcmlvcml0eV9t aW4oaW50KTsKaW50IHNjaGVkX2dldHBhcmFtKHBpZF90LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7 CmludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QpOwppbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFs KHBpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCwgY29u c3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwppbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90LCBp bnQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKaW50IHNjaGVkX3lpZWxkKHZvaWQpOwoK c3RydWN0IHB0aHJlYWQ7CnN0cnVjdCBwdGhyZWFkX2F0dHI7CnN0cnVjdCBwdGhyZWFkX2NvbmQ7 CnN0cnVjdCBwdGhyZWFkX2NvbmRfYXR0cjsKc3RydWN0IHB0aHJlYWRfbXV0ZXg7CnN0cnVjdCBw dGhyZWFkX211dGV4X2F0dHI7CnN0cnVjdCBwdGhyZWFkX29uY2U7CnN0cnVjdCBwdGhyZWFkX3J3 bG9jazsKc3RydWN0IHB0aHJlYWRfcndsb2NrYXR0cjsKdHlwZWRlZiBzdHJ1Y3QgcHRocmVhZCAq cHRocmVhZF90Owp0eXBlZGVmIHN0cnVjdCBwdGhyZWFkX2F0dHIgKnB0aHJlYWRfYXR0cl90Owp0 eXBlZGVmIHN0cnVjdCBwdGhyZWFkX211dGV4ICpwdGhyZWFkX211dGV4X3Q7CnR5cGVkZWYgc3Ry dWN0IHB0aHJlYWRfbXV0ZXhfYXR0ciAqcHRocmVhZF9tdXRleGF0dHJfdDsKdHlwZWRlZiBzdHJ1 Y3QgcHRocmVhZF9jb25kICpwdGhyZWFkX2NvbmRfdDsKdHlwZWRlZiBzdHJ1Y3QgcHRocmVhZF9j b25kX2F0dHIgKnB0aHJlYWRfY29uZGF0dHJfdDsKdHlwZWRlZiBpbnQgcHRocmVhZF9rZXlfdDsK dHlwZWRlZiBzdHJ1Y3QgcHRocmVhZF9vbmNlIHB0aHJlYWRfb25jZV90Owp0eXBlZGVmIHN0cnVj dCBwdGhyZWFkX3J3bG9jayAqcHRocmVhZF9yd2xvY2tfdDsKdHlwZWRlZiBzdHJ1Y3QgcHRocmVh ZF9yd2xvY2thdHRyICpwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCgoKCnR5cGVkZWYgdm9pZCAq cHRocmVhZF9hZGRyX3Q7CnR5cGVkZWYgdm9pZCAqKCpwdGhyZWFkX3N0YXJ0cm91dGluZV90KSh2 b2lkICopOwoKCgoKc3RydWN0IHB0aHJlYWRfb25jZSB7CiAgICAgICAgaW50IHN0YXRlOwogICAg ICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKfTsKZW51bSBwdGhyZWFkX211dGV4dHlwZSB7CiAg ICAgICAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gMSwKICAgICAgICBQVEhSRUFEX01VVEVY X1JFQ1VSU0lWRSA9IDIsCiAgICAgICAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSAzLAogICAgICAg IE1VVEVYX1RZUEVfTUFYCn07CgppbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kocHRocmVhZF9hdHRy X3QgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soY29uc3QgcHRocmVhZF9hdHRyX3QgKiAs CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiogc3RhY2thZGRyLAogICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKiBzdGFja3NpemUpOwppbnQgcHRocmVhZF9hdHRyX2dldHN0YWNr c2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7CmludCBwdGhyZWFkX2F0dHJf Z2V0Z3VhcmRzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAqKTsKaW50IHB0aHJl YWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqKik7Cmlu dCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50 ICopOwppbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QgKik7CmludCBwdGhyZWFk X2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CmludCBwdGhyZWFk X2F0dHJfc2V0Z3VhcmRzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CmludCBwdGhyZWFk X2F0dHJfc2V0c3RhY2socHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqLCBzaXplX3QpOwppbnQgcHRo cmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICopOwppbnQgcHRo cmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICosIGludCk7CnZvaWQgcHRo cmVhZF9jbGVhbnVwX3BvcChpbnQpOwp2b2lkIHB0aHJlYWRfY2xlYW51cF9wdXNoKHZvaWQgKCop ICh2b2lkICopLCB2b2lkICpyb3V0aW5lX2FyZyk7CmludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ry b3kocHRocmVhZF9jb25kYXR0cl90ICopOwppbnQgcHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJl YWRfY29uZGF0dHJfdCAqKTsKCmludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29u ZF90ICopOwppbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kocHRocmVhZF9jb25kX3QgKik7CmludCBw dGhyZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmludCBwdGhyZWFkX2NvbmRfc2lnbmFsKHB0 aHJlYWRfY29uZF90ICopOwppbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRf dCAqLAogICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiwgY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICopOwppbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwg cHRocmVhZF9tdXRleF90ICopOwppbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICosIGNvbnN0 IHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqKSAodm9p ZCAqKSwgdm9pZCAqKTsKaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCk7CmludCBwdGhyZWFk X2VxdWFsKHB0aHJlYWRfdCwgcHRocmVhZF90KTsKdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKSBf X2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhw dGhyZWFkX2tleV90KTsKaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQgKiopOwppbnQg cHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3QgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAoKikgKHZvaWQgKikpOwppbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5 X3QpOwppbnQgcHRocmVhZF9raWxsKHB0aHJlYWRfdCwgaW50KTsKaW50IHB0aHJlYWRfbXV0ZXhh dHRyX2luaXQocHRocmVhZF9tdXRleGF0dHJfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rl c3Ryb3kocHRocmVhZF9tdXRleGF0dHJfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5 cGUocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX211dGV4YXR0cl9z ZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKaW50IHB0aHJlYWRfbXV0ZXhfZGVz dHJveShwdGhyZWFkX211dGV4X3QgKik7CmludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t dXRleF90ICosCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy X3QgKik7CmludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90ICopOwppbnQgcHRo cmVhZF9tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKaW50IHB0aHJlYWRfbXV0ZXhf dW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKaW50IHB0aHJlYWRfb25jZShwdGhyZWFkX29uY2Vf dCAqLCB2b2lkICgqKSAodm9pZCkpOwppbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhyZWFk X3J3bG9ja190ICopOwppbnQgcHRocmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICos CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpp bnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmludCBwdGhyZWFk X3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsKaW50IHB0aHJlYWRfcndsb2Nr X3RyeXdybG9jayhwdGhyZWFkX3J3bG9ja190ICopOwppbnQgcHRocmVhZF9yd2xvY2tfdW5sb2Nr KHB0aHJlYWRfcndsb2NrX3QgKik7CmludCBwdGhyZWFkX3J3bG9ja193cmxvY2socHRocmVhZF9y d2xvY2tfdCAqKTsKaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2NrYXR0 cl90ICopOwppbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9y d2xvY2thdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICopOwppbnQgcHRocmVh ZF9yd2xvY2thdHRyX3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKiwgaW50KTsKaW50 IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpwdGhy ZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOwppbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFk X2tleV90LCBjb25zdCB2b2lkICopOwppbnQgcHRocmVhZF9zaWdtYXNrKGludCwgY29uc3Qgc2ln c2V0X3QgKiwgc2lnc2V0X3QgKik7CgppbnQgcHRocmVhZF9jYW5jZWwocHRocmVhZF90KTsKaW50 IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50LCBpbnQgKik7CmludCBwdGhyZWFkX3NldGNhbmNl bHR5cGUoaW50LCBpbnQgKik7CnZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsKHZvaWQpOwoKaW50IHB0 aHJlYWRfZ2V0cHJpbyhwdGhyZWFkX3QpOwppbnQgcHRocmVhZF9zZXRwcmlvKHB0aHJlYWRfdCwg aW50KTsKdm9pZCBwdGhyZWFkX3lpZWxkKHZvaWQpOwoKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl dHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgaW50ICopOwppbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2NlaWxpbmcocHRocmVhZF9t dXRleGF0dHJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQpOwppbnQgcHRocmVhZF9t dXRleF9nZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOwppbnQgcHRocmVh ZF9tdXRleF9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50LCBpbnQgKik7Cgpp bnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2wocHRocmVhZF9tdXRleGF0dHJfdCAqLCBp bnQgKik7CmludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0 cl90ICosIGludCk7CgppbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZChjb25zdCBwdGhy ZWFkX2F0dHJfdCAqLCBpbnQgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbShjb25z dCBwdGhyZWFkX2F0dHJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRf cGFyYW0gKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3koY29uc3QgcHRocmVhZF9h dHRyX3QgKiwgaW50ICopOwppbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRf YXR0cl90ICosIGludCAqKTsKaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQocHRocmVh ZF9hdHRyX3QgKiwgaW50KTsKaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRf YXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqKTsKaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeShwdGhyZWFkX2F0dHJfdCAqLCBp bnQpOwppbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICosIGludCk7Cmlu dCBwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZF90IHB0aHJlYWQsIGludCAqLAogICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmludCBwdGhyZWFkX3NldHNj aGVkcGFyYW0ocHRocmVhZF90LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqKTsKaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kodm9pZCk7Cmlu dCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCk7CgpleHRlcm4gaW50IF9zcmVhZChGSUxFICos IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBfc3dyaXRlKEZJTEUgKiwgY2hhciBjb25zdCAqLCBp bnQpOwpleHRlcm4gZnBvc190IF9zc2VlayhGSUxFICosIGZwb3NfdCwgaW50KTsKZXh0ZXJuIGlu dCBfZnRlbGxvKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50IF9mc2Vla28oRklMRSAqLCBv ZmZfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50IF9fZmZsdXNoKEZJTEUgKmZwKTsKZXh0ZXJuIHdp bnRfdCBfX2ZnZXR3YyhGSUxFICopOwpleHRlcm4gd2ludF90IF9fZnB1dHdjKHdjaGFyX3QsIEZJ TEUgKik7CmV4dGVybiBpbnQgX19zZmx1c2goRklMRSAqKTsKZXh0ZXJuIEZJTEUgKl9fc2ZwKHZv aWQpOwpleHRlcm4gaW50IF9fc3JlZmlsbChGSUxFICopOwpleHRlcm4gaW50IF9fc3JlYWQodm9p ZCAqLCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgX19zd3JpdGUodm9pZCAqLCBjaGFyIGNvbnN0 ICosIGludCk7CmV4dGVybiBmcG9zX3QgX19zc2Vlayh2b2lkICosIGZwb3NfdCwgaW50KTsKZXh0 ZXJuIGludCBfX3NjbG9zZSh2b2lkICopOwpleHRlcm4gdm9pZCBfX3Npbml0KHZvaWQpOwpleHRl cm4gdm9pZCBfY2xlYW51cCh2b2lkKTsKZXh0ZXJuIHZvaWQgKCpfX2NsZWFudXApKHZvaWQpOwpl eHRlcm4gdm9pZCBfX3NtYWtlYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgX19zd2hhdGJ1ZihGSUxF ICosIHNpemVfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgX2Z3YWxrKGludCAoKikoRklMRSAqKSk7 CmV4dGVybiBpbnQgX19zdmZzY2FuZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsK ZXh0ZXJuIGludCBfX3N3c2V0dXAoRklMRSAqKTsKZXh0ZXJuIGludCBfX3NmbGFncyhjb25zdCBj aGFyICosIGludCAqKTsKZXh0ZXJuIGludCBfX3VuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVybiB3 aW50X3QgX191bmdldHdjKHdpbnRfdCwgRklMRSAqKTsKZXh0ZXJuIGludCBfX3ZmcHJpbnRmKEZJ TEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IF9fdmZzY2FuZihGSUxF ICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludCBfX3Zmd3ByaW50ZihGSUxF ICosIGNvbnN0IHdjaGFyX3QgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludCBfX3Zmd3NjYW5mKEZJ TEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsCiAgICAgICAgICAgICAgICAgICAgX192YV9saXN0KTsK CmV4dGVybiBpbnQgX19zZGlkaW5pdDsKCgoKc3RydWN0IF9fc0ZJTEVYIHsKICAgICAgICB1bnNp Z25lZCBjaGFyICpfdXA7CiAgICAgICAgcHRocmVhZF9tdXRleF90IGZsX211dGV4OwogICAgICAg IHB0aHJlYWRfdCBmbF9vd25lcjsKICAgICAgICBpbnQgZmxfY291bnQ7CiAgICAgICAgaW50IG9y aWVudGF0aW9uOwp9OwpzdHJ1Y3QgX19zaW92IHsKICAgICAgICB2b2lkICppb3ZfYmFzZTsKICAg ICAgICBzaXplX3QgaW92X2xlbjsKfTsKc3RydWN0IF9fc3VpbyB7CiAgICAgICAgc3RydWN0IF9f c2lvdiAqdWlvX2lvdjsKICAgICAgICBpbnQgdWlvX2lvdmNudDsKICAgICAgICBpbnQgdWlvX3Jl c2lkOwp9OwoKZXh0ZXJuIGludCBfX3NmdndyaXRlKEZJTEUgKiwgc3RydWN0IF9fc3VpbyAqKTsK CgoKCnVuaW9uIGFyZyB7CiAgICAgICAgaW50IGludGFyZzsKICAgICAgICB1X2ludCB1aW50YXJn OwogICAgICAgIGxvbmcgbG9uZ2FyZzsKICAgICAgICB1X2xvbmcgdWxvbmdhcmc7CiAgICAgICAg bG9uZyBsb25nIGxvbmdsb25nYXJnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZ2xv bmdhcmc7CiAgICAgICAgcHRyZGlmZl90IHB0cmRpZmZhcmc7CiAgICAgICAgc2l6ZV90IHNpemVh cmc7CiAgICAgICAgaW50bWF4X3QgaW50bWF4YXJnOwogICAgICAgIHVpbnRtYXhfdCB1aW50bWF4 YXJnOwogICAgICAgIHZvaWQgKnB2b2lkYXJnOwogICAgICAgIGNoYXIgKnBjaGFyYXJnOwogICAg ICAgIHNpZ25lZCBjaGFyICpwc2NoYXJhcmc7CiAgICAgICAgc2hvcnQgKnBzaG9ydGFyZzsKICAg ICAgICBpbnQgKnBpbnRhcmc7CiAgICAgICAgbG9uZyAqcGxvbmdhcmc7CiAgICAgICAgbG9uZyBs b25nICpwbG9uZ2xvbmdhcmc7CiAgICAgICAgcHRyZGlmZl90ICpwcHRyZGlmZmFyZzsKICAgICAg ICBzaXplX3QgKnBzaXplYXJnOwogICAgICAgIGludG1heF90ICpwaW50bWF4YXJnOwoKICAgICAg ICBkb3VibGUgZG91YmxlYXJnOwogICAgICAgIGxvbmcgZG91YmxlIGxvbmdkb3VibGVhcmc7Cgog ICAgICAgIHdpbnRfdCB3aW50YXJnOwogICAgICAgIHdjaGFyX3QgKnB3Y2hhcmFyZzsKfTsKCgoK CmVudW0gdHlwZWlkIHsKICAgICAgICBUX1VOVVNFRCwgVFBfU0hPUlQsIFRfSU5ULCBUX1VfSU5U LCBUUF9JTlQsCiAgICAgICAgVF9MT05HLCBUX1VfTE9ORywgVFBfTE9ORywgVF9MTE9ORywgVF9V X0xMT05HLCBUUF9MTE9ORywKICAgICAgICBUX1BUUkRJRkZULCBUUF9QVFJESUZGVCwgVF9TSVpF VCwgVFBfU0laRVQsCiAgICAgICAgVF9JTlRNQVhULCBUX1VJTlRNQVhULCBUUF9JTlRNQVhULCBU UF9WT0lELCBUUF9DSEFSLCBUUF9TQ0hBUiwKICAgICAgICBUX0RPVUJMRSwgVF9MT05HX0RPVUJM RSwgVF9XSU5ULCBUUF9XQ0hBUgp9OwoKc3RhdGljIGludCBfX3NwcmludChGSUxFICosIHN0cnVj dCBfX3N1aW8gKik7CnN0YXRpYyBpbnQgX19zYnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwg dmFfbGlzdCkgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsK c3RhdGljIGNoYXIgKl9fdWp0b2EodWludG1heF90LCBjaGFyICosIGludCwgaW50LCBjb25zdCBj aGFyICosIGludCwgY2hhciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwpzdGF0 aWMgY2hhciAqX191bHRvYSh1X2xvbmcsIGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwg aW50LCBjaGFyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CnN0YXRpYyBjaGFy ICpfX3djc2NvbnYod2NoYXJfdCAqLCBpbnQpOwpzdGF0aWMgdm9pZCBfX2ZpbmRfYXJndW1lbnRz KGNvbnN0IGNoYXIgKiwgdmFfbGlzdCwgdW5pb24gYXJnICoqKTsKc3RhdGljIHZvaWQgX19ncm93 X3R5cGVfdGFibGUoaW50LCBlbnVtIHR5cGVpZCAqKiwgaW50ICopOwoKCgoKCnN0YXRpYyBpbnQK X19zcHJpbnQoRklMRSAqZnAsIHN0cnVjdCBfX3N1aW8gKnVpbykKewogICAgICAgIGludCBlcnI7 CgogICAgICAgIGlmICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICB1aW8t PnVpb19pb3ZjbnQgPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICB9CiAg ICAgICAgZXJyID0gX19zZnZ3cml0ZShmcCwgdWlvKTsKICAgICAgICB1aW8tPnVpb19yZXNpZCA9 IDA7CiAgICAgICAgdWlvLT51aW9faW92Y250ID0gMDsKICAgICAgICByZXR1cm4gKGVycik7Cn0K CgoKCgoKc3RhdGljIGludApfX3NicHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIHZh X2xpc3QgYXApCnsKICAgICAgICBpbnQgcmV0OwogICAgICAgIEZJTEUgZmFrZTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKCgogICAgICAgIGZha2UuX2ZsYWdzID0gZnAtPl9mbGFn cyAmIH4weDAwMDI7CiAgICAgICAgZmFrZS5fZmlsZSA9IGZwLT5fZmlsZTsKICAgICAgICBmYWtl Ll9jb29raWUgPSBmcC0+X2Nvb2tpZTsKICAgICAgICBmYWtlLl93cml0ZSA9IGZwLT5fd3JpdGU7 CiAgICAgICAgZmFrZS5fZXh0cmEgPSBmcC0+X2V4dHJhOwoKCiAgICAgICAgZmFrZS5fYmYuX2Jh c2UgPSBmYWtlLl9wID0gYnVmOwogICAgICAgIGZha2UuX2JmLl9zaXplID0gZmFrZS5fdyA9IHNp emVvZihidWYpOwogICAgICAgIGZha2UuX2xiZnNpemUgPSAwOwoKCiAgICAgICAgcmV0ID0gX192 ZnByaW50ZigmZmFrZSwgZm10LCBhcCk7CiAgICAgICAgaWYgKHJldCA+PSAwICYmIF9fZmZsdXNo KCZmYWtlKSkKICAgICAgICAgICAgICAgIHJldCA9ICgtMSk7CiAgICAgICAgaWYgKGZha2UuX2Zs YWdzICYgMHgwMDQwKQogICAgICAgICAgICAgICAgZnAtPl9mbGFncyB8PSAweDAwNDA7CiAgICAg ICAgcmV0dXJuIChyZXQpOwp9CnN0YXRpYyBjaGFyICoKX191bHRvYSh1X2xvbmcgdmFsLCBjaGFy ICplbmRwLCBpbnQgYmFzZSwgaW50IG9jdHplcm8sIGNvbnN0IGNoYXIgKnhkaWdzLAogICAgICAg IGludCBuZWVkZ3JwLCBjaGFyIHRob3VzZXAsIGNvbnN0IGNoYXIgKmdycCkKewogICAgICAgIGNo YXIgKmNwID0gZW5kcDsKICAgICAgICBsb25nIHN2YWw7CiAgICAgICAgaW50IG5kaWc7CgoKCgoK ICAgICAgICBzd2l0Y2ggKGJhc2UpIHsKICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAg aWYgKHZhbCA8IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICotLWNwID0gKCh2YWwpICsg JzAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjcCk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBuZGlnID0gMDsKCgoKCgoKICAgICAgICAgICAgICAgIGlmICh2 YWwgPiAweDdmZmZmZmZmZmZmZmZmZmZMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICotLWNw ID0gKCh2YWwgJSAxMCkgKyAnMCcpOwogICAgICAgICAgICAgICAgICAgICAgICBuZGlnKys7CiAg ICAgICAgICAgICAgICAgICAgICAgIHN2YWwgPSB2YWwgLyAxMDsKICAgICAgICAgICAgICAgIH0g ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBzdmFsID0gdmFsOwogICAgICAgICAgICAgICAg ZG8gewogICAgICAgICAgICAgICAgICAgICAgICAqLS1jcCA9ICgoc3ZhbCAlIDEwKSArICcwJyk7 CiAgICAgICAgICAgICAgICAgICAgICAgIG5kaWcrKzsKCgoKCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChuZWVkZ3JwICYmIG5kaWcgPT0gKmdycCAmJiAqZ3JwICE9IDB4N2YKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN2YWwgPiA5KSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi0tY3AgPSB0aG91c2VwOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5kaWcgPSAwOwoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCooZ3JwKzEpICE9ICdcMCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBncnArKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICBzdmFsIC89IDEwOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoc3ZhbCAhPSAwKTsK ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICBk byB7CiAgICAgICAgICAgICAgICAgICAgICAgICotLWNwID0gKCh2YWwgJiA3KSArICcwJyk7CiAg ICAgICAgICAgICAgICAgICAgICAgIHZhbCA+Pj0gMzsKICAgICAgICAgICAgICAgIH0gd2hpbGUg KHZhbCk7CiAgICAgICAgICAgICAgICBpZiAob2N0emVybyAmJiAqY3AgIT0gJzAnKQogICAgICAg ICAgICAgICAgICAgICAgICAqLS1jcCA9ICcwJzsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICBjYXNlIDE2OgogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAg ICAqLS1jcCA9IHhkaWdzW3ZhbCAmIDE1XTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID4+ PSA0OwogICAgICAgICAgICAgICAgfSB3aGlsZSAodmFsKTsKICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgYWJvcnQoKTsKICAgICAgICB9CiAg ICAgICAgcmV0dXJuIChjcCk7Cn0KCgpzdGF0aWMgY2hhciAqCl9fdWp0b2EodWludG1heF90IHZh bCwgY2hhciAqZW5kcCwgaW50IGJhc2UsIGludCBvY3R6ZXJvLCBjb25zdCBjaGFyICp4ZGlncywK ICAgICAgICBpbnQgbmVlZGdycCwgY2hhciB0aG91c2VwLCBjb25zdCBjaGFyICpncnApCnsKICAg ICAgICBjaGFyICpjcCA9IGVuZHA7CiAgICAgICAgaW50bWF4X3Qgc3ZhbDsKICAgICAgICBpbnQg bmRpZzsKCgoKICAgICAgICBpZiAodmFsIDw9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMKQogICAgICAg ICAgICAgICAgcmV0dXJuIChfX3VsdG9hKCh1X2xvbmcpdmFsLCBlbmRwLCBiYXNlLCBvY3R6ZXJv LCB4ZGlncywKICAgICAgICAgICAgICAgICAgICBuZWVkZ3JwLCB0aG91c2VwLCBncnApKTsKICAg ICAgICBzd2l0Y2ggKGJhc2UpIHsKICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgaWYg KHZhbCA8IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICotLWNwID0gKCh2YWwgJSAxMCkg KyAnMCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNwKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIG5kaWcgPSAwOwogICAgICAgICAgICAgICAgaWYgKHZhbCA+ IDB4N2ZmZmZmZmZmZmZmZmZmZkwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgKi0tY3AgPSAo KHZhbCAlIDEwKSArICcwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5kaWcrKzsKICAgICAg ICAgICAgICAgICAgICAgICAgc3ZhbCA9IHZhbCAvIDEwOwogICAgICAgICAgICAgICAgfSBlbHNl CiAgICAgICAgICAgICAgICAgICAgICAgIHN2YWwgPSB2YWw7CiAgICAgICAgICAgICAgICBkbyB7 CiAgICAgICAgICAgICAgICAgICAgICAgICotLWNwID0gKChzdmFsICUgMTApICsgJzAnKTsKICAg ICAgICAgICAgICAgICAgICAgICAgbmRpZysrOwoKCgoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKG5lZWRncnAgJiYgKmdycCAhPSAweDdmICYmIG5kaWcgPT0gKmdycAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3ZhbCA+IDkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLS1jcCA9IHRob3VzZXA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmRpZyA9IDA7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKihncnArMSkgIT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdycCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgIHN2YWwgLz0gMTA7CiAgICAgICAgICAgICAgICB9IHdoaWxlIChzdmFsICE9IDApOwogICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgIGRvIHsK ICAgICAgICAgICAgICAgICAgICAgICAgKi0tY3AgPSAoKHZhbCAmIDcpICsgJzAnKTsKICAgICAg ICAgICAgICAgICAgICAgICAgdmFsID4+PSAzOwogICAgICAgICAgICAgICAgfSB3aGlsZSAodmFs KTsKICAgICAgICAgICAgICAgIGlmIChvY3R6ZXJvICYmICpjcCAhPSAnMCcpCiAgICAgICAgICAg ICAgICAgICAgICAgICotLWNwID0gJzAnOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg IGNhc2UgMTY6CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICot LWNwID0geGRpZ3NbdmFsICYgMTVdOwogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPj49IDQ7 CiAgICAgICAgICAgICAgICB9IHdoaWxlICh2YWwpOwogICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBhYm9ydCgpOwogICAgICAgIH0KICAgICAg ICByZXR1cm4gKGNwKTsKfQoKCgoKCgoKc3RhdGljIGNoYXIgKgpfX3djc2NvbnYod2NoYXJfdCAq d2NzYXJnLCBpbnQgcHJlYykKewogICAgICAgIGNoYXIgYnVmWzZdOwogICAgICAgIHdjaGFyX3Qg KnA7CiAgICAgICAgY2hhciAqY29udmJ1ZiwgKm1icDsKICAgICAgICBzaXplX3QgY2xlbiwgbmJ5 dGVzOwogICAgICAgIG1ic3RhdGVfdCBtYnM7CgoKCgoKICAgICAgICBtZW1zZXQoJm1icywgMCwg c2l6ZW9mKG1icykpOwogICAgICAgIGlmIChwcmVjID49IDApIHsKICAgICAgICAgICAgICAgIG5i eXRlcyA9IDA7CiAgICAgICAgICAgICAgICBwID0gd2NzYXJnOwogICAgICAgICAgICAgICAgZm9y ICg7OykgewogICAgICAgICAgICAgICAgICAgICAgICBjbGVuID0gd2NydG9tYihidWYsICpwKyss ICZtYnMpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xlbiA9PSAwIHx8IGNsZW4gPT0g KHNpemVfdCktMSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJ5dGVzICsgY2xlbiA+ IHByZWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICAgICAgICAgIG5ieXRlcyArPSBjbGVuOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICBwID0gd2NzYXJnOwogICAgICAgICAgICAgICAgbmJ5dGVz ID0gd2NzcnRvbWJzKDAsIChjb25zdCB3Y2hhcl90ICoqKSZwLCAwLCAmbWJzKTsKICAgICAgICAg ICAgICAgIGlmIChuYnl0ZXMgPT0gKHNpemVfdCktMSkKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgwKTsKICAgICAgICB9CiAgICAgICAgaWYgKChjb252YnVmID0gbWFsbG9jKG5ieXRl cyArIDEpKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKCgoKCgogICAgICAgIG1i cCA9IGNvbnZidWY7CiAgICAgICAgcCA9IHdjc2FyZzsKICAgICAgICBtZW1zZXQoJm1icywgMCwg c2l6ZW9mKG1icykpOwogICAgICAgIHdoaWxlIChtYnAgLSBjb252YnVmIDwgbmJ5dGVzKSB7CiAg ICAgICAgICAgICAgICBjbGVuID0gd2NydG9tYihtYnAsICpwKyssICZtYnMpOwogICAgICAgICAg ICAgICAgaWYgKGNsZW4gPT0gMCB8fCBjbGVuID09IChzaXplX3QpLTEpCiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgbWJwICs9IGNsZW47CiAgICAgICAgfQog ICAgICAgIGlmIChjbGVuID09IChzaXplX3QpLTEpIHsKICAgICAgICAgICAgICAgIGZyZWUoY29u dmJ1Zik7CiAgICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgIH0KICAgICAgICAqbWJw ID0gJ1wwJzsKCiAgICAgICAgcmV0dXJuIChjb252YnVmKTsKfQoKCgoKaW50CnZmcHJpbnRmKEZJ TEUgKiBmcCwgY29uc3QgY2hhciAqIGZtdDAsIHZhX2xpc3QgYXApCgp7CiAgICAgICAgaW50IHJl dDsKCiAgICAgICAgaWYgKF9faXN0aHJlYWRlZCkgX2Zsb2NrZmlsZShmcCk7CiAgICAgICAgcmV0 ID0gX192ZnByaW50ZihmcCwgZm10MCwgYXApOwogICAgICAgIGlmIChfX2lzdGhyZWFkZWQpIF9m dW5sb2NrZmlsZShmcCk7CiAgICAgICAgcmV0dXJuIChyZXQpOwp9CgoKCgoKCmV4dGVybiBjb25z dCB1bmlvbiBfX2luZmluaXR5X3VuIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIF9fdWNbOF07CiAg ICAgICAgZG91YmxlIF9fdWQ7Cn0gX19pbmZpbml0eTsKCmV4dGVybiBjb25zdCB1bmlvbiBfX25h bl91biB7CiAgICAgICAgdW5zaWduZWQgY2hhciBfX3VjW3NpemVvZihmbG9hdCldOwogICAgICAg IGZsb2F0IF9fdWY7Cn0gX19uYW47CnR5cGVkZWYgX19kb3VibGVfdCBkb3VibGVfdDsKdHlwZWRl ZiBfX2Zsb2F0X3QgZmxvYXRfdDsKZXh0ZXJuIGludCBzaWduZ2FtOwoKCmVudW0gZmR2ZXJzaW9u IHtmZGxpYm1faWVlZSA9IC0xLCBmZGxpYm1fc3ZpZCwgZmRsaWJtX3hvcGVuLCBmZGxpYm1fcG9z aXh9OwpleHRlcm4gZW51bSBmZHZlcnNpb24gX2ZkbGliX3ZlcnNpb247CnN0cnVjdCBleGNlcHRp b24gewogICAgICAgIGludCB0eXBlOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgZG91Ymxl IGFyZzE7CiAgICAgICAgZG91YmxlIGFyZzI7CiAgICAgICAgZG91YmxlIHJldHZhbDsKfTsKCgoK CmludCBfX2ZwY2xhc3NpZnlkKGRvdWJsZSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmlu dCBfX2ZwY2xhc3NpZnlmKGZsb2F0KSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKaW50IF9f ZnBjbGFzc2lmeWwobG9uZyBkb3VibGUpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwppbnQg X19zaWduYml0KGRvdWJsZSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cgpkb3VibGUgYWNv cyhkb3VibGUpOwpkb3VibGUgYXNpbihkb3VibGUpOwpkb3VibGUgYXRhbihkb3VibGUpOwpkb3Vi bGUgYXRhbjIoZG91YmxlLCBkb3VibGUpOwpkb3VibGUgY29zKGRvdWJsZSk7CmRvdWJsZSBzaW4o ZG91YmxlKTsKZG91YmxlIHRhbihkb3VibGUpOwoKZG91YmxlIGNvc2goZG91YmxlKTsKZG91Ymxl IHNpbmgoZG91YmxlKTsKZG91YmxlIHRhbmgoZG91YmxlKTsKCmRvdWJsZSBleHAoZG91YmxlKTsK ZG91YmxlIGZyZXhwKGRvdWJsZSwgaW50ICopOwpkb3VibGUgbGRleHAoZG91YmxlLCBpbnQpOwpk b3VibGUgbG9nKGRvdWJsZSk7CmRvdWJsZSBsb2cxMChkb3VibGUpOwpkb3VibGUgbW9kZihkb3Vi bGUsIGRvdWJsZSAqKTsKCmRvdWJsZSBwb3coZG91YmxlLCBkb3VibGUpOwpkb3VibGUgc3FydChk b3VibGUpOwoKZG91YmxlIGNlaWwoZG91YmxlKTsKZG91YmxlIGZhYnMoZG91YmxlKTsKZG91Ymxl IGZsb29yKGRvdWJsZSk7CmRvdWJsZSBmbW9kKGRvdWJsZSwgZG91YmxlKTsKCgoKCgoKZG91Ymxl IGVyZihkb3VibGUpOwpkb3VibGUgZXJmYyhkb3VibGUpIF9fYXR0cmlidXRlX18oKF9fY29uc3Rf XykpOwppbnQgZmluaXRlKGRvdWJsZSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmRvdWJs ZSBnYW1tYShkb3VibGUpOwpkb3VibGUgaHlwb3QoZG91YmxlLCBkb3VibGUpOwpkb3VibGUgajAo ZG91YmxlKTsKZG91YmxlIGoxKGRvdWJsZSk7CmRvdWJsZSBqbihpbnQsIGRvdWJsZSk7CmRvdWJs ZSBsZ2FtbWEoZG91YmxlKTsKZG91YmxlIHkwKGRvdWJsZSk7CmRvdWJsZSB5MShkb3VibGUpOwpk b3VibGUgeW4oaW50LCBkb3VibGUpOwoKCmRvdWJsZSBhY29zaChkb3VibGUpOwpkb3VibGUgYXNp bmgoZG91YmxlKTsKZG91YmxlIGF0YW5oKGRvdWJsZSk7CmRvdWJsZSBjYnJ0KGRvdWJsZSkgX19h dHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmRvdWJsZSBsb2diKGRvdWJsZSkgX19hdHRyaWJ1dGVf XygoX19jb25zdF9fKSk7CmRvdWJsZSBuZXh0YWZ0ZXIoZG91YmxlLCBkb3VibGUpOwpkb3VibGUg cmVtYWluZGVyKGRvdWJsZSwgZG91YmxlKTsKZG91YmxlIHNjYWxiKGRvdWJsZSwgZG91YmxlKTsK ZG91YmxlIHRnYW1tYShkb3VibGUpOwoKCmludCBtYXRoZXJyKHN0cnVjdCBleGNlcHRpb24gKik7 CgoKCgoKZG91YmxlIHNpZ25pZmljYW5kKGRvdWJsZSk7CgoKCgpkb3VibGUgY29weXNpZ24oZG91 YmxlLCBkb3VibGUpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwppbnQgaWxvZ2IoZG91Ymxl KTsKZG91YmxlIHJpbnQoZG91YmxlKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZG91Ymxl IHNjYWxibihkb3VibGUsIGludCk7CgoKCgpkb3VibGUgZHJlbShkb3VibGUsIGRvdWJsZSk7CmRv dWJsZSBleHBtMShkb3VibGUpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpkb3VibGUgbG9n MXAoZG91YmxlKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCgoKCgoKZG91YmxlIGdhbW1h X3IoZG91YmxlLCBpbnQgKik7CmRvdWJsZSBsZ2FtbWFfcihkb3VibGUsIGludCAqKTsKCgoKZmxv YXQgYWNvc2YoZmxvYXQpOwpmbG9hdCBhc2luZihmbG9hdCk7CmZsb2F0IGF0YW5mKGZsb2F0KTsK ZmxvYXQgYXRhbjJmKGZsb2F0LCBmbG9hdCk7CmZsb2F0IGNvc2YoZmxvYXQpOwpmbG9hdCBzaW5m KGZsb2F0KTsKZmxvYXQgdGFuZihmbG9hdCk7CgpmbG9hdCBjb3NoZihmbG9hdCk7CmZsb2F0IHNp bmhmKGZsb2F0KTsKZmxvYXQgdGFuaGYoZmxvYXQpOwoKZmxvYXQgZXhwZihmbG9hdCk7CmZsb2F0 IGZyZXhwZihmbG9hdCwgaW50ICopOwpmbG9hdCBsZGV4cGYoZmxvYXQsIGludCk7CmZsb2F0IGxv Z2YoZmxvYXQpOwpmbG9hdCBsb2cxMGYoZmxvYXQpOwpmbG9hdCBtb2RmZihmbG9hdCwgZmxvYXQg Kik7CgpmbG9hdCBwb3dmKGZsb2F0LCBmbG9hdCk7CmZsb2F0IHNxcnRmKGZsb2F0KTsKCmZsb2F0 IGNlaWxmKGZsb2F0KTsKZmxvYXQgZmFic2YoZmxvYXQpOwpmbG9hdCBmbG9vcmYoZmxvYXQpOwpm bG9hdCBmbW9kZihmbG9hdCwgZmxvYXQpOwoKZmxvYXQgZXJmZihmbG9hdCk7CmZsb2F0IGVyZmNm KGZsb2F0KSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKaW50IGZpbml0ZWYoZmxvYXQpIF9f YXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpmbG9hdCBnYW1tYWYoZmxvYXQpOwpmbG9hdCBoeXBv dGYoZmxvYXQsIGZsb2F0KSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZmxvYXQgajBmKGZs b2F0KTsKZmxvYXQgajFmKGZsb2F0KTsKZmxvYXQgam5mKGludCwgZmxvYXQpOwpmbG9hdCBsZ2Ft bWFmKGZsb2F0KTsKZmxvYXQgeTBmKGZsb2F0KTsKZmxvYXQgeTFmKGZsb2F0KTsKZmxvYXQgeW5m KGludCwgZmxvYXQpOwoKZmxvYXQgYWNvc2hmKGZsb2F0KTsKZmxvYXQgYXNpbmhmKGZsb2F0KTsK ZmxvYXQgYXRhbmhmKGZsb2F0KTsKZmxvYXQgY2JydGYoZmxvYXQpIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpOwpmbG9hdCBsb2diZihmbG9hdCkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7 CmZsb2F0IG5leHRhZnRlcmYoZmxvYXQsIGZsb2F0KTsKZmxvYXQgcmVtYWluZGVyZihmbG9hdCwg ZmxvYXQpOwpmbG9hdCBzY2FsYmYoZmxvYXQsIGZsb2F0KTsKCgoKCmZsb2F0IHNpZ25pZmljYW5k ZihmbG9hdCk7CgoKCgoKZmxvYXQgY29weXNpZ25mKGZsb2F0LCBmbG9hdCkgX19hdHRyaWJ1dGVf XygoX19jb25zdF9fKSk7CmludCBpbG9nYmYoZmxvYXQpOwpmbG9hdCByaW50ZihmbG9hdCk7CmZs b2F0IHNjYWxibmYoZmxvYXQsIGludCk7CgoKCgpmbG9hdCBkcmVtZihmbG9hdCwgZmxvYXQpOwpm bG9hdCBleHBtMWYoZmxvYXQpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpmbG9hdCBsb2cx cGYoZmxvYXQpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCgoKZmxvYXQgZ2FtbWFm X3IoZmxvYXQsIGludCAqKTsKZmxvYXQgbGdhbW1hZl9yKGZsb2F0LCBpbnQgKik7CgoKCgoKY2hh ciAqX19sZHRvYShsb25nIGRvdWJsZSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoq KTsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxvbmc7CgoKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBVU2hvcnQ7CiBlbnVtIHsKICAgICAgICBTVFJUT0dfWmVybyA9IDAsCiAgICAgICAgU1RS VE9HX05vcm1hbCA9IDEsCiAgICAgICAgU1RSVE9HX0Rlbm9ybWFsID0gMiwKICAgICAgICBTVFJU T0dfSW5maW5pdGUgPSAzLAogICAgICAgIFNUUlRPR19OYU4gPSA0LAogICAgICAgIFNUUlRPR19O YU5iaXRzID0gNSwKICAgICAgICBTVFJUT0dfTm9OdW1iZXIgPSA2LAogICAgICAgIFNUUlRPR19S ZXRtYXNrID0gNywKCgoKICAgICAgICBTVFJUT0dfTmVnID0gMHgwOCwKICAgICAgICBTVFJUT0df SW5leGxvID0gMHgxMCwKICAgICAgICBTVFJUT0dfSW5leGhpID0gMHgyMCwKICAgICAgICBTVFJU T0dfSW5leGFjdCA9IDB4MzAsCiAgICAgICAgU1RSVE9HX1VuZGVyZmxvdz0gMHg0MCwKICAgICAg ICBTVFJUT0dfT3ZlcmZsb3cgPSAweDgwCiAgICAgICAgfTsKCiB0eXBlZGVmIHN0cnVjdApGUEkg ewogICAgICAgIGludCBuYml0czsKICAgICAgICBpbnQgZW1pbjsKICAgICAgICBpbnQgZW1heDsK ICAgICAgICBpbnQgcm91bmRpbmc7CiAgICAgICAgaW50IHN1ZGRlbl91bmRlcmZsb3c7CiAgICAg ICAgfSBGUEk7CgplbnVtIHsKICAgICAgICBGUElfUm91bmRfemVybyA9IDAsCiAgICAgICAgRlBJ X1JvdW5kX25lYXIgPSAxLAogICAgICAgIEZQSV9Sb3VuZF91cCA9IDIsCiAgICAgICAgRlBJX1Jv dW5kX2Rvd24gPSAzCiAgICAgICAgfTsKCgoKCgpleHRlcm4gY2hhciogX19kdG9hIChkb3VibGUg ZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBpbnQgKnNpZ24sIGNoYXIgKipy dmUpOwoKZXh0ZXJuIGNoYXIqIGdkdG9hIChGUEkgKmZwaSwgaW50IGJlLCBVTG9uZyAqYml0cywg aW50ICpraW5kcCwgaW50IG1vZGUsIGludCBuZGlnaXRzLCBpbnQgKmRlY3B0LCBjaGFyICoqcnZl KTsKCmV4dGVybiB2b2lkIF9fZnJlZWR0b2EgKGNoYXIqKTsKZXh0ZXJuIGZsb2F0IHN0cnRvZiAo Y29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKGNvbnN0IGNoYXIg KiwgY2hhciAqKik7CmV4dGVybiBpbnQgc3RydG9kZyAoY29uc3QgY2hhciosIGNoYXIqKiwgRlBJ KiwgbG9uZyosIFVMb25nKik7CgpleHRlcm4gY2hhciogZ19kZGZtdCAoY2hhciosIGRvdWJsZSos IGludCwgdW5zaWduZWQpOwpleHRlcm4gY2hhciogZ19kZm10IChjaGFyKiwgZG91YmxlKiwgaW50 LCB1bnNpZ25lZCk7CmV4dGVybiBjaGFyKiBnX2ZmbXQgKGNoYXIqLCBmbG9hdCosIGludCwgdW5z aWduZWQpOwpleHRlcm4gY2hhciogZ19RZm10IChjaGFyKiwgdm9pZCosIGludCwgdW5zaWduZWQp OwpleHRlcm4gY2hhciogZ194Zm10IChjaGFyKiwgdm9pZCosIGludCwgdW5zaWduZWQpOwpleHRl cm4gY2hhciogZ194TGZtdCAoY2hhciosIHZvaWQqLCBpbnQsIHVuc2lnbmVkKTsKCmV4dGVybiBp bnQgc3RydG9JZCAoY29uc3QgY2hhciosIGNoYXIqKiwgZG91YmxlKiwgZG91YmxlKik7CmV4dGVy biBpbnQgc3RydG9JZGQgKGNvbnN0IGNoYXIqLCBjaGFyKiosIGRvdWJsZSosIGRvdWJsZSopOwpl eHRlcm4gaW50IHN0cnRvSWYgKGNvbnN0IGNoYXIqLCBjaGFyKiosIGZsb2F0KiwgZmxvYXQqKTsK ZXh0ZXJuIGludCBzdHJ0b0lRIChjb25zdCBjaGFyKiwgY2hhcioqLCB2b2lkKiwgdm9pZCopOwpl eHRlcm4gaW50IHN0cnRvSXggKGNvbnN0IGNoYXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKik7CmV4 dGVybiBpbnQgc3RydG9JeEwgKGNvbnN0IGNoYXIqLCBjaGFyKiosIHZvaWQqLCB2b2lkKik7CmV4 dGVybiBpbnQgc3RydG9yZCAoY29uc3QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKTsKZXh0 ZXJuIGludCBzdHJ0b3JkZCAoY29uc3QgY2hhciosIGNoYXIqKiwgaW50LCBkb3VibGUqKTsKZXh0 ZXJuIGludCBzdHJ0b3JmIChjb25zdCBjaGFyKiwgY2hhcioqLCBpbnQsIGZsb2F0Kik7CmV4dGVy biBpbnQgc3RydG9yUSAoY29uc3QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lkKik7CmV4dGVybiBp bnQgc3RydG9yeCAoY29uc3QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lkKik7CmV4dGVybiBpbnQg c3RydG9yeEwgKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCwgdm9pZCopOwoKZXh0ZXJuIGludCBz dHJ0b2RJIChjb25zdCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKTsKZXh0ZXJuIGludCBzdHJ0b3Bk IChjb25zdCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKTsKZXh0ZXJuIGludCBzdHJ0b3BkZCAoY29u c3QgY2hhciosIGNoYXIqKiwgZG91YmxlKik7CmV4dGVybiBpbnQgc3RydG9wZiAoY29uc3QgY2hh ciosIGNoYXIqKiwgZmxvYXQqKTsKZXh0ZXJuIGludCBzdHJ0b3BRIChjb25zdCBjaGFyKiwgY2hh cioqLCB2b2lkKik7CmV4dGVybiBpbnQgc3RydG9weCAoY29uc3QgY2hhciosIGNoYXIqKiwgdm9p ZCopOwpleHRlcm4gaW50IHN0cnRvcHhMIChjb25zdCBjaGFyKiwgY2hhcioqLCB2b2lkKik7CgoK CnN0YXRpYyBpbnQgZXhwb25lbnQoY2hhciAqLCBpbnQsIGludCk7CmludApfX3ZmcHJpbnRmKEZJ TEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCB2YV9saXN0IGFwKQp7CiAgICAgICAgY2hhciAqZm10 OwogICAgICAgIGludCBjaDsKICAgICAgICBpbnQgbiwgbjI7CiAgICAgICAgY2hhciAqY3A7CiAg ICAgICAgc3RydWN0IF9fc2lvdiAqaW92cDsKICAgICAgICBpbnQgZmxhZ3M7CiAgICAgICAgaW50 IHJldDsKICAgICAgICBpbnQgd2lkdGg7CiAgICAgICAgaW50IHByZWM7CiAgICAgICAgY2hhciBz aWduOwogICAgICAgIGNoYXIgdGhvdXNhbmRzX3NlcDsKICAgICAgICBjb25zdCBjaGFyICpncm91 cGluZzsKICAgICAgICBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgICAgIGludCBzaWduZmxhZzsK ICAgICAgICBkb3VibGUgZGJsOwogICAgICAgIGxvbmcgZG91YmxlIGxkYmw7CiAgICAgICAgaW50 IGV4cHQ7CiAgICAgICAgY2hhciBleHBjaGFyOwogICAgICAgIGNoYXIgKmR0b2FlbmQ7CiAgICAg ICAgaW50IGV4cHNpemU7CiAgICAgICAgaW50IGxlYWQ7CiAgICAgICAgaW50IG5kaWc7CiAgICAg ICAgY2hhciBleHBzdHJbNiArMl07CiAgICAgICAgY2hhciAqZHRvYXJlc3VsdDsKICAgICAgICBp bnQgbnNlcHM7CiAgICAgICAgaW50IG5yZXBlYXRzOwoKICAgICAgICB1X2xvbmcgdWx2YWw7CiAg ICAgICAgdWludG1heF90IHVqdmFsOwogICAgICAgIGludCBiYXNlOwogICAgICAgIGludCBkcHJl YzsKICAgICAgICBpbnQgcmVhbHN6OwogICAgICAgIGludCBzaXplOwogICAgICAgIGludCBwcnNp emU7CiAgICAgICAgY29uc3QgY2hhciAqeGRpZ3M7CgogICAgICAgIHN0cnVjdCBfX3N1aW8gdWlv OwogICAgICAgIHN0cnVjdCBfX3Npb3YgaW92WzhdOwogICAgICAgIGNoYXIgYnVmWzEwMF07CiAg ICAgICAgY2hhciBveFsyXTsKICAgICAgICB1bmlvbiBhcmcgKmFyZ3RhYmxlOwogICAgICAgIHVu aW9uIGFyZyBzdGF0YXJndGFibGUgWzhdOwogICAgICAgIGludCBuZXh0YXJnOwogICAgICAgIHZh X2xpc3Qgb3JnYXA7CiAgICAgICAgY2hhciAqY29udmJ1ZjsKCgoKCgoKCiAgICAgICAgc3RhdGlj IGNoYXIgYmxhbmtzWzE2XSA9CiAgICAgICAgIHsnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcs JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICd9OwogICAgICAgIHN0YXRpYyBjaGFy IHplcm9lc1sxNl0gPQogICAgICAgICB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywn MCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGNo YXIgeGRpZ3NfbG93ZXJbMTZdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogICAgICAgIHN0YXRpYyBj b25zdCBjaGFyIHhkaWdzX3VwcGVyWzE2XSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKICAgICAgICB0 aG91c2FuZHNfc2VwID0gJ1wwJzsKICAgICAgICBncm91cGluZyA9IDA7CiAgICAgICAgY29udmJ1 ZiA9IDA7CgogICAgICAgIGR0b2FyZXN1bHQgPSAwOwogICAgICAgIGRlY2ltYWxfcG9pbnQgPSBs b2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQ7CgoKICAgICAgICBpZiAoKCgoKGZwKS0+X2ZsYWdz ICYgMHgwMDA4KSA9PSAwIHx8ICgoZnApLT5fYmYuX2Jhc2UgPT0gMCAmJiAoKGZwKS0+X2ZsYWdz ICYgMHgwMjAwKSA9PSAwKSkgJiYgX19zd3NldHVwKGZwKSkpCiAgICAgICAgICAgICAgICByZXR1 cm4gKCgtMSkpOwoKCiAgICAgICAgaWYgKChmcC0+X2ZsYWdzICYgKDB4MDAwMnwweDAwMDh8MHgw MDEwKSkgPT0gKDB4MDAwMnwweDAwMDgpICYmCiAgICAgICAgICAgIGZwLT5fZmlsZSA+PSAwKQog ICAgICAgICAgICAgICAgcmV0dXJuIChfX3NicHJpbnRmKGZwLCBmbXQwLCBhcCkpOwoKICAgICAg ICBmbXQgPSAoY2hhciAqKWZtdDA7CiAgICAgICAgYXJndGFibGUgPSAwOwogICAgICAgIG5leHRh cmcgPSAxOwogICAgICAgIF9fYnVpbHRpbl92YV9jb3B5KChvcmdhcCksIChhcCkpOwogICAgICAg IHVpby51aW9faW92ID0gaW92cCA9IGlvdjsKICAgICAgICB1aW8udWlvX3Jlc2lkID0gMDsKICAg ICAgICB1aW8udWlvX2lvdmNudCA9IDA7CiAgICAgICAgcmV0ID0gMDsKCgoKCiAgICAgICAgZm9y ICg7OykgewogICAgICAgICAgICAgICAgZm9yIChjcCA9IGZtdDsgKGNoID0gKmZtdCkgIT0gJ1ww JyAmJiBjaCAhPSAnJSc7IGZtdCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgaWYgKChuID0gZm10IC0gY3ApICE9IDApIHsKICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCh1bnNpZ25lZClyZXQgKyBuID4gMHg3ZmZmZmZmZikgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICgtMSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICB7IGlvdnAtPmlvdl9iYXNlID0gKGNwKTsgaW92cC0+aW92X2xlbiA9 IChuKTsgdWlvLnVpb19yZXNpZCArPSAobik7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQg Pj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9 IH07CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBuOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgaWYgKGNoID09ICdcMCcpCiAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gZG9uZTsKICAgICAgICAgICAgICAgIGZtdCsrOwoKICAgICAgICAgICAgICAgIGZsYWdzID0g MDsKICAgICAgICAgICAgICAgIGRwcmVjID0gMDsKICAgICAgICAgICAgICAgIHdpZHRoID0gMDsK ICAgICAgICAgICAgICAgIHByZWMgPSAtMTsKICAgICAgICAgICAgICAgIHNpZ24gPSAnXDAnOwog ICAgICAgICAgICAgICAgb3hbMV0gPSAnXDAnOwoKcmZsYWc6IGNoID0gKmZtdCsrOwpyZXN3aXRj aDogc3dpdGNoIChjaCkgewogICAgICAgICAgICAgICAgY2FzZSAnICc6CgoKCgoKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFzaWduKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpZ24gPSAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAg ICAgICAgICBjYXNlICcjJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMDE7 CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNl ICcqJzoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgbjIgPSAwOyBjcCA9IGZtdDsgd2hp bGUgKCgodW5zaWduZWQpKCgqY3ApIC0gJzAnKSA8PSA5KSkgeyBuMiA9IDEwICogbjIgKyAoKCpj cCkgLSAnMCcpOyBjcCsrOyB9IGlmICgqY3AgPT0gJyQnKSB7IGludCBob2xkID0gbmV4dGFyZzsg aWYgKGFyZ3RhYmxlID09IDApIHsgYXJndGFibGUgPSBzdGF0YXJndGFibGU7IF9fZmluZF9hcmd1 bWVudHMgKGZtdDAsIG9yZ2FwLCAmYXJndGFibGUpOyB9IG5leHRhcmcgPSBuMjsgd2lkdGggPSAo KGFyZ3RhYmxlICE9IDApID8gKigoaW50KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0 YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgaW50KSkpOyBuZXh0YXJnID0gaG9sZDsgZm10 ID0gKytjcDsgfSBlbHNlIHsgd2lkdGggPSAoKGFyZ3RhYmxlICE9IDApID8gKigoaW50KikoJmFy Z3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwg aW50KSkpOyB9OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPj0gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJmbGFnOwogICAgICAgICAgICAgICAgICAg ICAgICB3aWR0aCA9IC13aWR0aDsKCiAgICAgICAgICAgICAgICBjYXNlICctJzoKICAgICAgICAg ICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgICAgICAgICAg ICAgc2lnbiA9ICcrJzsKICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZmxhZzsKICAgICAg ICAgICAgICAgIGNhc2UgJ1wnJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgy MDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHRob3VzYW5kc19zZXAgPSAqKGxvY2FsZWNvbnYo KS0+dGhvdXNhbmRzX3NlcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nID0gbG9j YWxlY29udigpLT5ncm91cGluZzsKICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZmxhZzsK ICAgICAgICAgICAgICAgIGNhc2UgJy4nOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNo ID0gKmZtdCsrKSA9PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuMiA9 IDA7IGNwID0gZm10OyB3aGlsZSAoKCh1bnNpZ25lZCkoKCpjcCkgLSAnMCcpIDw9IDkpKSB7IG4y ID0gMTAgKiBuMiArICgoKmNwKSAtICcwJyk7IGNwKys7IH0gaWYgKCpjcCA9PSAnJCcpIHsgaW50 IGhvbGQgPSBuZXh0YXJnOyBpZiAoYXJndGFibGUgPT0gMCkgeyBhcmd0YWJsZSA9IHN0YXRhcmd0 YWJsZTsgX19maW5kX2FyZ3VtZW50cyAoZm10MCwgb3JnYXAsICZhcmd0YWJsZSk7IH0gbmV4dGFy ZyA9IG4yOyBwcmVjID0gKChhcmd0YWJsZSAhPSAwKSA/ICooKGludCopKCZhcmd0YWJsZVtuZXh0 YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGludCkpKTsgbmV4 dGFyZyA9IGhvbGQ7IGZtdCA9ICsrY3A7IH0gZWxzZSB7IHByZWMgPSAoKGFyZ3RhYmxlICE9IDAp ID8gKigoaW50KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRp bl92YV9hcmcoKGFwKSwgaW50KSkpOyB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgcHJlYyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoKHVuc2lnbmVk KSgoY2gpIC0gJzAnKSA8PSA5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy ZWMgPSAxMCAqIHByZWMgKyAoKGNoKSAtICcwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2ggPSAqZm10Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgZ290byByZXN3aXRjaDsKICAgICAgICAgICAgICAgIGNhc2UgJzAnOgoKCgoK CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDgwOwogICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHJmbGFnOwogICAgICAgICAgICAgICAgY2FzZSAnMSc6IGNhc2UgJzInOiBj YXNlICczJzogY2FzZSAnNCc6CiAgICAgICAgICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNh c2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAw OwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbiA9IDEwICogbiArICgoY2gpIC0gJzAnKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaCA9ICpmbXQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoKCh1 bnNpZ25lZCkoKGNoKSAtICcwJykgPD0gOSkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo Y2ggPT0gJyQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dGFyZyA9IG47 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3RhYmxlID09IDApIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3RhYmxlID0gc3RhdGFyZ3Rh YmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19maW5kX2FyZ3Vt ZW50cyAoZm10MCwgb3JnYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmFyZ3RhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZmxhZzsKICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG47CiAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CgogICAgICAgICAgICAgICAgY2FzZSAnTCc6CiAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDA4OwogICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIHJmbGFnOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZmxhZ3MgJiAweDA0MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsYWdzICY9IH4weDA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFn cyB8PSAweDIwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDQwOwogICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIHJmbGFnOwogICAgICAgICAgICAgICAgY2FzZSAnaic6CiAgICAgICAgICAgICAgICAg ICAgICAgIGZsYWdzIHw9IDB4MTAwMDsKICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZmxh ZzsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZmxhZ3MgJiAweDAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICY9 IH4weDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSAweDAyMDsK ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MgfD0gMHgwMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7 CiAgICAgICAgICAgICAgICBjYXNlICdxJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Mg fD0gMHgwMjA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAg ICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHg4MDA7CiAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICd6 JzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHg0MDA7CiAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICdDJzoKICAgICAgICAg ICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMTA7CgogICAgICAgICAgICAgICAgY2FzZSAnYyc6 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDEwKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IG1iczsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgbWJzZXFsZW47CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWJzZXFsZW4gPSB3Y3J0b21iKGNwID0gYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAod2NoYXJfdCkoKGFyZ3RhYmxlICE9IDApID8gKigod2ludF90Kiko JmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFw KSwgd2ludF90KSkpLCAmbWJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bWJzZXFsZW4gPT0gKHNpemVfdCktMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZnAtPl9mbGFncyB8PSAweDAwNDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gKGludCltYnNlcWxlbjsK ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKGNwID0gYnVmKSA9ICgoYXJndGFibGUgIT0gMCkgPyAqKChpbnQqKSgmYXJndGFi bGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCBpbnQp KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICdcMCc7CiAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnRCc6CiAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDEwOwoKICAgICAgICAgICAgICAgIGNhc2Ug J2QnOgogICAgICAgICAgICAgICAgY2FzZSAnaSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChmbGFncyAmICgweDEwMDB8MHg0MDB8MHg4MDB8MHgwMjApKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWp2YWwgPSAoZmxhZ3MmMHgxMDAwID8gKChhcmd0YWJsZSAhPSAwKSA/ ICooKGludG1heF90KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVp bHRpbl92YV9hcmcoKGFwKSwgaW50bWF4X3QpKSkgOiBmbGFncyYweDQwMCA/IChpbnRtYXhfdCko KGFyZ3RhYmxlICE9IDApID8gKigoc2l6ZV90KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChu ZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgc2l6ZV90KSkpIDogZmxhZ3MmMHg4MDAg PyAoaW50bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHB0cmRpZmZfdCopKCZhcmd0YWJsZVtu ZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHB0cmRpZmZf dCkpKSA6IChpbnRtYXhfdCkoKGFyZ3RhYmxlICE9IDApID8gKigobG9uZyBsb25nKikoJmFyZ3Rh YmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9u ZyBsb25nKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGludG1heF90 KXVqdmFsIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWp2 YWwgPSAtdWp2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdu ID0gJy0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bHZhbCA9 IChmbGFncyYweDAxMCA/ICgoYXJndGFibGUgIT0gMCkgPyAqKChsb25nKikoJmFyZ3RhYmxlW25l eHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZykpKSA6 IGZsYWdzJjB4MDQwID8gKGxvbmcpKHNob3J0KSgoYXJndGFibGUgIT0gMCkgPyAqKChpbnQqKSgm YXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXAp LCBpbnQpKSkgOiBmbGFncyYweDIwMDAgPyAobG9uZykoc2lnbmVkIGNoYXIpKChhcmd0YWJsZSAh PSAwKSA/ICooKGludCopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1 aWx0aW5fdmFfYXJnKChhcCksIGludCkpKSA6IChsb25nKSgoYXJndGFibGUgIT0gMCkgPyAqKChp bnQqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2Fy ZygoYXApLCBpbnQpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobG9u Zyl1bHZhbCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVs dmFsID0gLXVsdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ln biA9ICctJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDEwOwogICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIG51bWJlcjsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAg ICAgICAgICAgICAgY2FzZSAnRSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGNoYXIgPSBj aDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPCAwKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByZWMgPSA2ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWMrKzsKICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBmcF9iZWdpbjsKICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAg ICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGNoYXIgPSAnXDAn OwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZwX2JlZ2luOwogICAgICAgICAgICAgICAg Y2FzZSAnZyc6CiAgICAgICAgICAgICAgICBjYXNlICdHJzoKICAgICAgICAgICAgICAgICAgICAg ICAgZXhwY2hhciA9IGNoIC0gKCdnJyAtICdlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChwcmVjID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDE7CmZw X2JlZ2luOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDY7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChkdG9hcmVzdWx0ICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mcmVl ZHRvYShkdG9hcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgMHgw MDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZGJsID0gKChhcmd0YWJsZSAh PSAwKSA/ICooKGxvbmcgZG91YmxlKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJn KyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZyBkb3VibGUpKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHRvYXJlc3VsdCA9IGNwID0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZHRvYSgmbGRibCwgZXhwY2hhciA/IDIgOiAzLCBwcmVjLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVu ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGJsID0gKChhcmd0YWJsZSAhPSAwKSA/ICooKGRvdWJsZSopKCZhcmd0YWJs ZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGRvdWJs ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdG9hcmVzdWx0ID0gY3AgPQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0b2EoZGJsLCBleHBjaGFyID8g MiA6IDMsIHByZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHB0LCAm c2lnbmZsYWcsICZkdG9hZW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZXhwdCA9PSA5OTk5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw dCA9IDB4N2ZmZmZmZmY7CnsKICAgICAgICBpbnQgUTsKICAgICAgICBjaGFyIFFidWZbODBdOwog ICAgICAgIGZvciAoUSA9IDA7IFEgPCA4OyBRKyspIHsKICAgICAgICAgICAgICAgIHNwcmludGYo UWJ1ZiArIFEgKiAyLCAiJTAyeFxuIiwgKCh1bnNpZ25lZCBjaGFyICopJmRibClbUV0pOwogICAg ICAgIH0KICAgICAgICB3cml0ZSgyLCBRYnVmLCAxNyk7Cn0KICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmZsYWcpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2lnbiA9ICctJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGV4cHQgPT0gMHg3ZmZmZmZmZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgqY3AgPT0gJ04nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj cCA9IChjaCA+PSAnYScpID8gIm5hbiIgOiAiTkFOIjsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpZ24gPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSAo Y2ggPj0gJ2EnKSA/ICJpbmYiIDogIklORiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZSA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgx MDA7CiAgICAgICAgICAgICAgICAgICAgICAgIG5kaWcgPSBkdG9hZW5kIC0gY3A7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnZycgfHwgY2ggPT0gJ0cnKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHQgPiAtNCAmJiBleHB0IDw9IHByZWMpIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBjaGFyID0gJ1wwJzsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDAxKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjIC09IGV4 cHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSBuZGlnIC0gZXhw dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjIDwgMCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCgoKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncyAmIDB4MDAxKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IG5kaWc7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBjaGFyKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXhwc2l6ZSA9IGV4cG9uZW50KGV4cHN0ciwgZXhwdCAtIDEsIGV4cGNo YXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBleHBzaXplICsgcHJl YzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA+IDEgfHwgZmxhZ3Mg JiAweDAwMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc2l6ZTsK ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGV4cHQgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZSA9IGV4cHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjIHx8IGZsYWdzICYgMHgwMDEpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICs9IHByZWMgKyAxOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cGluZyAmJiBleHB0ID4gMCkgewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zZXBzID0gbnJlcGVhdHMg PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZCA9IGV4cHQ7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKmdyb3VwaW5n ICE9IDB4N2YpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxlYWQgPD0gKmdyb3VwaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZWFkIC09ICpncm91cGluZzsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCooZ3JvdXBpbmcrMSkpIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Vw cysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdyb3VwaW5nKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5yZXBlYXRzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICs9 IG5zZXBzICsgbnJlcGVhdHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkID0gZXhwdDsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgICAgICBjYXNlICduJzoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo ZmxhZ3MgJiAweDAyMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChhcmd0YWJs ZSAhPSAwKSA/ICooKGxvbmcgbG9uZyAqKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0 YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZyBsb25nICopKSkgPSByZXQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMHg0MDApCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKigoYXJndGFibGUgIT0gMCkgPyAqKChzc2l6ZV90ICoqKSgmYXJn dGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCBz c2l6ZV90ICopKSkgPSAoc3NpemVfdClyZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKGZsYWdzICYgMHg4MDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoYXJn dGFibGUgIT0gMCkgPyAqKChwdHJkaWZmX3QgKiopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAo bmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHB0cmRpZmZfdCAqKSkpID0gcmV0Owog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDB4MTAwMCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKChhcmd0YWJsZSAhPSAwKSA/ICooKGludG1heF90ICoq KSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygo YXApLCBpbnRtYXhfdCAqKSkpID0gcmV0OwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChmbGFncyAmIDB4MDEwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKGFyZ3Rh YmxlICE9IDApID8gKigobG9uZyAqKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJn KyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZyAqKSkpID0gcmV0OwogICAgICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDB4MDQwKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICooKGFyZ3RhYmxlICE9IDApID8gKigoc2hvcnQgKiopKCZhcmd0YWJsZVtuZXh0 YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHNob3J0ICopKSkg PSByZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgMHgyMDAwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKGFyZ3RhYmxlICE9IDApID8gKigoc2ln bmVkIGNoYXIgKiopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0 aW5fdmFfYXJnKChhcCksIHNpZ25lZCBjaGFyICopKSkgPSByZXQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChhcmd0YWJsZSAh PSAwKSA/ICooKGludCAqKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9f YnVpbHRpbl92YV9hcmcoKGFwKSwgaW50ICopKSkgPSByZXQ7CiAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgY2FzZSAnTyc6CiAgICAgICAgICAgICAgICAg ICAgICAgIGZsYWdzIHw9IDB4MDEwOwoKICAgICAgICAgICAgICAgIGNhc2UgJ28nOgogICAgICAg ICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAoMHgxMDAwfDB4NDAwfDB4ODAwfDB4MDIwKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1anZhbCA9IChmbGFncyYweDEwMDAgPyAo KGFyZ3RhYmxlICE9IDApID8gKigodWludG1heF90KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6 IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgdWludG1heF90KSkpIDogZmxhZ3Mm MHg0MDAgPyAodWludG1heF90KSgoYXJndGFibGUgIT0gMCkgPyAqKChzaXplX3QqKSgmYXJndGFi bGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCBzaXpl X3QpKSkgOiBmbGFncyYweDgwMCA/ICh1aW50bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHB0 cmRpZmZfdCopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5f dmFfYXJnKChhcCksIHB0cmRpZmZfdCkpKSA6ICh1aW50bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ ICooKHVuc2lnbmVkIGxvbmcgbG9uZyopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFy ZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHVuc2lnbmVkIGxvbmcgbG9uZykpKSk7CiAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bHZhbCA9IChmbGFncyYweDAxMCA/ICgoYXJndGFibGUgIT0gMCkgPyAqKCh1X2xvbmcqKSgmYXJn dGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCB1 X2xvbmcpKSkgOiBmbGFncyYweDA0MCA/ICh1X2xvbmcpKHVfc2hvcnQpKChhcmd0YWJsZSAhPSAw KSA/ICooKGludCopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0 aW5fdmFfYXJnKChhcCksIGludCkpKSA6IGZsYWdzJjB4MjAwMCA/ICh1X2xvbmcpKHVfY2hhciko KGFyZ3RhYmxlICE9IDApID8gKigoaW50KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0 YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgaW50KSkpIDogKHVfbG9uZykoKGFyZ3RhYmxl ICE9IDApID8gKigodV9pbnQqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywg X19idWlsdGluX3ZhX2FyZygoYXApLCB1X2ludCkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAg IGJhc2UgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vc2lnbjsKICAgICAgICAg ICAgICAgIGNhc2UgJ3AnOgoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgdWp2YWwgPSAo dWludG1heF90KSh1aW50cHRyX3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHZvaWQgKiopKCZhcmd0 YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHZv aWQgKikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2OwogICAgICAgICAgICAg ICAgICAgICAgICB4ZGlncyA9IHhkaWdzX2xvd2VyOwogICAgICAgICAgICAgICAgICAgICAgICBm bGFncyA9IGZsYWdzIHwgMHgxMDAwOwogICAgICAgICAgICAgICAgICAgICAgICBveFsxXSA9ICd4 JzsKICAgICAgICAgICAgICAgICAgICAgICAgZ290byBub3NpZ247CiAgICAgICAgICAgICAgICBj YXNlICdTJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMTA7CgogICAgICAg ICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4 MDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqd2NwOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udmJ1ZiAhPSAwKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjb252YnVmKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKHdjcCA9ICgoYXJndGFibGUgIT0gMCkgPyAqKCh3Y2hh cl90ICoqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3Zh X2FyZygoYXApLCB3Y2hhcl90ICopKSkpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjcCA9ICIobnVsbCkiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmJ1 ZiA9IF9fd2NzY29udih3Y3AsIHByZWMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGNvbnZidWYgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IDB4MDA0MDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNwID0gY29udmJ1ZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNwID0gKChhcmd0YWJsZSAh PSAwKSA/ICooKGNoYXIgKiopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBf X2J1aWx0aW5fdmFfYXJnKChhcCksIGNoYXIgKikpKSkgPT0gMCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjcCA9ICIobnVsbCkiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo cHJlYyA+PSAwKSB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpw ID0gbWVtY2hyKGNwLCAwLCAoc2l6ZV90KXByZWMpOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAocCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplID0gcCAtIGNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHNpemUgPiBwcmVjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplID0gcHJlYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBwcmVj OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplID0gc3RybGVuKGNwKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9 ICdcMCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnVSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDEwOwoKICAgICAgICAg ICAgICAgIGNhc2UgJ3UnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAoMHgx MDAwfDB4NDAwfDB4ODAwfDB4MDIwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 anZhbCA9IChmbGFncyYweDEwMDAgPyAoKGFyZ3RhYmxlICE9IDApID8gKigodWludG1heF90Kiko JmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFw KSwgdWludG1heF90KSkpIDogZmxhZ3MmMHg0MDAgPyAodWludG1heF90KSgoYXJndGFibGUgIT0g MCkgPyAqKChzaXplX3QqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19i dWlsdGluX3ZhX2FyZygoYXApLCBzaXplX3QpKSkgOiBmbGFncyYweDgwMCA/ICh1aW50bWF4X3Qp KChhcmd0YWJsZSAhPSAwKSA/ICooKHB0cmRpZmZfdCopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkg OiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHB0cmRpZmZfdCkpKSA6ICh1aW50 bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHVuc2lnbmVkIGxvbmcgbG9uZyopKCZhcmd0YWJs ZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHVuc2ln bmVkIGxvbmcgbG9uZykpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bHZhbCA9IChmbGFncyYweDAxMCA/ICgoYXJndGFibGUg IT0gMCkgPyAqKCh1X2xvbmcqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywg X19idWlsdGluX3ZhX2FyZygoYXApLCB1X2xvbmcpKSkgOiBmbGFncyYweDA0MCA/ICh1X2xvbmcp KHVfc2hvcnQpKChhcmd0YWJsZSAhPSAwKSA/ICooKGludCopKCZhcmd0YWJsZVtuZXh0YXJnKytd KSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGludCkpKSA6IGZsYWdzJjB4 MjAwMCA/ICh1X2xvbmcpKHVfY2hhcikoKGFyZ3RhYmxlICE9IDApID8gKigoaW50KikoJmFyZ3Rh YmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgaW50 KSkpIDogKHVfbG9uZykoKGFyZ3RhYmxlICE9IDApID8gKigodV9pbnQqKSgmYXJndGFibGVbbmV4 dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCB1X2ludCkpKSk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBub3NpZ247CiAgICAgICAgICAgICAgICBjYXNlICdYJzoKICAgICAgICAgICAgICAg ICAgICAgICAgeGRpZ3MgPSB4ZGlnc191cHBlcjsKICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBoZXg7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICAgICAg eGRpZ3MgPSB4ZGlnc19sb3dlcjsKaGV4OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxh Z3MgJiAoMHgxMDAwfDB4NDAwfDB4ODAwfDB4MDIwKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1anZhbCA9IChmbGFncyYweDEwMDAgPyAoKGFyZ3RhYmxlICE9IDApID8gKigodWlu dG1heF90KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92 YV9hcmcoKGFwKSwgdWludG1heF90KSkpIDogZmxhZ3MmMHg0MDAgPyAodWludG1heF90KSgoYXJn dGFibGUgIT0gMCkgPyAqKChzaXplX3QqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRh cmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCBzaXplX3QpKSkgOiBmbGFncyYweDgwMCA/ICh1 aW50bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHB0cmRpZmZfdCopKCZhcmd0YWJsZVtuZXh0 YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHB0cmRpZmZfdCkp KSA6ICh1aW50bWF4X3QpKChhcmd0YWJsZSAhPSAwKSA/ICooKHVuc2lnbmVkIGxvbmcgbG9uZyop KCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChh cCksIHVuc2lnbmVkIGxvbmcgbG9uZykpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bHZhbCA9IChmbGFncyYweDAxMCA/ICgo YXJndGFibGUgIT0gMCkgPyAqKCh1X2xvbmcqKSgmYXJndGFibGVbbmV4dGFyZysrXSkpIDogKG5l eHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCB1X2xvbmcpKSkgOiBmbGFncyYweDA0MCA/ ICh1X2xvbmcpKHVfc2hvcnQpKChhcmd0YWJsZSAhPSAwKSA/ICooKGludCopKCZhcmd0YWJsZVtu ZXh0YXJnKytdKSkgOiAobmV4dGFyZysrLCBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGludCkpKSA6 IGZsYWdzJjB4MjAwMCA/ICh1X2xvbmcpKHVfY2hhcikoKGFyZ3RhYmxlICE9IDApID8gKigoaW50 KikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IChuZXh0YXJnKyssIF9fYnVpbHRpbl92YV9hcmco KGFwKSwgaW50KSkpIDogKHVfbG9uZykoKGFyZ3RhYmxlICE9IDApID8gKigodV9pbnQqKSgmYXJn dGFibGVbbmV4dGFyZysrXSkpIDogKG5leHRhcmcrKywgX19idWlsdGluX3ZhX2FyZygoYXApLCB1 X2ludCkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKCiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDAxICYmCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZmxhZ3MgJiAoMHgxMDAwfDB4NDAwfDB4ODAwfDB4MDIwKSA/IHVqdmFsICE9IDAgOiB1 bHZhbCAhPSAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBveFsxXSA9IGNoOwoK ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJj0gfjB4MjAwOwoKbm9zaWduOiBzaWduID0g J1wwJzsKCgoKCgpudW1iZXI6IGlmICgoZHByZWMgPSBwcmVjKSA+PSAwKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsYWdzICY9IH4weDA4MDsKCgoKCgoKICAgICAgICAgICAgICAg ICAgICAgICAgY3AgPSBidWYgKyAxMDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFn cyAmICgweDEwMDB8MHg0MDB8MHg4MDB8MHgwMjApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHVqdmFsICE9IDAgfHwgcHJlYyAhPSAwKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3AgPSBfX3VqdG9hKHVqdmFsLCBjcCwgYmFzZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIDB4MDAxLCB4ZGln cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIDB4 MjAwLCB0aG91c2FuZHNfc2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdyb3VwaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWx2YWwgIT0gMCB8fCBwcmVjICE9IDApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCA9IF9fdWx0b2EodWx2YWws IGNwLCBiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs YWdzICYgMHgwMDEsIHhkaWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZsYWdzICYgMHgyMDAsIHRob3VzYW5kc19zZXAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmcpOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBidWYgKyAxMDAgLSBjcDsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiAxMDApCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWJvcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1wwJykK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CgogICAgICAgICAgICAg ICAgICAgICAgICBjcCA9IGJ1ZjsKICAgICAgICAgICAgICAgICAgICAgICAgKmNwID0gY2g7CiAg ICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBz aWduID0gJ1wwJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICByZWFsc3ogPSBkcHJlYyA+IHNpemUgPyBkcHJlYyA6IHNpemU7 CiAgICAgICAgICAgICAgICBpZiAoc2lnbikKICAgICAgICAgICAgICAgICAgICAgICAgcmVhbHN6 Kys7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChveFsxXSkKICAgICAgICAgICAgICAgICAgICAg ICAgcmVhbHN6ICs9IDI7CgogICAgICAgICAgICAgICAgcHJzaXplID0gd2lkdGggPiByZWFsc3og PyB3aWR0aCA6IHJlYWxzejsKICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpcmV0ICsgcHJz aXplID4gMHg3ZmZmZmZmZikgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAoLTEpOwog ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgfQoKCiAg ICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgKDB4MDA0fDB4MDgwKSkgPT0gMCkKICAgICAgICAg ICAgICAgICAgICAgICAgeyBpZiAoKG4gPSAod2lkdGggLSByZWFsc3opKSA+IDApIHsgd2hpbGUg KG4gPiAxNikgeyB7IGlvdnAtPmlvdl9iYXNlID0gKGJsYW5rcyk7IGlvdnAtPmlvdl9sZW4gPSAo MTYpOyB1aW8udWlvX3Jlc2lkICs9ICgxNik7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQg Pj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9 IH07IG4gLT0gMTY7IH0geyBpb3ZwLT5pb3ZfYmFzZSA9IChibGFua3MpOyBpb3ZwLT5pb3ZfbGVu ID0gKG4pOyB1aW8udWlvX3Jlc2lkICs9IChuKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNu dCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7 IH0gfTsgfSB9OwoKCiAgICAgICAgICAgICAgICBpZiAoc2lnbikgewogICAgICAgICAgICAgICAg ICAgICAgICB7IGlvdnAtPmlvdl9iYXNlID0gKCZzaWduKTsgaW92cC0+aW92X2xlbiA9ICgxKTsg dWlvLnVpb19yZXNpZCArPSAoMSk7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkg eyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9IH07CiAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG94WzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IG94WzBdID0gJzAnOwogICAgICAgICAgICAgICAgICAgICAgICB7IGlvdnAtPmlvdl9iYXNlID0g KG94KTsgaW92cC0+aW92X2xlbiA9ICgyKTsgdWlvLnVpb19yZXNpZCArPSAoMik7IGlvdnArKzsg aWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3Rv IGVycm9yOyBpb3ZwID0gaW92OyB9IH07CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAg ICAgIGlmICgoZmxhZ3MgJiAoMHgwMDR8MHgwODApKSA9PSAweDA4MCkKICAgICAgICAgICAgICAg ICAgICAgICAgeyBpZiAoKG4gPSAod2lkdGggLSByZWFsc3opKSA+IDApIHsgd2hpbGUgKG4gPiAx NikgeyB7IGlvdnAtPmlvdl9iYXNlID0gKHplcm9lcyk7IGlvdnAtPmlvdl9sZW4gPSAoMTYpOyB1 aW8udWlvX3Jlc2lkICs9ICgxNik7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkg eyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9IH07IG4g LT0gMTY7IH0geyBpb3ZwLT5pb3ZfYmFzZSA9ICh6ZXJvZXMpOyBpb3ZwLT5pb3ZfbGVuID0gKG4p OyB1aW8udWlvX3Jlc2lkICs9IChuKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4 KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsg fSB9OwoKCiAgICAgICAgICAgICAgICB7IGlmICgobiA9IChkcHJlYyAtIHNpemUpKSA+IDApIHsg d2hpbGUgKG4gPiAxNikgeyB7IGlvdnAtPmlvdl9iYXNlID0gKHplcm9lcyk7IGlvdnAtPmlvdl9s ZW4gPSAoMTYpOyB1aW8udWlvX3Jlc2lkICs9ICgxNik7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19p b3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0g aW92OyB9IH07IG4gLT0gMTY7IH0geyBpb3ZwLT5pb3ZfYmFzZSA9ICh6ZXJvZXMpOyBpb3ZwLT5p b3ZfbGVuID0gKG4pOyB1aW8udWlvX3Jlc2lkICs9IChuKTsgaW92cCsrOyBpZiAoKyt1aW8udWlv X2lvdmNudCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAg PSBpb3Y7IH0gfTsgfSB9OwoKCgogICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIDB4MTAwKSA9 PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW92cC0+aW92X2Jhc2UgPSAoY3ApOyBp b3ZwLT5pb3ZfbGVuID0gKHNpemUpOyB1aW8udWlvX3Jlc2lkICs9IChzaXplKTsgaW92cCsrOyBp ZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8g ZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghZXhwY2hhcikgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChleHB0IDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsgaW92cC0+aW92X2Jhc2UgPSAoemVyb2VzKTsgaW92cC0+aW92X2xlbiA9ICgxKTsg dWlvLnVpb19yZXNpZCArPSAoMSk7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkg eyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9IH07CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyB8fCBmbGFncyAm IDB4MDAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IGlvdnAtPmlvdl9iYXNlID0gKGRlY2ltYWxfcG9pbnQpOyBpb3ZwLT5pb3ZfbGVuID0gKDEpOyB1 aW8udWlvX3Jlc2lkICs9ICgxKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4KSB7 IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKChuID0gKC1leHB0KSkg PiAwKSB7IHdoaWxlIChuID4gMTYpIHsgeyBpb3ZwLT5pb3ZfYmFzZSA9ICh6ZXJvZXMpOyBpb3Zw LT5pb3ZfbGVuID0gKDE2KTsgdWlvLnVpb19yZXNpZCArPSAoMTYpOyBpb3ZwKys7IGlmICgrK3Vp by51aW9faW92Y250ID49IDgpIHsgaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsg aW92cCA9IGlvdjsgfSB9OyBuIC09IDE2OyB9IHsgaW92cC0+aW92X2Jhc2UgPSAoemVyb2VzKTsg aW92cC0+aW92X2xlbiA9IChuKTsgdWlvLnVpb19yZXNpZCArPSAobik7IGlvdnArKzsgaWYgKCsr dWlvLnVpb19pb3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9y OyBpb3ZwID0gaW92OyB9IH07IH0gfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmVjICs9IGV4cHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgbjIgPSAo ZHRvYWVuZCkgLSAoY3ApOyBpZiAobjIgPiAobGVhZCkpIG4yID0gKGxlYWQpOyBpZiAobjIgPiAw KSB7IGlvdnAtPmlvdl9iYXNlID0gKChjcCkpOyBpb3ZwLT5pb3ZfbGVuID0gKG4yKTsgdWlvLnVp b19yZXNpZCArPSAobjIpOyBpb3ZwKys7IGlmICgrK3Vpby51aW9faW92Y250ID49IDgpIHsgaWYg KF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9IGlvdjsgfSB9OyB7IGlmICgo biA9ICgobGVhZCkgLSAobjIgPiAwID8gbjIgOiAwKSkpID4gMCkgeyB3aGlsZSAobiA+IDE2KSB7 IHsgaW92cC0+aW92X2Jhc2UgPSAoKHplcm9lcykpOyBpb3ZwLT5pb3ZfbGVuID0gKDE2KTsgdWlv LnVpb19yZXNpZCArPSAoMTYpOyBpb3ZwKys7IGlmICgrK3Vpby51aW9faW92Y250ID49IDgpIHsg aWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9IGlvdjsgfSB9OyBuIC09 IDE2OyB9IHsgaW92cC0+aW92X2Jhc2UgPSAoKHplcm9lcykpOyBpb3ZwLT5pb3ZfbGVuID0gKG4p OyB1aW8udWlvX3Jlc2lkICs9IChuKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4 KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsg fSB9OyB9IHdoaWxlKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3AgKz0gbGVhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChn cm91cGluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3aGlsZSAobnNlcHM+MCB8fCBucmVwZWF0cz4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5yZXBlYXRzID4gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5yZXBlYXRzLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZy0tOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNlcHMtLTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBp b3ZwLT5pb3ZfYmFzZSA9ICgmdGhvdXNhbmRzX3NlcCk7IGlvdnAtPmlvdl9sZW4gPSAoMSk7IHVp by51aW9fcmVzaWQgKz0gKDEpOyBpb3ZwKys7IGlmICgrK3Vpby51aW9faW92Y250ID49IDgpIHsg aWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9IGlvdjsgfSB9OwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7 IG4yID0gKGR0b2FlbmQpIC0gKGNwKTsgaWYgKG4yID4gKCpncm91cGluZykpIG4yID0gKCpncm91 cGluZyk7IGlmIChuMiA+IDApIHsgaW92cC0+aW92X2Jhc2UgPSAoKGNwKSk7IGlvdnAtPmlvdl9s ZW4gPSAobjIpOyB1aW8udWlvX3Jlc2lkICs9IChuMik7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19p b3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0g aW92OyB9IH07IHsgaWYgKChuID0gKCgqZ3JvdXBpbmcpIC0gKG4yID4gMCA/IG4yIDogMCkpKSA+ IDApIHsgd2hpbGUgKG4gPiAxNikgeyB7IGlvdnAtPmlvdl9iYXNlID0gKCh6ZXJvZXMpKTsgaW92 cC0+aW92X2xlbiA9ICgxNik7IHVpby51aW9fcmVzaWQgKz0gKDE2KTsgaW92cCsrOyBpZiAoKyt1 aW8udWlvX2lvdmNudCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7 IGlvdnAgPSBpb3Y7IH0gfTsgbiAtPSAxNjsgfSB7IGlvdnAtPmlvdl9iYXNlID0gKCh6ZXJvZXMp KTsgaW92cC0+aW92X2xlbiA9IChuKTsgdWlvLnVpb19yZXNpZCArPSAobik7IGlvdnArKzsgaWYg KCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVy cm9yOyBpb3ZwID0gaW92OyB9IH07IH0gfTsgfSB3aGlsZSgwKTsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AgKz0gKmdyb3VwaW5nOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcCA+IGR0b2FlbmQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3AgPSBkdG9hZW5kOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgfHwgZmxhZ3Mg JiAweDAwMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eyBpb3ZwLT5pb3ZfYmFzZSA9IChkZWNpbWFsX3BvaW50KTsgaW92cC0+aW92X2xlbiA9ICgxKTsg dWlvLnVpb19yZXNpZCArPSAoMSk7IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkg eyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9IH07CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRvIHsgbjIgPSAoZHRvYWVuZCkgLSAoY3ApOyBpZiAobjIgPiAocHJlYykpIG4yID0g KHByZWMpOyBpZiAobjIgPiAwKSB7IGlvdnAtPmlvdl9iYXNlID0gKChjcCkpOyBpb3ZwLT5pb3Zf bGVuID0gKG4yKTsgdWlvLnVpb19yZXNpZCArPSAobjIpOyBpb3ZwKys7IGlmICgrK3Vpby51aW9f aW92Y250ID49IDgpIHsgaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9 IGlvdjsgfSB9OyB7IGlmICgobiA9ICgocHJlYykgLSAobjIgPiAwID8gbjIgOiAwKSkpID4gMCkg eyB3aGlsZSAobiA+IDE2KSB7IHsgaW92cC0+aW92X2Jhc2UgPSAoKHplcm9lcykpOyBpb3ZwLT5p b3ZfbGVuID0gKDE2KTsgdWlvLnVpb19yZXNpZCArPSAoMTYpOyBpb3ZwKys7IGlmICgrK3Vpby51 aW9faW92Y250ID49IDgpIHsgaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92 cCA9IGlvdjsgfSB9OyBuIC09IDE2OyB9IHsgaW92cC0+aW92X2Jhc2UgPSAoKHplcm9lcykpOyBp b3ZwLT5pb3ZfbGVuID0gKG4pOyB1aW8udWlvX3Jlc2lkICs9IChuKTsgaW92cCsrOyBpZiAoKyt1 aW8udWlvX2lvdmNudCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7 IGlvdnAgPSBpb3Y7IH0gfTsgfSB9OyB9IHdoaWxlKDApOwogICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID4gMSB8 fCBmbGFncyAmIDB4MDAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBidWZbMF0gPSAqY3ArKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJ1ZlsxXSA9ICpkZWNpbWFsX3BvaW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeyBpb3ZwLT5pb3ZfYmFzZSA9IChidWYpOyBpb3ZwLT5pb3ZfbGVuID0gKDIpOyB1 aW8udWlvX3Jlc2lkICs9ICgyKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4KSB7 IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW92cC0+aW92X2Jhc2UgPSAo Y3ApOyBpb3ZwLT5pb3ZfbGVuID0gKG5kaWctMSk7IHVpby51aW9fcmVzaWQgKz0gKG5kaWctMSk7 IGlvdnArKzsgaWYgKCsrdWlvLnVpb19pb3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1 aW8pKSBnb3RvIGVycm9yOyBpb3ZwID0gaW92OyB9IH07CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7IGlmICgobiA9IChwcmVjIC0gbmRpZykpID4gMCkgeyB3aGlsZSAo biA+IDE2KSB7IHsgaW92cC0+aW92X2Jhc2UgPSAoemVyb2VzKTsgaW92cC0+aW92X2xlbiA9ICgx Nik7IHVpby51aW9fcmVzaWQgKz0gKDE2KTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+ PSA4KSB7IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0g fTsgbiAtPSAxNjsgfSB7IGlvdnAtPmlvdl9iYXNlID0gKHplcm9lcyk7IGlvdnAtPmlvdl9sZW4g PSAobik7IHVpby51aW9fcmVzaWQgKz0gKG4pOyBpb3ZwKys7IGlmICgrK3Vpby51aW9faW92Y250 ID49IDgpIHsgaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9IGlvdjsg fSB9OyB9IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlvdnAtPmlvdl9iYXNlID0gKGNwKTsg aW92cC0+aW92X2xlbiA9ICgxKTsgdWlvLnVpb19yZXNpZCArPSAoMSk7IGlvdnArKzsgaWYgKCsr dWlvLnVpb19pb3ZjbnQgPj0gOCkgeyBpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBnb3RvIGVycm9y OyBpb3ZwID0gaW92OyB9IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpb3Zw LT5pb3ZfYmFzZSA9IChleHBzdHIpOyBpb3ZwLT5pb3ZfbGVuID0gKGV4cHNpemUpOyB1aW8udWlv X3Jlc2lkICs9IChleHBzaXplKTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4KSB7 IGlmIChfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAg ICAgIGlmIChmbGFncyAmIDB4MDA0KQogICAgICAgICAgICAgICAgICAgICAgICB7IGlmICgobiA9 ICh3aWR0aCAtIHJlYWxzeikpID4gMCkgeyB3aGlsZSAobiA+IDE2KSB7IHsgaW92cC0+aW92X2Jh c2UgPSAoYmxhbmtzKTsgaW92cC0+aW92X2xlbiA9ICgxNik7IHVpby51aW9fcmVzaWQgKz0gKDE2 KTsgaW92cCsrOyBpZiAoKyt1aW8udWlvX2lvdmNudCA+PSA4KSB7IGlmIChfX3NwcmludChmcCwg JnVpbykpIGdvdG8gZXJyb3I7IGlvdnAgPSBpb3Y7IH0gfTsgbiAtPSAxNjsgfSB7IGlvdnAtPmlv dl9iYXNlID0gKGJsYW5rcyk7IGlvdnAtPmlvdl9sZW4gPSAobik7IHVpby51aW9fcmVzaWQgKz0g KG4pOyBpb3ZwKys7IGlmICgrK3Vpby51aW9faW92Y250ID49IDgpIHsgaWYgKF9fc3ByaW50KGZw LCAmdWlvKSkgZ290byBlcnJvcjsgaW92cCA9IGlvdjsgfSB9OyB9IH07CgoKICAgICAgICAgICAg ICAgIHJldCArPSBwcnNpemU7CgogICAgICAgICAgICAgICAgeyBpZiAodWlvLnVpb19yZXNpZCAm JiBfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IHVpby51aW9faW92Y250ID0gMDsgaW92 cCA9IGlvdjsgfTsKICAgICAgICB9CmRvbmU6CiAgICAgICAgeyBpZiAodWlvLnVpb19yZXNpZCAm JiBfX3NwcmludChmcCwgJnVpbykpIGdvdG8gZXJyb3I7IHVpby51aW9faW92Y250ID0gMDsgaW92 cCA9IGlvdjsgfTsKZXJyb3I6CgogICAgICAgIGlmIChkdG9hcmVzdWx0ICE9IDApCiAgICAgICAg ICAgICAgICBfX2ZyZWVkdG9hKGR0b2FyZXN1bHQpOwoKICAgICAgICBpZiAoY29udmJ1ZiAhPSAw KQogICAgICAgICAgICAgICAgZnJlZShjb252YnVmKTsKICAgICAgICBpZiAoKCgoZnApLT5fZmxh Z3MgJiAweDAwNDApICE9IDApKQogICAgICAgICAgICAgICAgcmV0ID0gKC0xKTsKICAgICAgICBp ZiAoKGFyZ3RhYmxlICE9IDApICYmIChhcmd0YWJsZSAhPSBzdGF0YXJndGFibGUpKQogICAgICAg ICAgICAgICAgZnJlZSAoYXJndGFibGUpOwogICAgICAgIHJldHVybiAocmV0KTsKCn0KCgoKCgoK CnN0YXRpYyB2b2lkCl9fZmluZF9hcmd1bWVudHMgKGNvbnN0IGNoYXIgKmZtdDAsIHZhX2xpc3Qg YXAsIHVuaW9uIGFyZyAqKmFyZ3RhYmxlKQp7CiAgICAgICAgY2hhciAqZm10OwogICAgICAgIGlu dCBjaDsKICAgICAgICBpbnQgbiwgbjI7CiAgICAgICAgY2hhciAqY3A7CiAgICAgICAgaW50IGZs YWdzOwogICAgICAgIGludCB3aWR0aDsKICAgICAgICBlbnVtIHR5cGVpZCAqdHlwZXRhYmxlOwog ICAgICAgIGVudW0gdHlwZWlkIHN0YXR0eXBldGFibGUgWzhdOwogICAgICAgIGludCB0YWJsZXNp emU7CiAgICAgICAgaW50IHRhYmxlbWF4OwogICAgICAgIGludCBuZXh0YXJnOwogICAgICAgIGZt dCA9IChjaGFyICopZm10MDsKICAgICAgICB0eXBldGFibGUgPSBzdGF0dHlwZXRhYmxlOwogICAg ICAgIHRhYmxlc2l6ZSA9IDg7CiAgICAgICAgdGFibGVtYXggPSAwOwogICAgICAgIG5leHRhcmcg PSAxOwogICAgICAgIG1lbXNldCAodHlwZXRhYmxlLCBUX1VOVVNFRCwgOCk7CgoKCgogICAgICAg IGZvciAoOzspIHsKICAgICAgICAgICAgICAgIGZvciAoY3AgPSBmbXQ7IChjaCA9ICpmbXQpICE9 ICdcMCcgJiYgY2ggIT0gJyUnOyBmbXQrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXDAnKQogICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICBmbXQrKzsKCiAgICAgICAgICAgICAgICBm bGFncyA9IDA7CiAgICAgICAgICAgICAgICB3aWR0aCA9IDA7CgpyZmxhZzogY2ggPSAqZm10Kys7 CnJlc3dpdGNoOiBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgICAgICBjYXNlICcgJzoKICAgICAg ICAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJmbGFnOwog ICAgICAgICAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAgICAgICAgICAgIG4yID0gMDsg Y3AgPSBmbXQ7IHdoaWxlICgoKHVuc2lnbmVkKSgoKmNwKSAtICcwJykgPD0gOSkpIHsgbjIgPSAx MCAqIG4yICsgKCgqY3ApIC0gJzAnKTsgY3ArKzsgfSBpZiAoKmNwID09ICckJykgeyBpbnQgaG9s ZCA9IG5leHRhcmc7IG5leHRhcmcgPSBuMjsgKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBfX2dy b3dfdHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIChuZXh0 YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgdHlwZXRhYmxlW25leHRh cmcrK10gPSBUX0lOVCk7IG5leHRhcmcgPSBob2xkOyBmbXQgPSArK2NwOyB9IGVsc2UgeyAoKG5l eHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFi bGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5l eHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRfSU5UKTsgfTsKICAgICAgICAgICAg ICAgICAgICAgICAgZ290byByZmxhZzsKICAgICAgICAgICAgICAgIGNhc2UgJy0nOgogICAgICAg ICAgICAgICAgY2FzZSAnKyc6CiAgICAgICAgICAgICAgICBjYXNlICdcJyc6CiAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICcuJzoKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChjaCA9ICpmbXQrKykgPT0gJyonKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbjIgPSAwOyBjcCA9IGZtdDsgd2hpbGUgKCgodW5zaWduZWQp KCgqY3ApIC0gJzAnKSA8PSA5KSkgeyBuMiA9IDEwICogbjIgKyAoKCpjcCkgLSAnMCcpOyBjcCsr OyB9IGlmICgqY3AgPT0gJyQnKSB7IGludCBob2xkID0gbmV4dGFyZzsgbmV4dGFyZyA9IG4yOyAo KG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBl dGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9 IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRfSU5UKTsgbmV4dGFyZyA9IGhv bGQ7IGZtdCA9ICsrY3A7IH0gZWxzZSB7ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93 X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFy ZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJn KytdID0gVF9JTlQpOyB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZs YWc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgd2hp bGUgKCgodW5zaWduZWQpKChjaCkgLSAnMCcpIDw9IDkpKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2ggPSAqZm10Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKICAgICAgICAgICAgICAgIGNhc2UgJzAn OgogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJmbGFnOwogICAgICAgICAgICAgICAgY2Fz ZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CiAgICAgICAgICAgICAgICBjYXNl ICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CiAgICAgICAgICAg ICAgICAgICAgICAgIG4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDEwICogbiArICgoY2gpIC0gJzAnKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9ICpmbXQrKzsKICAgICAgICAgICAgICAgICAg ICAgICAgfSB3aGlsZSAoKCh1bnNpZ25lZCkoKGNoKSAtICcwJykgPD0gOSkpOwogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY2ggPT0gJyQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmV4dGFyZyA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBy ZmxhZzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3 aWR0aCA9IG47CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CgogICAgICAg ICAgICAgICAgY2FzZSAnTCc6CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDA4 OwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJmbGFnOwoKICAgICAgICAgICAgICAgIGNh c2UgJ2gnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDA0MCkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICY9IH4weDA0MDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSAweDIwMDA7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDQw OwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJmbGFnOwogICAgICAgICAgICAgICAgY2Fz ZSAnaic6CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MTAwMDsKICAgICAgICAg ICAgICAgICAgICAgICAgZ290byByZmxhZzsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDAxMCkgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZsYWdzICY9IH4weDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmbGFncyB8PSAweDAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMTA7CiAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICdxJzoKICAgICAg ICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMjA7CiAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gcmZsYWc7CiAgICAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MgfD0gMHg4MDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7 CiAgICAgICAgICAgICAgICBjYXNlICd6JzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Mg fD0gMHg0MDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmZsYWc7CiAgICAgICAgICAg ICAgICBjYXNlICdDJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMTA7Cgog ICAgICAgICAgICAgICAgY2FzZSAnYyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFn cyAmIDB4MDEwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobmV4dGFyZyA+PSB0 YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxl c2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAs IHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVF9XSU5UKTsKICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobmV4dGFyZyA+PSB0YWJsZXNp emUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkg OiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0 YWJsZVtuZXh0YXJnKytdID0gVF9JTlQpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgogICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8 PSAweDAxMDsKCiAgICAgICAgICAgICAgICBjYXNlICdkJzoKICAgICAgICAgICAgICAgIGNhc2Ug J2knOgogICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzJjB4MTAwMCkgPyAoKG5leHRhcmcg Pj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0 YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcg OiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRfSU5UTUFYVCkgOiAoKGZsYWdzJjB4NDAwKSA/ ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5 cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4 ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVF9TSVpFVCkgOiAoKGZsYWdz JjB4ODAwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4 dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/ IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVF9QVFJESUZG VCkgOiAoKGZsYWdzJjB4MDIwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5 cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+ IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytd ID0gVF9MTE9ORykgOiAoKGZsYWdzJjB4MDEwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8g X19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAo bmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtu ZXh0YXJnKytdID0gVF9MT05HKSA6ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5 cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+ IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytd ID0gVF9JTlQpKSkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKCgoKCiAgICAg ICAgICAgICAgICBjYXNlICdlJzoKICAgICAgICAgICAgICAgIGNhc2UgJ0UnOgogICAgICAgICAg ICAgICAgY2FzZSAnZic6CiAgICAgICAgICAgICAgICBjYXNlICdnJzoKICAgICAgICAgICAgICAg IGNhc2UgJ0cnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDAwOCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9f Z3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5l eHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4 dGFyZysrXSA9IFRfTE9OR19ET1VCTEUpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBf X2dyb3dfdHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIChu ZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgdHlwZXRhYmxlW25l eHRhcmcrK10gPSBUX0RPVUJMRSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3Mg JiAweDEwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuZXh0YXJnID49IHRh Ymxlc2l6ZSkgPyBfX2dyb3dfdHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVz aXplKSA6IDAsIChuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwg dHlwZXRhYmxlW25leHRhcmcrK10gPSBUUF9JTlRNQVhUKTsKICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoZmxhZ3MgJiAweDgwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0 eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1h eCA9IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRQX1BUUkRJRkZUKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAweDQwMCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBl X3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0 YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9 IFRQX1NJWkVUKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiAweDAy MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5leHRhcmcgPj0gdGFibGVzaXpl KSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDog MCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCB0eXBldGFi bGVbbmV4dGFyZysrXSA9IFRQX0xMT05HKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoZmxhZ3MgJiAweDAxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5leHRh cmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUs ICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRh cmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRQX0xPTkcpOwogICAgICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmIChmbGFncyAmIDB4MDQwKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFy ZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRh YmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVFBfU0hPUlQpOwog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIDB4MjAwMCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jvd190 eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRhcmcg PiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFyZysr XSA9IFRQX1NDSEFSKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVf dGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRh YmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0g VFBfSU5UKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg ICBjYXNlICdPJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gMHgwMTA7CgogICAg ICAgICAgICAgICAgY2FzZSAnbyc6CiAgICAgICAgICAgICAgICAgICAgICAgICgoZmxhZ3MmMHgx MDAwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFy ZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRh YmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVF9VSU5UTUFYVCkg OiAoKGZsYWdzJjB4NDAwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVf dGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRh YmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0g VF9TSVpFVCkgOiAoKGZsYWdzJjB4ODAwKSA/ICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19n cm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4 dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0 YXJnKytdID0gVF9QVFJESUZGVCkgOiAoKGZsYWdzJjB4MDIwKSA/ICgobmV4dGFyZyA+PSB0YWJs ZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6 ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5 cGV0YWJsZVtuZXh0YXJnKytdID0gVF9VX0xMT05HKSA6ICgoZmxhZ3MmMHgwMTApID8gKChuZXh0 YXJnID49IHRhYmxlc2l6ZSkgPyBfX2dyb3dfdHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxl LCAmdGFibGVzaXplKSA6IDAsIChuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0 YXJnIDogMCwgdHlwZXRhYmxlW25leHRhcmcrK10gPSBUX1VfTE9ORykgOiAoKG5leHRhcmcgPj0g dGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJs ZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAw LCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRfVV9JTlQpKSkpKSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncCc6CiAgICAgICAgICAgICAgICAg ICAgICAgICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFy ZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRh YmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytdID0gVFBfVk9JRCk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnUyc6CiAg ICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDEwOwoKICAgICAgICAgICAgICAgIGNh c2UgJ3MnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDAxMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5leHRhcmcgPj0gdGFibGVzaXplKSA/IF9fZ3Jv d190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgKG5leHRh cmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcgOiAwLCB0eXBldGFibGVbbmV4dGFy ZysrXSA9IFRQX1dDSEFSKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gX19ncm93X3R5 cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6ZSkgOiAwLCAobmV4dGFyZyA+ IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5cGV0YWJsZVtuZXh0YXJnKytd ID0gVFBfQ0hBUik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAnVSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IDB4MDEwOwoKICAg ICAgICAgICAgICAgIGNhc2UgJ3UnOgogICAgICAgICAgICAgICAgY2FzZSAnWCc6CiAgICAgICAg ICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyYweDEwMDAp ID8gKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBfX2dyb3dfdHlwZV90YWJsZShuZXh0YXJnLCAm dHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIChuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVt YXggPSBuZXh0YXJnIDogMCwgdHlwZXRhYmxlW25leHRhcmcrK10gPSBUX1VJTlRNQVhUKSA6ICgo ZmxhZ3MmMHg0MDApID8gKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBfX2dyb3dfdHlwZV90YWJs ZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIChuZXh0YXJnID4gdGFibGVt YXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgdHlwZXRhYmxlW25leHRhcmcrK10gPSBUX1NJ WkVUKSA6ICgoZmxhZ3MmMHg4MDApID8gKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBfX2dyb3df dHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIChuZXh0YXJn ID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgdHlwZXRhYmxlW25leHRhcmcr K10gPSBUX1BUUkRJRkZUKSA6ICgoZmxhZ3MmMHgwMjApID8gKChuZXh0YXJnID49IHRhYmxlc2l6 ZSkgPyBfX2dyb3dfdHlwZV90YWJsZShuZXh0YXJnLCAmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6 IDAsIChuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgdHlwZXRh YmxlW25leHRhcmcrK10gPSBUX1VfTExPTkcpIDogKChmbGFncyYweDAxMCkgPyAoKG5leHRhcmcg Pj0gdGFibGVzaXplKSA/IF9fZ3Jvd190eXBlX3RhYmxlKG5leHRhcmcsICZ0eXBldGFibGUsICZ0 YWJsZXNpemUpIDogMCwgKG5leHRhcmcgPiB0YWJsZW1heCkgPyB0YWJsZW1heCA9IG5leHRhcmcg OiAwLCB0eXBldGFibGVbbmV4dGFyZysrXSA9IFRfVV9MT05HKSA6ICgobmV4dGFyZyA+PSB0YWJs ZXNpemUpID8gX19ncm93X3R5cGVfdGFibGUobmV4dGFyZywgJnR5cGV0YWJsZSwgJnRhYmxlc2l6 ZSkgOiAwLCAobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIHR5 cGV0YWJsZVtuZXh0YXJnKytdID0gVF9VX0lOVCkpKSkpKTsKICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoY2ggPT0gJ1wwJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRv bmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg ICAgIH0KZG9uZToKCgoKICAgICAgICBpZiAodGFibGVtYXggPj0gOCkgewogICAgICAgICAgICAg ICAgKmFyZ3RhYmxlID0gKHVuaW9uIGFyZyAqKQogICAgICAgICAgICAgICAgICAgIG1hbGxvYyAo c2l6ZW9mICh1bmlvbiBhcmcpICogKHRhYmxlbWF4ICsgMSkpOwogICAgICAgIH0KCiAgICAgICAg KCphcmd0YWJsZSkgWzBdLmludGFyZyA9IDA7CiAgICAgICAgZm9yIChuID0gMTsgbiA8PSB0YWJs ZW1heDsgbisrKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGV0YWJsZSBbbl0pIHsKICAg ICAgICAgICAgICAgICAgICBjYXNlIFRfVU5VU0VEOgogICAgICAgICAgICAgICAgICAgICAgICAo KmFyZ3RhYmxlKSBbbl0uaW50YXJnID0gX19idWlsdGluX3ZhX2FyZygoYXApLCBpbnQpOwogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRQX1ND SEFSOgogICAgICAgICAgICAgICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0ucHNjaGFyYXJnID0g X19idWlsdGluX3ZhX2FyZygoYXApLCBzaWduZWQgY2hhciAqKTsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBUUF9TSE9SVDoKICAgICAgICAg ICAgICAgICAgICAgICAgKCphcmd0YWJsZSkgW25dLnBzaG9ydGFyZyA9IF9fYnVpbHRpbl92YV9h cmcoKGFwKSwgc2hvcnQgKik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgIGNhc2UgVF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgICAgICgqYXJndGFi bGUpIFtuXS5pbnRhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGludCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgVF9VX0lOVDoKICAg ICAgICAgICAgICAgICAgICAgICAgKCphcmd0YWJsZSkgW25dLnVpbnRhcmcgPSBfX2J1aWx0aW5f dmFfYXJnKChhcCksIHVuc2lnbmVkIGludCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgIGNhc2UgVFBfSU5UOgogICAgICAgICAgICAgICAgICAgICAg ICAoKmFyZ3RhYmxlKSBbbl0ucGludGFyZyA9IF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgaW50ICop OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNl IFRfTE9ORzoKICAgICAgICAgICAgICAgICAgICAgICAgKCphcmd0YWJsZSkgW25dLmxvbmdhcmcg PSBfX2J1aWx0aW5fdmFfYXJnKChhcCksIGxvbmcpOwogICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRfVV9MT05HOgogICAgICAgICAgICAgICAg ICAgICAgICAoKmFyZ3RhYmxlKSBbbl0udWxvbmdhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCks IHVuc2lnbmVkIGxvbmcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICBjYXNlIFRQX0xPTkc6CiAgICAgICAgICAgICAgICAgICAgICAgICgqYXJndGFi bGUpIFtuXS5wbG9uZ2FyZyA9IF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZyAqKTsKICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBUX0xMT05H OgogICAgICAgICAgICAgICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0ubG9uZ2xvbmdhcmcgPSBf X2J1aWx0aW5fdmFfYXJnKChhcCksIGxvbmcgbG9uZyk7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgVF9VX0xMT05HOgogICAgICAgICAgICAg ICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0udWxvbmdsb25nYXJnID0gX19idWlsdGluX3ZhX2Fy ZygoYXApLCB1bnNpZ25lZCBsb25nIGxvbmcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRQX0xMT05HOgogICAgICAgICAgICAgICAgICAg ICAgICAoKmFyZ3RhYmxlKSBbbl0ucGxvbmdsb25nYXJnID0gX19idWlsdGluX3ZhX2FyZygoYXAp LCBsb25nIGxvbmcgKik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgIGNhc2UgVF9QVFJESUZGVDoKICAgICAgICAgICAgICAgICAgICAgICAgKCphcmd0 YWJsZSkgW25dLnB0cmRpZmZhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHB0cmRpZmZfdCk7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2Ug VFBfUFRSRElGRlQ6CiAgICAgICAgICAgICAgICAgICAgICAgICgqYXJndGFibGUpIFtuXS5wcHRy ZGlmZmFyZyA9IF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgcHRyZGlmZl90ICopOwogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRfU0laRVQ6CiAg ICAgICAgICAgICAgICAgICAgICAgICgqYXJndGFibGUpIFtuXS5zaXplYXJnID0gX19idWlsdGlu X3ZhX2FyZygoYXApLCBzaXplX3QpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgICAgICBjYXNlIFRQX1NJWkVUOgogICAgICAgICAgICAgICAgICAgICAgICAo KmFyZ3RhYmxlKSBbbl0ucHNpemVhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCksIHNzaXplX3Qg Kik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNh c2UgVF9JTlRNQVhUOgogICAgICAgICAgICAgICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0uaW50 bWF4YXJnID0gX19idWlsdGluX3ZhX2FyZygoYXApLCBpbnRtYXhfdCk7CiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgVF9VSU5UTUFYVDoKICAg ICAgICAgICAgICAgICAgICAgICAgKCphcmd0YWJsZSkgW25dLnVpbnRtYXhhcmcgPSBfX2J1aWx0 aW5fdmFfYXJnKChhcCksIHVpbnRtYXhfdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgIGNhc2UgVFBfSU5UTUFYVDoKICAgICAgICAgICAgICAgICAg ICAgICAgKCphcmd0YWJsZSkgW25dLnBpbnRtYXhhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCks IGludG1heF90ICopOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg ICAgICAgICAgY2FzZSBUX0RPVUJMRToKICAgICAgICAgICAgICAgICAgICAgICAgKCphcmd0YWJs ZSkgW25dLmRvdWJsZWFyZyA9IF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgZG91YmxlKTsKICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBUX0xPTkdf RE9VQkxFOgogICAgICAgICAgICAgICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0ubG9uZ2RvdWJs ZWFyZyA9IF9fYnVpbHRpbl92YV9hcmcoKGFwKSwgbG9uZyBkb3VibGUpOwogICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSBUUF9DSEFSOgogICAg ICAgICAgICAgICAgICAgICAgICAoKmFyZ3RhYmxlKSBbbl0ucGNoYXJhcmcgPSBfX2J1aWx0aW5f dmFfYXJnKChhcCksIGNoYXIgKik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgIGNhc2UgVFBfVk9JRDoKICAgICAgICAgICAgICAgICAgICAgICAgKCph cmd0YWJsZSkgW25dLnB2b2lkYXJnID0gX19idWlsdGluX3ZhX2FyZygoYXApLCB2b2lkICopOwog ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIFRf V0lOVDoKICAgICAgICAgICAgICAgICAgICAgICAgKCphcmd0YWJsZSkgW25dLndpbnRhcmcgPSBf X2J1aWx0aW5fdmFfYXJnKChhcCksIHdpbnRfdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgVFBfV0NIQVI6CiAgICAgICAgICAgICAgICAg ICAgICAgICgqYXJndGFibGUpIFtuXS5wd2NoYXJhcmcgPSBfX2J1aWx0aW5fdmFfYXJnKChhcCks IHdjaGFyX3QgKik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCh0eXBldGFibGUgIT0gMCkgJiYgKHR5cGV0YWJs ZSAhPSBzdGF0dHlwZXRhYmxlKSkKICAgICAgICAgICAgICAgIGZyZWUgKHR5cGV0YWJsZSk7Cn0K CgoKCnN0YXRpYyB2b2lkCl9fZ3Jvd190eXBlX3RhYmxlIChpbnQgbmV4dGFyZywgZW51bSB0eXBl aWQgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQp7CiAgICAgICAgZW51bSB0eXBlaWQgKmNv bnN0IG9sZHRhYmxlID0gKnR5cGV0YWJsZTsKICAgICAgICBjb25zdCBpbnQgb2xkc2l6ZSA9ICp0 YWJsZXNpemU7CiAgICAgICAgZW51bSB0eXBlaWQgKm5ld3RhYmxlOwogICAgICAgIGludCBuZXdz aXplID0gb2xkc2l6ZSAqIDI7CgogICAgICAgIGlmIChuZXdzaXplIDwgbmV4dGFyZyArIDEpCiAg ICAgICAgICAgICAgICBuZXdzaXplID0gbmV4dGFyZyArIDE7CiAgICAgICAgaWYgKG9sZHNpemUg PT0gOCkgewogICAgICAgICAgICAgICAgaWYgKChuZXd0YWJsZSA9IG1hbGxvYyhuZXdzaXplKSkg PT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTsKICAgICAgICAgICAgICAgIGJj b3B5KG9sZHRhYmxlLCBuZXd0YWJsZSwgb2xkc2l6ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgIGlmICgobmV3dGFibGUgPSByZWFsbG9jZihvbGR0YWJsZSwgbmV3c2l6ZSkpID09 IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7CiAgICAgICAgfQogICAgICAgIG1l bXNldCgmbmV3dGFibGVbb2xkc2l6ZV0sIFRfVU5VU0VELCBuZXdzaXplIC0gb2xkc2l6ZSk7Cgog ICAgICAgICp0eXBldGFibGUgPSBuZXd0YWJsZTsKICAgICAgICAqdGFibGVzaXplID0gbmV3c2l6 ZTsKfQoKCgoKc3RhdGljIGludApleHBvbmVudChjaGFyICpwMCwgaW50IGV4cCwgaW50IGZtdGNo KQp7CiAgICAgICAgY2hhciAqcCwgKnQ7CiAgICAgICAgY2hhciBleHBidWZbNl07CgogICAgICAg IHAgPSBwMDsKICAgICAgICAqcCsrID0gZm10Y2g7CiAgICAgICAgaWYgKGV4cCA8IDApIHsKICAg ICAgICAgICAgICAgIGV4cCA9IC1leHA7CiAgICAgICAgICAgICAgICAqcCsrID0gJy0nOwogICAg ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAqcCsrID0gJysnOwogICAgICAgIHQg PSBleHBidWYgKyA2OwogICAgICAgIGlmIChleHAgPiA5KSB7CiAgICAgICAgICAgICAgICBkbyB7 CiAgICAgICAgICAgICAgICAgICAgICAgICotLXQgPSAoKGV4cCAlIDEwKSArICcwJyk7CiAgICAg ICAgICAgICAgICB9IHdoaWxlICgoZXhwIC89IDEwKSA+IDkpOwogICAgICAgICAgICAgICAgKi0t dCA9ICgoZXhwKSArICcwJyk7CiAgICAgICAgICAgICAgICBmb3IgKDsgdCA8IGV4cGJ1ZiArIDY7 ICpwKysgPSAqdCsrKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgoKCgoKCiAgICAgICAgICAg ICAgICBpZiAoZm10Y2ggPT0gJ2UnIHx8IGZtdGNoID09ICdFJykKICAgICAgICAgICAgICAgICAg ICAgICAgKnArKyA9ICcwJzsKICAgICAgICAgICAgICAgICpwKysgPSAoKGV4cCkgKyAnMCcpOwog ICAgICAgIH0KICAgICAgICByZXR1cm4gKHAgLSBwMCk7Cn0K