From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14094 invoked by alias); 10 Jun 2002 12:16:12 -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 14055 invoked by uid 71); 10 Jun 2002 12:16:04 -0000 Resent-Date: 10 Jun 2002 12:16:04 -0000 Resent-Message-ID: <20020610121604.14053.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, schwab@suse.de Resent-Reply-To: gcc-gnats@gcc.gnu.org, ro@suse.de Received: (qmail 9624 invoked by uid 61); 10 Jun 2002 12:06:55 -0000 Message-Id: <20020610120655.9623.qmail@sources.redhat.com> Date: Mon, 10 Jun 2002 05:16:00 -0000 From: ro@suse.de Reply-To: ro@suse.de To: gcc-gnats@gcc.gnu.org Cc: schwab@suse.de X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: schwab@suse.de Subject: c++/6982: outlined code in text section X-SW-Source: 2002-06/txt/msg00213.txt.bz2 List-Id: >Number: 6982 >Category: c++ >Synopsis: outlined code in text section >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Mon Jun 10 05:16:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: ro@suse.de >Release: gcc version 3.1.1 20020603 (prerelease) (SuSE Linux) >Organization: >Environment: i386/SuSE Linux >Description: outlined version of string::assign generated into text section instead of linkonce section causing linker failure (multiple definition of ...) >How-To-Repeat: g++ Map.ii -O2 -c nm -C Map.o | grep assign output: 000024c0 T std::basic_string, std::allocator >::assign(char const*, unsigned) U std::basic_string, std::allocator >::assign(std::basic_string, std::allocator > const&) >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="Map.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Map.ii" IyAxICJNYXAuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi TWFwLmNwcCIKIyAxOSAiTWFwLmNwcCIKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtIiAx IDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy9pb3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1ZGUv ZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs dWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vz ci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVy ZXMuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvb3Nf ZGVmaW5lcy5oIiAyIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0 cy9jKytjb25maWcuaCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKysvaW9zdHJlYW0iIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKysvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKysv b3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9nKysvaW9zIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaW9zZndkIiAxIDMKIyA0MyAi L3Vzci9pbmNsdWRlL2crKy9pb3Nmd2QiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIg MwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0 ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0 eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJp bmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsKICB0eXBlZGVmIGJhc2lj X3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9nKysvaW9zZndk IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3Vz ZS1saW51eC9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3Vz ZS1saW51eC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2NzdGRpbyIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr L2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDMKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0 ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi91c3IvbGliL2djYy1saWIv aTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgc2l6ZV90OwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MSAi L3Vzci9pbmNsdWRlL2crKy9jc3RkaW8iIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4 dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBf X2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBl ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90 Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191 X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK dHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl YWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2Jp dHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By aW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBf X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBp bnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9w YXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwog IHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3Rh Y2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVh ZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2Vy dmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBf X21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9t dXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf bXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBz dHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3 X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsK ICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3 X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0 aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBp bnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGls ZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0 aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2Jh X3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmll cl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmll cmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQg Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19G SUxFIEZJTEU7CiMgNTUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9J T19GSUxFIF9fRklMRTsKIyA2NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hi WzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0 ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9f cG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAi L3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMg NDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1 c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0g MCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAg X19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxM RUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdB TF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19H Q09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9 OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVj dCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5 cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBf X2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1 bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlw ZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlw ZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoK dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0 YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19j b250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICos IHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2Zj dCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90 cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9f Z2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh CnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250 ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3Ry YW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEg Kl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7Cgog IGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsK CiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9f Z2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGlu dCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9u ZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1 Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2ln bmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9j YXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpf X3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5z X2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6 ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNp b25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMg NDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVj dCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZv IF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5l ZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIv dXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRhcmcu aCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1 ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBf SU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2 dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0 IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBf X2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVj dnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq X19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoq LCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChz dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYp IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0 cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2Nv ZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZf dCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2Rh dGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAg d2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hh cl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAq X0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2 ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVf ZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3Rh dGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1Zlsx XTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJ TEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9f cmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsK ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lP X2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwog IGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBf SU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBf ZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2ln bmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNo YXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2 dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGlu dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk ZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90 Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5 bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192Zndwcmlu dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9f c3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAo KTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAo KTsKCgoKfQojIDY2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251 Y192YV9saXN0IHZhX2xpc3Q7CiMgODAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYg X0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTI5 ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xp bS5oIiAxIDMKIyAxMzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUg KnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgpl eHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAx NTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQp IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTc4ICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpf X2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4g RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIy MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3Bl bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNf Y29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rp b25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lk ICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz ZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXpl KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9f cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg dnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBz bnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7 CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h eGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmlu dGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy biBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVy biBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4g aW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAog ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGlu dCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs IDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZz Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBf X2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9f LCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQg X19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2Ms IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5s b2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwoj IDQyNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGlt IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBf X2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq X19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g c2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQg KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKIyA0ODkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0 aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf dCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAo RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTIzICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVh bSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2 NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBv czY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3Bv cykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBf X2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJy IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJs aXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29u c3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2Nv bW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xv c2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAo Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19z KSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmlu dGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93 ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJp Y3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CiMgNjMwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5o IiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBf X2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0 LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7 CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tl ZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIg Pj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hh ciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxv Y2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49 IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hh ciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAo aW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoK CgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFt KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIp IChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9 IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0 ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAo dW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lP X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAo aW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49 IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVk IGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRy KysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19s aW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g X19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGlu ZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g KCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9y X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVh bSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjMxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvaW5j bHVkZS9nKysvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2lu ZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2lu ZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpm Z2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVu OwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAg dXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNp bmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6 OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0 czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAg dXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2lu ZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6 c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpz c2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5n ZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNw cmludGY7Cn0KIyAxNTMgIi91c3IvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2du dV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6 dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6 OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2 c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvaW5jbHVk ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNsdWRl L2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr L2k0ODYtc3VzZS1saW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL3Vzci9pbmNs dWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg MwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGlu dCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl ZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog IH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQg Kl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxh Z3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlk X3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBz Y2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hl ZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz Y2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0 IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1 c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVk ZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl ZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBf X2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl ZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0 IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRt X21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQg dG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25z dCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3Ry dWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwog IH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoK CmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRp bWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAo dGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3Rw KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz dHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAg ICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90 ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2Nv bnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRp bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9f dGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1 Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1l X3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2Nv bnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAo X19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpu YW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25l OwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpv bmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cg KCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChz dHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1 Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5v c2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRp bWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9j a2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVj dCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5v c2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVy biBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9j a19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9f Y2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVz dHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0 IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3Qg X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3Qg X190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBp dGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0 b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g KmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1 ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl dC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQg X19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcg aW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9 IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNDggIi91c3Iv aW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzcxICIv dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luaXRzcGluLmgi IDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA1 OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQ VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoK ICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBU SFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI UkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBU SFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFE X01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAg UFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoK ZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9D S19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVD VVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19Q UkVGRVJfV1JJVEVSX05QCn07CiMgMTMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCnN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKik7 CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xl YW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxF LAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9E RUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE2MyAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3Qg Kl9fcmVzdHJpY3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRo cmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVh ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19k ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw YXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0 aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp Y3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0 aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2Nv cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRz aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAg ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9h dHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFj a3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90 IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9f cG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg c2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19w YXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5 ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGlu dCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p ZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFk X211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211 dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Rp bWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5p dCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0 IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFy ZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAo cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211 dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29u ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29u ZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAo cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv bmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25k LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp Y3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3 YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRf Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0 dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0 dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0 cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRo cmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJv eSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJk bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcnds b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry eXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ry b3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRy X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7 CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu X2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3Bpbmxv Y2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9i YXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFy cmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh dHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVy biBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3Qg Kl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNo YXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhy ZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMg NTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl YXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r ZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50 IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQg Kl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw ZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRl cm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1 ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19l eGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51 cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAo c3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkg dGhyb3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAz MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3Np Z21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19z aWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBfX3NpZ25vKSB0aHJvdyAo KTsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2 b2lkKSB0aHJvdyAoKTsKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgv Yml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFk X2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYg cHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRo cmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0 aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21h IHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNw cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4 X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9p bmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMg aW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICBzdGF0aWMgdm9pZCAqY29u c3QgX19ndGhyZWFkX2FjdGl2ZV9wdHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7CiAgcmV0 dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cn0KIyA0MzcgIi91c3IvaW5jbHVkZS9nKysv aTQ4Ni1zdXNlLWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQK X19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9p ZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25j ZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGlu dApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9y KSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0K CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl eSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZp YyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19n dGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVh ZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0 c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVj aWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChf X2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9z ZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0 ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3Rp dmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAg ICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sg KF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkp CiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3Ro cmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICBy ZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsK fQojIDk5ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2d0aHIuaCIgMiAz CiMgMzggIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysraW8uaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0 cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAg dHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhf dCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19m bGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhl ZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZp YyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgw MjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h ZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMg Y29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7 CiAgfTsKfQojIDQ1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrL2N3Y2hhciIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAz CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9n KysvY3RpbWUiIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9jdGltZSIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAg dXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVz aW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6 OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIg Ii91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz ZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJzdGF0 ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0bTsK CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRl cm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAo KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2No YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAg KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg d2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk ZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0 IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50 ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpf X2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg Kl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2Nz Y29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVy biBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpf X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hh cl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Ny Y2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVs IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0 IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bicmsg KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz c3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVk bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3 Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hh cl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAog ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cg KCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChf X2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29u c3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90 ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpf X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90 ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBt YnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0 aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3 Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2lu bGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0 b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxs KSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hh ciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g c2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNo YXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAo d2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdj aGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0 b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2Nz dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf X3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg aW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRv dWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0 aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9k X2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAg ICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50 IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9p bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3 Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK eyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVy biBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl KSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2Nz dG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv dyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9 CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4g X193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAo X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJv dyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh c2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3Qs IF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nw bmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19u KQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBp bnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmlu dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93 ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9f RklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQg ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp IDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGlu dCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2Nh bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZz d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3 aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBn ZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hh ciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2Ms IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90 IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2No YXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0 d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAg X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1 bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4 dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3 aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxv Y2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191 bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4 MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU1ICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hh ciIgMiAzCiMgNjkgIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewog IHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hhciIgMwpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2lu ZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6 OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpm d3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1i cmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJz cnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3 cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2 ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2lu ZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVz aW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2lu ZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5n IDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5n IDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNp bmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcg Ojp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6 d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6Ondt ZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3 cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdj aGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2Nz Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3 Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFy X3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihf X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3 Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25z dF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoK ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikK ICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIp OyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hh cl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29u c3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVz cGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAg dXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3 Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondj c3RvdWxsOwp9CiMgNDYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MK ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7Cgog ICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9N X3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3Qg eyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9f c3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigp KSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYs IF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2Zm KSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJl dHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9f b2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAg ICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAq dGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAg ICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAg ICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1v ZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09 IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3Bl cmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09 IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3Mm IF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9Cgog ICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7 IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m ZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9z OwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQ3ICIvdXNyL2lu Y2x1ZGUvZysrL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhj ZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3Iv aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2 b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5jbHVkZS9nKysvaW9zZndkIiAyIDMKCm5hbWVz cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19p c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g PgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVu YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1 ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g YWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBp c3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRl cmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBp b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYg YmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy PiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0 cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0 cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNo YXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsK ICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf b2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZz dHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNp Y19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19p c3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0 cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu Z3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3 Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0KIyA0NSAiL3Vzci9pbmNsdWRl L2crKy9pb3MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAxIDMKIyA0MCAi L3Vzci9pbmNsdWRlL2crKy9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBz dGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24o KSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmly dHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJh ZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNl cHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3co KTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBl ZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIg c2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWlu YXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5k bGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQg dW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9p bmNsdWRlL2crKy9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93 KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9pbmNsdWRlL2crKy9leGNl cHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDQ2 ICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2No YXJfdHJhaXRzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMu aCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2luY2x1 ZGUvZysrL2NzdHJpbmciIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt bW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICpt ZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lk ICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lk ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4 dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFy ICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBz dHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50 IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwojIDExMSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wg KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f c3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNo ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBj aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAq X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0 YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7Cgpl eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19j b25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19t ZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0 ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4g KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50 IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vy cm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g dm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2 b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy biBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJu IGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5 IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQg Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAo X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvaW5jbHVkZS9nKysvY3N0cmluZyIgMiAzCiMgNzcgIi91 c3IvaW5jbHVkZS9nKysvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNw eTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5 OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsK ICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwog IHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAg dXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1 c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNo cih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0 X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsK CiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4g X19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoK ICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwg Y29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0 PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxp bmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWls dGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNp bmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBj aGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBj aGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NoYXJf dHJhaXRzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFy VD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVk ZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsK ICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAg ICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAg eyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90 eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0g X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2Mx LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9Cgog ICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25z dCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVf dCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0s IF9fczJbX19pXSkpCiAgICAgICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkg PyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QK ICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX3AgPSBfX3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAg IHJldHVybiAoX19wIC0gX19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hh cl90eXBlJiBfX2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0g X19zOyBzaXplX3QoX19wIC0gX19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9 PSBfX2EpIHJldHVybiBfX3A7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRp YyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9f czEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJf dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3My LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg ICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAg ICAgewogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsg KytfX3ApCiAgICAgICAgICBhc3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwog ICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBp bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJl dHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0 dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlw ZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2lu dF90eXBlKF9fYywgZW9mKCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0KICAgIH07CgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYg Y2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVm IHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwg X19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hh cl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMg Y29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3Qg X19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u c3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo YXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt bW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg Y29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIs IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50 X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2Mp KTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUm IF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9m KGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6 IF9fYzsgfQogIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFy X3Q+CiAgICB7CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg d2ludF90IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAg dHlwZWRlZiB3c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0 ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwg Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0 aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg X19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog ICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg ICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f bikKICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0 aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1 cm4gd2NzbGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZp bmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19h KQogICAgICB7IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMg Y2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf X3MyLCBpbnRfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEsIF9fczIsIF9f bik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3Mx LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1j cHkoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNz aWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJl dHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAg ICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBjaGFyX3R5cGUo X19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNo YXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9v bAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUm IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90 eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoMHhmZmZmZmZm ZnUpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5 cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19j OyB9CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAg ICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9 CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJu IF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2cr Ky9pb3MiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj IDQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDMKCgojIDEgIi91c3IvaW5j bHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNy L2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy9jbG9jYWxl IiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9s b2NhbGUuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMv bG9jYWxlLmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwK ICBfX0xDX1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQs CiAgX19MQ19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAog IF9fTENfTkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEw LAogIF9fTENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsK IyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNy L2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9p bnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAg Y2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICpt b25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25f Z3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwog IGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19w cmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoK ICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBu X3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2Vw X2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9i eV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25f cG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4gY2hhciAq c2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cgKCk7CiMg MTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2Nh bGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cg KCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRo cm93ICgpOwoKCn0KIyA1MCAiL3Vzci9pbmNsdWRlL2crKy9jbG9jYWxlIiAyIDMKCgoKCgpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5n IDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9i aXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMg MjQgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVz LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0 eXBlZGVmIHZvaWQgKm5sX2NhdGQ7CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxf Y2F0ZCBjYXRvcGVuIChfX2NvbnN0IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93 ICgpOwoKCgpleHRlcm4gY2hhciAqY2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3Nl dCwgaW50IF9fbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0 cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cp IHRocm93ICgpOwoKfQojIDI1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv LmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpl bnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRB WV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBB QkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlf NSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9O XzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFC TU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIs CgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBN T05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEs CgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQs CgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVS QV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgog IF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05M X1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80 LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05M X1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxf V0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBf TkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9O XzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05M X1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9O XzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dN T05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01P Tl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dN T05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAg X05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFf WUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9U X0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElN RV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1Rf V0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJ T04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQs CgogIF9OTF9USU1FX0NPREVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExB VEVfTlJVTEVTID0gKCgoX19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRF X1JVTEVTRVRTLAogIF9OTF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIs CiAgX05MX0NPTExBVEVfRVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9D T0xMQVRFX0dBUDEsCiAgX05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9O TF9DT0xMQVRFX1RBQkxFV0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVf RVhUUkFXQywKICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFT SF9TSVpFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJf RVhUUkFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdD LAogIF9OTF9DT0xMQVRFX0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxf Q1RZUEVfQ0xBU1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9U T1VQUEVSLAogIF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQ RV9HQVAyLAogIF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQ RV9HQVA0LAogIF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9D TEFTU19OQU1FUywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBf TkxfQ1RZUEVfTUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQg PSBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9D VFlQRV9UT0xPV0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQ X09GRlNFVCwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lU UzBfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01C LAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBf TkxfQ1RZUEVfSU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NU WVBFX0lORElHSVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9J TkRJR0lUUzlfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5E SUdJVFMwX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT Ml9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0Ms CiAgX05MX0NUWVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9O TF9DVFlQRV9JTkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZ UEVfSU5ESUdJVFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09V VERJR0lUMV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJ VDNfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01C LAogIF9OTF9DVFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBf TkxfQ1RZUEVfT1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NU WVBFX09VVERJR0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9P VVRESUdJVDJfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElH SVQ0X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9X QywKICBfTkxfQ1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAg X05MX0NUWVBFX09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAg X05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RC TCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19U QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBF X1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xF TiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwK ICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9D VFlQRV9FWFRSQV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VY VFJBX01BUF82LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ XzgsCiAgX05MX0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAg X05MX0NUWVBFX0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9D VFlQRV9FWFRSQV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xD X0NUWVBFLAoKCgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2 KSB8ICgwKSksCgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lO VCwKCgoKICBfX01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9f UE9TSVRJVkVfU0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJ VFMsCgoKCiAgX19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NF UF9CWV9TUEFDRSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwK CgoKICBfX1BfU0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZ X0NSTkNZU1RSLAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQ QUNFLAoKCgogIF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0Us CgoKCiAgX19JTlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05M X01PTkVUQVJZX0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5D WV9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVU QVJZX0RVT19GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAg X05MX01PTkVUQVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1Nf UFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRB UllfRFVPX0lOVF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZ X1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU QVJZX0RVT19JTlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9T TiwKICBfTkxfTU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5U X1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9N T05FVEFSWV9VTk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9O TF9NT05FVEFSWV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAog IF9OTF9NT05FVEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9J TlRfV0MsCiAgX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NP REVTRVQsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChf X0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BP SU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwK CiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9O VU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVN X0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgw KSksCgogIF9fTk9FWFBSLAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNT QUdFU19DT0RFU0VULAogIF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQg PSAoKChfX0xDX1BBUEVSKSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxf UEFQRVJfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9 ICgoKF9fTENfTkFNRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxf TkFNRV9OQU1FX01SLAogIF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywK ICBfTkxfTkFNRV9OQU1FX01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1F LAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAo MCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BP U1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMs CiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAg X05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxf QUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19M QU5HX0xJQiwKICBfTkxfQUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAg X05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAo MCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VM RUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQs CiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9 ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NP REVTRVQsCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJ VExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJ RklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVO VElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURF TlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJ Q0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lE RU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwK ICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9S RVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05f Q0FURUdPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVO VElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o IiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwoj IDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKl9fbmxfbGFuZ2lu Zm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvdXNyL2luY2x1 ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvaWNvbnYuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9pY29udi5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVm IHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNo YXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoK CgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9f aW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNs ZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpl eHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIv dXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmludGwu aCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiBjaGFyICpnZXR0ZXh0IChfX2NvbnN0IGNoYXIg Kl9fbXNnaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZGdldHRleHQgKF9fY29uc3QgY2hh ciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgdGhyb3cgKCk7CmV4 dGVybiBjaGFyICpfX2RnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25z dCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9h cmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv bWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZCwg aW50IF9fY2F0ZWdvcnkpIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQgKF9fY29u c3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpOwoKCgoKZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0IChfX2Nv bnN0IGNoYXIgKl9fbXNnaWQxLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLAogICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfYXJnX18gKDEpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f ICgyKSkpOwoKCgpleHRlcm4gY2hhciAqZG5nZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlu bmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfYXJnX18gKDMpKSk7CgoKCmV4dGVybiBjaGFyICpkY25nZXR0ZXh0IChfX2NvbnN0IGNo YXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkMSwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfYXJnX18gKDMpKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gKF9fY29uc3QgY2hh ciAqX19kb21haW5uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWlu IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fZGlybmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5k X3RleHRkb21haW5fY29kZXNldCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2NvZGVzZXQpIHRo cm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA5NSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMiAz CiMgMTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL3Vzci9pbmNsdWRlL2cr Ky9pNDg2LXN1c2UtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQK ewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwp9CiMgNDcgIi91c3IvaW5jbHVkZS9n KysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jbGltaXRzIiAx IDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy9jbGltaXRzIiAzCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMS4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zeXNsaW1p dHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4x LjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz ZS1saW51eC8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xp bWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEy NyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVk ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAx IDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9p bmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9w ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcg Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9s aW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjEu MS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s aW51eC8zLjEuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxp Yi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91c3Iv aW5jbHVkZS9nKysvY2xpbWl0cyIgMiAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2Nh bGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jY3R5cGUiIDEgMwojIDQ3ICIvdXNy L2luY2x1ZGUvZysrL2NjdHlwZSIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwoj IDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNs dWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNy L2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAz CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlw ZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkp IDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEg PDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4 ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAo KDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hk aWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSks CiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkg Pj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8 PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkg OiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkp IDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEg PDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwg OCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0g PSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07 CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNo b3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9s b3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91 c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0 IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50 IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhy b3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51 bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1 cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMwp9CiMgNTAgIi91c3IvaW5jbHVkZS9nKysvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9p bmNsdWRlL2crKy9jY3R5cGUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwog IHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0Owog IHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50Owog IHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwog IHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsK fQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nKysvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy9zdHJpbmciIDMK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUv ZysrL21lbW9yeSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRs aWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4x LjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIg MSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5o IiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoK ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQg X193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAg ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAg IHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAg ICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsK CgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK CgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1 b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9f Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGlu dCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAo KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g dW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDIxNSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl CnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0 ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK fQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu IF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xk X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkg dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u ZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp Owp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9s bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xs X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3Qg Y2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9k IChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAo X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChf X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChf X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo KQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMg Mzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50 IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19z KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRl cm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQg dV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsK dHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlw ZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlw ZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoK dHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlw ZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoK dHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoK dHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsK CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90 OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzYgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3Vz ZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz ZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsK IyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMK IyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zaWdzZXQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoj IDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1l dmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwog IH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6 ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21h c2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMi IHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0 ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywK ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9f cmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj dCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4 Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz dHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9f cmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMg MjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVf dCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRl ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxj bnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250 NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlw ZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93 ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAg IGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAg ICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwog IH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3Qg X19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0 cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVf ciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4 ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBk cmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19h OwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFu ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVk dmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVy biBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK IyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXpl X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJu IHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxv YyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoK CmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpl eHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6 ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4 dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25t ZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAo dm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAo aW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoK CgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIg KmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50 IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp IHRocm93ICgpOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0 ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7 CiMgNjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3Qg Y2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6 ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzIgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90 KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2Zu X3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZv aWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK ZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0 ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBs bGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVu b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRp dl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxk aXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAg ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3Np Z24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4g aW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s ZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19z LCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6 ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3Bv bnNlKSB0aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50 IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g dm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwg aW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNsdWRlL2crKy9jc3Rk bGliIiAyIDMKIyA4NCAiL3Vzci9pbmNsdWRlL2crKy9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAg dXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6 YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9j OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcg OjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxv YzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7 CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVz aW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcg OjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcg Ojp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9f aSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJu IGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi91c3IvaW5jbHVkZS9nKysvY3N0ZGxpYiIgMwpu YW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OmxsZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsK CiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0g MCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGxsYWJzKGxvbmcgbG9uZyBf X3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbGxkaXZfdAog IGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5x dW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIGlu bGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxs ZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0 dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9mOwogIHVzaW5nIDo6 c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVzaW5nIDo6c3RydG9sZDsKfQoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdl90OwogIHVzaW5nIF9fZ251X2N4eDo6 X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFiczsK ICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2OwogIHVzaW5n IF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19n bnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG91bGw7CiAgdXNpbmcgX19n bnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvbmV3IiAxIDMKIyA0NCAiL3Vzci9pbmNs dWRlL2crKy9uZXciIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3Mg YmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2Mo KSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07Cgog IHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsK CgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3 X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9CiMgNzkgIi91c3IvaW5jbHVkZS9nKysvbmV3IiAzCnZv aWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p ZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZv aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd KHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0 ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9p ZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVb XSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBv cGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7 IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRo cm93KCkgeyByZXR1cm4gX19wOyB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfcGFpci5oIiAx IDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlw ZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZp cnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoK CgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNl Y29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihj b25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Au c2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv b2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg X1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29u ZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAg ICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkg ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAh KF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi b29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs IF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K CgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBfX3kpCgoKCnsK ICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFp dHMuaCIgMwojIDkwICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1 Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhp c19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9nKysvYml0 cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBs b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj dCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxv bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJh dG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19n bnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu ZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2du dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh dG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRl cmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0 IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAg c3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0 b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CiMgMTAwICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRl Z29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAg ICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1Rw Jj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRv cl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVm IF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50 ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVy YXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5 cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVu Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y Ojpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZl cmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry dWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5 cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9U cCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J dGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh dG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf ZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFz ZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIg MSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoK bmFtZXNwYWNlIHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGlu ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKICBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAg ICByZXR1cm4gX19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv cj4KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv cj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21f YWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0 OwogIH0KIyAxMTEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5j cy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0 YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoK ICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rp c3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0t KSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0 eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9u YWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9f bi0tKSArK19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4K ICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rp c3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoK ICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9JbnB1dEl0ZXJh dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVy YXRvci5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAz Cm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0 ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9J dGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRl cmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5j ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p bnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsg fQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl IF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0 IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0K CgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJh dG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50 KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29u c3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0 b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAg ICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAg b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1j dXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNl X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9p dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4g X190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAg IHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJy ZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7 IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJl dmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAg ICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNl X3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQg KyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0o ZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19u KTsgfQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJu IF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y IT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShf X3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog ICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2Uo KSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s aW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250 YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFt ZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNv bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVy biAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBv cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1 ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp bmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNr X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+KF9feCk7IH0KIyAzOTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBm cm9udF9pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRv cl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAg IF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250 YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNl IF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7 CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2lu c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAg ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq dGhpczsgfQogICAgfTsKIyA0NTMgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBf X3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsg fQojIDQ3MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBw dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p ZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAg ICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRl cmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kp CiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192 YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3Zh bHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoK CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz OyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0 b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihf Q29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9Cgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7 CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1 YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0 b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9y IF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl cmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDog X01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBleHBsaWNpdAogICAgICBfX25vcm1h bF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVy YXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAg ICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAg IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAgICBwb2ludGVy CiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogICAgICBf X25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1 cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50 KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICAgICAgX19u b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJu ICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGludCkg eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVy ZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9N X2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y CiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAg eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg X19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f bikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9f bik7IH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBvcGVyYXRvci0oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3ImIF9faSkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5f TV9jdXJyZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7 IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNl KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy PgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh c2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wK ICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJh c2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg b3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+ JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl cmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2Uo KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz ZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg b3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJh c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu ZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu YmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0 dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSAr IF9fbik7IH0KfQojIDc2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9y d2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9f YSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlw ZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwog ICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9U cCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0g X19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj b25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoK ICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9 CiMgMTY2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYg X19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSBy ZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0 IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwg X19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91c3IvaW5jbHVkZS9n KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t cChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3Qp CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0 YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0 OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19m aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1v dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsK ICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f Y29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBf X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f Y29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAq IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog X19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7 IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlu bGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVl X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19j b3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5 cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsK ICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs X2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f Y29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1h bCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf bm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0 dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAg ICB9CiMgMzM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBf X05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRp cmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5 X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1f X24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5 cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRp YyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChf X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewog ICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3Qg X051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0g X051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0 IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4K ICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9f Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAg IDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf X2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1 bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJl dHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAg ICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgog ICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C STIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dh cmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1 bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVu YW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1h bF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl cmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAg ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJl dHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBf X2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3Jt YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2Zp cnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6 ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBf X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAg ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBf X3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZp bGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1 bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAg IG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUg dm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNv bnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg ICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xh c3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBj aGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwog ICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19s YXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGlu ZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXpl IF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3Qs IF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZp bGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAg ICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJu IF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5s aW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFy JiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAg ICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAg IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0g Kl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAg ICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs IF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmly c3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMg Njk5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5h cnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK ICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAg ICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m aXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMyICIv dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29n cmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w dXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAg ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8 ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIg PCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3Njcg Ii91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAo IDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAg IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAg IH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5z aWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0 MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0 MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1p bihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8 IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNh bF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf X2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNp Z25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9 Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2Nhc3NlcnQiIDEgMwojIDQ3ICIvdXNy L2luY2x1ZGUvZysrL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK IyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lk IF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAq X19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBf X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f bm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19l cnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAq X19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2luY2x1ZGUv ZysrL2Nhc3NlcnQiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDg2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy9i aXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291 bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JD X3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9j azsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAg IHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBUSFJFQURfTVVU RVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsK CgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRf bXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAg ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAg IF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9N X3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j b3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3 YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9j azsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAg X1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhS RUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcK ICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAg ewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2Fw X2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19x OwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3 YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoK CiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxp emUoKQogICAgewojIDE4NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK ICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0 aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFz ZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7 CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz CiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2Nr OwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2so X19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0 b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2 b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2so Y29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDg3ICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvaW5jbHVkZS9n KysvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoK ICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6 b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lk KiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIx ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8aW50IF9f aW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRl OgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMg dm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkICgq IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj IHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBf X3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3Vs dCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQog ICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUo dm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lk KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0gX19y ZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29s ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAgIH07 CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0ZW1w bGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19t eV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7 KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAg ICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxs b2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg ICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24p CiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCog X19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9j X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09 IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2Mo KTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0 ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAg IHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19uZXdf YWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h bGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19z aW1wbGVfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90 IF9fbikKICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRl KF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7 IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0g X19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAg c3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRl KF9fcCwgc2l6ZW9mIChfVHApKTsgfQogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv c3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdf YWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6 CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIq IF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEp OwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCAr IChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3Ag LSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9f cmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3Ag PT0gX19uIiwgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVU VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwg X19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl KHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAg IGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAoc3Rh dGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChf X2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIsIDI3NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp KSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxv Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAq KHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu dCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf YWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBjbGFzcyBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19BTElHTiA9 IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9 IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAgIHsKICAgICAgdW5pb24g X09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAg ICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNd OwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0YXRpYyBjaGFyKiBfU19l bmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoKICAgIHN0YXRpYyBfU1RM X211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBzdGF0aWMgc2l6ZV90CiAg ICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsg KHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICBzdGF0 aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0 dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsg fQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKCiAgICBz dGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jq cyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAgcHVibGljOgogICAgICBfTG9jaygpIHsg aWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsg fQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2su X01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsK ICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkKgogICAg YWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19yZXQgPSAwOwoKICAgICAg aWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19yZXQgPSBfX21lbV9pbnRl cmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfT2Jq KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QKICAgICAgICAgICAgKyBf U19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNl OwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0 OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVm aWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7 CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAoX19uID4gKHNpemVfdCkg X01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19wLCBfX24p OwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJl ZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19u KTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAgICAgICAgICBfTG9jayBf X2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19t eV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgICAgfQog ICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBf X29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAg Y29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCiAgICB7 IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0K CgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhcioKICAg IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2Fs bG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIq IF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7 CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7 CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgIHsKICAgICAg ICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3Rv dGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgIH0KICAgICAgZWxzZSBp ZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0g KGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19z aXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAg ICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybihfX3Jl c3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f Ynl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91 cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Qg PQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRl c19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVl X2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xp c3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAgICAgX1Nfc3Rh cnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dl dCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m cmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICAgIF9faSA9 IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXplX3QpIF9NQVhfQllURVM7 IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19p KTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAg ICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAg ICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAg ICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2Zy ZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19tZW1faW50ZXJm YWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAg X1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf U19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4oX1NfY2h1bmtf YWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoKCgoKCiAgdGVtcGxhdGU8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7 CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19h bGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7 CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBf T2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2Jqcykg cmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9T X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsK ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9f bik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmog PSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRf b2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICBf X2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgIGJyZWFrOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9s aW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuKF9fcmVzdWx0 KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CiAgICB2b2lkKgog ICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZv aWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICB2b2lk KiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAgIGlmIChfX29sZF9zeiA+ IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7 CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICB9CiAgICAgIGlm IChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4o X19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9z eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNw eShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRf c3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgPSB7IHsw LCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCiAgdGVtcGxhdGU8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlw ZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVm IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9j OwojIDYxMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVi bGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAq IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0 IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBs YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U cDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29u c3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0 b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJv dygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm X194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0 IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0 IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0Fs bG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAw OwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAg IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVf dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz aXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBf X3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w KSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7 CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0 IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBs YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9U cDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9y PF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFs bG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K c3RydWN0IF9fYWxsb2NhdG9yCnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBl ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu dGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0 X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxv Yz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3Io Y29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2Mo X19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2Fs bG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAg IDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxs b2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u c3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVu Y2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlw ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBz dGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9m KF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3As IHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwg X19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93 KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0 cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwp OyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0 eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0 X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBf VHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j PiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f YTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlp bmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7 CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2Fs bG9jOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0o Y29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVl Owp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf X2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVi dWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsK ICByZXR1cm4gZmFsc2U7Cn0KIyA4NDAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2Mu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9j X3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIg YWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y Pgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2Vs ZXNzOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJh aXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh bmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9B bGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBf X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2Fs bG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1 ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4g X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0Fs bG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAg ICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl ZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rociwg X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAg ICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBj bGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwg X19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxv YzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVi dWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2Nh dG9yPHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAg X0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRp Y19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNs YXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBu ZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2luY2x1ZGUv ZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsg fQojIDExMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJv eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAg ICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9E ZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90 eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IK ICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9f ZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsK ICAgIH0KfQojIDU3ICIvdXNyL2luY2x1ZGUvZysrL21lbW9yeSIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg ICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0 cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1 cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVy biBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl c3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K IyAxMDYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAg aW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNv bnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3Vs dCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19s YXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2Nv cHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0 LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0 dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1 ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0 aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90 eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkg ewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0Nv bnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7 CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAg ICAgICB9CiAgICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6 ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+ Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19m aXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l IF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0 LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRp YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAg ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAg ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3Qo JipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2go Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAg ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAg dW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29u c3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAg ICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9J c19QT0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgog ICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAg IHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs aXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwog ICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg ICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9j b3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl ciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkK ICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6 ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQog ICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAg dGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvdXNyL2luY2x1ZGUvZysrL21lbW9yeSIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEg MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNs YXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0 b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg IHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoK ICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRv ciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAg ICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U cD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAg IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0Zvcndh cmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJh d19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsK ICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9 CiMgNjAgIi91c3IvaW5jbHVkZS9nKysvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIHBhaXI8X1RwKiwgcHRyZGlmZl90PgogIF9fZ2V0 X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQogIHsKICAgIGlmIChfX2xl biA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfX2xlbiA9IDIx NDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgIF9U cCogX190bXAgPSAoX1RwKikgc3RkOjptYWxsb2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9m KF9UcCkpOwogICAgICBpZiAoX190bXAgIT0gMCkKICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBw dHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICAgIF9fbGVuIC89IDI7CiAgICB9CgogICAgcmV0 dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKICB9CiMgMTAyICIvdXNyL2lu Y2x1ZGUvZysrL21lbW9yeSIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgaW5saW5lIHBhaXI8 X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsK ICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQoj IDExNCAiL3Vzci9pbmNsdWRlL2crKy9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgog IHZvaWQgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApIHsKICAgIHN0ZDo6ZnJlZShf X3ApOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsK ICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3Ap IHt9Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0 ZToKICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7Cgog IGV4cGxpY2l0IGF1dG9fcHRyKF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9 CiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgp KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9f YSkgdGhyb3coKQogICAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9w ZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkp OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19w dHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9f YS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsg ZGVsZXRlIF9NX3B0cjsgfQoKICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAg cmV0dXJuICpfTV9wdHI7CiAgfQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewog ICAgcmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJl dHVybiBfTV9wdHI7CiAgfQogIF9UcCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3Rt cCA9IF9NX3B0cjsKICAgIF9NX3B0ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQg cmVzZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAg ICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgpwdWJsaWM6 CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRy KF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1Rw PiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7 CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0K ICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBh dXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1Rw Pih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1 dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+ cmVsZWFzZSgpKTsgfQp9OwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEw MSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg X0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoK CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVj dCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsK ICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy ZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt X194OyB9Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj b25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1 YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+ PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsg fQp9OwojIDIyMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9 Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJv dGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25l Z2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29u c3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf UHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1By ZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By ZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUK ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0 ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+ IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJp bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJv b2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90 eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNl Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9f eCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5h cnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAg cmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0 aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJh dGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVl OwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAg ICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgog IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g b3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xh c3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJh dGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9P cGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2 YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9 CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09w ZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVy YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJu ZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2luY2x1 ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0ciko X0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNp dCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0 cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBf TV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpp bmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9S ZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248 X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy ZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgog ICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90 b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVu Y3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7 fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAg ICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf QXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFy eV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9B cmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEs X0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRl bnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0b3Io KShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIs IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5 cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsK ICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6 c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f eC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0 b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9 Cn07CiMgNTI4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQg KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f cCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNv bnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsK cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNv bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNv bnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f ZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBt ZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoK ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm KSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01f ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1 bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7 IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01f ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1 YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3As IF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0 ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt X2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9S ZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9N X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1f ZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJs aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy ZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAq LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgp KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9f cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsg fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQg KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9f cikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZv aWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChf X3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVu MV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAo X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9B cmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgog IGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2Yo X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChf X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y ZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9U cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJp dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVu KF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVu X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJu IGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9S ZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2Yp OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1 bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQog IHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9S ZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBt ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf QXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9m dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9U cCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0 dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUz ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYXRv bWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRz L2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUg X0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRf YWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3Rl ciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4 YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAg ICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAg ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGlj IGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2 b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAi aXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDQ2ICIvdXNyL2luY2x1 ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODggIi91 c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFz aWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5 cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2du dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7 CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVy LCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBw cml2YXRlOgojIDEyMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg ICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6 OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxNDEgIi91 c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25z dCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190 ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUg X01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAg IGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3Jl ZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25z dAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAg ICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAg ICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5j ZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9Cgog ICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAg ICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAg ICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9j MikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9j MSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9u ZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1Nf Y3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9k aXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hh bmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0 cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25z dCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgp IHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMs IDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9D aGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAw KTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsK ICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAg ICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01f cDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg bnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBt dXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlw ZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBz aXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoK ICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0K CiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4g KF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBj b25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgp KSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJl dHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5k KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoK ICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCkt Pl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAg IGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewog ICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdp bigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBf X3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlw ZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAg ICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoK CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAg ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3Ig X19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsr X19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAg ICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBp dGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBf X2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j b3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRv ciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNl KCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19w LCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShf X3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29w eV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9f azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K CiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgp OwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJu ICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAg cHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhw bGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNp Y19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg ICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXpl X3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs b2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19z LCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9J bnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5n KCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNz aWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBf X2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAg ICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVy YXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdp bigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAg ICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAg ICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoK ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u c3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9p dGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRo aXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4o KSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgp KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4g cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQog ICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5n dGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9S ZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsg dGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2Fw YWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZv aWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAg ICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9v bAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAg ICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29u c3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAg ICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygp OwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9y ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlm IChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0K CiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg aWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgp W19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7 IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv cGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSks IF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z KQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBf Q2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVz aF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2ll bmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp OwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0 biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25l d3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJu IHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkK ICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwog ICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQq PigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCko X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxh Y2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAg ZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19z IC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNl IGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9f cywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAg ICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFz c2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh c3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVw bGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRl PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3Np Z24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAg IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwg X19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5 cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwg X19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0 b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19w b3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAg ICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChf X3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0 cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVz dG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2Vy dChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAg ICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93 X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVw KCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEo KSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6 ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBf X3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBf TV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9f b2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAg ICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w eShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAg ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAg ICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBf Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0 KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAg ICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBf X3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3Bv cyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bv cyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp OwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlw ZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kg PSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0 aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwog ICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy YXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9N X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRh KCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAg IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBf X3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg X19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90 eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9f dGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBf X2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChf X3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190 aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChf TV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01f ZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg X19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4o KSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSAr IF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJu CiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2lu KCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19z ICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u MSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3Ms IF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVf dHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2No ZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9f aTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9f aTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVw bGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f aTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJl cGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCog X19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJh dG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2lu KCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNl KCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwg Y29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEg LSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg ICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVy YXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRf aXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVy PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAg ICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAg ICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlw ZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNp emVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz dDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xh c3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChf SW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7 CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdy YWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9f ZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0lu SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf RndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndk SXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgog ICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxs b2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAg dm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAg ICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6 YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJu IF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29u c3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRf YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAg ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2Zp cnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bv cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJz dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAw KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9f Yywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZp bmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9z LCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0 X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf bGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf bGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNp emVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAg ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2Zf cmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmlu ZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIu c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoK ICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5k YXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAt IF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNv bXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEs IHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAg IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAg ICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNv bXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3Mp IGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIp IGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Vt cHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwog ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhj b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMp OwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg X19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0 ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf X3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s aHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xo cy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAog ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0No YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4g MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1 cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s aHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t cGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo cykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK ICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp ID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hh clQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAw OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh bTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19zdHIpOwp9CiMgNTQgIi91c3IvaW5jbHVkZS9nKysvc3RyaW5nIiAyIDMKCgojIDEg Ii91c3IvaW5jbHVkZS9nKysvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9h bGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDEg MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAg IHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwg X1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRl eCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9f Zmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19w YXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0K ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1 c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgog ICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0g X19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVl VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAg ICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCAr IF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsK ICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAq KF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l IHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9o ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0 YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSks IF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVz dF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k ZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7 CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5j ZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vj b25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk KSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRD aGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f c2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAg ICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAg aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ bmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJ bmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmly c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg dm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAo X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFs dWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg ICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0 IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl LAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug X19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBf X2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5k ZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYg KF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25k Q2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu ZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp bmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xh c3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl VHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19s YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs IF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAg ICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7 CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5 cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg ICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAg ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p ZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0 ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0K Cn0KIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nKysvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZm X3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7 CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9N X2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIx NDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXpl b2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1Rw KikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAg ICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRp YWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlh bGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFs aXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJk aWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVz dGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdp bigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZl ciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5 cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAg ICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwg X19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAw KQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAg IH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAg ICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAg IH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwg X01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoK ICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBv cGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDg0ICIv dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0 IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBf X2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAg ZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAg ICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0 dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAg ICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19i LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19h LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1 cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBf X2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsK ICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvdXNyL2luY2x1ZGUv ZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9f Zmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9U cCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19m aXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVy CiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0 KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf UmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50 CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlw X2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19m aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz dDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAg ICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0 OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6 CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19s YXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmlu ZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9f bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAt LV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2Ug MDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMg Mjg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBm aW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0 IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJz dCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMg MzA5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRl cgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1 cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICB9CiMgMzI5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAg YWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAg cmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAg IHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19u ZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsK ICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2Zp bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh PSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkp CiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAg ICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBj b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgq X19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAg ICB9CiMgNDExICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0Zvcndh cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIy IF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFz dDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoK CiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyAr K19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19m aXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAg ICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0 MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9 PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg ICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ dGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s YXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAog ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh c3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0 dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoK ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3Vy cmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAg ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGlj YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAr K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xh c3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog ICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAg ICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAo KytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAg aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwog ICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz dDE7CiAgICB9CiMgNTk2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1l IF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z dCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3Vu dCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2Zp cnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAg ICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsK ICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAg ICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVs c2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAg ICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAiL3Vzci9pbmNs dWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUg X0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3Vu dCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu dCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsr X19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5h cnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0t X19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9f bGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJl dHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg X0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJk SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoK CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0 MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9f Zmlyc3QyOwogICAgfQojIDczMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlw ZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAgICAgCiAg ICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jl c3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVy YXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9f YmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2Zp cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAg ICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u ZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3Zh bHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi91c3Iv aW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBy ZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAg IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2Zp cnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODU2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1 ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDog Kl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlw ZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25z dCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpf X3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgOTE4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dl bmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmly c3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5 cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0 SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoK CgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmly c3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAg ICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVt b3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw PgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAg ICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBf X3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf X2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMg MTA3MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9y d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g X19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigr K19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVy CiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg ICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19m aXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJl dHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVl X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmly c3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19y ZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog ICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9f dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkpOwogICAg fQojIDExNzAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h cnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK CgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFs dWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAg KisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7 CiAgICB9CiMgMTE5OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f YmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg ewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpf X2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7 CiAgICB9CiMgMTIzMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg X0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1 cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVk LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0 ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK ICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50 X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2Zp cnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9 IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0 dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7 CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg IHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAg ICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dh cChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChf X2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFz dCk7CiAgICB9CiMgMTM0OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAg cmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCkKICAgIHsKCiAgICAgICAgIAoKICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xh c3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICByZXZl cnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp CiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5OSAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVj bGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9F dWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7 CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf X3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAg ICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAg ICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAg ICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAg ICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg ICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRk bGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19m aXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAg ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09 IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBf X3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAg IAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRs ZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmly c3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2Zp cnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAg ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19t aWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3Jv dGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAg ICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAg ICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg IF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wg PSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2Vz KF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9Cgog ICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFu Y2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAg PSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAg ICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBf X2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9f bCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19w IC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsK ICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVs c2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7 IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAg ICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAg ICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAg X19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNTYxICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg IGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRl Z29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs IF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jl c3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9EaXN0YW5jZQogICAg X19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0 OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUg dm9pZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0 ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJz dCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAgIHZv aWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0 b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy ZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9f aSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3Jh bmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg IF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g X19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgrK19f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX25l eHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAgICBp ZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsK ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAo dHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC0t X19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFfX3By ZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAgICAg ICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAr K19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By ZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9f Zmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg IH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFj ZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E aXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJu IF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIg X19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwog ICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9f Zmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19l bmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAg ICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJl dHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlw ZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25f YWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBf X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkK ICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBf X2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQog ICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9 ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAg IGVsc2UgewogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsr X19yZXN1bHQyOwogICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0Miwg X19yZXN1bHQxKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j ZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9f c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0 ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK ICAgICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNl KF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2Jl Z2luOwogICAgICB9CiAgICB9CiMgMTg0OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAgICAgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xh c3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAgcmV0dXJuIF9fc3Rh YmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5y ZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBlbHNlCiAgICAgICAg ICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3By ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl VHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRv bUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUg KCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFz dDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAgICAtLV9fbGFzdDsK ICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsK ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIK ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2 b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3 aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsrX19maXJzdDsKICAg ICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQog ICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2 b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xh c3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAg ICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0t X19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg d2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4 dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAg ICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f dmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29w eV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBf X3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNj ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsK ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkp IHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAg ICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5l IHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAh PSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBf VmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAg X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2 b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f Zmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz aG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3Ro cmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2Zp cnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xn KF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9f biAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAg IHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo X2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xh c3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQg PT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsK ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s YXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2Rl cHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhy ZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFy dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0 dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVk aWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19j b21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0 LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7 CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK ICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJz dCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICAgICAgX19maW5hbF9p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICB9CiAgICB9CiMgMjE5NyAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAg ICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9s b29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7 CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7 CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv cnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRs ZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRk bGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9f aW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNl PgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAg ICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsK ICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmly c3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf c2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nl c3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9E aXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFz dCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19m aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg ICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBt aW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBf X3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19j b21wKTsKICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAg ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fY2h1bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j aHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg X19jaHVua19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQog ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAg ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2Nv bXApOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAg ICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu dGVyIF9fYnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBf RGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZl cl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9 IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s YXN0LCBfX3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog ICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3Rl cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAg ICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu Y2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2Zp cnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAg ICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtf aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAg ICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xv b3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAg ICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19z dGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZv aWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0 YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19i dWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19t aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2Fk YXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwg X19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19t aWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCks CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19i dWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp dmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9f YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7 CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAg ICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRh cHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAg ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs IF9fY29tcCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xh c3QsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19m aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0K IyAyNDMwICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz SXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVn aW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qp OwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xh c3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2 ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg ICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAg X1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2Zp cnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxh Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAg ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBf RGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb21wKTsKICAgIH0KIyAyNTAyICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFy dGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK CiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg KCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs IF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs ZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBt YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxf c29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl IF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAg IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz dDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRf Zmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFz dCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2Zp cnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAg ICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7 CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8 ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUo X19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog ICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRv bUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f cmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1 ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAK CgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVz dWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9f cmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9y ZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3Qg PSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs X2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg IGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2FkanVz dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0 KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K ICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29t cCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykg ewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVk X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0 KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAg X19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0Owog ICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAy NzI4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIG50 aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19s YXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAg ICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3Qg KyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAg ICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19j dXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t cCk7CiAgICB9CiMgMjc2OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJk SXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxl IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7 CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9 CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3Vu ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3 aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg ICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0g X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hh bGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9pbmNs dWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46 OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAg ICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk SXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYg PSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAg ICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9f bWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9f aGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoj IDI5MDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg X0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl VHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9y d2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19o YWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2 YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRk bGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBf X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9 IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICB9CiMgMjk0OCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0Zv cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAK ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk ZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAg X19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAg YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwp IHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAg ICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNl IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAg IGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs IF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19y aWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAg IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3 YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzAwMyAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv cndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19s ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9 IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo X19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7 CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0g MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQog ICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQg PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAg ICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3Vu ZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIHJldHVybiBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAg IH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4o X19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U cD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7 CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYm ICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFs LCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg IH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMx NjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJn ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly c3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0 OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAgewog ICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAg ICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9f Zmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAg ICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0g X19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl OwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0g MDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEg LyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vj b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAg ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9 CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFu Y2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0g ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2Zp cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUs IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBf RGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBf X2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0g MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAg ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0K ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2Ug X19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVu MSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFu Y2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xl bjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxz ZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29u ZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJz dCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRp c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJz dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dp dGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwg X19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9E aXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9C aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E aXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp CiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBpZiAo X19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19i dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgY29w eV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4gY29w eShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNlIGlm IChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHko X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBfX2xh c3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlzdGFu Y2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAg ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9f bGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFz dDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19m aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz dDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0K ICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAg ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0 MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xh c3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJl dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0t X19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlm IChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAq X19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICBy ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAg ICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19y ZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg ICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3Vs dCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2Us IHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19s ZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9f YnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xl bjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9f YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAg ICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1 ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsK ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwog ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBf X2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAg ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShf X2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxv d2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgICAg ICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAg ICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVu MiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK ICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2Fk YXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAg ICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdf bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZl cl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJz dCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVm ZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp OwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0g MDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBf X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1 dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAg ICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4y IC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog ICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0g ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3Jv dGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3Np emUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf X25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4y MiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2Vf YWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19s ZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIv dXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVy Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAg ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAg IF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAg ICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAg ICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1 ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAg IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x LCBfX2xlbjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf X21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1 OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5w bGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl cj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQog ICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAg ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7Cgog ICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9f YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAg ICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl bjEsIF9fbGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGlu Y2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwg Kl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICAr K19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog ICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIs ICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBl bHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmly c3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRl cgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0 MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg ICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw dXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAg IHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICAr K19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJl dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNl dF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3Qx IDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ugewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAg ICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr K19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAg ICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICAr K19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0 MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg ICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1t ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAg KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmly c3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091 dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0 MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAg ICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVs c2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg fQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAg aWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg KF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K ICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9 IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgq X19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lp KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lp KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAg ICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAg IGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19s YXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kp IHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3 aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dh cChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg ICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf X2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0Owog ICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kp KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0 ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAg ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7 CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJz dF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7 ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7 IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0g Kl9faXRlcikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0 MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmlu ZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7 ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7 IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4g X19sYXN0MTsKICAgIH0KIyA0MjAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBf X2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAg ICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewog ICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2go X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25l d19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAg ICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAg ICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlu YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0 ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3 YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAg ICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0 MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19u ZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAg ICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGly ZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf QmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVy YXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19y bGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAg ICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIp LCBfX3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJl dHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlz dGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj YXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t cCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp ZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxh c3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAg X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg X19ybGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAg ICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg ICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1 bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0Miwg X19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAg ICBpbmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0 MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoK ICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qx KSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0Mikp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9y d2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxp bmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv bXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChf X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb21wKTsKICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2crKy9hbGdvcml0aG0iIDIgMwoj IDU3ICIvdXNyL2luY2x1ZGUvZysrL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9i aXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFz aWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19l bXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNp emVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl ZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9f aSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1 ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytd ID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAq IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZk YXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0g X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9y ICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg X19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg ICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVf dHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1Jl cCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAg ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAg ICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0g X19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6 ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5f ZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoMCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19l cnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAg ICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1 cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1Jl cDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29w eV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNo KC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3 OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7 CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0No YXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19j b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAg ICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJu IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf U19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19u KQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24s IF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19y LT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+ X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1Nf dGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9y ZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAg ICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBf QWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBf Q2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1 cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2Mo KSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9f YSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiks IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hh clQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj dChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXpl X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs dXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0 SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0 cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsK ICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAg ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBf Q2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxs b2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAg IF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9S ZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICog c2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJl aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv aWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFy ZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01f bXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoK CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg c2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSAr IF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSAr IF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xk X3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9j YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9j X2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVf dHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXpl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9S ZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAg ICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBh Y2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipj YXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUg OiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9S ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAg aWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCgu Li4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9j YXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01f cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRh KCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu MikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19w b3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgp LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3Np emU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhp cy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19s ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3Jl cyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAg ICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hh clQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkp OwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEo X190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAg IGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9z aGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAg ICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2Fs bG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0No YXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7 CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQo KSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9f cy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAg ICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90 IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAg ICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3Np emUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMg NDIxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMwogICAgICBjb25z dCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdCBfX3N1YnBhZ2Vz aXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICog c2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUp ID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAg ICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBf X3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0 eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBh Y2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQogICAg ICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAgICAgIHsKICAgICAgICAgIHNp emVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNpemUgLSAoKF9fc2l6ZSArIF9f bWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQogICAgICAgICAgICAlIF9fc3Vi cGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJU KTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSAr IHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5 dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5l dyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAg ICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsKICAg ICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxv YyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAgICAgY29uc3Qgc2l6ZV90eXBl IF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoKICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVh ZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19w YWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXpl IC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBzaXplb2YoX0NoYXJU KTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNp dHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICBfX3IgPSBf UmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0eSA/CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNpdHksIF9f YWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVz dGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgp LCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGgg PSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNp emUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9z aXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXpl Iik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Np emUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAg ZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf X2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9f cyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIs IF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p MiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0g X19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7 CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29m ZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwg X19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9N X2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwK ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3Bv czIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu Zzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6 ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBf X24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3Bv czEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9f cG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBz aXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkp CiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo X19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgp LCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z dHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog ICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlm IChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7 CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywg X19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3Np emVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5 cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAg ICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQo X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu Z190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBf X3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUg X19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu ZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9 IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigp OwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQog ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAg ICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f biwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIp OwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRo aXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRh KCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBv cyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAg Zm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFp dHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAg ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJU IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAo X19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEg PSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9f cG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9f cCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf X24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXpl IC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo KTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAg ICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+ IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBf X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg ICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9z LS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv c10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJl dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24g JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f cG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19u KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAg ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf X3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k X2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv ciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRz X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVy biBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihf Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hw b3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3Mp CiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAg ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5 cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s YXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9z KQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo X19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAg ICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAg ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf X3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBf X3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsK ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEo KSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6 ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Mx LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19z dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUp CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAg ICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAg ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19y ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAg ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0 dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAg ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3Ig PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAgaWYg KCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6 ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5 cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNf dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICgh X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z dCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAg ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9f c2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl Iik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3Bvcywg X19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAg ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3Ms IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7 CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNz IF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAg ICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZz aXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90 eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXpl X3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFp dHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0 ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z dHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p c3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwg Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0 bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p c3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg d3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5l KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3Ry ZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3IvaW5jbHVkZS9nKysvc3RyaW5n IiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9leGNlcHRp b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0 LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xh c3MgbG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUm KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250 cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJU LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l IGJvb2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzcHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVt KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJU LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l IF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0 eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAg dGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3 Y2hhcl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnlu YW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0 ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBj aGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K ICAgIGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1w dW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0 aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0g aXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRp bWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K ICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5 X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAg IGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs ID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2Vz X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAg Y2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRl Z29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoK ICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVz ZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg ICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoK CgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNh dGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmlj ID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsK ICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25z dCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg bWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xs YXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhy b3coKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4 cGxpY2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9j YWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2Fs ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19j YXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxv Y2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAg IGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93 KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29t YmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUo KSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikg Y29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9j YWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRv cj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBj b25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAg IHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0lt cGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGlj IF9JbXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdv cmllcyA9IDY7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAg c3RhdGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFf U19jbGFzc2ljKQogICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkK ICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29h bGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5 IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAg IGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJv dygpOwoKICBwcml2YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFj ZXQqKiBfTV9mYWNldHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CiAgICBjb25zdCBjaGFy KiBfTV9uYW1lc1tfU19udW1fY2F0ZWdvcmllc107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp ZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25z dCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf aWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3Rp bWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtd OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAg ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3Jp ZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAg IHsgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAg ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5n ZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAg ICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXpl X3QpOwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBz aXplX3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1w bCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBi b29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1 ZTsKICAgICAgZm9yIChzaXplX3QgaSA9IDA7IF9fcmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmll cyAtIDE7ICsraSkKICAgICAgICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW2ldLCBfTV9uYW1l c1tpICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAg X01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQK ICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBj b25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25z dCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2Nh bGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlu bGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9N X2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy LCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5f TV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwg X19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7 ICsrX19pKQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBj bGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl OwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9NX3Jl ZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2Nh bGU7CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoK ICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVf Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxl CiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2 b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZh dGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAg ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYp OwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3Mg bG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZy aWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7 CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhh c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBf TV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9p ZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGlj OgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsK ICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2Fu ZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9 CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAg dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsK fQojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9i aXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2Uu aCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9z X2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3Bl cmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBf SW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19i KSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBf X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nh c3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19G bXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShf SW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f YSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRm bGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7 IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9f YSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu bGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0 dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lv c19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUg X0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9k ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0 b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9z X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7 IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2Es IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu bW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikK ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBv cGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1 cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3Je PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9 IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09w ZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9f YSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8 IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0 YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3Rh dGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNf Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z X0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19i KQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg b3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVy biBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0o X0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h IF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRl IF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K CiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoK CiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVi bGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZh aWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAg ICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdo YXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXpl ID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0 eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg bGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBm bXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19z aG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAg c3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm bGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoK CiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3Rh dGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBj b25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAg ICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1Nf ZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsK CgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9w ZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNv bnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3Rh dGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4p OwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9T X2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFn czo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9f aW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7 CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNv bnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVu ZCA9IHNlZWtkaXIoMik7CiMgMjI2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2UuaCIg MwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZl bnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRf Y2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVy X2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVk OgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsK ICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CiAgICBpb3N0 YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAg ewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9j YWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBfQXRvbWljX3dvcmQgX01f cmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sg X19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBf X2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4 KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2Uo KSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAgICAgaW50CiAgICAgIF9N X3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNv dW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7Cgog ICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsKCiAgICB2 b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0IF9Xb3Jkcwog ICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsKICAgICAgX1dv cmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9OwoKCiAgICBfV29yZHMg X01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRfc2l6ZSA9 IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVdOwoKCiAgICBp bnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAgIF9Xb3JkcyYKICAgIF9N X2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAg ICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAg ewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsK ICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9v bCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAg ICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRp YyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdz CiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZs YWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29s ZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkK ICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0g X19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwog ICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZt dGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAg IF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg fQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdz ICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29u c3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9 IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g X19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyBy ZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFt c2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAg ICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0 aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxv Y2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQog ICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMg aW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50 IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUp CiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMo X19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZv aWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9f aXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4 XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CiAg ICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFzZSgpOwoKCgog IHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgog ICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl JgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihp b3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0 Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl LnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0 Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu c2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu ZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNl LnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYg X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRq dXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBy aWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdo dCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s aW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7 CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3Nf YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jh c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz ZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy9zdHJlYW1idWYiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1ZiIg MwoKCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNf aW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFt YnVmCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0 cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh aXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlw ZT4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUs IHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2lj X2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lz dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19v c3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVh bWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNz IG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmll bmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5 cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3Rl Y3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBpbnRfdHlwZSBfTV9i dWZfc2l6ZTsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wg X01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBj aGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNo YXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBj aGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7 CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxl X2luaXQ7CgoKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBpbnRfdHlwZSBfU19wYmFja19zaXplID0g MTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5 cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZl OwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNr X2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7 CiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAg ICAgICAgICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwog ICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01f cGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJh Y2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5p dCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJh Y2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg IHsKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNr OwoKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90 eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90 eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAg aWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBf X3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1Ziwg X01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01f cGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2 ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAg ICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAg ICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAg IGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwog ICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRf Y3VyICs9IF9fbjsKICAgICAgfQojIDE5OCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYiIDMK ICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAg ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBf X247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01f aW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAg aWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9 CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAg IHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAg ICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAg ICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9j dXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoK ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9N X2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9N X2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgw KTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxv Y2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAg bG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7 CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9j KCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAg ICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9j YWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRi dWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBl IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBv c190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK ICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQK ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1z aXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAg ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7 CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNr X2N1cl9zYXZlOwogICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j dXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJh Y2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9f cmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBl bHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBf X3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAg ICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAo dGhpcy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9 CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNn ZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9j dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBf X3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoK ICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRf dHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAg ICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7 CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxs KSwgX01fYnVmX3NpemUoMCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRf dHlwZT4oODE5MikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwg X01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCks CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01f YnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9N X3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwKICAgICAgX01fcGJhY2tf aW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNv bnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkg Y29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRy KCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGlu dCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJf dHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAg ICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25l eHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBp b3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9N X21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBl KgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJf dHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNo YXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAg ICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAg IHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAg ICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBf TV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0 KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3Nf YmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1 ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9s b2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNo YXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAg ICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29m ZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9w ZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9z X3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVr cG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0x KSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAg ICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAg ICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBl CiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0g X19yZXQ7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1 ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQog ICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgq X01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9i dWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19N X291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAg ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlw ZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZp cnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5 cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2Yo KTsgfQojIDQ4MCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAg ICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAg X19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUm KSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdHJl YW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjpfU19wYmFja19zaXplOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1w YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9N X2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0g Kih0aGlzLT5ncHRyKCkpOwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19j KQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9p bl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01f aW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAg aWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAg IGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu X2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0Yyhj aGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291 dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAg ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRo aXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBz dHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsK ICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg ICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVf dCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9 IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVu OwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92 ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAg ICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5 cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19y ZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2Zm X3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZf bGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5n ID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZf bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0 X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAg ICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6 OmVvZigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAg ICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9z PF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUg X19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwo KTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2Jv dXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAg ICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZz aXplKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICAgIF9fc2Jp bi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0g X19idWZzaXplKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYmlu LT5zZ2V0YygpID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg IHsKICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg IGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAg ICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1w bGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+ JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0 cmVhbWJ1ZjxjaGFyPiopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVm PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0 cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwK ICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CiMgNDk0 ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9nKysv aW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5 ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1 Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0No YXJUKiwgX0NoYXJUJj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0 ZToKCgoKCgoKCiAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGlu dF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhy b3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9p dGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJk YnVmKCkpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVm X3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYygtMikgeyB9CgoK ICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9CgogICAgICBpc3RyZWFtYnVmX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmICYm IF9NX3NidWYtPnNidW1wYygpID09IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgIF9NX3Ni dWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3Ir KyhpbnQpCiAgICAgIHsKICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7 CiAgICAgICAgaWYgKF9NX3NidWYgJiYgKF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKSkg PT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxz ZQogICAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoK ICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNv bnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9IF9NX2dldCgpID09IF9fZW9mOwogICAgICAg IGJvb2wgX19iZW9mID0gX19iLl9NX2dldCgpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190 aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgog ICAgcHJpdmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewog ICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGlmIChf TV9zYnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fYyAhPSBzdGF0aWNfY2FzdDxp bnRfdHlwZT4oLTIpKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgIGlmICgoX19yZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSA9PSB0cmFpdHNf dHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAg ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAg ICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAg IHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlz dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBj b25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0 dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJl YW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgog ICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykg dGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVm KSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhy b3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAg ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAg ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1 Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl dHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y PShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1Ry YWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQog ICAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQx ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDEg MwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L3djdHlwZS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS93Y3R5cGUu aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwojIDc5ICIvdXNyL2luY2x1 ZGUvd2N0eXBlLmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEs CiAgX19JU3dhbHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAog IF9fSVN3c3BhY2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9f SVN3YmxhbmsgPSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lT d2FsbnVtID0gMTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAo KDFVTCA8PCAoX19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy KSkgPj4gMjQpKSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy KSkgPj4gMjQpKSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh KSkgPj4gMjQpKSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkg KCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0 KSkgPj4gMjQpKSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAo KDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGlu dCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8g KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J U3d4ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3c3BhY2UpKSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3cHJpbnQpKSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3Z3JhcGgpKSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3YmxhbmspKSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3Y250cmwpKSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3cHVuY3QpKSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAo aW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/ IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQg PyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9f SVN3YWxudW0pKSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50 IGlzd2FsbnVtICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBo YSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBp c3dwcmludCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAo d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9f d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFy ICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9f d2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdW5zaWduZWQgaW50ICpf X2N0eXBlMzJfYjsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29u c3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90 IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjb25zdCB3aW50X3QgKl9fY3R5cGUzMl90b2xvd2VyOwpleHRl cm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG91cHBlcjsKIyAyNzUgIi91c3IvaW5jbHVkZS93 Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7 CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0 aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNf dCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9f aXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgX19pc3djbnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19s b2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IF9faXN3bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgX19pc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv Y2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNl X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgX19pc3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50 X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVf dCBfX3djdHlwZV9sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2Nh bGUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193 Yywgd2N0eXBlX3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90 IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190 IF9fd2N0cmFuc19sIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2Nh bGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3Qg X193Yywgd2N0cmFuc190IF9fZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrL2N3 Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2luY2x1ZGUvZysrL2N3Y3R5cGUiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBlX3Q7CiAgdXNpbmcgOjp3Y3Ry YW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjppc3dhbHBoYTsKICB1c2luZyA6 Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcgOjppc3dkaWdpdDsKICB1c2lu ZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNpbmcgOjppc3dwcmludDsKICB1 c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAgdXNpbmcgOjppc3dzcGFjZTsK ICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0OwogIHVzaW5nIDo6aXN3Y3R5 cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3VwcGVyOwogIHVzaW5nIDo6dG93 Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1c2luZyA6OndjdHlwZTsKfQojIDQ3ICIvdXNy L2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrL2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNjAgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVf ZmFjZXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2N0 eXBlX2Jhc2UuaCIgMSAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2Jp dHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBj b25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3Qg bWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNh bHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMg Y29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFj ZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAg IHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFz ayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5j dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA2MSAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9j YWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNo YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsg fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8s IGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBl KgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20s IF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoK ICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUq CiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAg IGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAg ICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFy X3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIq IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAg ICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90 eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsg fQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9i YXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg dmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFs IGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNv bnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lz KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg Y2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5 cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAog ICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVh bCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0g MDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAg Y2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0 cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAg ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXpl X3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsg fQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmly dHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0 IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg Y2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5 cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq IF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAg ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBj aGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz IGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6 CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsK ICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwog ICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUo Y29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVm cyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNv bnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNp emVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBj aGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3Qg Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAg aW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9f bG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg ICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp KSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkg Y29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNv bnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAog ICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwg Y2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1h c2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xv LCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hh ciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg IGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9j YWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBw dWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9f d21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf Y3R5cGU7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl eHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAog ICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHBy b3RlY3RlZDoKICAgICAgX193bWFza190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29u c3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNv bnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh cl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBj aGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFy cm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k ZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90 PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoK CgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvY3R5cGVfaW5saW5l LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2N0eXBl X2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBf X2MpIGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o X19jKV0gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgaXMoY29uc3Qg Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNvbnN0CiAgewog ICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3RhYmxlW3N0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdysrKV07CiAgICByZXR1cm4gX19oaWdoOwogIH0K CiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19s b3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAhKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KCpfX2xvdyldICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsK ICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBj b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxl IChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNp Z25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVy biBfX2xvdzsKICB9CiMgMzk4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5o IiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFt ZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp cnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAg ICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJl ZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFt ZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jb2RlY3Z0LmgiIDMK CgogIGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHJlc3VsdAogICAg ewogICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3IsCiAgICAgIG5vY29udgogICAg fTsKICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UK ICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAg ICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4 dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICByZXN1 bHQKICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zy b21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9f dG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICByZXN1bHQKICAgICAgdW5zaGlmdChz dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0 KTsgfQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICBpbnRlcm5fdHlwZSog X190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBf X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGVu Y29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygp OyB9CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxl bmd0aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5k LCBfX21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQog ICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMg PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9f Y29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk b19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlw ZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90 eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBl KiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZp cnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlw ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSom IF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp bmcoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdh eXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRo cm93KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5h bWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1 YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJl c3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBf RXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoK ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0 KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRl cm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg ZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAg ICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3Qg dGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29u c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0 ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0 IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVU PgogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46Omlk OwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRl X3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3Rh dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0 KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBf X2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSog X190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2Vu ZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQK ICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv bSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co KTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhy b3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBl JiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVy bl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAg ICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8Pgog ICAgY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBf X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVk ZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsK CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVj dnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25z dCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4 dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQs CiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAg ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29u c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAg ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAg aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGlu dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRv X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRv X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhy b3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJs aWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6 CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg X19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4o X19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9i eW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1zdXNlLWxp bnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvaW5jbHVk ZS9nKysvaTQ4Ni1zdXNlLWxpbnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMwog IGNsYXNzIF9fZW5jX3RyYWl0cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3Qg X19kZXNjX3R5cGU7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhf c2l6ZSA9IDMyOwoKICAgIGNoYXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBf TV9leHRfZW5jW19TX21heF9zaXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAg ICBfX2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGlu dCBfTV9pbnRfYm9tOwoKICBwdWJsaWM6CiAgICBleHBsaWNpdCBfX2VuY190cmFpdHMoKQogICAg OiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2Jv bSgwKQogICAgewogICAgICBtZW1zZXQoX01faW50X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAg ICBtZW1zZXQoX01fZXh0X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAgfQoKICAgIGV4cGxpY2l0 IF9fZW5jX3RyYWl0cyhjb25zdCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciogX19leHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9faWJvbSA9IDAsIGludCBfX2Vib20gPSAwKQogICAg OiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2Jv bSgwKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9faW50LCBfU19tYXhfc2l6ZSk7 CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19leHQsIF9TX21heF9zaXplKTsKICAgIH0KCgoK CgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKTogX01faW5fZGVz YygwKSwgX01fb3V0X2Rlc2MoMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29i ai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19v YmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01f ZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgoKICAg IF9fZW5jX3RyYWl0cyYKICAgIG9wZXJhdG9yPShjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKQog ICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9z aXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhf c2l6ZSk7CiAgICAgIF9NX2luX2Rlc2MgPSAwOwogICAgICBfTV9vdXRfZGVzYyA9IDA7CiAgICAg IF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmou X01faW50X2JvbTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIH5fX2VuY190cmFpdHMo KQogICAgewogICAgICBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZf dD4oLTEpOwogICAgICBpZiAoX01faW5fZGVzYyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyKQogICAg ICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAgICBpZiAoX01fb3V0X2Rlc2MgJiYgX01f b3V0X2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01fb3V0X2Rlc2MpOwogICAg fQoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBf X2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBpZiAoIV9NX2luX2Rl c2MpCiAgICAgICAgewogICAgICAgICAgX01faW5fZGVzYyA9IGljb252X29wZW4oX01faW50X2Vu YywgX01fZXh0X2VuYyk7CiAgICAgICAgICBpZiAoX01faW5fZGVzYyA9PSBfX2VycikKICAgICAg ICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBpbnB1dCBkZXNjcmlw dG9yIGZhaWxlZC4iKTsKICAgICAgICB9CiAgICAgIGlmICghX01fb3V0X2Rlc2MpCiAgICAgICAg ewogICAgICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9l bmMpOwogICAgICAgICAgaWYgKF9NX291dF9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Ro cm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGljb252IG91dHB1dCBkZXNjcmlwdG9yIGZhaWxl ZC4iKTsKICAgICAgICB9CiAgICB9CgogICAgYm9vbAogICAgX01fZ29vZCgpCiAgICB7CiAgICAg IGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7 CiAgICAgIGJvb2wgX190ZXN0ID0gX01faW5fZGVzYyAmJiBfTV9pbl9kZXNjICE9IF9fZXJyOwog ICAgICBfX3Rlc3QgJj0gX01fb3V0X2Rlc2MgJiYgX01fb3V0X2Rlc2MgIT0gX19lcnI7CiAgICAg IHJldHVybiBfX3Rlc3Q7CiAgICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRf aW5fZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9f ZGVzY190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9v dXRfZGVzYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4dGVybmFsX2JvbSgpCiAgICB7IHJldHVy biBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9nZXRfaW50ZXJuYWxfYm9tKCkKICAgIHsg cmV0dXJuIF9NX2ludF9ib207IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFs X2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRfZW5jOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9N X2dldF9leHRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01fZXh0X2VuYzsgfQogIH07CgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNz IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBf X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4K ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVz dWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9F eHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBl OwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAg ICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9fZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2Fs ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlw ZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv ZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29k ZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4o X19yZWZzKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv ZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBl JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3Qg aW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQs CiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAog ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVh bCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlw ZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2lu KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9f ZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2 aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4 dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVy blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UPgogICAgaW5saW5lIHNpemVfdAogICAgX19pY29udl9hZGFwdG9yKHNpemVfdCgqX19mdW5j KShpY29udl90LCBfVCwgc2l6ZV90KiwgY2hhcioqLCBzaXplX3QqKSwKICAgICAgICAgICAgICAg ICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVmLCBzaXplX3QqIF9faW5ieXRlcywKICAg ICAgICAgICAgICAgICAgICBjaGFyKiogX19vdXRidWYsIHNpemVfdCogX19vdXRieXRlcykKICAg IHsgcmV0dXJuIF9fZnVuYyhfX2NkLCAoX1QpX19pbmJ1ZiwgX19pbmJ5dGVzLCBfX291dGJ1Ziwg X19vdXRieXRlcyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9F eHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBf X2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgIGV4 dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9y OwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl ZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9f ZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwogICAg ICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAg ICAgICAgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zy b20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90 eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5k IC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh cio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2Nv bnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19pbnRfYm9tID0gX19zdGF0ZS5fTV9nZXRfaW50ZXJu YWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19pbnRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAg aW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihpbnRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAg ICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGludGVybl90eXBlPihfX2ludF9ib20pOwog ICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGludGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEs IF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2Fz dDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRv cihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmX19mYnl0ZXMsICZfX2N0bywgJl9fdGJ5dGVzKTsKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9f Y2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAg X19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAg ICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLCAmX19m Ynl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9f dGJ5dGVzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0x KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRf Y2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4 dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAg X19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9f ZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAg ICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8p OwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3Vs dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f dW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9N X2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190 eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9f c3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3Rt dWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0g X190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3Rv ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252 ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAg ICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAg ICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8p KQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7CiAgICAgICAgICAgICAgZWxzZSBpZiAo X190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAg ICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4 dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29u c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgaW50ZXJu X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGludGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAg ICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3Rh dGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2Nf dHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAg Y29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKICAgICAgICAg IHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAg ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAg ICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsK CgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7 CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoK ICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRlcm5hbF9ib20oKTsK ICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXpl X3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBleHRlcm5fdHlw ZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2Zp eGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7CiAgICAgICAgICAg ICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBf X3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihf X2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAq X19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3Rf Y2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2lj b252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAg ICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5f dHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh c3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f ZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25l eHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAg ICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgewog ICAgICBpbnQgX19yZXQgPSAwOwogICAgICBpZiAoc2l6ZW9mKF9FeHRlcm5UKSA8PSBzaXplb2Yo X0ludGVyblQpKQogICAgICAgIF9fcmV0ID0gc2l6ZW9mKF9JbnRlcm5UKS9zaXplb2YoX0V4dGVy blQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9F eHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJv dygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nh c3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBf RXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co KQogICAgeyByZXR1cm4gMTsgfQojIDMzNCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2NvZGVjdnQu aCIgMiAzCiMgNDIzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMK CgoKICBjbGFzcyBfX251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0 IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9N X2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3Np emUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0 KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAg ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1Nf Zm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k LCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHBy aXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUg X01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFs c2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90 IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6 ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxl IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAg IHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7 IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2Vu YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1 ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVh bCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBf TV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1w bGF0ZTw+CiAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAg IHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVu Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9D aGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAg cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1w dW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBu dW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2Fs ZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1 bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9j YWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoK ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0 KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19p biwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf X3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91 YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9l eHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7Cgog ICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJp bmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwg bG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAg ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAog ICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0 JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg ICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxl OjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX3B1 dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh cl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0 ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl IF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChf X3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg fQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAg ICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf X2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikg Y29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlw ZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgY2hhciBfX21v ZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9m bG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBf X2NzLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90 eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25z dDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYg X19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X193cywgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7 IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f ZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25n KSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBl LCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj aGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl IF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91 YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29u c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6 ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90 ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2xsYXRlOwoKICAgIHB1Ymxp YzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2xs YXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAg ICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAg ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBf U19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOyB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25z dCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBz dHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh clQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBf X2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3Qg X0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9f aGkpOyB9CgoKICAgICAgaW50CiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3Qg X0NoYXJUKikgY29uc3Q7CgogICAgICBzaXplX3QKICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCos IGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+Y29sbGF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0 ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2Nh bGVfY29sbGF0ZSk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUo Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBk b19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAg IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxf Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01f Y29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg ICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hh ciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2No YXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsK CiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zv cm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0 ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg IGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f cmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAg IGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVz dHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVhdGVfY19s b2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFz cyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwg ZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07CgogICAg cHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsKICAgICAg Y29uc3QgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0 ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBj b25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVf ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh clQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQq IF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2Ey OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k YXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQq IF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0 OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hh clQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250 aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAg ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog bG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdCgiQyIpCiAgICAgIHsgX01f aW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVu Y3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp CiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCiAg ICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQoKICAgICAgdm9pZAogICAg ICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zv cm1hdCwKICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAg ICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoK ICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBf TV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3Jt YXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVb MF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3Jt YXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2Ft cG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2Ft cG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9y bWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0g PSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJh X2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoq IF9fZGF5cykgY29uc3QKICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAg ICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAg ICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAg ICAgICBfX2RheXNbNV0gPSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQq KiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAg ICAgICAgX19kYXlzWzFdID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9h MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01f ZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0g PSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9D aGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9t b250aDAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRo c1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAg ICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21v bnRoMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhz WzddID0gX01fbW9udGgwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAg ICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21v bnRoMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAg dm9pZAogICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMp IGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAg ICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21v bnRoX2EwMzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21v bnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2Ew NjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3 XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAg ICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBf TV9tb250aF9hMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAg ICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mg PSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBs b2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgX190 aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBj aGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRl PD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5j dChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1 bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRtKikg Y29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6fl9fdGltZXB1 bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBfX3RpbWVwdW5jdDx3 Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190 aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j bG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9N X3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25l c1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNl CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg ZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxl OjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19l bmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRl KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190 bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0 X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0 bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19k YXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf dGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0 OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q IF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgog ICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlw ZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwg aW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJf dHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAg ICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRl cl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVf Z2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9n ZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhw bGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0g MCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFz cyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg ICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwK ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0 OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p bywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9y bWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj aGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAgIGNoYXIgX19mb3Jt YXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091 dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg dGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoK ICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNw YWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll bGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoK CgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVj ZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAg ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBjaGFyKiBf TV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJf dHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3lt Ym9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0 IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwog ICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsK CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25l eXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7 IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAg ICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxf cG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7 IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAg cG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3Np Z24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAg IGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMo KTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3Jt YXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAgIHZpcnR1 YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVy biBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoK ICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19j dXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAg ICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl CiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2 ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4K ICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7 IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAg ICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBfTV9pbml0 aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6Omlk IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46 OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1 bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlw dW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+ OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0 ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9t b25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVu Y3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5 cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2 b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu Y3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1 bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUg X19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNs YXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4K ICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9 IF9JbnRsOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hh ciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0lu dGw+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9tb25leXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9j X2xvY2FsZV9tb25leXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUo X01fY19sb2NhbGVfbW9uZXlwdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJU LCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg X0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf X2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2Vu ZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlw ZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9f ZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6Omlk IG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBf X2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19m aWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1v bmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK ICAgICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBl JiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRl cj46OmlkOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRh bG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2Vz IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9f Y19sb2NhbGUgX01fY19sb2NhbGVfbWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFt ZV9tZXNzYWdlczsKCgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19s b2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1l c3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3Jl ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01f bmFtZV9tZXNzYWdlcyA9IF9fbmFtZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9T X2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Bl bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNh dGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm LCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3Mp OyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNz YWdlcyAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21lc3NhZ2VzKTsKICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBk b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQs IGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQK ICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29u dmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAg ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihf X21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252 ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3Qg X19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTcwNSAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJp bmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0 cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qg c3RyaW5nJikgY29uc3Q7CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9i aXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKysvaTQ4Ni1z dXNlLWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn ZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9j YWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIp IGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAg ICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAg ICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAg ewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJU Pjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQs IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19k ZmF1bHQpIGNvbnN0CiAgICB7CgoKCgoKCiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv Y2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX01fbmFt ZV9tZXNzYWdlcyk7CiAgICAgIGNoYXIqIF9fbXNnID0gZGNnZXR0ZXh0IChfX251bGwsIF9NX2Nv bnZlcnRfdG9fY2hhcihfX2RmYXVsdCksIF9fTENfTUVTU0FHRVMpOwogICAgICBzZXRsb2NhbGUo X19MQ19BTEwsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfTV9jb252 ZXJ0X2Zyb21fY2hhcihfX21zZyk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAog ICAgeyB9CiMgMTcxOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6 IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFy KiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZz KQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fczsKICAgICAgICBpZiAoX01f Y19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2Nf bG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUo X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAgICAgIHsgfQogICAgfTsKCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2Ms IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo Y3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl OjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVu Y3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQs IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2Mp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dy YXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVy KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYykudG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2lj X2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UK ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAg ICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRl cj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBtdXRhYmxl IGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0OwogICAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwoKCiAgICAg IGNvbnN0IF9fY3R5cGVfdHlwZSogX01fZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlw ZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7Cgog ICAgcHVibGljOgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9CgogICAgICBi b29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsg fQoKICAgICAgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f c3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0 ZSA9IGdvb2RiaXQpOwoKICAgICAgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUp CiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAg IGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUoKSA9 PSAwOyB9CgogICAgICBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlz LT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkp ICE9IDA7IH0KCiAgICAgIGJvb2wKICAgICAgYmFkKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRo aXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQoKICAgICAgaW9zdGF0ZQogICAgICBleGNl cHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CgogICAgICB2b2lk CiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAgICAgewogICAgICAgIF9NX2V4 Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0 ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQogICAgICB7IHRoaXMtPmlu aXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvcygpIHsgfQoKCiAgICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fdGllOyB9CgogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4q CiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAg ICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3Rp ZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1Zigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBi YXNpY19pb3MmIF9fcmhzKTsKCiAgICAgIGNoYXJfdHlwZQogICAgICBmaWxsKCkgY29uc3QKICAg ICAgewogICAgICAgIGlmICghX01fZmlsbF9pbml0KQogICAgICAgICAgewogICAgICAgICAgICBf TV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1 ZTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX01fZmlsbDsKICAgICAgfQoKICAgICAgY2hh cl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5 cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAg cmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxv Y2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hh ciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp IGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQog ICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxv Y2FsZTo6ZmFjZXQqIF9fZikgY29uc3QKICAgICAgewogICAgICAgIGlmICghX19mKQogICAgICAg ICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAg ICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKTsKICAgIH07 Cn0KCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzQg Ii91c3IvaW5jbHVkZS9nKysvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAg ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAg ewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBf X3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRl IHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMo KSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRl KSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kgog ICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7 CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25z dCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9f cmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2Nh bF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFj a19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAg ICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNl X2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAg ICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAg IH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9f Y2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytf X2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAo X01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBf TV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0g X193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAg dGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRo KCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlz LT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAg ICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2Nh bGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNp Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1 bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJv dyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hh cl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m Y3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9j KCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMo X19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVm KCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19p b3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hl X2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi91c3IvaW5j bHVkZS9nKysvYml0cy9iYXNpY19pb3MudGNjIiAzCiAgICAgIF9NX2ZpbGwgPSAwOwogICAgICBf TV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAg IF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBn b29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01f Y2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFj ZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxf X2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7Cgog ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAg ICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xv YykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2Mp OwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJh c2ljX2lvczx3Y2hhcl90PjsKfQojIDIwOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Jhc2ljX2lv cy5oIiAyIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2crKy9pb3MiIDIgMwojIDQ2ICIvdXNyL2luY2x1 ZGUvZysrL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0 dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90 eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBl OwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl OwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVm X2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBl X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAg ICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVu ZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBl JikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgq X19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu c2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0 IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZs YWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNl OjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAg IGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+ KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1 bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAo X19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAg IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihf X24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh dGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0 aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29z dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9z X3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChw b3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlv c19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjpzZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0No YXJULF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNl bnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5 KCkKICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVm ICYmICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChf TV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAg ICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAg fQoKICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQs IGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj aGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYgX19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNf Y2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0 IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29u c3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3Mp OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4g KF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBs YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0 PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5k bChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVz aChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJl dHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg Zmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4g X19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvb3N0cmVh bS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMg MSAiL3Vzci9pbmNsdWRlL2crKy9sb2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2xv Y2FsZSIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg MSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9nKysvY2Vy cm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRl L2Vycm5vLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8u aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAx IDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVk ZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4 dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJy bm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9n cmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9 CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkg Ii91c3IvaW5jbHVkZS9nKysvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDEg MwojIDQ4ICIvdXNyL2luY2x1ZGUvZysrL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21h dGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgi IDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRv dWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg YXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi bGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi bGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs ZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUg Kl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAo ZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3No IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs ZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19l eHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25l bnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4 cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQg X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl cm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xv ZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBf X3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJs ZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cy IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwg KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBm bG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUg KGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZp Y2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29u c3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQg aXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4g KGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkg dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl IHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3Vi bGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMg KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgp OwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJs ZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRv dWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9y IChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUg cmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91 YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUg cmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy biBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gs IGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUg X194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUg X194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Jl bXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK CgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91Ymxl IF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEg MwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNv c2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFu ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93 ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f dGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQg X194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQg X19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBhY29z aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh dGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZs b2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp OwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIp IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g ZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDJmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAo ZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3Jm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p dGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVt ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNh bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFy ICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZs b2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYg KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxv YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0 ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0 KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAo ZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYg KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgp OwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4 dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBu ZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9f eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2ls b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxv YXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAo ZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5 aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBf X3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1 b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50 IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJp bnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zt aW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNs YXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYg KGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKIyA4MyAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJs ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNv c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4g dm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9u ZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3No bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpf X2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRv dWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19s b2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBl eHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw MmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Jy dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2Vp bGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVl KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg X19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFu bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f ajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgp OwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3Vi bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f eW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg ZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChs b25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRo cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK CmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg aW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBu ZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBk b3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv dWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVv KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u ZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQg X19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50 IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50 IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50 IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xy b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBf X2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk b3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsK IyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBG UF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JN QUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBf SUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9M SUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lP TjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAg ewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3Vi bGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0 cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21h dGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMTI3ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYg KGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7 IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpf X2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNp b25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6IF9feCB9 OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0bCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxvbmcgZG91 YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJuIChfX3Uu X19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93ICgpOyBfX2lubGlu ZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAg PyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQgX19zZ25m IChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB0aHJv dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBf X2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfQojIDQy NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFu MiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu bGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBf X3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg X19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp LCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBk b3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAo KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZw YXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7 IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4Iiwg ImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5c dCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgi LCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3Rz dwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ0MCAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0IChkb3Vi bGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xh dGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9f cmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVn aXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n IGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jl c3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBkb3Vi bGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGluZSBkb3VibGUgZmFi cyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0K X19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWls dGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpfX2lubGlu ZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu IF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu bGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl Z2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFu IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1 bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl ciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9 dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0g X19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g X19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWdu ZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9f bi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBf X24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTIgIi91c3IvaW5jbHVkZS9i aXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRo cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25l ZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsg X19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAo X19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6 ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAo X19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9f eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVu c2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3 dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3Rt cCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw IiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIg KF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDog Im0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29y bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91 YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsg X19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw IiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxm IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3 KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUg KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGlu dCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj dyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRv dWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91 YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg JTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBf X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192 b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0K IyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUK bGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7 Cn0KIyA1MzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi bGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9n MXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg aWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwp IF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs ZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9n MXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gp IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0 dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4w KSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0 IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gp OyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkg KyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFz aW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f eSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAo X195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCl9f aW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAo X194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5s aW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3gg KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUg bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxv Z2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoK Cl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShf X3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBmbG9h dCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg PSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEu MCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf X2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCAr IF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3Vi bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3gg KyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0g X19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsg fQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVl KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChm bG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIg OiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Zh bHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmsp LCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTgzICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRleHBmIChm bG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh bHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5s aW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAo KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi ZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkg X195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s aW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsK ICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIg OiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJl czsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxv bmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9 bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9 Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAg bG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDog Ij1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7 Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25n IGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQg X19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChf X2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9f aW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9u ZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUw IiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJp bnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0 Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7 IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0x XG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVl KSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJl dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xv YmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxu XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVy ZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p bmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9i YmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5c dCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJl ZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDY2 NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApfX2Zpbml0 ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAgICAg ICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0pLl9f aVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzUxICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQoj IDUyICIvdXNyL2luY2x1ZGUvZysrL2NtYXRoIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL2crKy9j bWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9f Y21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgaW5saW5lIF9UcAogICAgX19jbWF0aF9hYnMoX1RwIF9feCkKICAgIHsKICAgICAgcmV0dXJu IF9feCA8IF9UcCgpID8gLV9feCA6IF9feDsKICAgIH0KCiAgaW5saW5lIGRvdWJsZQogIGFicyhk b3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KCiAgaW5saW5lIGZs b2F0CiAgYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoK ICBpbmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9f YnVpbHRpbl9mYWJzbChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkg eyByZXR1cm4gOjphY29zZihfX3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxpbmUg bG9uZyBkb3VibGUKICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gp OyB9CgoKCgoKICB1c2luZyA6OmFzaW47CgoKICBpbmxpbmUgZmxvYXQKICBhc2luKGZsb2F0IF9f eCkgeyByZXR1cm4gOjphc2luZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg YXNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCiAgdXNp bmcgOjphdGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6 YXRhbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXRhbjI7CgoK ICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4gOjph dGFuMmYoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxv bmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9f eCk7IH0KCgoKCgoKICB1c2luZyA6OmNlaWw7CgoKICBpbmxpbmUgZmxvYXQKICBjZWlsKGZsb2F0 IF9feCkgeyByZXR1cm4gOjpjZWlsZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoKCiAg dXNpbmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpCiAgeyByZXR1cm4g X19idWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBk b3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCiAgdXNpbmcgOjpj b3NoOwoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y29zaGYo X194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194 KSB7IHJldHVybiA6OmNvc2hsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5saW5l IGZsb2F0CiAgZXhwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpleHBmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmV4cGwo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmYWJzOwoKICBpbmxpbmUgZmxvYXQKICBmYWJzKGZsb2F0 IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wo X194KTsgfQoKICB1c2luZyA6OmZsb29yOwoKCiAgaW5saW5lIGZsb2F0CiAgZmxvb3IoZmxvYXQg X194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZsb29ybChfX3gpOyB9CgoKCgoK ICB1c2luZyA6OmZtb2Q7CgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0IF9feCwgZmxvYXQg X195KSB7IHJldHVybiA6OmZtb2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6 OmZtb2RsKF9feCwgX195KTsgfQoKCgoKCgogIHVzaW5nIDo6ZnJleHA7CgoKICBpbmxpbmUgZmxv YXQKICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9feCwg X19leHApOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZnJleHAobG9uZyBkb3VibGUg X194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgog IHVzaW5nIDo6bGRleHA7CgoKICBpbmxpbmUgZmxvYXQKICBsZGV4cChmbG9hdCBfX3gsIGludCBf X2V4cCkgeyByZXR1cm4gOjpsZGV4cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5lIGxv bmcgZG91YmxlCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6 bGRleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUgZmxv YXQKICBsb2coZmxvYXQgX194KSB7IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nbChfX3gp OyB9CgoKCgoKICB1c2luZyA6OmxvZzEwOwoKCiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQg X194KSB7IHJldHVybiA6OmxvZzEwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgbG9nMTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoKCgoK ICB1c2luZyA6Om1vZGY7CgoKICBpbmxpbmUgZmxvYXQKICBtb2RmKGZsb2F0IF9feCwgZmxvYXQq IF9faXB0cikgeyByZXR1cm4gOjptb2RmZihfX3gsIF9faXB0cik7IH0KIyAzODIgIi91c3IvaW5j bHVkZS9nKysvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2RmbChfX3gsIF9faXB0cik7 IH0KIyAzOTUgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAg IHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9f eCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2lu ZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyBy ZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBw b3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gs IF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kp CiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBw b3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7 IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikK ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBp bmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9f eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJl dHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBm bG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5o bChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNxcnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxv YXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25n IGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0 bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9f eCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0 YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcg Ojp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFu aGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251 X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBj bGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp ID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkg PyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7 IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2Yp IDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19m aW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9f Y2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6 ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1h bChfVHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9U cCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25i aXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAo X19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJl dHVybiBfX2J1aWx0aW5faXNncmVhdGVyIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2Yx LCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwgKF9fZjEs IF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1 cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19idWlsdGluX2lzbGVzcyAo X19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9f Y2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19i dWlsdGluX2lzbGVzc2VxdWFsIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf X2YyKQogICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NncmVhdGVyIChfX2YxLCBfX2YyKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzdW5v cmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXN1bm9y ZGVyZWQgKF9fZjEsIF9fZjIpOyB9Cn0KIyA1ODcgIi91c3IvaW5jbHVkZS9nKysvY21hdGgiIDMK bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg ICBmcGNsYXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9fZik7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0ZShfVHAgX19m KSB7IHJldHVybiBfX2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2lu ZihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNuYW4oX1Rw IF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVf aXNub3JtYWwoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIHNp Z25iaXQoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9f ZjIpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1Rw IF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEs IF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9U cCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEsIF9fZjIpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3JlYXRlcihfVHAg X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfX2Yx LCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzdW5vcmRl cmVkKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc3Vub3JkZXJl ZChfX2YxLCBfX2YyKTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmZw Y2xhc3NpZnk7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBfX2dudV9jeHg6 OmlzaW5mOwogIHVzaW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVfY3h4Ojppc25v cm1hbDsKICB1c2luZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dy ZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2luZyBfX2dudV9j eHg6OmlzbGVzczsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVzaW5nIF9fZ251 X2N4eDo6aXNsZXNzZ3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRlcmVkOwp9CgoK CgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9jbWF0aC50Y2MiIDEgMwojIDM1ICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBp bnQgX19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3 aGlsZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAg ICAgICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAg fQoKICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY2MiAiL3Vzci9pbmNsdWRlL2crKy9jbWF0 aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz CgojIDEgIi91c3IvaW5jbHVkZS9nKysvbGltaXRzIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2cr Ky9saW1pdHMiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9j cHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMiAzCiMgODg3 ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0 X3JvdW5kX3N0eWxlCiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRf dG93YXJkX3plcm8gPSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dh cmRfaW5maW5pdHkgPSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoK ICBlbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0g LTEsCiAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoK CgogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g MDsKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg PSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudDEwID0gMDsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxv YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaWVjNTU5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFs c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNl CiAgICB7CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0 aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9y KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf VHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg ICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVy biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRo cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkg dGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVw c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29s IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5n X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wg ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs c2U7CgoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAg ICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6 ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg ICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRl bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsKICAgIH07CiMgMTA3MSAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQg Y2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3Rh dGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0 aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0K ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln bmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMi IDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g KDEyNyAqIDIgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9u KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl cm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3 Y2hhcl90PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3 Y2hhcl90KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw ID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgc3RhdGljIHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGlu ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGlj IHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0K ICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvaW5jbHVk ZS9nKysvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNo b3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3 IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g MzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz dGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0K ICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hv cnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91 bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9pbmNsdWRl L2crKy9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z aWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsg fQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMg aW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K ICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0 eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBz dGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKIyAxNDEwICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0 cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVkKSgyMTQ3NDgzNjQ3 TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg aW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0 cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0 aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wgLSAxKTsg fQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2 NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25n PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAg IHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIg MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAo MjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBk ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs b25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxv bmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdM TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0K ICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2crKy9saW1pdHMiIDMKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAg ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1 OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0 eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0 cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE5MjA5Mjkw ZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0x MjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsg fQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw LjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvZysr L2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+ CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg ICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1 ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAg eyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMx MzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAt MTAyMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAg ICAgICAgICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIGRl bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJv OwogICAgfTsKIyAxODQ0ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91 YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUt NDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l eGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh dGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAy MTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYz ODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1f YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAg ICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBk b3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAg ICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAg IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIvdXNyL2luY2x1ZGUvZysrL2xpbWl0 cyIgMwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz CgojIDEgIi91c3IvaW5jbHVkZS9nKysvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUv ZysrL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAg Y2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2crKy90eXBlaW5m byIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoK CgoKICAgIHZpcnR1YWwgfnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYg b3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5m byYpOwoKICBwcm90ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoK ICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0K CiAgcHVibGljOgoKCgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBf X25hbWU7IH0KIyA5OCAiL3Vzci9pbmNsdWRlL2crKy90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZv cmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9f YXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcp IGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBv cGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3Bl cmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2lu dGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7 CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Ro cl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25z dCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBi YWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0 aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNs YXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90 eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7 CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9j YWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAg ewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3Rt cC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAg cmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpv cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f czEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxh dGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9f Y29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4g KF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3Ro KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0 YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh Y2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2Mp CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2Fs ZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgaWYg KCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkp CiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u c3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3co KQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2Nh bGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJl dHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19p XSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh Y3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0 cmMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBf X3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVz ID0gX19jdHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5 cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAoKF9fYyA9PSBfX3BsdXMgfHwgX19jID09IF9fbWlu dXMpICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0 eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9 IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVy byA9IGZhbHNlOwogICAgICB3aGlsZSAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkK ICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96 ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewog ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsK ICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAx OwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9T X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9k ZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBj aGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2Zv dW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBp bmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAg ICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25w LnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7 CgogICAgICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRv bXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmIF9fYykKICAgICAgICAgICAgewoK ICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tf X3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19jID09 IF9fc2VwICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv cyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9f YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX2RlYyAmJiAhX19mb3VuZF9kZWMpCiAgICAg ICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAg ICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2Vw X3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4n OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9k ZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgoX19jID09IF9fd2F0 b21zW19NX2VdIHx8IF9fYyA9PSBfX3dhdG9tc1tfTV9FXSkKICAgICAgICAgICAgICAgICAgICYm ICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19f cG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7 CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX2Mg PT0gX19wbHVzIHx8IF9fYyA9PSBfX21pbnVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJy b3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAg ICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAg ICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAg ICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91 cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3Zl cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBj aGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAg Y29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0No YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBj b25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4g PihfX2xvYyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5m bGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlv c19iYXNlOjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmll bGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAg ICAgIF9fYmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBf X2MgPSAqX19iZWc7CiAgICAgIGlmICgoX19jID09IF9fY3R5cGUud2lkZW4oJysnKSB8fCBfX2Mg PT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAg ICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg ICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgog ICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96 ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAg ICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChf X2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxz ZTsKICAgICAgICAgIHdoaWxlIChfX2MgPT0gX196ZXJvICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBf X2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19mb3VuZF96 ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl cm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX19jID09IF9f eCB8fCBfX2MgPT0gX19YKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFy KCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAg IF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f YyA9PSBfX3plcm8gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX19jID09IF9f eCB8fCBfX2MgPT0gX19YKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAg ICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6 ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6 ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBf X3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMg KyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAg Y29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19j aGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0g MDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAg ICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNo YXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAg ICAgICAgIGlmIChfX3AgJiYgX19jKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRy YyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAg ICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXAgJiYgX19jaGVja19n cm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0 aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAw OwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVh azsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3Jv dXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0 YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3Vw aW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw aGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBf X2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7 CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9T X2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp bGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAg ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g X19zdHJpbmdfdHlwZTsKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0 PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9 IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9 IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBf X3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2Zh bHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXpl KCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkg LSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19f bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsK ICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4gPyBfX2MgPT0gX19m YWxzZXNbX19uXSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBf X3RydWVuID8gX19jID09IF9fdHJ1ZXNbX19uXSA6IGZhbHNlOwogICAgICAgICAgICAgIGlmICgh KF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBf X2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz ZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CiAgICAgIHJldHVybiBf X2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgewogICAg ICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJh Y3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAg X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBf X2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAg X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwg X19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg ICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkKICAgICAg ICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgewogICAgICBz dHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rf aW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5z aWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191 bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i YXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25l ZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9f dWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3Yp IGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj LCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vy ciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0 cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcs IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9f dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcm IF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsK ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194 dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9m bG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRf dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1 cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7 CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19i ZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7 CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xv Y2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRv dWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMu cmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo KSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVn LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgaW9z X2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxh Z3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlv c19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNl Ojp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZm10 ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKCiAg ICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0 cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKCiAg ICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBf X2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBf X2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKICAgICAgICBf X3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjA0 ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No YXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUIF9f dikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVy aWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3By ZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8 c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0 PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoK ICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0 cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f YWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRf ZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAg ICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1Ziwg X192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3By ZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz LCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19s ZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xl biArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19s ZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwog ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f Y3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2NjcgIi91c3IvaW5jbHVkZS9n KysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICAgIHJldHVybiBfTV93aWRlbl9mbG9h dChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK ICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJU IF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9W YWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAg ICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsKCgogICAgICAg IGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hh cio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgaW50IF9fbGVuID0gX19j b252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwoKICAgICAgICBpZiAoX19sZW4g Pj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiAr IDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j YShfX2NzX3NpemUpKTsKICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3Ms IF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CgoKCgoKCiAgICAgICAgcmV0dXJuIF9NX3dp ZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRlciBf X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAg ICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3Rh dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19s ZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWls dGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBl LndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBf X3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVu Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IGNoYXJfdHJhaXRzPF9DaGFyVD46 OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3Ag LSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9f Z3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jh c2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChf X2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAg ICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBf X3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4p OwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAo X19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6Y29w eShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9 IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3My OwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01f aW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBp b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAg ICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoK CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxs b2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4o X19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+ JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0 IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp ZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgogICAgICAgICAg c3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jh c2U6OnNob3diYXNlKQogICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9j dCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDE7CiAgICAgICAgICAg ICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYg KF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAg ICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAgICAgICAgICAgICB9CiAgICAg ICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyICsg X19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n cm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7CiAgICAgICAgICBfX2xlbiA9 IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0 ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01faW5zZXJ0KF9PdXRJdGVy IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNvbnN0IF9DaGFyVCogX193cywK ICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgogICAgICBzdHJlYW1zaXplIF9f dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg ICBfX3BhZChfX2lvLCBfX2ZpbGwsIF9fd3MyLCBfX3dzLCBfX3csIF9fbGVuLCB0cnVlKTsKICAg ICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBf X3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9f aiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19q XTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0 ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl IF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf X2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9v bGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9f djsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScs IGNoYXJfdHlwZSgpLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CiAgICAgICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7CiAgICAgICAgICBpZiAoX192KQogICAgICAgICAg ICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f bmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQoX19zLCBf X2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6 CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp bGwsIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsICdkJywgY2hhcl90eXBlKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAg IHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXJfdHlw ZSgpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg bG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19m aWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy biBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAg ICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyX3R5cGUo KSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQo X19zLCBfX2lvLCBfX2ZpbGwsICdMJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZtdCA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYg X19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkK ICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls bCwgJ3UnLCBjaGFyX3R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50 ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZsYWdzKF9f ZmxhZ3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAgICAgICBf X2lvLmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJs ZSYgX191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9f YmVnID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19z dHIpOwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6 ZGlnaXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu X2FsbG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsK ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsK ICAgICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hh cigpLCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9T X2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAgICAgdHlw ZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVm IG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlwZWRlZiBt b25leV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6 OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9fbW9u ZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9m YWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNvbnN0IG1v bmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnX2Zvcm1h dCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8gX19tcHQu cG9zaXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdf c2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAgICAgY29u c3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwogICAg ICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3Nl cCgpOwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91 cGluZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247Cgog ICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0gMDsKCiAg ICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9 IGZhbHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNoYXJfdHlw ZSBfX2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJf dHlwZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGludCBfX2kg PSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKICAg ICAgICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmll bGRbX19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAg aWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICAgICAg ICAgfHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAg fHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAgICAgICAg ICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoK ICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxhZ3MoKSAm IGlvc19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlk ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAgICAgICAg IGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAgICAgICAg ICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25bMF0pCiAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9f cG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9f bmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBf X2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0g KigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2Ug aWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAg ICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jh c2U6OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAg ICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f YykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAhX190ZXN0 ZGVjZm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fc2VwKSkK ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9f ZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Z3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Rlc3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9 IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAgICAgICAr K19fc2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICAgICAg ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAgIGlmIChf X2kgIT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19j KSkKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoX19zaWdu LnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWdu LnNpemUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9yICg7IF9f YyAhPSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxlIChfX2Jl ZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19jID0gKigr K19fYmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBfX3Rlc3R2 YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09 IF9fY3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190ZW1wX3Vu aXRzLmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVn X3NpZ24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwg X19jdHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19n cm91cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3Jv dXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rlc3R2YWxp ZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8fCAhX190 ZW1wX3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg ICAgZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgewog ICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlw ZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgoK ICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8 Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xlbiA9IF9f Y29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICBpZiAoX19s ZW4gPj0gX19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsg MTsKICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf X2NzX3NpemUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2Nz X3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICB9CgoKCgoKCgogICAgICBfQ2hhclQqIF9fd3MgPSBz dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19j c19zaXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsK ICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlzLT5kb19w dXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1v bmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9v bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNv bnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBtb25l eV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVl PiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBf X21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0 PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9 IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29uc3QgY2hh cl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25leV9iYXNl OjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAoKl9fYmVn ICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg PyBfX21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np Z24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24o KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwg PyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAgICBfX3Np Z24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24o KTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19jdHlwZS5z Y2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9fYmVn ICE9IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOwogICAg ICAgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f c3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoKCiAgICAg ICAgICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAg ICAgICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0 IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp OwogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5kIC0gX19m cmFjLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVn aW4oKSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAgICAgICAg ICAgICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAgICAgICAg ICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7 CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsK ICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91 cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf X21wZi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0g X19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwogICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5nLnNpemUo KTsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7 CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAgICAgIHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX24p KTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9f d3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAgICAgICBf X3ZhbHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwg c3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVs ZDsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19zaWduLnNp emUoKTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jh c2UpID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9f ZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAgICAgICBm b3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAg ICAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYgKF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyAr PSBfX3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl IG1vbmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgp KQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgogICAgICAg ICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAgICAgICAg IGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl KF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CiAgICAg ICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9 IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9f c2lnbi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3NpZ24u YmVnaW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19yZXMuc2l6 ZSgpOwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAgX19yZXMu YXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNlCgogICAg ICAgICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwg X19maWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAgICB9CgoK ICAgICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytf X3MpCiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAgX19pby53 aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyCiAgICB0 aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAgIHsgcmV0 dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv LmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2Zh Y2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgc2l6 ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsKCiAgICAg IGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuICYmICFf X2VycjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ld OwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg X19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAg ICAgICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwg X19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBf X2M7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9f d2NzWzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNf YWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShf X2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f ZGF5czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsKICAgICAg ICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwg X19kYXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAg ICAgICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21v bnRoczFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChf X21vbnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5k LCBfX3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMlsx Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19t b250aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAgICAgX190 cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4 dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAgICAgIF9f Y3MgPSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f Y3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs IF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i ZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o X19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAg ICAgICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAg aWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAg ICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsKICAg ICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3MpOwogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2Nz KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdTJzoKCiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fc2Vj LCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgog ICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQog ICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9 ICIlSDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF0ZXNb Ml07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMpOwogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGF0 ZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1gn OgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwogICAgICAg ICAgICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBdKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwg OTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoKCiAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAg ICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVh ciA9IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6 OnVwcGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl ZywgX19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f dGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5 cGUgX19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAmJiBfX3Rt cCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBlLndpZGVu KCctJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5cGUud2lk ZW4oJysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAs IDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAg ICAgICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAgICAgICAg ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9u dW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAg ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBzaXplX3Qg X19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZhbGlkID0g dHJ1ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh c2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUu bmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytf X2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAgICAgICAg IGludCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlmIChfX21p biA8PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVtYmVyID0g X192YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp ZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZv aWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9uYW1lKGl0 ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAg ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewog ICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNfdHlwZTsKICAgICAg aW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv ZihpbnQpICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAgICAg IHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7Cgog ICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkKICAg ICAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNbX19u bWF0Y2hlcysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAgICB7 CgogICAgICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVfdCBf X2kyID0gMDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5sZW4g PSBtaW4oX19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6 Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19wb3Mg PCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg ICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBm b3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19p M11dOwogICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAgICAg ICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7Cgog ICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICB3 aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09 ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAoX19s ZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAgICAg ICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQp CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNd OwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg KyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0No YXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9jYWxl IF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlw ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVu KF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBf X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dl ZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u c3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJhaXRzX3R5 cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0 PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9f bG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5 c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRy YWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoK CgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBf X3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5f TV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5 c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAg ICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYm IF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0g Kl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBp ZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190 bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7 CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250 aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXJfdHlwZT4gX190cmFpdHNf dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5f TV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAg IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9f ZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90 IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAg ICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fbmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd ID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19s ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAo X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBf X25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7 CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIp CiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlm IChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 bSkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9 IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcg IT0gX19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7 CiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9f aSA9PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAg ICAgX19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2Nh bGUpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9 IDIxNDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/ IF9fbCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19j YXN0PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBj b25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAg ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0 JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxl IChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUu bmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9 PSAnJScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAg ICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAg ICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg ICArK19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAg ICAgICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAg ICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9f cHV0KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytf X3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNo YXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgog ICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9 CiAgICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo Y2hhcl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsK ICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAg ICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJd ID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg X19mbXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAg ICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9f cmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJf dHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9 IDA7IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07 CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29u c3QgX0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0No YXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAg ICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNv bnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAg ICAgIGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBf TV9jb21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5 cGUKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBf X2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9 IChfX2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19j YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwog ICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAg ICBpZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAg ICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq IChfX3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyAr IDEpOwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg IGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAg ICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9f aGk7ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAg ICAgICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n Pjo6ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsK ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0 X3RvX3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19i YXNlID0gMTApOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2Nv bnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBf X2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGlu dCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAgaW50IF9fcmV0OwogICAgICBjaGFyKiBfX29sZCA9 IHN0cmR1cChzZXRsb2NhbGUoX19MQ19BTEwsIF9fbnVsbCkpOwogICAgICBzZXRsb2NhbGUoX19M Q19BTEwsICJDIik7CiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJp bnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAg ICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRs b2NhbGUoX19MQ19BTEwsIF9fb2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KIyAxOTk5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2 b2lkCiAgICBfX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25l d3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25l d2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwKICAgICAgICAgIGNvbnN0IGJvb2wgX19u dW0pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNp emVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq IF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2Zp bGwpOwoKICAgICAgY2hhcl90eXBlKiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAg ICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0Zmll bGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAg ICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAg X19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0K ICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQog ICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUu d2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndp ZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX29sZHNbMF0gPT0gX19taW51 cyB8fCBfX29sZHNbMF0gPT0gX19wbHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX2N0 eXBlLndpZGVuKCcwJykgPT0gX19vbGRzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYm IChfX2N0eXBlLndpZGVuKCd4JykgPT0gX19vbGRzWzFdCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8fCBfX2N0eXBlLndpZGVuKCdYJykgPT0gX19vbGRzWzFdKTsKICAgICAgICAgIGlm IChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29s ZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAg IF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19i ZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAg ICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXSA9PSBfX3BsdXMgPyBfX3BsdXMgOiBfX21p bnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAg ICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47 CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9f bW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAg ICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwog ICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVn ID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9 IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIHRyYWl0c190 eXBlOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2Qp OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfX3Bh ZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9D aGFyVCogX19vbGRzLAogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qg c3RyZWFtc2l6ZSBfX29sZGxlbiwKICAgICAgICAgIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAg ICAgIHJldHVybiBfX3BhZDxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPihfX2lvLCBfX2Zp bGwsIF9fbmV3cywgX19vbGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19uZXdsZW4sIF9fb2xkbGVuLCBfX251bSk7CiAgICB9CiMgMjA5OCAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJp bmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGludCBfX2kgPSAwOwogICAg ICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19ncm91cGluZy5zaXplKCk7 CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7CiAgICAgIGJvb2wg X190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwgX19uIC0gMSkK ICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xlbiAmJiBfX2kgPCBfX24g LSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPT0g X19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19qID09IF9fbGVuID8gX19q ID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBfX2dyb3VwaW5n X3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2FkZF9ncm91cGluZyhf Q2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog X19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19hZGRfZ3Jv dXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2diZWcg KyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19nYmVnKTsKICAgICAgICAg IF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9fcysrID0gX19zZXA7CiAg ICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt b25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u ZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8Y2hhcj47CiAg ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8 Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5h bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyB0aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnlu YW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVz c2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5h bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJzdGF0 ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxh dGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8 Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIs IG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z dCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDxjaGFyPiYKICAgIHVz ZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+ KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8Y2hh cj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mCiAgICB1c2VfZmFj ZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1v bmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dl dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDxjaGFyPiYKICAgIHVzZV9m YWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8 Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFyPiYKICAgIHVzZV9mYWNldDxt ZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2Rl Y3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxh dGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z dCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJf dD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8 bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5j dDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVu Y3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5 X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBs b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90 PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2Zh Y2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNz YWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v bmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxf X3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxt ZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v bAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwg bWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51 bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVu Y3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUv ZysrL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9nKysvYml0cy9vc3RyZWFtLnRjYyIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAg ICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29r KF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29z LnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy YXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19z dHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsK ICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzKCp0aGlzLCBfX3Ni aW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv cjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChf TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkp CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5m aWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+Zmxh Z3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29s IF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9j dCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAg ICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAg ICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBf X24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25n IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy X3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAg ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChf X2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBf X2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n IGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1 dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAg ICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAg ICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwo KSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJs ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAg IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190eXBlOjplb2YoKSkp CiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBz dHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJk YnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlz LT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUK ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBw b3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAg ICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIs IGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBv c190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoK ICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3Bv cywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZf dHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2Zm X3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgaWYgKCF0aGlz LT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk YnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYg KF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0 eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBf X3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hh clQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAg ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0 LmZpbGwoKSwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAg ICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0Lndy aXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2Fz dDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRz WzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAg ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg X19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuLCBmYWxz ZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0 LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwg Y29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGlj X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwog ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf VHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgp LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3Mg PSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9f b3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0eXBlZGVmIGNoYXJf dHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg IHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsK ICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6 ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9fd3NbX19pXSA9 IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19zdHIgPSBfX3dzOwoK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl biA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAgICAgICAgc3RyZWFt c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f dykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX193cywg X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAg ICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg IGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xl bikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0 LmZpbGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAg ICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAg ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5k YXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0 aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+ IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZp bGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3Mg PSBfX3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAg ICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsK ICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQog ICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19vc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0m KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRl bXBsYXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBs YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g dGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hh ciopOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25z dCBzaWduZWQgY2hhciopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3 Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBl eHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh dGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFt JiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1w bGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKfQojIDI3 NiAiL3Vzci9pbmNsdWRlL2crKy9vc3RyZWFtIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2crKy9p b3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vz ci9pbmNsdWRlL2crKy9pc3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVh bSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK CgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3Nf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lz dHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+ IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3Vu dDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAg ICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAg ICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0K CgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp KF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9f aXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoK ICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hh cl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQo X19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAg ICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3Ni KQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlw ZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsg cmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90 eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAg cGVlayh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1 bmdldCh2b2lkKTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUK ICAgICAgdGVsbGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9z X3R5cGUpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3Nf YmFzZTo6c2Vla2Rpcik7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNl bnRyeQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1i dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19p c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5 cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50 X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAg ICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAg IGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsK CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVu c2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9U cmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy VCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hh cixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBf X2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJl dF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+ PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDog cHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90 eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0o KSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr L2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvaXN0cmVh bS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu dHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJv b2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAg ICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwog ICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tp cHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z YiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNn ZXRjKCk7CgogICAgICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0 eXBlKSkKICAgICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YKICAgICAgICAgICAgICAg ICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAg ICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlm IChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpl b2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkK ICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9v ayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3Bm KShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9f aW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkK ICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs IDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9y dD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNf bGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAg ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51 bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBp ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVt ZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBf X2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0g X19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l ZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQq JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAg ICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJi KQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg IHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jp biA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0 cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg dHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBj b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUg X19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7Cgog ICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpCiAgICAgICAgICAgICAgICBfTV9nY291bnQg PSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf X2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19i dWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2dj b3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5 cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3Vu dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29u c3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7 CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7 CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAg d2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24gJiYgX19jICE9IF9fZW9mICYmIF9fYyAhPSBfX2lk ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRz X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5z bmV4dGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYg KCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYg X19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAg ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg ICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdo aWxlIChfX2MgIT0gX19lb2YgJiYgX19jICE9IF9faWRlbGltCiAgICAgICAgICAgICAgICAgICAg ICYmIChfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkgIT0gX19lb2Yp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAg ICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24g JiYgX19jICE9IF9fZW9mICYmIF9fYyAhPSBfX2lkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwog ICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAg KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBf X2VvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg KF9fYyA9PSBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAg ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAg ICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIF9f biA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAg ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiBfX2MgIT1fX2VvZiAmJiBfX2MgIT0gX19k ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l eHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19k ZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7 CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAg IHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1 ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5z Z2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4o X19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihf X251bSwgX19uKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtKQogICAgICAgICAgICAgICAg ICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0pOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBw dXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7 CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9m KQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50 ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25z dCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0 cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9f c2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3Jl dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19z Yi0+cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSAwOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3Nf dHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQp CiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgX19y ZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNl Ojppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9f cG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5w dWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJy ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNl ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAg X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwg X19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5 cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s IF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNl bnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBl OwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAw KQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4 KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNl dDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw ZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3Ni LT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEK ICAgICAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBl X2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAq X19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAg ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAg ICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+ JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6 X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29u c3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5n ZXRsb2MoKSk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsK ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRf dHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBf X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNu ZXh0YygpOwogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9z X2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19j dHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0g MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgp OwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3Np emVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVf dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwog ICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50 X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQg PCBfX24KICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5 cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciAr PSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVk OwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAg ICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl Ojplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYg KCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7 CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl X3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAg ICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9f c3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6 OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9 IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7 CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAg ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKCiAgICAgICAgICB3aGlsZSAoX19l eHRyYWN0ZWQgPD0gX19uICYmIF9fYyAhPSBfX2VvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi dW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAg ICAgICAgICB9CiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3Rl ZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNs YXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19z dHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsg fQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJl YW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0 ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0 ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAg ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFy Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4 dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUg d2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBs YXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwp9CiMgMjg4ICIv dXNyL2luY2x1ZGUvZysrL2lzdHJlYW0iIDIgMwojIDQ3ICIvdXNyL2luY2x1ZGUvZysrL2lvc3Ry ZWFtIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4g b3N0cmVhbSBjb3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xv ZzsKCiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4 dGVybiB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGlj IGlvc19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMjAgIk1hcC5jcHAiIDIKIyAxICIvdXNyL2lu Y2x1ZGUvZysrL2ZzdHJlYW0iIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrL2ZzdHJlYW0iIDMK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9iYXNpY19maWxl LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2Jhc2lj X2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIF9fYmFz aWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAgICAgYm9v bCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxlKF9fY19s b2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAogICAgICAg ICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBv cGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9f cHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3BlbihfX2NfZmls ZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAg ICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9vbCBfX2Rl bCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBzeXNfdW5n ZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAgICBib29s CiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAgICAgfl9f YmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhciog X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFy KiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2ZmKHN0 cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoK ICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAgICAg ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6 b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3IvaW5jbHVk ZS9nKysvZnN0cmVhbSIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZiA6IHB1Ymxp YyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7 CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIF9fYmFzaWNfZmlsZTxj aGFyPiBfX2ZpbGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3Rh dGVfdHlwZSBfX3N0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29kZWN2dDxjaGFyX3R5cGUsIGNo YXIsIF9fc3RhdGVfdHlwZT4gX19jb2RlY3Z0X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19jb2RlY3Z0X3R5cGU6OnJlc3VsdCBfX3Jlc190eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPGNo YXJfdHlwZT4gX19jdHlwZV90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwoKICAg IHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jayBfTV9sb2NrOwoKCiAgICAgIF9fZmlsZV90eXBl IF9NX2ZpbGU7CgoKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0YXRlX2N1cjsKICAgICAgX19zdGF0 ZV90eXBlIF9NX3N0YXRlX2JlZzsKCgogICAgICBib29sIF9NX2J1Zl9hbGxvY2F0ZWQ7CgoKICAg ICAgYm9vbCBfTV9sYXN0X292ZXJmbG93ZWQ7CgoKCiAgICAgIGNoYXJfdHlwZSogX01fZmlsZXBv czsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19maWxlYnVmKCk7CgogICAgICB2aXJ0dWFsCiAg ICAgIH5iYXNpY19maWxlYnVmKCkKICAgICAgewogICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAg ICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBib29sCiAgICAg IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfTV9maWxlLmlzX29wZW4oKTsgfQoKICAgICAgX19m aWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlKTsKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBjbG9zZSgpOwoKICAgIHBy b3RlY3RlZDoKICAgICAgdm9pZAogICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsK CiAgICAgIHZvaWQKICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsKCgogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUv ZysrL2ZzdHJlYW0iIDMKICAgICAgaW50X3R5cGUKICAgICAgX01fdW5kZXJmbG93X2NvbW1vbihi b29sIF9fYnVtcCk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpIHsg cmV0dXJuIF9NX3VuZGVyZmxvd19jb21tb24oZmFsc2UpOyB9CgogICAgICB2aXJ0dWFsIGludF90 eXBlCiAgICAgIHVmbG93KCkgeyByZXR1cm4gX01fdW5kZXJmbG93X2NvbW1vbih0cnVlKTsgfQoK ICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1Ry YWl0czo6ZW9mKCkpOwojIDE2MCAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIHZp cnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m KCkpOwojIDE3MCAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGludF90eXBlCiAg ICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CgoK CiAgICAgIHZvaWQKICAgICAgX01fY29udmVydF90b19leHRlcm5hbChjaGFyX3R5cGUqLCBzdHJl YW1zaXplLCBzdHJlYW1zaXplJiwgc3RyZWFtc2l6ZSYpOwoKICAgICAgdmlydHVhbCBfX3N0cmVh bWJ1Zl90eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9z X2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBwb3Nf dHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg IHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RwdXQg PSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwoKCgogICAgICAgIGlmIChf X3Rlc3RwdXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291 dF9jdXIgLSBfTV9vdXRfZW5kOwogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKICAg ICAgICAgICAgaWYgKF9fb2ZmKQogICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwg aW9zX2Jhc2U6OmN1cik7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX01fZmls ZS5zeW5jKCk7CiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgICAgcmV0 dXJuIDA7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2Nh bGUmIF9fbG9jKTsKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3Jl dCA9IDA7CgogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAg ICB3aGlsZSAoX19yZXQgPCBfX24gJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICpfX3MgPSAqX01faW5fY3VyOwogICAgICAgICAgICAgICAg KytfX3JldDsKICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgKytfTV9pbl9j dXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiAgICAg ICAgICB9CiAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgX19yZXQgKz0gX19zdHJl YW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOwogICAgICAgIHJldHVybiBfX3Jl dDsKICAgICAgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBfTV9wYmFja19k ZXN0cm95KCk7CiAgICAgICAgcmV0dXJuIF9fc3RyZWFtYnVmX3R5cGU6OnhzcHV0bihfX3MsIF9f bik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKIyAyNTEg Ii91c3IvaW5jbHVkZS9nKysvZnN0cmVhbSIgMwogICAgICB2b2lkCiAgICAgIF9NX3NldF9pbmRl dGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpp bikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7CiAgICAgICAg aWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYs IF9NX2J1Zik7CiAgICAgICAgX01fZmlsZXBvcyA9IF9NX2J1ZjsKICAgICAgfQoKICAgICAgdm9p ZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsKICAgICAg ICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29sIF9f dGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rlc3RpbikK ICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAg ICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1ZiAr IF9fb2ZmKTsKICAgICAgICBfTV9maWxlcG9zID0gX01fYnVmICsgX19vZmY7CiAgICAgIH0KCiAg ICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAg Ym9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAg ICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9 IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAg ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0g X01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAg ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj X2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2Zm X3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg ICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNf aWZzdHJlYW0oKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQog ICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMgMzI4ICIvdXNyL2luY2x1ZGUvZysr L2ZzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaWZzdHJlYW0oY29uc3QgY2hh ciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICA6 IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhp cy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAg ICAgIH0KCiAgICAgIH5iYXNpY19pZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2Zp bGVidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29w ZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQoKICAgICAgdm9pZAogICAgICBv cGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl OjppbikKICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwg aW9zX2Jhc2U6OmluKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYg KCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMgYmFz aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg IHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ IF9fb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2Zp bGVidWY7CgogICAgcHVibGljOgoKCiAgICAgIGJhc2ljX29mc3RyZWFtKCkKICAgICAgOiBfX29z dHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9m aWxlYnVmKTsgfQojIDQwNSAiL3Vzci9pbmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGV4cGxp Y2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAg ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6 OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAg ICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3Blbihf X3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpCiAgICAgIHsgfQoK CgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJl dHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgoKCgoKICAg ICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0K IyA0NDEgIi91c3IvaW5jbHVkZS9nKysvZnN0cmVhbSIgMwogICAgICB2b2lkCiAgICAgIG9wZW4o Y29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9m aWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KSkKICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAg Y2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07CgoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mg YmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf dHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5 cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl OjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90 eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf aW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHBy aXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7CgogICAgcHVibGljOgoKCiAg ICAgIGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBfTV9m aWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDQ5NyAiL3Vzci9p bmNsdWRlL2crKy9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2ZzdHJlYW0o Y29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9faW9zdHJlYW1f dHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoJl9N X2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwogICAgICB9CgogICAg ICB+YmFzaWNfZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoK ICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90 eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyBy ZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA1MzMgIi91c3IvaW5jbHVkZS9nKysvZnN0 cmVhbSIgMwogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAg IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0 KQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUpKQogICAg ICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAog ICAgICBjbG9zZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAg ICAgICAgIHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKfQoKCgoK CiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2ZzdHJlYW0udGNjIiAxIDMKIyAzOSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL2ZzdHJlYW0udGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19m aWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVy KCkKICAgIHsKICAgICAgaWYgKCFfTV9idWYgJiYgX01fYnVmX3NpemVfb3B0KQogICAgICAgIHsK ICAgICAgICAgIF9NX2J1Zl9zaXplID0gX01fYnVmX3NpemVfb3B0OwoKCiAgICAgICAgICBfTV9i dWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXplXTsKICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0 ZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlmIChf TV9idWZfYWxsb2NhdGVkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAg ICAgICAgICBfTV9idWYgPSBfX251bGw7CiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFs c2U7CiAgICAgICAgICB0aGlzLT5zZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOwogICAgICAg ICAgdGhpcy0+c2V0cChfX251bGwsIF9fbnVsbCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9D aGFyVCwgX1RyYWl0cz46OgogICAgYmFzaWNfZmlsZWJ1ZigpIDogX19zdHJlYW1idWZfdHlwZSgp LCBfTV9maWxlKCZfTV9sb2NrKSwKICAgIF9NX3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksIF9N X3N0YXRlX2JlZyhfX3N0YXRlX3R5cGUoKSksCiAgICBfTV9idWZfYWxsb2NhdGVkKGZhbHNlKSwg X01fbGFzdF9vdmVyZmxvd2VkKGZhbHNlKQogICAgeyBfTV9idWZfdW5pZmllZCA9IHRydWU7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h bWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJh c2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywg aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9f cmV0ID0gX19udWxsOwogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAgICAg ICAgICBfTV9maWxlLm9wZW4oX19zLCBfX21vZGUpOwogICAgICAgICAgaWYgKHRoaXMtPmlzX29w ZW4oKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1 ZmZlcigpOwogICAgICAgICAgICAgIF9NX21vZGUgPSBfX21vZGU7CgoKICAgICAgICAgICAgICBf TV9zZXRfaW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgIGlmICgoX19tb2RlICYgaW9zX2Jh c2U6OmF0ZSkKICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6 ZW5kLCBfX21vZGUpIDwgMCkKICAgICAgICAgICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAgICAg ICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVm X3R5cGUqCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgY2xvc2UoKQog ICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7CiAgICAgIGlmICh0aGlz LT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0 cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg JiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CiAgICAgICAgICBpZiAoX190ZXN0cHV0ICYmIF9N X3JlYWxseV9vdmVyZmxvdyhfX2VvZikgPT0gX19lb2YpCiAgICAgICAgICAgIHJldHVybiBfX3Jl dDsKCgogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICAg IF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAgICAgICBfTV9wYmFja19kZXN0cm95 KCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICAg IGlmIChfTV9maWxlLmNsb3NlKCkpCiAgICAgICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICB9 CgogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBz dHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2hvd21h bnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOwogICAgICBib29sIF9fdGVz dGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKCiAgICAgIGlmIChfX3Rlc3RpbiAmJiB0aGlz LT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2Vu ZCkKICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZs b3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICBfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19idW1wKQogICAgewogICAgICBp bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9 IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAm IGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewoKCgogICAgICAg ICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9wYmFj a19kZXN0cm95KCk7CiAgICAgICAgICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg ICAgICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7 CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYm IF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgICAgIGJvb2wgX190ZXN0aW5pdCA9IF9NX2lz X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgIGlmIChfX3Rlc3RnZXQpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAgX01fcmVhbGx5X292 ZXJmbG93KCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAoX01faW5fY3VyICE9IF9NX2ZpbGVwb3Mp CiAgICAgICAgICAgICAgICBfTV9maWxlLnNlZWtvZmYoX01faW5fY3VyIC0gX01fZmlsZXBvcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6 aW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fdGVzdGluaXQgfHwgX190ZXN0Z2V0 KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gdGhpcy0+ Z2V0bG9jKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jb2RlY3Z0X3R5cGUmIF9fY3Z0ID0gdXNl X2ZhY2V0PF9fY29kZWN2dF90eXBlPihfX2xvYyk7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUg X19lbGVuID0gMDsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9faWxlbiA9IDA7CiAgICAgICAg ICAgICAgaWYgKF9fY3Z0LmFsd2F5c19ub2NvbnYoKSkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX19lbGVuID0gX01fZmlsZS54c2dldG4ocmVpbnRlcnByZXRfY2FzdDxjaGFy Kj4oX01faW5fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X01fYnVmX3NpemUpOwogICAgICAgICAgICAgICAgICBfX2lsZW4gPSBfX2VsZW47CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2Nh KF9NX2J1Zl9zaXplKSk7CiAgICAgICAgICAgICAgICAgIF9fZWxlbiA9IF9NX2ZpbGUueHNnZXRu KF9fYnVmLCBfTV9idWZfc2l6ZSk7CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2Vl bmQ7CiAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19pZW5kOwogICAgICAgICAgICAgICAg ICBfX3Jlc190eXBlIF9fciA9IF9fY3Z0LmluKF9NX3N0YXRlX2N1ciwgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYgKyBfX2VsZW4sIF9fZWVu ZCwgX01faW5fYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9NX2luX2JlZyArIF9NX2J1Zl9zaXplLCBfX2llbmQpOwogICAgICAgICAgICAgICAgICBpZiAo X19yID09IGNvZGVjdnRfYmFzZTo6b2spCiAgICAgICAgICAgICAgICAgICAgX19pbGVuID0gX19p ZW5kIC0gX01faW5fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICAgICAgIF9faWxlbiA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICBfTV9maWxlLnNlZWtvZmYoLV9fZWxlbiwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Omlu KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg IGlmICgwIDwgX19pbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9z ZXRfZGV0ZXJtaW5hdGUoX19pbGVuKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkK ICAgICAgICAgICAgICAgICAgICBfTV9vdXRfY3VyID0gX01faW5fY3VyOwogICAgICAgICAgICAg ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAg ICAgICAgICAgICAgaWYgKF9fYnVtcCkKICAgICAgICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92 ZSgxKTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX01fYnVmX3NpemUgPT0gMSkKICAgICAg ICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICBfTV9maWxlLnN5c191bmdl dGMoKl9NX2luX2N1cik7CiAgICAgICAgICAgICAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0 ZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw ZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBiYWNrZmFpbChpbnRf dHlwZSBfX2kpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKCiAgICAgIGlm IChfX3Rlc3RpbikKICAgICAgICB7CiAgICAgICAgICBib29sIF9fdGVzdHBiID0gX01faW5fYmVn IDwgX01faW5fY3VyOwogICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19pKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9faSwgX19yZXQpOwoKICAgICAgICAgIGlmIChfX3Rlc3RwYikKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpv dXQ7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcShfX2MsIHRo aXMtPmdwdHIoKVstMV0pOwoKCgogICAgICAgICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVz dGVxKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAg ICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291 dF9jdXI7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp CiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAgICAgICAgICBfX3Jl dCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgZWxzZSBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAg ICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAgICAgICAgICBfTV9wYmFja19j cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgKl9NX2luX2N1ciA9IF9fYzsKICAgICAgICAgICAg ICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2Vla29mZigtMSwg aW9zX2Jhc2U6OmN1cik7CiAgICAgICAgICAgICAgdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAg ICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGlmICghdHJhaXRzX3R5cGU6OmVxKF9fYywgKl9NX2luX2N1cikpCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3JlYXRlKCk7CiAgICAgICAgICAg ICAgICAgICAgICAqX01faW5fY3VyID0gX19jOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsK ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Zl cmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9j dXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2Rl ICYgaW9zX2Jhc2U6Om91dDsKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgewogICAgICAg ICAgaWYgKF9fdGVzdHB1dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfTV9vdXRfY3Vy ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9NX291dF9j dXJfbW92ZSgxKTsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9f Yyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSB0aGlz LT5fTV9yZWFsbHlfb3ZlcmZsb3coX19jKTsKICAgICAgICB9CgogICAgICBfTV9sYXN0X292ZXJm bG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fY29udmVydF90b19leHRlcm5hbChfQ2hhclQqIF9f aWJ1Ziwgc3RyZWFtc2l6ZSBfX2lsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh bXNpemUmIF9fZWxlbiwgc3RyZWFtc2l6ZSYgX19wbGVuKQogICAgewogICAgICBjb25zdCBsb2Nh bGUgX19sb2MgPSB0aGlzLT5nZXRsb2MoKTsKICAgICAgY29uc3QgX19jb2RlY3Z0X3R5cGUmIF9f Y3Z0ID0gdXNlX2ZhY2V0PF9fY29kZWN2dF90eXBlPihfX2xvYyk7CgogICAgICBpZiAoX19jdnQu YWx3YXlzX25vY29udigpICYmIF9faWxlbikKICAgICAgICB7CiAgICAgICAgICBfX2VsZW4gKz0g X01fZmlsZS54c3B1dG4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19pYnVmKSwgX19pbGVuKTsK ICAgICAgICAgIF9fcGxlbiArPSBfX2lsZW47CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewoKICAgICAgICAgIGludCBfX2V4dF9tdWx0aXBsaWVyID0gX19jdnQuZW5jb2RpbmcoKTsKICAg ICAgICAgIGlmIChfX2V4dF9tdWx0aXBsaWVyID09IC0xIHx8IF9fZXh0X211bHRpcGxpZXIgPT0g MCkKICAgICAgICAgICAgX19leHRfbXVsdGlwbGllciA9IHNpemVvZihjaGFyX3R5cGUpOwogICAg ICAgICAgc3RyZWFtc2l6ZSBfX2JsZW4gPSBfX2lsZW4gKiBfX2V4dF9tdWx0aXBsaWVyOwogICAg ICAgICAgY2hhciogX19idWYgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf X2JsZW4pKTsKICAgICAgICAgIGNoYXIqIF9fYmVuZDsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19pZW5kOwogICAgICAgICAgX19yZXNfdHlwZSBfX3IgPSBfX2N2dC5vdXQoX01fc3RhdGVf Y3VyLCBfX2lidWYsIF9faWJ1ZiArIF9faWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9faWVuZCwgX19idWYsIF9fYnVmICsgX19ibGVuLCBfX2JlbmQpOwoKICAgICAg ICAgIGlmIChfX3IgIT0gY29kZWN2dF9iYXNlOjplcnJvcikKICAgICAgICAgICAgX19ibGVuID0g X19iZW5kIC0gX19idWY7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2JsZW4gPSAwOwoK ICAgICAgICAgIGlmIChfX2JsZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2VsZW4g Kz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fYmxlbik7CiAgICAgICAgICAgICAgX19wbGVuICs9 IF9fYmxlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19yID09IGNvZGVjdnRfYmFz ZTo6cGFydGlhbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19pcmVzdW1lID0gX19pZW5kOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19ybGVuID0gX01f b3V0X2VuZCAtIF9faWVuZDsKICAgICAgICAgICAgICBfX3IgPSBfX2N2dC5vdXQoX01fc3RhdGVf Y3VyLCBfX2lyZXN1bWUsIF9faXJlc3VtZSArIF9fcmxlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19pZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVuZCk7CiAgICAgICAg ICAgICAgaWYgKF9fciAhPSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQogICAgICAgICAgICAgICAgX19y bGVuID0gX19iZW5kIC0gX19idWY7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg X19ybGVuID0gMDsKICAgICAgICAgICAgICBpZiAoX19ybGVuKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX2VsZW4gKz0gX01fZmlsZS54c3B1dG4oX19idWYsIF9fcmxlbik7 CiAgICAgICAgICAgICAgICAgIF9fcGxlbiArPSBfX3JsZW47CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBf TV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3Jl dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3Vy ICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAgICBib29sIF9fdGVzdHVuYnVmZmVyZWQg PSBfTV9maWxlLmlzX29wZW4oKSAmJiAhX01fYnVmX3NpemU7CgogICAgICBpZiAoX190ZXN0cHV0 IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgewoKICAgICAgICAgIHN0cmVhbXNpemUgX19l bGVuID0gMDsKICAgICAgICAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsKCgoKCiAgICAgICAgICBp ZiAoX01fZmlsZXBvcyAmJiBfTV9maWxlcG9zICE9IF9NX291dF9iZWcpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9iZWcgLSBfTV9maWxlcG9zOwog ICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jhc2U6OmN1cik7CiAgICAg ICAgICAgIH0KCgoKICAgICAgICAgIGlmICghX190ZXN0dW5idWZmZXJlZCkKICAgICAgICAgICAg X01fY29udmVydF90b19leHRlcm5hbChfTV9vdXRfYmVnLCBfTV9vdXRfZW5kIC0gX01fb3V0X2Jl ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VsZW4sIF9fcGxlbik7CgoK CiAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBl Ojplb2YoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19wZW5kaW5n ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9NX2NvbnZl cnRfdG9fZXh0ZXJuYWwoJl9fcGVuZGluZywgMSwgX19lbGVuLCBfX3BsZW4pOwoKCiAgICAgICAg ICAgICAgaWYgKF9fZWxlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0g dHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgICAgZWxzZSBpZiAoIV9NX2ZpbGUuc3luYygpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9N X2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFz aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgogICAgYmFzaWNf ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fcyA9PSAw ICYmIF9fbiA9PSAwKQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgIGVsc2UgaWYg KF9fcyAmJiBfX24pCiAgICAgICAgewoKCgoKCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFs X2J1ZmZlcigpOwoKCiAgICAgICAgICBfTV9idWYgPSBfX3M7CiAgICAgICAgICBfTV9idWZfc2l6 ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsKICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRl KCk7CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0 dXJuIHRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5 cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrb2ZmKG9mZl90 eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp OwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9NX21vZGUgJiBfX21vZGUp ICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpvdXQgJiBfTV9tb2RlICYg X19tb2RlKSAhPSAwOwoKCiAgICAgIGludCBfX3dpZHRoID0gdXNlX2ZhY2V0PF9fY29kZWN2dF90 eXBlPihfTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAoX193aWR0aCA8IDApCiAg ICAgICAgX193aWR0aCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZmFpbCA9IF9fb2ZmICE9IDAgJiYg X193aWR0aCA8PSAwOwoKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSAmJiAhX190ZXN0ZmFpbCAm JiAoX190ZXN0aW4gfHwgX190ZXN0b3V0KSkKICAgICAgICB7CgogICAgICAgICAgX01fcGJhY2tf ZGVzdHJveSgpOwoKICAgICAgICAgIGlmIChfX3dheSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2Zm ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2NvbXB1dGVkX29m ZiA9IF9fd2lkdGggKiBfX29mZjsKCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RnZXQgPSBfTV9p bl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fZW5kOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0 cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKCgogICAgICAgICAg ICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxvd2VkKQogICAgICAgICAgICAgICAg ewoKICAgICAgICAgICAgICAgICAgdGhpcy0+c3luYygpOwoKICAgICAgICAgICAgICAgICAgX01f b3V0cHV0X3Vuc2hpZnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgZWxzZSBp ZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAgICAgICAgICBf X2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9maWxlcG9zOwoKICAgICAgICAgICAgICBf X3JldCA9IF9NX2ZpbGUuc2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7CiAg ICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAgfQoKCiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3JldCA9IF9NX2ZpbGUuc2Vl a29mZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwgX19tb2RlKTsKICAgICAgICAgICAgICBfX3JldCAr PSBtYXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2ZpbGVwb3M7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUK ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcG9zKHBvc190eXBl IF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewoKCiAgICAgIHJldHVybiB0 aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jhc2U6OmJlZywgX19tb2RlKTsKCiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv aWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9vdXRwdXRfdW5z aGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlt YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0YmVnID0gZ3B0 cigpID09IGViYWNrKCkgJiYgcHB0cigpID09IHBiYXNlKCk7CgogICAgICBpZiAoX190ZXN0YmVn ICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX2xv Y2FsZSA9IF9fbG9jOwogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAg ICB9CgoKCgoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICB9CgoKCgogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0 ZSBjbGFzcyBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi YXNpY19pZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJl YW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PjsKfQojIDU1NiAiL3Vzci9pbmNsdWRlL2crKy9m c3RyZWFtIiAyIDMKIyAyMSAiTWFwLmNwcCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGli L0NvcmUvU3lzdGVtL2Vycm9yLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl L1N5c3RlbS9lcnJvci5oIiAzCmNsYXNzIENMX0Vycm9yCnsKcHVibGljOgoKCiAgICAgICAgQ0xf RXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkgeyB0aGlzLT5tZXNzYWdlID0gbWVzc2FnZTsgfQoK CiAgICAgICAgQ0xfRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcgJm1lc3NhZ2UpIHsgdGhpcy0+bWVz c2FnZSA9IG1lc3NhZ2U7IH0KCgogICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2U7Cn07Cgp2b2lk IGNsX3Rocm93X2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwp2b2lkIGNsX3Rocm93X2Vycm9y KGNvbnN0IHN0ZDo6c3RyaW5nICZtZXNzYWdlKTsKIyAyNSAiTWFwLmNwcCIgMgojIDEgIi91c3Iv aW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2NsX2Fzc2VydC5oIiAxIDMKIyAyMiAiL3Vzci9p bmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vY2xfYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrL2xpc3QiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysrL2xpc3QiIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv ZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9u X2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjcgIi91c3IvaW5j bHVkZS9nKysvbGlzdCIgMiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbGlz dC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9saXN0LmgiIDMKbmFtZXNw YWNlIHN0ZAp7CgogIHN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UKICB7CiAgICBfTGlzdF9ub2RlX2Jh c2UqIF9NX25leHQ7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7CiAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rfbm9k ZV9iYXNlCiAgICB7CiAgICAgIF9UcCBfTV9kYXRhOwogICAgfTsKCiAgc3RydWN0IF9MaXN0X2l0 ZXJhdG9yX2Jhc2UKICB7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVm IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbm9k ZTsKCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0X25vZGVfYmFzZSogX194KQogICAgOiBf TV9ub2RlKF9feCkKICAgIHsgfQoKICAgIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoKQogICAgeyB9Cgog ICAgdm9pZAogICAgX01faW5jcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9 CgogICAgdm9pZAogICAgX01fZGVjcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2 OyB9CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBf X3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CgogICAgYm9v bAogICAgb3BlcmF0b3IhPShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CiAg ICB7IHJldHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9MaXN0 X2l0ZXJhdG9yIDogcHVibGljIF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICAgIHsKICAgICAgdHlwZWRl ZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf TGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsK ICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgICAg IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogICAg ICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBf Tm9kZTsKCiAgICAgIF9MaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpCiAgICAgIDogX0xpc3RfaXRl cmF0b3JfYmFzZShfX3gpCiAgICAgIHsgfQoKICAgICAgX0xpc3RfaXRlcmF0b3IoKQogICAgICB7 IH0KCiAgICAgIF9MaXN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCiAgICAgIDogX0xp c3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkKICAgICAgeyB9CgogICAgICByZWZlcmVuY2UK ICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gKChfTm9kZSopIF9NX25vZGUp LT5fTV9kYXRhOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAg ICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9y KysoKQogICAgICB7CiAgICAgICAgdGhpcy0+X01faW5jcigpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAg ICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkK ICAgICAgewogICAgICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg X1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgICAgcmV0 dXJuIF9fdG1wOwogICAgICB9CiAgICB9OwojIDE4NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0 bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3Is IGJvb2wgX0lzU3RhdGljPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFzZQogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9y Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFs bG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAogICAgICB7IHJldHVybiBf Tm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSkKICAgICAgOiBfTm9kZV9hbGxvY2F0b3IoX19hKQogICAgICB7IH0KCiAgICBw cm90ZWN0ZWQ6CiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAg ICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAg ICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX05vZGVfYWxsb2Nh dG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZW5hbWUg X0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw ZQogICAgICAgICAgICAgICBfTm9kZV9hbGxvY2F0b3I7CgogICAgICBfTGlzdF9ub2RlPF9UcD4q IF9NX25vZGU7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs bG9jYXRvcj4KICAgIGNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8 X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0b3Jf dHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAog ICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAgICBfTGlzdF9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9y Pjo6X0FsbG9jX3R5cGUKICAgICAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgICAgIF9MaXN0X25v ZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6 YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxf VHA+KiBfX3ApCiAgICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfTGlzdF9iYXNl CiAgICAgIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh bmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfTGlzdF9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0 czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgICAgICBfQmFzZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7 CgogICAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jh c2UoX19hKQogICAgICB7CiAgICAgICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAg X01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9N X25vZGU7CiAgICAgIH0KCiAgICAgIH5fTGlzdF9iYXNlKCkKICAgICAgewogICAgICAgIGNsZWFy KCk7CiAgICAgICAgX01fcHV0X25vZGUoX01fbm9kZSk7CiAgICAgIH0KCiAgICAgIHZvaWQgY2xl YXIoKTsKICAgIH07CiMgMjg5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2xpc3QuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4g PgogICAgY2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPgogICAg ewoKICAgICAKCiAgICAgIHR5cGVkZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdm9pZCogX1ZvaWRfcG9pbnRlcjsKCiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlw ZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy OwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25z dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxf VHA+IF9Ob2RlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6 OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVy YXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRv cjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv cjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJh dG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX25vZGU7CiAgICAgIHVz aW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoK ICAgIHByb3RlY3RlZDoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9U cCYgX194KQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAg ICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwgX194KTsKICAgICAg ICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9f cCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcDsKICAgICAg fQoKICAgICAgX05vZGUqCiAgICAgIF9NX2NyZWF0ZV9ub2RlKCkKICAgICAgewogICAgICAgIF9O b2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICBfQ29uc3Ry dWN0KCZfX3AtPl9NX2RhdGEpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg ewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K ICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgcHVibGljOgogICAgICBhbGxvY2F0b3Jf dHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKICAgICAgeyByZXR1cm4gX0Jhc2U6Omdl dF9hbGxvY2F0b3IoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbGlzdChjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAg IHsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxfTm9kZSo+KF9NX25vZGUtPl9NX25leHQpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgog ICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01f bm9kZS0+X01fbmV4dCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsgcmV0 dXJuIF9NX25vZGU7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl Z2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK ICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0K CiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAg ICAgZW1wdHkoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ub2RlLT5fTV9uZXh0ID09IF9NX25v ZGU7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QKICAgICAgeyByZXR1cm4g ZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np emUoKSBjb25zdAogICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICByZWZlcmVu Y2UKICAgICAgZnJvbnQoKQogICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgY29uc3Rf cmVmZXJlbmNlCiAgICAgIGZyb250KCkgY29uc3QKICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0K CiAgICAgIHJlZmVyZW5jZQogICAgICBiYWNrKCkKICAgICAgeyByZXR1cm4gKigtLWVuZCgpKTsg fQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGJhY2soKSBjb25zdAogICAgICB7IHJldHVy biAqKC0tZW5kKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4m IF9feCkKICAgICAgeyBzdGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUpOyB9CgogICAgICBp dGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp CiAgICAgIHsKICAgICAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAg ICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgIF9fdG1wLT5f TV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgIF9fcG9zaXRpb24u X01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAgICAgIF9fcG9zaXRpb24uX01f bm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg ICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsgcmV0 dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZWdlcj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh dG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCiAgICAg ICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3gpOyB9 CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAg ICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgICAgICBfTV9pbnNlcnRfZGlz cGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBfVHAmIF9feCkKICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9Cgog ICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUg X19uLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2b2lkCiAgICAgIHB1c2hfZnJvbnQoY29uc3Qg X1RwJiBfX3gpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KCiAgICAgIHZvaWQKICAg ICAgcHVzaF9mcm9udCgpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCkpOyB9CgogICAgICB2b2lkCiAg ICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNlcnQoZW5kKCksIF9feCk7 IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKCkKICAgICAgeyBpbnNlcnQoZW5kKCkpOyB9 CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7 CiAgICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9k ZS0+X01fbmV4dDsKICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlID0gX19wb3Np dGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgIF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxf Tm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7CiAgICAgICAgX19wcmV2X25vZGUtPl9NX25leHQg PSBfX25leHRfbm9kZTsKICAgICAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2Rl OwogICAgICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAgICAgIF9NX3B1dF9ub2RlKF9f bik7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9Ob2RlKj4oX19uZXh0X25v ZGUpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJz dCwgaXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7IF9C YXNlOjpjbGVhcigpOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf c2l6ZSwgY29uc3QgX1RwJiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBl IF9fbmV3X3NpemUpCiAgICAgIHsgdGhpcy0+cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoK ICAgICAgdm9pZAogICAgICBwb3BfZnJvbnQoKQogICAgICB7IGVyYXNlKGJlZ2luKCkpOyB9Cgog ICAgICB2b2lkCiAgICAgIHBvcF9iYWNrKCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fdG1w ID0gZW5kKCk7CiAgICAgICAgZXJhc2UoLS1fX3RtcCk7CiAgICAgIH0KCiAgICAgIGxpc3Qoc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkKICAgICAg eyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAg bGlzdChzaXplX3R5cGUgX19uKQogICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICAg IHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkpOyB9CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBsaXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsgaW5zZXJ0KGJl Z2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9B bGxvYz4mIF9feCkKICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgICB7IGlu c2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQoKICAgICAgfmxpc3QoKQog ICAgICB7IH0KCiAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+JgogICAgICBvcGVyYXRvcj0oY29uc3Qg bGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgogICAgcHVibGljOgoKCgoKCiAgICAgIHZvaWQKICAg ICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpCiAgICAgIHsgX01fZmls bF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmlsbF9hc3NpZ24o c2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J bnRlZ3JhbDsKICAgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J bnRlZ3JhbCgpKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4K ICAgICAgICB2b2lkCiAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0lu dGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVf dHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZAogICAg ICBfTV90cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVy YXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoX19wb3NpdGlvbiAhPSBfX2xhc3QpIHsK CiAgICAgICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24u X01fbm9kZTsKICAgICAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f bGFzdC5fTV9ub2RlOwogICAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9u ZXh0ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1w ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgICAgX19wb3NpdGlvbi5fTV9u b2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgICAgICBfX2xhc3Qu X01fbm9kZS0+X01fcHJldiA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgICAgIF9f Zmlyc3QuX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgICAgIH0KICAgICAgfQoKICAgIHB1 YmxpYzoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYg X194KQogICAgICB7CiAgICAgICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAgICAgIHRoaXMtPl9N X3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICB9Cgog ICAgICB2b2lkCiAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0 b3IgX19pKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgICAgICsrX19q OwogICAgICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bvc2l0aW9uID09IF9faikgcmV0 dXJuOwogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICAg ICAgfQoKICAgICAgdm9pZAogICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYs IGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIGlmIChf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24s IF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgcmVtb3ZlKGNvbnN0 IF9UcCYgX192YWx1ZSk7CgogICAgICB2b2lkCiAgICAgIHVuaXF1ZSgpOwoKICAgICAgdm9pZAog ICAgICBtZXJnZShsaXN0JiBfX3gpOwoKICAgICAgdm9pZAogICAgICByZXZlcnNlKCk7CgogICAg ICB2b2lkCiAgICAgIHNvcnQoKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICAgICAgdm9pZAogICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlKTsKCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICAgICAgdm9pZAogICAgICAgIHVuaXF1 ZShfQmluYXJ5UHJlZGljYXRlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFr T3JkZXJpbmc+CiAgICAgICAgdm9pZAogICAgICAgIG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09y ZGVyaW5nKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAg ICAgICAgdm9pZAogICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAs X0FsbG9jPiYgX195KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxv Yz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgICBjb25zdF9pdGVyYXRvciBf X2VuZDEgPSBfX3guZW5kKCk7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMiA9IF9feS5lbmQo KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsKICAgICAgY29uc3Rf aXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogICAgICB3aGlsZSAoX19pMSAhPSBfX2VuZDEg JiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpIHsKICAgICAgICArK19faTE7CiAg ICAgICAgKytfX2kyOwogICAgICB9CiAgICAgIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2ky ID09IF9fZW5kMjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m IF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4 aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxf VHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+ JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBs aXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsg cmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9B bGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShf X3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAs IF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+ OjoKICAgIGNsZWFyKCkKICAgIHsKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfX2N1ciA9IHN0YXRp Y19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9NX25vZGUtPl9NX25leHQpOwogICAgICB3aGlsZSAo X19jdXIgIT0gX01fbm9kZSkgewogICAgICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1 cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0PF9MaXN0X25vZGU8X1RwPio+KF9fY3VyLT5f TV9uZXh0KTsKICAgICAgICBfRGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgICAgIF9NX3B1 dF9ub2RlKF9fdG1wKTsKICAgICAgfQogICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsK ICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0 ZXI+CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICAgICAgICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwoKICAgICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAs IF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1f X24pCiAgICAgICAgaW5zZXJ0KF9fcG9zaXRpb24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9j Pjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJz dCwgaXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp CiAgICAgICAgZXJhc2UoX19maXJzdCsrKTsKICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1Rw LCBfQWxsb2M+OjoKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBf X3gpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBf X2xlbiA9IDA7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6 ZTsgKytfX2ksICsrX19sZW4pCiAgICAgICAgOwogICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6 ZSkKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChl bmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwg X0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAg IHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0g YmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgY29uc3Rf aXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBf X2xhc3QyID0gX194LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgICAqX19maXJzdDErKyA9ICpfX2ZpcnN0Misr OwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgZXJhc2UoX19maXJz dDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAgICAgICAgIGluc2VydChfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0Mik7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9B bGxvYz46OgogICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh bCkgewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9faSAhPSBl bmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAgICAgKl9faSA9IF9fdmFsOwogICAg ICBpZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192YWwpOwogICAgICBl bHNlCiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+ CiAgICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2go X0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRlciBfX2xhc3QyLCBfX2ZhbHNlX3R5cGUpCiAg ICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0 b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgICAg Kl9fZmlyc3QxID0gKl9fZmlyc3QyOwogICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog ICAgICAgICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgIGVsc2UKICAgICAgICAg IGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+ OjoKICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CiAgICAgIGl0ZXJhdG9yIF9f Zmlyc3QgPSBiZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICAgICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJz dDsKICAgICAgICArK19fbmV4dDsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkgZXJh c2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAs IF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJl Z2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAg d2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19u ZXh0KQogICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2Zp cnN0ID0gX19uZXh0OwogICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1Rw LCBfQWxsb2M+OjoKICAgIG1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAg IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0MSA9IGVu ZCgpOwogICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgICBpdGVyYXRv ciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgX01fdHJh bnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAgICBfX2ZpcnN0MiA9 IF9fbmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3Qy LCBfX2xhc3QyKTsKICAgIH0KCiAgaW5saW5lIHZvaWQKICBfX0xpc3RfYmFzZV9yZXZlcnNlKF9M aXN0X25vZGVfYmFzZSogX19wKQogIHsKICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3A7 CiAgICBkbyB7CiAgICAgIHN0ZDo6c3dhcChfX3RtcC0+X01fbmV4dCwgX190bXAtPl9NX3ByZXYp OwogICAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2OwogICAgfSB3aGlsZSAoX190bXAgIT0gX19w KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGlu ZSB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICByZXZlcnNlKCkKICB7IF9fTGlzdF9iYXNlX3Jl dmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIHNvcnQoKQogICAgewoK ICAgICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0 LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5 OwogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9f ZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNw bGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kg PSAwOwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0 eSgpKSB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAg ICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgICAgICB9CiAgICAgICAg ICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICAgICAgaWYgKF9faSA9PSBfX2Zp bGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwg X19maWxsOyArK19faSkKICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltf X2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgICAgIH0KICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAg IHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9f Zmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0g X19maXJzdDsKICAgICAgICAgICsrX19uZXh0OwogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz dCkpIGVyYXNlKF9fZmlyc3QpOwogICAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICB9 CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgICAgdm9pZCBsaXN0PF9UcCwg X0FsbG9jPjo6CiAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAg ICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRv ciBfX2xhc3QgPSBlbmQoKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK ICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4 dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19u ZXh0KSkKICAgICAgICAgICAgZXJhc2UoX19uZXh0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAg fQogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg dGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQgbGlzdDxf VHAsIF9BbGxvYz46OgogICAgICBtZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBfU3RyaWN0 V2Vha09yZGVyaW5nIF9fY29tcCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0g YmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0 b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194 LmVuZCgpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewog ICAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAgICAgICAgX01fdHJh bnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgICAgICAgIF9fZmlyc3Qy ID0gX19uZXh0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICArK19fZmly c3QxOwogICAgICAgIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSBfTV90cmFuc2ZlcihfX2xhc3Qx LCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmlu Zz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgc29ydChfU3RyaWN0V2Vha09yZGVy aW5nIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUg JiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICAgICAgbGlzdDxf VHAsIF9BbGxvYz4gX19jYXJyeTsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJb NjRdOwogICAgICAgIGludCBfX2ZpbGwgPSAwOwogICAgICAgIHdoaWxlICghZW1wdHkoKSkgewog ICAgICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7 CiAgICAgICAgICBpbnQgX19pID0gMDsKICAgICAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAh X19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJn ZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f aSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0p OwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAg ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291 bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAgICAgICAgc3dhcChf X2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAgfQoKfQojIDcyICIvdXNyL2luY2x1ZGUv ZysrL2xpc3QiIDIgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9h c3NlcnQuaCIgMiAzCgoKZW51bSBFcnJvckNoYW5uZWxzCnsKICAgICAgICBpbmZvX2Rpc3BsYXkg PSAxLAogICAgICAgIGluZm9fc291bmQgPSAyLAogICAgICAgIGluZm9faW5wdXQgPSA0LAogICAg ICAgIGluZm9fbmV0d29yayA9IDgsCiAgICAgICAgaW5mb19ndWkgPSAxNgp9OwojIDU2ICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9hc3NlcnQuaCIgMwpjbGFzcyBDTF9Bc3Nl cnRMaXN0ZW5lcjsKCgoKCmNsYXNzIENMX0Fzc2VydAp7CiAgICAgICAgc3RhdGljIHN0ZDo6bGlz dDxDTF9Bc3NlcnRMaXN0ZW5lcio+IGxpc3RlbmVyczsKcHVibGljOgoKCgoKCiAgICAgICAgc3Rh dGljIHZvaWQgZW5hYmxlX2NoYW5uZWxzKGludCBjaGFubmVsX21hc2spOwojIDgxICIvdXNyL2lu Y2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbF9hc3NlcnQuaCIgMwogICAgICAgIHN0YXRpYyB2 b2lkIGRpZShib29sIGEsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpm dW5jLCBjb25zdCBjaGFyICphc3NlcnRfc3RyKTsKIyA5MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv Q29yZS9TeXN0ZW0vY2xfYXNzZXJ0LmgiIDMKICAgICAgICBzdGF0aWMgdm9pZCBpbmZvKGludCBj aGFubmVsLCBjb25zdCBjaGFyICp0ZXh0LCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7CgoK CiAgICAgICAgc3RhdGljIHZvaWQgYWRkX2xpc3RlbmVyKENMX0Fzc2VydExpc3RlbmVyICpsaXN0 ZW5lcik7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlX2xpc3RlbmVyKENMX0Fzc2VydExp c3RlbmVyICpsaXN0ZW5lcik7Cn07CgoKY2xhc3MgQ0xfQXNzZXJ0TGlzdGVuZXIKewpwdWJsaWM6 CgoKICAgICAgICB2aXJ0dWFsIH5DTF9Bc3NlcnRMaXN0ZW5lcigpIHs7fQoKCgoKCgoKICAgICAg ICB2aXJ0dWFsIHZvaWQgYXNzZXJ0X29jY3VycmVkKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5l KT0wOwp9OwojIDI2ICJNYXAuY3BwIiAyCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxh eS9EaXNwbGF5L3N1cmZhY2UuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3Bs YXkvRGlzcGxheS9zdXJmYWNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jl c291cmNlcy9yZXNvdXJjZS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9S ZXNvdXJjZXMvcmVzb3VyY2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMu aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdC5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL0Ns YW5MaWIvU2lnbmFscy9zbG90LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz L3Nsb3RfZ2VuZXJpYy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9z bG90X2dlbmVyaWMuaCIgMwpjbGFzcyBDTF9TbG90X0dlbmVyaWMKewoKcHVibGljOgoKICAgICAg ICBDTF9TbG90X0dlbmVyaWMoKSA6IHNsb3RfcmVmX2NvdW50KDApLCBzaWduYWxfcmVmX2NvdW50 KDApIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIH5DTF9TbG90X0dlbmVyaWMoKSB7IHJl dHVybjsgfQoKCnB1YmxpYzoKCiAgICAgICAgaW50IGdldF9zbG90X3JlZigpIGNvbnN0IHsgcmV0 dXJuIHNsb3RfcmVmX2NvdW50OyB9CgoKICAgICAgICBpbnQgZ2V0X3NpZ25hbF9yZWYoKSBjb25z dCB7IHJldHVybiBzaWduYWxfcmVmX2NvdW50OyB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIGFk ZF9zbG90X3JlZigpIHsgc2xvdF9yZWZfY291bnQrKzsgfQoKCiAgICAgICAgdm9pZCByZWxlYXNl X3Nsb3RfcmVmKCkgeyBzbG90X3JlZl9jb3VudC0tOyBjaGVja19kZWxldGUoKTsgfQoKCiAgICAg ICAgdm9pZCBhZGRfc2lnbmFsX3JlZigpIHsgc2lnbmFsX3JlZl9jb3VudCsrOyB9CgoKICAgICAg ICB2b2lkIHJlbGVhc2Vfc2lnbmFsX3JlZigpIHsgc2lnbmFsX3JlZl9jb3VudC0tOyBjaGVja19k ZWxldGUoKTsgfQoKCnByaXZhdGU6CiAgICAgICAgdm9pZCBjaGVja19kZWxldGUoKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGlmIChzbG90X3JlZl9jb3VudCA9PSAwICYmIHNpZ25hbF9yZWZf Y291bnQgPT0gMCkgZGVsZXRlIHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpbnQgc2xvdF9yZWZf Y291bnQ7CgogICAgICAgIGludCBzaWduYWxfcmVmX2NvdW50Owp9OwojIDIzICIvdXNyL2luY2x1 ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3QuaCIgMiAzCgoKCgoKCgpjbGFzcyBDTF9TbG90CnsKCnB1 YmxpYzoKCiAgICAgICAgQ0xfU2xvdCgpCiAgICAgICAgOiBpbXBsKF9fbnVsbCkKICAgICAgICB7 CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdChjb25zdCBDTF9TbG90ICZjb3B5KQogICAgICAg IDogaW1wbChjb3B5LmltcGwpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGltcGwgIT0g X19udWxsKSBpbXBsLT5hZGRfc2xvdF9yZWYoKTsKICAgICAgICB9CgoKICAgICAgICB+Q0xfU2xv dCgpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGltcGwgIT0gX19udWxsKSBpbXBsLT5y ZWxlYXNlX3Nsb3RfcmVmKCk7CiAgICAgICAgfQoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPShj b25zdCBDTF9TbG90ICZjb3B5KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpbXBsKSBp bXBsLT5yZWxlYXNlX3Nsb3RfcmVmKCk7CiAgICAgICAgICAgICAgICBpbXBsID0gY29weS5pbXBs OwogICAgICAgICAgICAgICAgaWYgKGltcGwpIGltcGwtPmFkZF9zbG90X3JlZigpOwogICAgICAg IH0KCgpwdWJsaWM6CgogICAgICAgIENMX1Nsb3QoQ0xfU2xvdF9HZW5lcmljICppbXBsKQogICAg ICAgIDogaW1wbChpbXBsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpbXBsICE9IF9f bnVsbCkgaW1wbC0+YWRkX3Nsb3RfcmVmKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdF9H ZW5lcmljICppbXBsOwp9OwojIDMxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9zaWduYWxzLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFsX3YwLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92MC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YwLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv Q2xhbkxpYi9TaWduYWxzL3Nsb3RfdjAuaCIgMwpjbGFzcyBDTF9TbG90X3YwIDogcHVibGljIENM X1Nsb3RfR2VuZXJpYwp7CnB1YmxpYzoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoY2xhc3Mg Q0xfU2xvdFBhcmVudF92MCAmc3VwZXIpPTA7Cn07CgoKY2xhc3MgQ0xfU2xvdFBhcmVudF92MAp7 CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjAgKlNsb3Q7CiAgICAgICAgdHlwZWRl ZiBzdGQ6Omxpc3Q8U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgoKICAg ICAgICBDTF9TbG90UGFyZW50X3YwKGNvbnN0IFNsb3RJdGVyYXRvciAmcG9zLCBjb25zdCBTbG90 SXRlcmF0b3IgJmVuZCkKICAgICAgICA6IHBvcyhwb3MpLCBlbmQoZW5kKQogICAgICAgIHsKICAg ICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKCkKICAgICAgICB7CiAg ICAgICAgICAgICAgICBpZiAocG9zID09IGVuZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIFNs b3RJdGVyYXRvciBuZXh0ID0gcG9zOwogICAgICAgICAgICAgICAgbmV4dCsrOwoKICAgICAgICAg ICAgICAgIENMX1Nsb3RQYXJlbnRfdjAgc3VwZXIobmV4dCwgZW5kKTsKICAgICAgICAgICAgICAg ICgqcG9zKS0+Y2FsbChzdXBlcik7CiAgICAgICAgfQoKCnByaXZhdGU6CiAgICAgICAgU2xvdEl0 ZXJhdG9yIHBvcywgZW5kOwp9OwoKCmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MCA6IHB1YmxpYyBD TF9TbG90X3YwCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKSgpOwog ICAgICAgIHR5cGVkZWYgdm9pZCAoKlZpcnR1YWxDYWxsYmFjaykoQ0xfU2xvdFBhcmVudF92MCAm KTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xvdF92MChDYWxsYmFjayBjYWxsYmFjaywgVmlydHVh bENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2spCiAgICAgICAgOiBjYWxsYmFjayhjYWxsYmFjayks IHZpcnR1YWxfY2FsbGJhY2sodmlydHVhbF9jYWxsYmFjaykgeyByZXR1cm47IH0KCgogICAgICAg IHZpcnR1YWwgdm9pZCBjYWxsKENMX1Nsb3RQYXJlbnRfdjAgJnN1cGVyKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeyBzdXBlcigpOyBjYWxsYmFjaygpOyB9CiAgICAg ICAgICAgICAgICBlbHNlIHZpcnR1YWxfY2FsbGJhY2soc3VwZXIpOwogICAgICAgIH0KCnByaXZh dGU6CiAgICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVmlydHVhbENhbGxiYWNrIHZp cnR1YWxfY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcz4KCmNsYXNz IENMX01ldGhvZFNsb3RfdjAgOiBwdWJsaWMgQ0xfU2xvdF92MAp7CnB1YmxpYzoKICAgICAgICB0 eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjaykoKTsKICAgICAgICB0eXBlZGVm IHZvaWQgKENhbGxiYWNrQ2xhc3M6OipWaXJ0dWFsQ2FsbGJhY2spKENMX1Nsb3RQYXJlbnRfdjAg Jik7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YwKENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLCBD YWxsYmFjayBjYWxsYmFjaywgVmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2spCiAgICAg ICAgOiBjYl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSwgdmlydHVhbF9jYWxs YmFjayh2aXJ0dWFsX2NhbGxiYWNrKSB7IHJldHVybjsgfQoKCiAgICAgICAgdmlydHVhbCB2b2lk IGNhbGwoQ0xfU2xvdFBhcmVudF92MCAmc3VwZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAg aWYgKGNhbGxiYWNrKSB7IHN1cGVyKCk7IChjYl9jbGFzcy0+KmNhbGxiYWNrKSgpOyB9CiAgICAg ICAgICAgICAgICBlbHNlIChjYl9jbGFzcy0+KnZpcnR1YWxfY2FsbGJhY2spKHN1cGVyKTsKICAg ICAgICB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAg IENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFZpcnR1YWxDYWxsYmFjayB2aXJ0dWFsX2NhbGxi YWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgoK Y2xhc3MgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YwIDogcHVibGljIENMX1Nsb3RfdjAKewpwdWJs aWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqQ2FsbGJhY2spKFVzZXJE YXRhKTsKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipWaXJ0dWFsQ2FsbGJh Y2spKENMX1Nsb3RQYXJlbnRfdjAgJiwgVXNlckRhdGEpOwoKCiAgICAgICAgQ0xfVXNlckRhdGFN ZXRob2RTbG90X3YwKENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaywg VmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAg ICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spLCB2aXJ0dWFsX2Nh bGxiYWNrKHZpcnR1YWxfY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRhKSB7IHJldHVybjsg fQoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoQ0xfU2xvdFBhcmVudF92MCAmc3VwZXIpCiAg ICAgICAgewogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7IHN1cGVyKCk7IChjYl9jbGFz cy0+KmNhbGxiYWNrKSh1c2VyX2RhdGEpOyB9CiAgICAgICAgICAgICAgICBlbHNlIChjYl9jbGFz cy0+KnZpcnR1YWxfY2FsbGJhY2spKHN1cGVyLCB1c2VyX2RhdGEpOwogICAgICAgIH0KCnByaXZh dGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3M7CiAgICAgICAgQ2FsbGJhY2sgY2Fs bGJhY2s7CiAgICAgICAgVmlydHVhbENhbGxiYWNrIHZpcnR1YWxfY2FsbGJhY2s7CiAgICAgICAg VXNlckRhdGEgdXNlcl9kYXRhOwp9OwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz L3NpZ25hbF92MC5oIiAyIDMKCgoKY2xhc3MgQ0xfU2lnbmFsX3YwCnsKcHVibGljOgogICAgICAg IHR5cGVkZWYgQ0xfU2xvdF92MCAqU2xvdDsKICAgICAgICB0eXBlZGVmIHN0ZDo6bGlzdDxTbG90 Pjo6aXRlcmF0b3IgU2xvdEl0ZXJhdG9yOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3Yw KCkKICAgICAgICB7CiAgICAgICAgfQoKCiAgICAgICAgfkNMX1NpZ25hbF92MCgpCiAgICAgICAg ewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2lu KCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAg ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KCgpwdWJsaWM6CgogICAgICAgIHZvaWQgb3BlcmF0b3IoKSAoKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGNhbGwoKTsKICAgICAgICB9CgoKICAgICAgICB2b2lkIGNhbGwo KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+IHJlbW92 ZV9zbG90czsKCgogICAgICAgICAgICAgICAgQ0xfU2xvdFBhcmVudF92MCBzdXBlcihzbG90cy5i ZWdpbigpLCBzbG90cy5lbmQoKSk7CiAgICAgICAgICAgICAgICBzdXBlcigpOwoKCiAgICAgICAg ICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9p dCAhPSBzbG90cy5lbmQoKTsgc2xvdF9pdCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsKCgoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHNsb3QtPmdldF9zbG90X3JlZigpID09IDApCiAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfc2xvdHMucHVzaF9i YWNrKHNsb3RfaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAg ICAgIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+OjppdGVyYXRvciByZW1vdmVfaXQ7CiAgICAgICAg ICAgICAgICBmb3IgKHJlbW92ZV9pdCA9IHJlbW92ZV9zbG90cy5iZWdpbigpOyByZW1vdmVfaXQg IT0gcmVtb3ZlX3Nsb3RzLmVuZCgpOyByZW1vdmVfaXQrKykKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKipyZW1vdmVfaXQ7CiAgICAgICAgICAg ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg ICAgICAgICBzbG90cy5lcmFzZSgqcmVtb3ZlX2l0KTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3QoU2xvdCBzbG90KQogICAgICAgIHsKICAgICAg ICAgICAgICAgIHNsb3QtPmFkZF9zaWduYWxfcmVmKCk7CiAgICAgICAgICAgICAgICBzbG90cy5w dXNoX2Zyb250KHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1Nsb3Qoc2xvdCk7CiAg ICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQgKCpjYWxsYmFjaykoKSkKICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90 X3YwKGNhbGxiYWNrLCAwKSk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0X3Zp cnR1YWwodm9pZCAoKnZpcnR1YWxfY2FsbGJhY2spKENMX1Nsb3RQYXJlbnRfdjAgJikpCiAgICAg ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX0Z1bmN0aW9uU2xvdF92 MCgwLCB2aXJ0dWFsX2NhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNs YXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KENhbGxiYWNrQ2xhc3Mg KmNiX2NsYXNzLCB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2spKCkpCiAgICAgICAgewog ICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX01ldGhvZFNsb3RfdjA8Q2FsbGJh Y2tDbGFzcz4oY2JfY2xhc3MsIGNhbGxiYWNrLCAwKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVt cGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0X3ZpcnR1 YWwoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIHZvaWQgKENhbGxiYWNrQ2xhc3M6Oip2aXJ0dWFs X2NhbGxiYWNrKShDTF9TbG90UGFyZW50X3YwICYpKQogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBjb25uZWN0KG5ldyBDTF9NZXRob2RTbG90X3YwPENhbGxiYWNrQ2xhc3M+KGNiX2Ns YXNzLCAwLCB2aXJ0dWFsX2NhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUg PGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIENMX1Nsb3QgY29u bmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAg ICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShVc2VyRGF0YSksCiAgICAgICAg ICAgICAgICBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0 dXJuIGNvbm5lY3QobmV3IENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MDxDYWxsYmFja0NsYXNzLCBV c2VyRGF0YT4oY2JfY2xhc3MsIGNhbGxiYWNrLCAwLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoK ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcywgY2xhc3MgVXNlckRhdGE+CiAg ICAgICAgQ0xfU2xvdCBjb25uZWN0X3ZpcnR1YWwoCiAgICAgICAgICAgICAgICBDYWxsYmFja0Ns YXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQgKENhbGxiYWNrQ2xhc3M6Oip2aXJ0 dWFsX2NhbGxiYWNrKShDTF9TbG90UGFyZW50X3YwICYsIFVzZXJEYXRhKSwKICAgICAgICAgICAg ICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4g Y29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YwPENhbGxiYWNrQ2xhc3MsIFVzZXJE YXRhPihjYl9jbGFzcywgMCwgdmlydHVhbF9jYWxsYmFjaywgdXNlcl9kYXRhKSk7CiAgICAgICAg fQoKCiAgICAgICAgdm9pZCBkaXNjb25uZWN0KENMX1Nsb3QgJmRpc2Nvbm5lY3Rfc2xvdCkKICAg ICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMu YmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTspCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZGlzY29ubmVjdF9zbG90LmltcGwgPT0gc2xvdCkKICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vf c2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQgPSBz bG90cy5lcmFzZShzbG90X2l0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9p dCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwcml2YXRlOgogICAgICAgIHN0ZDo6 bGlzdDxTbG90PiBzbG90czsKfTsKIyAzMiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvc2lnbmFscy5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92MS5oIiAxIDMK IyAyNiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjEuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92MS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs dWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YxLmgiIDMKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMT4K CmNsYXNzIENMX1Nsb3RfdjEgOiBwdWJsaWMgQ0xfU2xvdF9HZW5lcmljCnsKcHVibGljOgoKICAg ICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xKT0wOwp9OwoKdGVtcGxhdGUgPGNs YXNzIFBBUkFNMT4KCmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MSA6IHB1YmxpYyBDTF9TbG90X3Yx PFBBUkFNMT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkICgqQ2FsbGJhY2spKFBBUkFN MSk7CgoKICAgICAgICBDTF9GdW5jdGlvblNsb3RfdjEoQ2FsbGJhY2sgY2FsbGJhY2spIDogY2Fs bGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQ QVJBTTEgcGFyYW0xKSB7IGNhbGxiYWNrKHBhcmFtMSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2Fs bGJhY2sgY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcywgY2xhc3Mg UEFSQU0xPgoKY2xhc3MgQ0xfTWV0aG9kU2xvdF92MSA6IHB1YmxpYyBDTF9TbG90X3YxPFBBUkFN MT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoqQ2FsbGJh Y2spKFBBUkFNMSk7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YxKENhbGxiYWNrQ2xhc3MgKmNi X2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaykKICAgICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwg Y2FsbGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fs bChQQVJBTTEgcGFyYW0xKSB7IChjYl9jbGFzcy0+KmNhbGxiYWNrKShwYXJhbTEpOyB9Cgpwcml2 YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNh bGxiYWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwg Y2xhc3MgVXNlckRhdGE+CgpjbGFzcyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjEgOiBwdWJsaWMg Q0xfU2xvdF92MTxQQVJBTTE+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJh Y2tDbGFzczo6KkNhbGxiYWNrKShQQVJBTTEsIFVzZXJEYXRhKTsKCgogICAgICAgIENMX1VzZXJE YXRhTWV0aG9kU2xvdF92MShDYWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJh Y2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICA6IGNiX2NsYXNzKGNiX2NsYXNzKSwgY2Fs bGJhY2soY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRhKSB7IHJldHVybjsgfQoKCiAgICAg ICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSkgeyAoY2JfY2xhc3MtPipjYWxsYmFj aykocGFyYW0xLCB1c2VyX2RhdGEpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3Mg KmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFVzZXJEYXRhIHVz ZXJfZGF0YTsKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjEu aCIgMiAzCgoKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMT4KCmNsYXNzIENMX1NpZ25hbF92MQp7CnB1 YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjE8UEFSQU0xPiAqU2xvdDsKICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90Pjo6aXRlcmF0b3IgU2xvdEl0ZXJhdG9yOwoK CnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3YxKCkKICAgICAgICB7CiAgICAgICAgfQoKCiAg ICAgICAgfkNMX1NpZ25hbF92MSgpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90 SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7 IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2xv dCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vf c2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwdWJsaWM6CgogICAg ICAgIHZvaWQgb3BlcmF0b3IoKSAoUEFSQU0xIHBhcmFtMSkKICAgICAgICB7CiAgICAgICAgICAg ICAgICBjYWxsKHBhcmFtMSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBjYWxsKFBBUkFNMSBw YXJhbTEpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFNsb3RJdGVyYXRvcj4g cmVtb3ZlX3Nsb3RzOwoKCiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVyYXRvciBzbG90X2l0 ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTsgc2xvdF9pdCsrKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9p dDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmdldF9zbG90X3JlZigpID09 IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZW1vdmVfc2xvdHMucHVzaF9iYWNrKHNsb3RfaXQpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICBzbG90LT5jYWxsKHBhcmFtMSk7CiAgICAgICAgICAgICAgICB9CgoK ICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+OjppdGVyYXRv ciByZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICBmb3IgKHJlbW92ZV9pdCA9IHJlbW92ZV9zbG90 cy5iZWdpbigpOyByZW1vdmVfaXQgIT0gcmVtb3ZlX3Nsb3RzLmVuZCgpOyByZW1vdmVfaXQrKykK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgU2xvdCBzbG90ID0gKipy ZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3Jl ZigpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90cy5lcmFzZSgqcmVtb3ZlX2l0KTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3QoU2xvdCBz bG90KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3QtPmFkZF9zaWduYWxfcmVmKCk7CiAg ICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2xvdCk7CiAgICAgICAgICAgICAgICByZXR1 cm4gQ0xfU2xvdChzbG90KTsKICAgICAgICB9CgoKICAgICAgICBDTF9TbG90IGNvbm5lY3Qodm9p ZCAoKmNhbGxiYWNrKShQQVJBTTEpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBj b25uZWN0KG5ldyBDTF9GdW5jdGlvblNsb3RfdjE8UEFSQU0xPihjYWxsYmFjaykpOwogICAgICAg IH0KCgogICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzPgogICAgICAgIENMX1Ns b3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAg ICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEpKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb25uZWN0KG5ldyBDTF9NZXRob2RTbG90X3Yx PENhbGxiYWNrQ2xhc3MsIFBBUkFNMT4oY2JfY2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoK CiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgog ICAgICAgIENMX1Nsb3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNi X2NsYXNzLAogICAgICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQ QVJBTTEsIFVzZXJEYXRhKSwKICAgICAgICAgICAgICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRo b2RTbG90X3YxPENhbGxiYWNrQ2xhc3MsIFBBUkFNMSwgVXNlckRhdGE+KGNiX2NsYXNzLCBjYWxs YmFjaywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBkaXNjb25uZWN0KENM X1Nsb3QgJmRpc2Nvbm5lY3Rfc2xvdCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKFNs b3RJdGVyYXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQo KTspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9 ICpzbG90X2l0OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzY29ubmVjdF9zbG90Lmlt cGwgPT0gc2xvdCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNsb3QtPnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNsb3RfaXQgPSBzbG90cy5lcmFzZShzbG90X2l0KTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2xvdF9pdCsrOwogICAgICAgICAgICAgICAgfQogICAgICAg IH0KCgpwcml2YXRlOgogICAgICAgIHN0ZDo6bGlzdDxTbG90PiBzbG90czsKfTsKIyAzMyAiL3Vz ci9pbmNsdWRlL0NsYW5MaWIvc2lnbmFscy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxp Yi9TaWduYWxzL3NpZ25hbF92Mi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2ln bmFscy9zaWduYWxfdjIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xv dF92Mi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X3YyLmgi IDMKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFSQU0yPgoKY2xhc3MgQ0xfU2xvdF92 MiA6IHB1YmxpYyBDTF9TbG90X0dlbmVyaWMKewpwdWJsaWM6CgogICAgICAgIHZpcnR1YWwgdm9p ZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIpPTA7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgUEFSQU0xLCBjbGFzcyBQQVJBTTI+CgpjbGFzcyBDTF9GdW5jdGlvblNsb3RfdjIgOiBwdWJs aWMgQ0xfU2xvdF92MjxQQVJBTTEsIFBBUkFNMj4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2 b2lkICgqQ2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yKTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xv dF92MihDYWxsYmFjayBjYWxsYmFjaykgOiBjYWxsYmFjayhjYWxsYmFjaykgeyByZXR1cm47IH0K CgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIp IHsgY2FsbGJhY2socGFyYW0xLCBwYXJhbTIpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNr IGNhbGxiYWNrOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFN MSwgY2xhc3MgUEFSQU0yPgoKY2xhc3MgQ0xfTWV0aG9kU2xvdF92MiA6IHB1YmxpYyBDTF9TbG90 X3YyPFBBUkFNMSwgUEFSQU0yPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxi YWNrQ2xhc3M6OipDYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIpOwoKCiAgICAgICAgQ0xfTWV0aG9k U2xvdF92MihDYWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAg ICAgOiBjYl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoK CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMikg eyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJhbTIpOyB9Cgpwcml2YXRlOgogICAg ICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFS QU0yLCBjbGFzcyBVc2VyRGF0YT4KCmNsYXNzIENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MiA6IHB1 YmxpYyBDTF9TbG90X3YyPFBBUkFNMSwgUEFSQU0yPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVm IHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFVzZXJEYXRh KTsKCgogICAgICAgIENMX1VzZXJEYXRhTWV0aG9kU2xvdF92MihDYWxsYmFja0NsYXNzICpjYl9j bGFzcywgQ2FsbGJhY2sgY2FsbGJhY2ssIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICA6IGNi X2NsYXNzKGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spLCB1c2VyX2RhdGEodXNlcl9kYXRh KSB7IHJldHVybjsgfQoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwg UEFSQU0yIHBhcmFtMikgeyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJhbTIsIHVz ZXJfZGF0YSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3M7CiAg ICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRhOwp9Owoj IDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92Mi5oIiAyIDMKCgp0ZW1w bGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTI+CgpjbGFzcyBDTF9TaWduYWxfdjIKewpw dWJsaWM6CiAgICAgICAgdHlwZWRlZiBDTF9TbG90X3YyPFBBUkFNMSwgUEFSQU0yPiAqU2xvdDsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90Pjo6aXRlcmF0b3IgU2xvdEl0 ZXJhdG9yOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfU2lnbmFsX3YyKCkKICAgICAgICB7CiAgICAg ICAgfQoKCiAgICAgICAgfkNMX1NpZ25hbF92MigpCiAgICAgICAgewogICAgICAgICAgICAgICAg Zm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xv dHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Qt PnJlbGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgpwdWJs aWM6CgogICAgICAgIHZvaWQgb3BlcmF0b3IoKSAoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFt MikKICAgICAgICB7CiAgICAgICAgICAgICAgICBjYWxsKHBhcmFtMSwgcGFyYW0yKTsKICAgICAg ICB9CgoKICAgICAgICB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMikKICAg ICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPiByZW1vdmVfc2xv dHM7CgoKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5i ZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwoKCgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+Z2V0X3Nsb3RfcmVmKCkgPT0gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92 ZV9zbG90cy5wdXNoX2JhY2soc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg ICAgICAgIHNsb3QtPmNhbGwocGFyYW0xLCBwYXJhbTIpOwogICAgICAgICAgICAgICAgfQoKCiAg ICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPjo6aXRlcmF0b3Ig cmVtb3ZlX2l0OwogICAgICAgICAgICAgICAgZm9yIChyZW1vdmVfaXQgPSByZW1vdmVfc2xvdHMu YmVnaW4oKTsgcmVtb3ZlX2l0ICE9IHJlbW92ZV9zbG90cy5lbmQoKTsgcmVtb3ZlX2l0KyspCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICoqcmVt b3ZlX2l0OwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYo KTsKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMuZXJhc2UoKnJlbW92ZV9pdCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KFNsb3Qgc2xv dCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90LT5hZGRfc2lnbmFsX3JlZigpOwogICAg ICAgICAgICAgICAgc2xvdHMucHVzaF9iYWNrKHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJu IENMX1Nsb3Qoc2xvdCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQg KCpjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl dHVybiBjb25uZWN0KG5ldyBDTF9GdW5jdGlvblNsb3RfdjI8UEFSQU0xLCBQQVJBTTI+KGNhbGxi YWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+ CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KAogICAgICAgICAgICAgICAgQ2FsbGJhY2tDbGFzcyAq Y2JfY2xhc3MsCiAgICAgICAgICAgICAgICB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2sp KFBBUkFNMSwgUEFSQU0yKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVj dChuZXcgQ0xfTWV0aG9kU2xvdF92MjxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMj4oY2Jf Y2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIENh bGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIENMX1Nsb3QgY29ubmVjdCgKICAg ICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAgICAgICAgdm9p ZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgVXNlckRhdGEpLAog ICAgICAgICAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIHJldHVybiBjb25uZWN0KG5ldyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjI8Q2FsbGJhY2tD bGFzcywgUEFSQU0xLCBQQVJBTTIsIFVzZXJEYXRhPihjYl9jbGFzcywgY2FsbGJhY2ssIHVzZXJf ZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TbG90ICZkaXNj b25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Ig c2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7KQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09IHNsb3Qp CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKcHJpdmF0 ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzQgIi91c3IvaW5jbHVkZS9D bGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9z aWduYWxfdjMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFs X3YzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3RfdjMuaCIgMSAz CiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92My5oIiAzCnRlbXBsYXRl IDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zPgoKY2xhc3MgQ0xfU2xv dF92MyA6IHB1YmxpYyBDTF9TbG90X0dlbmVyaWMKewpwdWJsaWM6CgogICAgICAgIHZpcnR1YWwg dm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMpPTA7 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4K CmNsYXNzIENMX0Z1bmN0aW9uU2xvdF92MyA6IHB1YmxpYyBDTF9TbG90X3YzPFBBUkFNMSwgUEFS QU0yLCBQQVJBTTM+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKShQ QVJBTTEsIFBBUkFNMiwgUEFSQU0zKTsKCgogICAgICAgIENMX0Z1bmN0aW9uU2xvdF92MyhDYWxs YmFjayBjYWxsYmFjaykgOiBjYWxsYmFjayhjYWxsYmFjaykgeyByZXR1cm47IH0KCgogICAgICAg IHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBw YXJhbTMpIHsgY2FsbGJhY2socGFyYW0xLCBwYXJhbTIsIHBhcmFtMyk7IH0KCnByaXZhdGU6CiAg ICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFz cywgY2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4KCmNsYXNzIENMX01l dGhvZFNsb3RfdjMgOiBwdWJsaWMgQ0xfU2xvdF92MzxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zPgp7 CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjayko UEFSQU0xLCBQQVJBTTIsIFBBUkFNMyk7CgoKICAgICAgICBDTF9NZXRob2RTbG90X3YzKENhbGxi YWNrQ2xhc3MgKmNiX2NsYXNzLCBDYWxsYmFjayBjYWxsYmFjaykKICAgICAgICA6IGNiX2NsYXNz KGNiX2NsYXNzKSwgY2FsbGJhY2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0 dWFsIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0z KSB7IChjYl9jbGFzcy0+KmNhbGxiYWNrKShwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKTsgfQoKcHJp dmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAgICAgICBDYWxsYmFjayBj YWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEs IGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBVc2VyRGF0YT4KCmNsYXNzIENMX1Vz ZXJEYXRhTWV0aG9kU2xvdF92MyA6IHB1YmxpYyBDTF9TbG90X3YzPFBBUkFNMSwgUEFSQU0yLCBQ QVJBTTM+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KkNh bGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBVc2VyRGF0YSk7CgoKICAgICAgICBDTF9V c2VyRGF0YU1ldGhvZFNsb3RfdjMoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh bGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBjYl9jbGFzcyhjYl9jbGFzcyks IGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0YSkgeyByZXR1cm47IH0KCgog ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBB UkFNMyBwYXJhbTMpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJh bTMsIHVzZXJfZGF0YSk7IH0KCnByaXZhdGU6CiAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xh c3M7CiAgICAgICAgQ2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgICAgVXNlckRhdGEgdXNlcl9kYXRh Owp9OwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3NpZ25hbF92My5oIiAyIDMK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0xLCBjbGFzcyBQQVJBTTIsIGNsYXNzIFBBUkFNMz4KCmNs YXNzIENMX1NpZ25hbF92Mwp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIENMX1Nsb3RfdjM8UEFS QU0xLCBQQVJBTTIsIFBBUkFNMz4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6 Omxpc3Q8U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENM X1NpZ25hbF92MygpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjMo KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBz bG90cy5iZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0Owog ICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkg KFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMpCiAgICAgICAgewog ICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKTsKICAgICAgICB9CgoK ICAgICAgICB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwgUEFSQU0zIHBh cmFtMykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPiBy ZW1vdmVfc2xvdHM7CgoKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQg PSBzbG90cy5iZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0 OwoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+Z2V0X3Nsb3RfcmVmKCkgPT0g MCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlbW92ZV9zbG90cy5wdXNoX2JhY2soc2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAgICAgICAgIHNsb3QtPmNhbGwocGFyYW0xLCBwYXJhbTIsIHBhcmFtMyk7CiAgICAg ICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6bGlzdDxTbG90SXRl cmF0b3I+OjppdGVyYXRvciByZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICBmb3IgKHJlbW92ZV9p dCA9IHJlbW92ZV9zbG90cy5iZWdpbigpOyByZW1vdmVfaXQgIT0gcmVtb3ZlX3Nsb3RzLmVuZCgp OyByZW1vdmVfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg U2xvdCBzbG90ID0gKipyZW1vdmVfaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPnJl bGVhc2Vfc2lnbmFsX3JlZigpOwogICAgICAgICAgICAgICAgICAgICAgICBzbG90cy5lcmFzZSgq cmVtb3ZlX2l0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9TbG90 IGNvbm5lY3QoU2xvdCBzbG90KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3QtPmFkZF9z aWduYWxfcmVmKCk7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2xvdCk7CiAgICAg ICAgICAgICAgICByZXR1cm4gQ0xfU2xvdChzbG90KTsKICAgICAgICB9CgoKICAgICAgICBDTF9T bG90IGNvbm5lY3Qodm9pZCAoKmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zKSkKICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90 X3YzPFBBUkFNMSxQQVJBTTIsUEFSQU0zPihjYWxsYmFjaykpOwogICAgICAgIH0KCgogICAgICAg IHRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzPgogICAgICAgIENMX1Nsb3QgY29ubmVjdCgK ICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2NsYXNzLAogICAgICAgICAgICAgICAg dm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zKSkK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfTWV0aG9kU2xv dF92MzxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zPihjYl9jbGFzcywgY2Fs bGJhY2spKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFz cywgY2xhc3MgVXNlckRhdGE+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KAogICAgICAgICAgICAg ICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsCiAgICAgICAgICAgICAgICB2b2lkIChDYWxsYmFj a0NsYXNzOjoqY2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFVzZXJEYXRhKSwKICAg ICAgICAgICAgICAgIFVzZXJEYXRhIHVzZXJfZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAg ICByZXR1cm4gY29ubmVjdChuZXcgQ0xfVXNlckRhdGFNZXRob2RTbG90X3YzPENhbGxiYWNrQ2xh c3MsIFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFVzZXJEYXRhPihjYl9jbGFzcywgY2FsbGJhY2ss IHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TbG90 ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChTbG90SXRl cmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMuZW5kKCk7KQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqc2xv dF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09 IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoK cHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzUgIi91c3IvaW5j bHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2ln bmFscy9zaWduYWxfdjQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMv c2lnbmFsX3Y0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxzL3Nsb3RfdjQu aCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2xvdF92NC5oIiAzCnRl bXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQ QVJBTTQ+CgpjbGFzcyBDTF9TbG90X3Y0IDogcHVibGljIENMX1Nsb3RfR2VuZXJpYwp7CnB1Ymxp YzoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFt MiwgUEFSQU0zIHBhcmFtMywgUEFSQU00IHBhcmFtNCk9MDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBQ QVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQ+CgpjbGFzcyBD TF9GdW5jdGlvblNsb3RfdjQgOiBwdWJsaWMgQ0xfU2xvdF92NDxQQVJBTTEsIFBBUkFNMiwgUEFS QU0zLCBQQVJBTTQ+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrKShQ QVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQpOwoKCiAgICAgICAgQ0xfRnVuY3Rpb25TbG90 X3Y0KENhbGxiYWNrIGNhbGxiYWNrKSA6IGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoK CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwg UEFSQU0zIHBhcmFtMywgUEFSQU00IHBhcmFtNCkgeyBjYWxsYmFjayhwYXJhbTEsIHBhcmFtMiwg cGFyYW0zLCBwYXJhbTQpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFS QU0yLCBjbGFzcyBQQVJBTTMsIGNsYXNzIFBBUkFNND4KCmNsYXNzIENMX01ldGhvZFNsb3RfdjQg OiBwdWJsaWMgQ0xfU2xvdF92NDxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQ+CnsKcHVi bGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KkNhbGxiYWNrKShQQVJB TTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQpOwoKCiAgICAgICAgQ0xfTWV0aG9kU2xvdF92NChD YWxsYmFja0NsYXNzICpjYl9jbGFzcywgQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAgICAgOiBjYl9j bGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSB7IHJldHVybjsgfQoKCiAgICAgICAg dmlydHVhbCB2b2lkIGNhbGwoUEFSQU0xIHBhcmFtMSwgUEFSQU0yIHBhcmFtMiwgUEFSQU0zIHBh cmFtMywgUEFSQU00IHBhcmFtNCkgeyAoY2JfY2xhc3MtPipjYWxsYmFjaykocGFyYW0xLCBwYXJh bTIsIHBhcmFtMywgcGFyYW00KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpj Yl9jbGFzczsKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBD YWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBj bGFzcyBQQVJBTTQsIGNsYXNzIFVzZXJEYXRhPgoKY2xhc3MgQ0xfVXNlckRhdGFNZXRob2RTbG90 X3Y0IDogcHVibGljIENMX1Nsb3RfdjQ8UEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00Pgp7 CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHZvaWQgKENhbGxiYWNrQ2xhc3M6OipDYWxsYmFjayko UEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00LCBVc2VyRGF0YSk7CgoKICAgICAgICBDTF9V c2VyRGF0YU1ldGhvZFNsb3RfdjQoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh bGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBjYl9jbGFzcyhjYl9jbGFzcyks IGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0YSkgeyByZXR1cm47IH0KCgog ICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBB UkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFt MSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgdXNlcl9kYXRhKTsgfQoKcHJpdmF0ZToKICAgICAg ICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKICAg ICAgICBVc2VyRGF0YSB1c2VyX2RhdGE7Cn07CiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL1Np Z25hbHMvc2lnbmFsX3Y0LmgiIDIgMwoKCnRlbXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBB UkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQ+CgpjbGFzcyBDTF9TaWduYWxfdjQKewpw dWJsaWM6CiAgICAgICAgdHlwZWRlZiBDTF9TbG90X3Y0PFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMs IFBBUkFNND4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdD46 Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENMX1NpZ25hbF92NCgp CiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjQoKQogICAgICAgIHsK ICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5iZWdpbigp OyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAgICAgICAg ICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKFBBUkFNMSBwYXJh bTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQpCiAgICAgICAg ewogICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpOwog ICAgICAgIH0KCgogICAgICAgIHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0y LCBQQVJBTTMgcGFyYW0zLCBQQVJBTTQgcGFyYW00KQogICAgICAgIHsKICAgICAgICAgICAgICAg IHN0ZDo6bGlzdDxTbG90SXRlcmF0b3I+IHJlbW92ZV9zbG90czsKCgogICAgICAgICAgICAgICAg Zm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xv dHMuZW5kKCk7IHNsb3RfaXQrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgU2xvdCBzbG90ID0gKnNsb3RfaXQ7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChzbG90LT5nZXRfc2xvdF9yZWYoKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3Nsb3RzLnB1c2hfYmFjayhzbG90 X2l0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+Y2FsbChwYXJh bTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAg ICAgICAgICB0eXBlbmFtZSBzdGQ6Omxpc3Q8U2xvdEl0ZXJhdG9yPjo6aXRlcmF0b3IgcmVtb3Zl X2l0OwogICAgICAgICAgICAgICAgZm9yIChyZW1vdmVfaXQgPSByZW1vdmVfc2xvdHMuYmVnaW4o KTsgcmVtb3ZlX2l0ICE9IHJlbW92ZV9zbG90cy5lbmQoKTsgcmVtb3ZlX2l0KyspCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICoqcmVtb3ZlX2l0 OwogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAg ICAgICAgICAgICAgICAgICAgICAgc2xvdHMuZXJhc2UoKnJlbW92ZV9pdCk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KFNsb3Qgc2xvdCkKICAg ICAgICB7CiAgICAgICAgICAgICAgICBzbG90LT5hZGRfc2lnbmFsX3JlZigpOwogICAgICAgICAg ICAgICAgc2xvdHMucHVzaF9iYWNrKHNsb3QpOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1Ns b3Qoc2xvdCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdCBjb25uZWN0KHZvaWQgKCpjYWxs YmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00KSkKICAgICAgICB7CiAgICAgICAg ICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90X3Y0PFBBUkFNMSxQQVJB TTIsUEFSQU0zLFBBUkFNND4oY2FsbGJhY2spKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0 ZSA8Y2xhc3MgQ2FsbGJhY2tDbGFzcz4KICAgICAgICBDTF9TbG90IGNvbm5lY3QoCiAgICAgICAg ICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQgKENh bGxiYWNrQ2xhc3M6OipjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00KSkK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfTWV0aG9kU2xv dF92NDxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQ+KGNiX2Ns YXNzLCBjYWxsYmFjaykpOwogICAgICAgIH0KCgogICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDYWxs YmFja0NsYXNzLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICBDTF9TbG90IGNvbm5lY3QoCiAgICAg ICAgICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzcywKICAgICAgICAgICAgICAgIHZvaWQg KENhbGxiYWNrQ2xhc3M6OipjYWxsYmFjaykoUEFSQU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00 LCBVc2VyRGF0YSksCiAgICAgICAgICAgICAgICBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAg ewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3QobmV3IENMX1VzZXJEYXRhTWV0aG9kU2xv dF92NDxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFVzZXJE YXRhPihjYl9jbGFzcywgY2FsbGJhY2ssIHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAg IHZvaWQgZGlzY29ubmVjdChDTF9TbG90ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAg ICAgICAgICAgICAgZm9yIChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNs b3RfaXQgIT0gc2xvdHMuZW5kKCk7KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBTbG90IHNsb3QgPSAqc2xvdF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGRpc2Nvbm5lY3Rfc2xvdC5pbXBsID09IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYo KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uo c2xvdF9pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4g c2xvdHM7Cn07CiMgMzYgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjUuaCIgMSAzCiMgMjYgIi91c3Iv aW5jbHVkZS9DbGFuTGliL1NpZ25hbHMvc2lnbmFsX3Y1LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Q2xhbkxpYi9TaWduYWxzL3Nsb3RfdjUuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFuTGli L1NpZ25hbHMvc2xvdF92NS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFN MiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQsIGNsYXNzIFBBUkFNNT4KCmNsYXNzIENMX1Ns b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF9HZW5lcmljCnsKcHVibGljOgoKICAgICAgICB2aXJ0dWFs IHZvaWQgY2FsbChQQVJBTTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0zLCBQ QVJBTTQgcGFyYW00LCBQQVJBTTUgcGFyYW01KT0wOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFBBUkFN MSwgY2xhc3MgUEFSQU0yLCBjbGFzcyBQQVJBTTMsIGNsYXNzIFBBUkFNNCwgY2xhc3MgUEFSQU01 PgoKY2xhc3MgQ0xfRnVuY3Rpb25TbG90X3Y1IDogcHVibGljIENMX1Nsb3RfdjU8UEFSQU0xLCBQ QVJBTTIsIFBBUkFNMywgUEFSQU00LCBQQVJBTTU+CnsKcHVibGljOgogICAgICAgIHR5cGVkZWYg dm9pZCAoKkNhbGxiYWNrKShQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFBBUkFNNSk7 CgoKICAgICAgICBDTF9GdW5jdGlvblNsb3RfdjUoQ2FsbGJhY2sgY2FsbGJhY2spIDogY2FsbGJh Y2soY2FsbGJhY2spIHsgcmV0dXJuOyB9CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbChQQVJB TTEgcGFyYW0xLCBQQVJBTTIgcGFyYW0yLCBQQVJBTTMgcGFyYW0zLCBQQVJBTTQgcGFyYW00LCBQ QVJBTTUgcGFyYW01KSB7IGNhbGxiYWNrKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwg cGFyYW01KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBs YXRlIDxjbGFzcyBDYWxsYmFja0NsYXNzLCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xh c3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQsIGNsYXNzIFBBUkFNNT4KCmNsYXNzIENMX01ldGhvZFNs b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQs IFBBUkFNNT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoq Q2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01KTsKCgogICAg ICAgIENMX01ldGhvZFNsb3RfdjUoQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsIENhbGxiYWNrIGNh bGxiYWNrKQogICAgICAgIDogY2JfY2xhc3MoY2JfY2xhc3MpLCBjYWxsYmFjayhjYWxsYmFjaykg eyByZXR1cm47IH0KCgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEsIFBB UkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBBUkFNNSBwYXJhbTUp IHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwg cGFyYW01KTsgfQoKcHJpdmF0ZToKICAgICAgICBDYWxsYmFja0NsYXNzICpjYl9jbGFzczsKICAg ICAgICBDYWxsYmFjayBjYWxsYmFjazsKfTsKCnRlbXBsYXRlIDxjbGFzcyBDYWxsYmFja0NsYXNz LCBjbGFzcyBQQVJBTTEsIGNsYXNzIFBBUkFNMiwgY2xhc3MgUEFSQU0zLCBjbGFzcyBQQVJBTTQs IGNsYXNzIFBBUkFNNSwgY2xhc3MgVXNlckRhdGE+CgpjbGFzcyBDTF9Vc2VyRGF0YU1ldGhvZFNs b3RfdjUgOiBwdWJsaWMgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQs IFBBUkFNNT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2b2lkIChDYWxsYmFja0NsYXNzOjoq Q2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01LCBVc2VyRGF0 YSk7CgoKICAgICAgICBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjUoQ2FsbGJhY2tDbGFzcyAqY2Jf Y2xhc3MsIENhbGxiYWNrIGNhbGxiYWNrLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgOiBj Yl9jbGFzcyhjYl9jbGFzcyksIGNhbGxiYWNrKGNhbGxiYWNrKSwgdXNlcl9kYXRhKHVzZXJfZGF0 YSkgeyByZXR1cm47IH0KCgogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFBBUkFNMSBwYXJhbTEs IFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBBUkFNNSBwYXJh bTUpIHsgKGNiX2NsYXNzLT4qY2FsbGJhY2spKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFt NCwgcGFyYW01LCB1c2VyX2RhdGEpOyB9Cgpwcml2YXRlOgogICAgICAgIENhbGxiYWNrQ2xhc3Mg KmNiX2NsYXNzOwogICAgICAgIENhbGxiYWNrIGNhbGxiYWNrOwogICAgICAgIFVzZXJEYXRhIHVz ZXJfZGF0YTsKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zaWduYWxfdjUu aCIgMiAzCgoKdGVtcGxhdGUgPGNsYXNzIFBBUkFNMSwgY2xhc3MgUEFSQU0yLCBjbGFzcyBQQVJB TTMsIGNsYXNzIFBBUkFNNCwgY2xhc3MgUEFSQU01PgoKY2xhc3MgQ0xfU2lnbmFsX3Y1CnsKcHVi bGljOgogICAgICAgIHR5cGVkZWYgQ0xfU2xvdF92NTxQQVJBTTEsIFBBUkFNMiwgUEFSQU0zLCBQ QVJBTTQsIFBBUkFNNT4gKlNsb3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Omxpc3Q8 U2xvdD46Oml0ZXJhdG9yIFNsb3RJdGVyYXRvcjsKCgpwdWJsaWM6CgogICAgICAgIENMX1NpZ25h bF92NSgpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIH5DTF9TaWduYWxfdjUoKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIGZvciAoU2xvdEl0ZXJhdG9yIHNsb3RfaXQgPSBzbG90cy5i ZWdpbigpOyBzbG90X2l0ICE9IHNsb3RzLmVuZCgpOyBzbG90X2l0KyspCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNsb3Qgc2xvdCA9ICpzbG90X2l0OwogICAgICAg ICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICB2b2lkIG9wZXJhdG9yKCkgKFBBUkFN MSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJhbTQsIFBB UkFNNSBwYXJhbTUpCiAgICAgICAgewogICAgICAgICAgICAgICAgY2FsbChwYXJhbTEsIHBhcmFt MiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSk7CiAgICAgICAgfQoKCiAgICAgICAgdm9pZCBjYWxs KFBBUkFNMSBwYXJhbTEsIFBBUkFNMiBwYXJhbTIsIFBBUkFNMyBwYXJhbTMsIFBBUkFNNCBwYXJh bTQsIFBBUkFNNSBwYXJhbTUpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpsaXN0PFNs b3RJdGVyYXRvcj4gcmVtb3ZlX3Nsb3RzOwoKCiAgICAgICAgICAgICAgICBmb3IgKFNsb3RJdGVy YXRvciBzbG90X2l0ID0gc2xvdHMuYmVnaW4oKTsgc2xvdF9pdCAhPSBzbG90cy5lbmQoKTsgc2xv dF9pdCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNs b3QgPSAqc2xvdF9pdDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmdldF9z bG90X3JlZigpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZW1vdmVfc2xvdHMucHVzaF9iYWNrKHNsb3RfaXQpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5jYWxsKHBhcmFtMSwgcGFyYW0yLCBw YXJhbTMsIHBhcmFtNCwgcGFyYW01KTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg ICAgdHlwZW5hbWUgc3RkOjpsaXN0PFNsb3RJdGVyYXRvcj46Oml0ZXJhdG9yIHJlbW92ZV9pdDsK ICAgICAgICAgICAgICAgIGZvciAocmVtb3ZlX2l0ID0gcmVtb3ZlX3Nsb3RzLmJlZ2luKCk7IHJl bW92ZV9pdCAhPSByZW1vdmVfc2xvdHMuZW5kKCk7IHJlbW92ZV9pdCsrKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNsb3QgPSAqKnJlbW92ZV9pdDsKICAg ICAgICAgICAgICAgICAgICAgICAgc2xvdC0+cmVsZWFzZV9zaWduYWxfcmVmKCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHNsb3RzLmVyYXNlKCpyZW1vdmVfaXQpOwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KCgogICAgICAgIENMX1Nsb3QgY29ubmVjdChTbG90IHNsb3QpCiAgICAgICAg ewogICAgICAgICAgICAgICAgc2xvdC0+YWRkX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAgICAg IHNsb3RzLnB1c2hfYmFjayhzbG90KTsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TbG90KHNs b3QpOwogICAgICAgIH0KCgogICAgICAgIENMX1Nsb3QgY29ubmVjdCh2b2lkICgqY2FsbGJhY2sp KFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMsIFBBUkFNNCwgUEFSQU01KSkKICAgICAgICB7CiAgICAg ICAgICAgICAgICByZXR1cm4gY29ubmVjdChuZXcgQ0xfRnVuY3Rpb25TbG90X3Y1PFBBUkFNMSxQ QVJBTTIsUEFSQU0zLFBBUkFNNCxQQVJBTTU+KGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAgICAg ICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3M+CiAgICAgICAgQ0xfU2xvdCBjb25uZWN0 KAogICAgICAgICAgICAgICAgQ2FsbGJhY2tDbGFzcyAqY2JfY2xhc3MsCiAgICAgICAgICAgICAg ICB2b2lkIChDYWxsYmFja0NsYXNzOjoqY2FsbGJhY2spKFBBUkFNMSwgUEFSQU0yLCBQQVJBTTMs IFBBUkFNNCwgUEFSQU01KSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29ubmVj dChuZXcgQ0xfTWV0aG9kU2xvdF92NTxDYWxsYmFja0NsYXNzLCBQQVJBTTEsIFBBUkFNMiwgUEFS QU0zLCBQQVJBTTQsIFBBUkFNNT4oY2JfY2xhc3MsIGNhbGxiYWNrKSk7CiAgICAgICAgfQoKCiAg ICAgICAgdGVtcGxhdGUgPGNsYXNzIENhbGxiYWNrQ2xhc3MsIGNsYXNzIFVzZXJEYXRhPgogICAg ICAgIENMX1Nsb3QgY29ubmVjdCgKICAgICAgICAgICAgICAgIENhbGxiYWNrQ2xhc3MgKmNiX2Ns YXNzLAogICAgICAgICAgICAgICAgdm9pZCAoQ2FsbGJhY2tDbGFzczo6KmNhbGxiYWNrKShQQVJB TTEsIFBBUkFNMiwgUEFSQU0zLCBQQVJBTTQsIFBBUkFNNSwgVXNlckRhdGEpLAogICAgICAgICAg ICAgICAgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biBjb25uZWN0KG5ldyBDTF9Vc2VyRGF0YU1ldGhvZFNsb3RfdjU8Q2FsbGJhY2tDbGFzcywgUEFS QU0xLCBQQVJBTTIsIFBBUkFNMywgUEFSQU00LCBQQVJBTTUsIFVzZXJEYXRhPihjYl9jbGFzcywg Y2FsbGJhY2ssIHVzZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVj dChDTF9TbG90ICZkaXNjb25uZWN0X3Nsb3QpCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9y IChTbG90SXRlcmF0b3Igc2xvdF9pdCA9IHNsb3RzLmJlZ2luKCk7IHNsb3RfaXQgIT0gc2xvdHMu ZW5kKCk7KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBTbG90IHNs b3QgPSAqc2xvdF9pdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2Nvbm5lY3Rfc2xv dC5pbXBsID09IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzbG90LT5yZWxlYXNlX3NpZ25hbF9yZWYoKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzbG90X2l0ID0gc2xvdHMuZXJhc2Uoc2xvdF9pdCk7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfaXQrKzsKICAgICAgICAgICAgICAgIH0KICAg ICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxpc3Q8U2xvdD4gc2xvdHM7Cn07CiMgMzcg Ii91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0Ns YW5MaWIvU2lnbmFscy9zbG90YnVmZmVyX3YwLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9TaWduYWxzL3Nsb3RidWZmZXJfdjAuaCIgMwpjbGFzcyBDTF9TbG90QnVmZmVyX3YwCnsK CnB1YmxpYzoKCiAgICAgICAgQ0xfU2xvdEJ1ZmZlcl92MCgpIDogY291bnQoMCkKICAgICAgICB7 CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU2xvdEJ1ZmZlcl92MChDTF9TaWduYWxfdjAgJnNpZ25h bCkgOiBjb3VudCgwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbm5lY3Qoc2lnbmFsKTsK ICAgICAgICB9CgoKcHVibGljOgoKICAgICAgICBvcGVyYXRvciBib29sKCkKICAgICAgICB7CiAg ICAgICAgICAgICAgICByZXR1cm4gY291bnQgPiAwOwogICAgICAgIH0KCgogICAgICAgIGludCBz aXplKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgICAgfQoK CnB1YmxpYzoKCiAgICAgICAgdm9pZCBjb25uZWN0KENMX1NpZ25hbF92MCAmc2lnbmFsKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHNsb3QgPSBzaWduYWwuY29ubmVjdCh0aGlzLCAmQ0xfU2xv dEJ1ZmZlcl92MDo6Y2FsbGJhY2spOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVj dChDTF9TaWduYWxfdjAgJnNpZ25hbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzaWduYWwu ZGlzY29ubmVjdChzbG90KTsKICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICB2b2lkIGNhbGxi YWNrKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KCiAgICAg ICAgQ0xfU2xvdCBzbG90OwogICAgICAgIGludCBjb3VudDsKfTsKIyAzOCAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvc2lnbmFscy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9TaWduYWxz L3Nsb3RidWZmZXJfdjEuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NpZ25hbHMv c2xvdGJ1ZmZlcl92MS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDEgMwojIDY1 ICIvdXNyL2luY2x1ZGUvZysrL3ZlY3RvciIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2Vw dC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDIg MwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2NSAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n KysvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgi IDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0 KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX3ZlY3Rvci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3OCAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGlj OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxv Y2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0 X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0 b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2Fs bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFn ZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7 CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9y YWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRh X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19w LCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRl KF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y PgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1Ymxp YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxs b2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0 b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBf TV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBfVHAq IF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2Nf dHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJl dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShf VHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBf X24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0 b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2lu c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf U19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3Qg X19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fc3Rh cnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsg X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0K fTsKIyAxNjUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0b3Ig OiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgpwcml2YXRlOgogIHR5 cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3Rvcjxf VHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5 cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9y PHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6X19u b3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9yX3R5cGU+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7 CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90 eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVk ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6 YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRl ZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y OwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsK CnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9N X2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9m aW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZv aWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAg dm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgoKCgoKICBp dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogIGNv bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChf TV9zdGFydCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9m aW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25z dF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoKCgogIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsg cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv cihiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6 ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0 CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCgoKCgogIHNpemVf dHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0 b3IoX01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCiAgYm9vbCBlbXB0eSgpIGNv bnN0CiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgMjg5ICIvdXNyL2luY2x1ZGUv ZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBl IF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQojIDMwMCAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf dHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAgdm9pZCBfTV9y YW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNp emUoKSkKICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciIpOwogIH0KIyAzMTYgIi91 c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UgYXQoc2l6ZV90 eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg fQojIDMyOCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3Jl ZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24p OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAg dmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwg X19hKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u LCBfX3ZhbHVlKTsgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jh c2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk X2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3Rvcjxf VHAsIF9BbGxvYz4mIF9feCkKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0 b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBf X3guZW5kKCksIF9NX3N0YXJ0KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkKICAgICAgICA6IF9CYXNlKF9fYSkKICAgICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBf TV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAg dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50 ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAg X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9N X3N0YXJ0ICsgX19uOwogICAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9z dGFydCwgX19uLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojpp dGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAgICAgX01fcmFuZ2VfaW5pdGlh bGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAgfQoKICB+dmVj dG9yKCkKICB7IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAs IF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwojIDM5 MyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzZXJ2ZShz aXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBz aXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2Fs bG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9EZXN0cm95 KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9l bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAg X01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KIyA0MjEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dGxfdmVjdG9yLmgiIDMKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f dmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2ln bihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNz aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1w bGF0ZTxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgeyBfTV9maWxsX2Fz c2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBf SW5wdXRJdGVyPgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5 IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRl ckNhdGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg ICB2b2lkCiAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfTV9hc3NpZ25f YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKCgogIHJlZmVyZW5jZSBm cm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgZnJvbnQo KSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3Qg eyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiMgNDg4ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3Rs X3ZlY3Rvci5oIiAzCiAgdm9pZAogIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICB7CiAgICBp ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01f ZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01f aW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICB9CiMgNTE5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMv c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQog IHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChf TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KIyA1MzggIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJl Z2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp b24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsr X01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9f cG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQojIDU2MiAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zaXRpb24pCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBi ZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0 aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9m aW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3Np dGlvbikpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGU8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn cmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBf X2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog ICAgdm9pZAogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVn ZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0 KF9fcG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PF9UcD4oX192 YWwpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAg ICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn b3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwg X19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgfQojIDYxMiAiL3Vzci9pbmNsdWRlL2crKy9i aXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24s IF9feCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlw ZSBfX24sIGNvbnN0IF9UcCYgX194KTsKIyA2MjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf dmVjdG9yLmgiIDMKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBfRGVz dHJveShfTV9maW5pc2gpOwogIH0KIyA2NDUgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVj dG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAo X19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgp LCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsK ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KIyA2NjggIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv ciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3Qp KTsKICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g KF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQojIDY4NSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBf X25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkp CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAg IGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiMgNzAxICIvdXNy L2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCByZXNpemUoc2l6ZV90eXBl IF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKCgoKCgoKICB2b2lk IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9N X2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxp emUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwog IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2Vf aW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7 CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIF9NX3N0 YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy YXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAg ICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5k KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5k KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3 YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsK ICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4o Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j PiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kg PCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s Cm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxf QWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYg KCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7 CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01f YWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1w OwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAg ZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2koY29weShfX3gu YmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgIF9EZXN0cm95KF9faSwgZW5kKCkp OwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsg c2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSAr IHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01f c3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWdu KHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFj aXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2Fs bG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBz aXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAg fQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2lu KCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19j dXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBf X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01f YXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewog IHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CgogIGlmIChfX2xl biA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHko X19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz aCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0 YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2Zp bmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg ewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFy dCkpOwogICAgX0Rlc3Ryb3koX19uZXdfZmluaXNoLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBf X25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9 IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBf X21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29m X3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK ICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNo LSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0 IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19u ZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChf X25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk X2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBfQ29uc3RydWN0KF9fbmV3 X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7 CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfRGVzdHJveShfX25ld19zdGFy dCxfX25ld19maW5pc2gpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgp LF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5k KCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9 IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0 LmJhc2UoKSArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25z dHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAg Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAg ICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBf VHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo KTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29s ZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7 CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAg X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19w b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0 YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2Zpbmlz aDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0 ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX0Rl c3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9f bmV3X3N0YXJ0LF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVn aW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh Z2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9f bGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3Rv cjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVf dHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9u OwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxl bXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0g X19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAg ICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRf ZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9j b3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihf TV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5p c2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19w b3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf X2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hf Y29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6 ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9h bGxvY2F0ZShfX2xlbikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQp OwogICAgICB0cnkgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShi ZWdpbigpLCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0g dW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19u ZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQo KSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAg ICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9NX2Rl YWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICAgIHRocm93OwogICAg ICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxs b2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9z dGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo LmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBf X2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N X3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJz dCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxs b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsK ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0g ZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNo KTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVk X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f ZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zp bmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7 CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAg ICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf X3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29s ZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0 KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19z dGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAg ICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u LCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNo KC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5p c2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksIF9fbGVuKTsK ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zp bmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g X01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01f ZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf X25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyA3MiAiL3Vzci9pbmNs dWRlL2crKy92ZWN0b3IiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfYnZlY3Rv ci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9idmVjdG9yLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9CaXRfdHlwZTsKICBlbnVtIHsg X01fd29yZF9iaXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUpKSB9OwoKc3RydWN0IF9CaXRf cmVmZXJlbmNlIHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0X3R5cGUgX01fbWFzazsKICBf Qml0X3JlZmVyZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlwZSBfX3kpCiAgICA6IF9NX3Ao X194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3Ao MCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEoKl9N X3AgJiBfTV9tYXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAg ewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21h c2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29u c3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9 CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7 IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25z dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gIWJvb2woKnRoaXMpICYm IGJvb2woX194KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5s aW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewog IGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3Qg X0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnLCBib29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zm c2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQg X195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91 cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2JpdCAtIDEpIHsKICAgICAgX01f b2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIF9NX2J1bXBfZG93bigp IHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9NX3dvcmRf Yml0IC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZf dCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBf TV9wICs9IF9fbiAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19uICUgX01fd29yZF9iaXQ7CiAg ICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBf TV93b3JkX2JpdDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1 bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJh dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01f b2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf aXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8 IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBi b29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAg IHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRf aXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQog IGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgewog ICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0Jp dF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsK ICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh c2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX01fd29y ZF9iaXQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29m ZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFz ZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3Jl ZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9C aXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0 b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9y X2Jhc2UoX194LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy biByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0 b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0 b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9i dW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkg ewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9w ZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9k b3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZl cmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMg Kz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZl cmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBy ZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90 eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf X3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUg X19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IK b3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1 cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0Jp dF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9v bCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVk ZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVy YXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRv cihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3Jf YmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0 b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0 KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9C aXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRv ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNv bnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1 cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25z dF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4g X190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf X2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRl cmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9f aTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZl cmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7 CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0o ZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq dGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVy YXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsK ICB9Cn07CgppbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9f biwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0K CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNz IF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf dHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2Nh dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwg X01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX0JpdF90 eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9j YXRvci5hbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2 b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0 YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoK ICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46OmFsbG9jYXRv cl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0 YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9NX2VuZF9vZl9z dG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9h bGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg IGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7 IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3Qg YWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29m X3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190 eXBlOwoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu IF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2Jp dCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAg ICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9Cgog IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0Jp dF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj bGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxs b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0 b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2 ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCgpuYW1lc3Bh Y2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2ws IF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAg IHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3Jl ZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAg dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCog Y29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0 eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiBy ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsK ICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9i aXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7 CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRp YWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxs b2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9i aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwog ICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQog ICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAg ICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNv cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAg ICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAg ICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0 KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAg IGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAw KSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3Np dGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2Vu ZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2Jp dDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf cmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9z dGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5 cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5pdGlhbGl6ZShf X24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0 ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAg KytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19u ID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNp emUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl X3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUg X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0JpdF90eXBlICog X19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHko YmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19w b3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01f d29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg fQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g X01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f c3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29u c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJz ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3Ig cmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJl dHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXpl KCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5 KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9v Zl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg cmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl X3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u KSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAg IHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19u ID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJv b2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01f cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJl bmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsg cmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9B bGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAg ICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp CiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlh bGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf X3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9f bikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsK ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2Vu ZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDog X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5p dGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBf TV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lk IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1 ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5f TV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2go X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXpl X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVj dG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0 aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAg IH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkg ewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6 ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9p bml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f eC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNl X3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZv aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+ IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkp OwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w IDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9f eCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNw YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6 ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3Qs IF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIs ICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAg ICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAg ZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2Ug ewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu Y2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7 CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAg IHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19u KSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAg X01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg ICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEp L19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1 cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJu ICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsg fQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7 IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01f cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAg IGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBz d2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0 LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNo KTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3Jh Z2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wg X194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0g YmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYm IF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBl bHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4g YmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAg IHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9J bnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAg ICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0 b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xh c3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24s CiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0 aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2Zp bGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7 CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUo KSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9m aW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBf X3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNo ICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNp emVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgX0JpdF90 eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBj b3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxf bihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVu ZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgp OwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQg LSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg ICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5 cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24s IF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0 ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24g KyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0 aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9 CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsK ICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwg Ym9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAg ICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwog ICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gp OwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IF9N X3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9f cCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgp KTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3ZlY3RvcjsKCn0K IyA3MyAiL3Vzci9pbmNsdWRlL2crKy92ZWN0b3IiIDIgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9TaWduYWxzL3Nsb3RidWZmZXJfdjEuaCIgMiAzCgp0ZW1wbGF0ZSA8Y2xhc3MgUEFSQU0x PgoKY2xhc3MgQ0xfU2xvdEJ1ZmZlcl92MQp7CnB1YmxpYzoKICAgICAgICBzdHJ1Y3QgUGFyYW1z CiAgICAgICAgewogICAgICAgICAgICAgICAgUEFSQU0xIHAxOwogICAgICAgIH07CgoKcHVibGlj OgoKICAgICAgICBDTF9TbG90QnVmZmVyX3YxKCkKICAgICAgICB7CiAgICAgICAgfQoKCiAgICAg ICAgQ0xfU2xvdEJ1ZmZlcl92MShDTF9TaWduYWxfdjE8UEFSQU0xPiAmc2lnbmFsKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGNvbm5lY3Qoc2lnbmFsKTsKICAgICAgICB9CgoKcHVibGljOgoK ICAgICAgICBvcGVyYXRvciBib29sKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4g IXBhcmFtcy5lbXB0eSgpOwogICAgICAgIH0KCgogICAgICAgIGludCBzaXplKCkKICAgICAgICB7 CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnNpemUoKTsKICAgICAgICB9CgoKICAgICAg ICBQYXJhbXMgJm9wZXJhdG9yW10oaW50IGluZGV4KQogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBwYXJhbXNbaW5kZXhdOwogICAgICAgIH0KCgpwdWJsaWM6CgogICAgICAgIHZvaWQg Y29ubmVjdChDTF9TaWduYWxfdjE8UEFSQU0xPiAmc2lnbmFsKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIHNsb3QgPSBzaWduYWwuY29ubmVjdCh0aGlzLCAmQ0xfU2xvdEJ1ZmZlcl92MTo6Y2Fs bGJhY2spOwogICAgICAgIH0KCgogICAgICAgIHZvaWQgZGlzY29ubmVjdChDTF9TaWduYWxfdjE8 UEFSQU0xPiAmc2lnbmFsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNpZ25hbC5kaXNjb25u ZWN0KHNsb3QpOwogICAgICAgIH0KCgpwcml2YXRlOgogICAgICAgIHZvaWQgY2FsbGJhY2soUEFS QU0xIHAxKQogICAgICAgIHsKICAgICAgICAgICAgICAgIFBhcmFtcyBwOwogICAgICAgICAgICAg ICAgcC5wMSA9IHAxOwoKICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoX2JhY2socCk7CiAgICAg ICAgfQoKICAgICAgICBzdGQ6OnZlY3RvcjxQYXJhbXM+IHBhcmFtczsKICAgICAgICBDTF9TbG90 IHNsb3Q7Cn07CiMgMzkgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X2NvbnRhaW5lci5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvU2lnbmFscy9zbG90X2NvbnRhaW5lci5oIiAzCmNsYXNzIENM X1Nsb3RDb250YWluZXIKewpwdWJsaWM6CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFz cywgY2xhc3MgQ2xhc3M+CiAgICAgICAgdm9pZCBjb25uZWN0KFNpZ0NsYXNzICZzaWcsIENsYXNz ICpzZWxmLCB2b2lkKENsYXNzOjoqZnVuYykoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBz bG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwogICAgICAgIH0KCgoKICAg ICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFVzZXJEYXRh PgogICAgICAgIHZvaWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFzcyAqc2VsZiwgdm9pZChD bGFzczo6KmZ1bmMpKFVzZXJEYXRhKSwgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jLCB1c2Vy X2RhdGEpKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xh c3MgQ2xhc3MsIGNsYXNzIFBhcmFtMT4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNp ZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEpKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jKSk7CiAg ICAgICAgfQoKCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNpZ0NsYXNzLCBjbGFzcyBDbGFzcywg Y2xhc3MgUGFyYW0xLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xh c3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFVzZXJEYXRh KSwgVXNlckRhdGEgdXNlcl9kYXRhKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1 c2hfYmFjayhzaWcuY29ubmVjdChzZWxmLCBmdW5jLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoK ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFt MSwgY2xhc3MgUGFyYW0yPgogICAgICAgIHZvaWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFz cyAqc2VsZiwgdm9pZChDbGFzczo6KmZ1bmMpKFBhcmFtMSwgUGFyYW0yKSkKICAgICAgICB7CiAg ICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwog ICAgICAgIH0KCgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3Ms IGNsYXNzIFBhcmFtMSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lk IGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQ YXJhbTEsIFBhcmFtMiwgVXNlckRhdGEpLCBVc2VyRGF0YSB1c2VyX2RhdGEpCiAgICAgICAgewog ICAgICAgICAgICAgICAgc2xvdHMucHVzaF9iYWNrKHNpZy5jb25uZWN0KHNlbGYsIGZ1bmMsIHVz ZXJfZGF0YSkpOwogICAgICAgIH0KCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNpZ0NsYXNzLCBj bGFzcyBDbGFzcywgY2xhc3MgUGFyYW0xLCBjbGFzcyBQYXJhbTIsIGNsYXNzIFBhcmFtMz4KICAg ICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6 OipmdW5jKShQYXJhbTEsIFBhcmFtMiwgUGFyYW0zKSkKICAgICAgICB7CiAgICAgICAgICAgICAg ICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2VsZiwgZnVuYykpOwogICAgICAgIH0KCgoK ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBTaWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFt MSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBQYXJhbTMsIGNsYXNzIFVzZXJEYXRhPgogICAgICAgIHZv aWQgY29ubmVjdChTaWdDbGFzcyAmc2lnLCBDbGFzcyAqc2VsZiwgdm9pZChDbGFzczo6KmZ1bmMp KFBhcmFtMSwgUGFyYW0yLCBQYXJhbTMsIFVzZXJEYXRhKSwgVXNlckRhdGEgdXNlcl9kYXRhKQog ICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29ubmVjdChzZWxm LCBmdW5jLCB1c2VyX2RhdGEpKTsKICAgICAgICB9CgoKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBT aWdDbGFzcywgY2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFtMSwgY2xhc3MgUGFyYW0yLCBjbGFzcyBQ YXJhbTMsIGNsYXNzIFBhcmFtND4KICAgICAgICB2b2lkIGNvbm5lY3QoU2lnQ2xhc3MgJnNpZywg Q2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFBhcmFtMiwgUGFyYW0zLCBQ YXJhbTQpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHNsb3RzLnB1c2hfYmFjayhzaWcuY29u bmVjdChzZWxmLCBmdW5jKSk7CiAgICAgICAgfQoKCgogICAgICAgIHRlbXBsYXRlPGNsYXNzIFNp Z0NsYXNzLCBjbGFzcyBDbGFzcywgY2xhc3MgUGFyYW0xLCBjbGFzcyBQYXJhbTIsIGNsYXNzIFBh cmFtMywgY2xhc3MgUGFyYW00LCBjbGFzcyBVc2VyRGF0YT4KICAgICAgICB2b2lkIGNvbm5lY3Qo U2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJhbTEsIFBh cmFtMiwgUGFyYW0zLCBQYXJhbTQsIFVzZXJEYXRhIHVzZXJfZGF0YSksIFVzZXJEYXRhIHVzZXJf ZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5l Y3Qoc2VsZiwgZnVuYywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKCiAgICAgICAgdGVtcGxhdGU8 Y2xhc3MgU2lnQ2xhc3MsIGNsYXNzIENsYXNzLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBhcmFtMiwg Y2xhc3MgUGFyYW0zLCBjbGFzcyBQYXJhbTQsIGNsYXNzIFBhcmFtNT4KICAgICAgICB2b2lkIGNv bm5lY3QoU2lnQ2xhc3MgJnNpZywgQ2xhc3MgKnNlbGYsIHZvaWQoQ2xhc3M6OipmdW5jKShQYXJh bTEsIFBhcmFtMiwgUGFyYW0zLCBQYXJhbTQsIFBhcmFtNSkpCiAgICAgICAgewogICAgICAgICAg ICAgICAgc2xvdHMucHVzaF9iYWNrKHNpZy5jb25uZWN0KHNlbGYsIGZ1bmMpKTsKICAgICAgICB9 CgoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgU2lnQ2xhc3MsIGNsYXNzIENsYXNzLCBjbGFzcyBQ YXJhbTEsIGNsYXNzIFBhcmFtMiwgY2xhc3MgUGFyYW0zLCBjbGFzcyBQYXJhbTQsIGNsYXNzIFBh cmFtNSwgY2xhc3MgVXNlckRhdGE+CiAgICAgICAgdm9pZCBjb25uZWN0KFNpZ0NsYXNzICZzaWcs IENsYXNzICpzZWxmLCB2b2lkKENsYXNzOjoqZnVuYykoUGFyYW0xLCBQYXJhbTIsIFBhcmFtMywg UGFyYW00LCBQYXJhbTUsIFVzZXJEYXRhIHVzZXJfZGF0YSksIFVzZXJEYXRhIHVzZXJfZGF0YSkK ICAgICAgICB7CiAgICAgICAgICAgICAgICBzbG90cy5wdXNoX2JhY2soc2lnLmNvbm5lY3Qoc2Vs ZiwgZnVuYywgdXNlcl9kYXRhKSk7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICBzdGQ6Omxp c3Q8Q0xfU2xvdD4gc2xvdHM7Cn07CiMgNDAgIi91c3IvaW5jbHVkZS9DbGFuTGliL3NpZ25hbHMu aCIgMiAzCiMgMjMgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2VzL3Jlc291cmNl LmgiIDIgMwoKCmNsYXNzIENMX1Jlc291cmNlT3B0aW9uczsKY2xhc3MgQ0xfUmVzb3VyY2VNYW5h Z2VyOwpjbGFzcyBDTF9SZXNvdXJjZURhdGE7CmNsYXNzIENMX0lucHV0U291cmNlOwpjbGFzcyBD TF9PdXRwdXRTb3VyY2U7CmNsYXNzIENMX0lucHV0U291cmNlUHJvdmlkZXI7CmNsYXNzIENMX091 dHB1dFNvdXJjZVByb3ZpZGVyOwpjbGFzcyBDTF9SZXNvdXJjZV9HZW5lcmljOwoKCmNsYXNzIENM X1Jlc291cmNlCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xfUmVzb3VyY2UoCiAgICAgICAgICAgICAg ICBjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSwKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry aW5nICZuYW1lLAogICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxvY2F0aW9uLAog ICAgICAgICAgICAgICAgY29uc3QgQ0xfUmVzb3VyY2VPcHRpb25zICZvcHRpb25zLAogICAgICAg ICAgICAgICAgY29uc3QgQ0xfUmVzb3VyY2VNYW5hZ2VyICZtYW5hZ2VyKTsKCgogICAgICAgIENM X1Jlc291cmNlKGNvbnN0IENMX1Jlc291cmNlICZjb3B5KTsKCgogICAgICAgIENMX1Jlc291cmNl KCk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9SZXNvdXJjZSgpOwoKCnB1YmxpYzoKCiAgICAgICAg Y29uc3Qgc3RkOjpzdHJpbmcgJmdldF90eXBlKCkgY29uc3Q7CgoKICAgICAgICBjb25zdCBzdGQ6 OnN0cmluZyAmZ2V0X25hbWUoKSBjb25zdDsKCgoKICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm Z2V0X2xvY2F0aW9uKCkgY29uc3Q7CgoKCiAgICAgICAgc3RkOjpzdHJpbmcgZ2V0X2Z1bGxfbG9j YXRpb24oKSBjb25zdDsKCgogICAgICAgIENMX1Jlc291cmNlT3B0aW9ucyAmZ2V0X29wdGlvbnMo KTsKCgogICAgICAgIENMX1Jlc291cmNlTWFuYWdlciBnZXRfbWFuYWdlcigpOwoKCiAgICAgICAg Q0xfUmVzb3VyY2VEYXRhICpnZXRfZGF0YShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CgoKICAg ICAgICBpbnQgZ2V0X3JlZmVyZW5jZV9jb3VudCgpIGNvbnN0OwoKCnB1YmxpYzoKCiAgICAgICAg Q0xfU2lnbmFsX3YwICZzaWdfbG9hZF9maWxlKCk7CgoKICAgICAgICBDTF9TaWduYWxfdjE8Q0xf SW5wdXRTb3VyY2VQcm92aWRlciAqPiAmc2lnX2xvYWRfZGF0YWZpbGUoKTsKCgogICAgICAgIENM X1NpZ25hbF92MTxDTF9PdXRwdXRTb3VyY2VQcm92aWRlciAqPiAmc2lnX3NhdmVfZGF0YWZpbGUo KTsKCgogICAgICAgIENMX1NpZ25hbF92MCAmc2lnX3VubG9hZCgpOwoKCnB1YmxpYzoKCiAgICAg ICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBDTF9SZXNvdXJjZSAmY29weSk7CgoKcHVibGljOgoK CiAgICAgICAgdm9pZCBhdHRhY2hfZGF0YShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgQ0xfUmVz b3VyY2VEYXRhICpkYXRhKTsKCgogICAgICAgIHZvaWQgZGV0YWNoX2RhdGEoQ0xfUmVzb3VyY2VE YXRhICpkYXRhKTsKCgogICAgICAgIHZvaWQgdW5sb2FkKCk7CgoKCiAgICAgICAgdm9pZCBsb2Fk KCk7CgoKICAgICAgICB2b2lkIGxvYWRfZmlsZSgpOwoKCiAgICAgICAgdm9pZCBsb2FkX2RhdGFm aWxlKENMX0lucHV0U291cmNlUHJvdmlkZXIgKmlucHV0X3Byb3ZpZGVyKTsKCgogICAgICAgIHZv aWQgc2F2ZV9kYXRhZmlsZShDTF9PdXRwdXRTb3VyY2VQcm92aWRlciAqb3V0cHV0X3Byb3ZpZGVy KTsKCgpwdWJsaWM6CgogICAgICAgIENMX1Jlc291cmNlKGNsYXNzIENMX1Jlc291cmNlX0dlbmVy aWMgKmltcGwpOwoKCiAgICAgICAgQ0xfUmVzb3VyY2VfR2VuZXJpYyAqaW1wbDsKfTsKIyAyMyAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxheS9EaXNwbGF5L3N1cmZhY2UuaCIgMiAzCgpjbGFz cyBDTF9EaXNwbGF5Q2FyZDsKY2xhc3MgQ0xfU3VyZmFjZVByb3ZpZGVyOwpjbGFzcyBDTF9UYXJn ZXQ7CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcjsKY2xhc3MgQ0xfU3VyZmFjZV9HZW5lcmljOwoj IDcxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L0Rpc3BsYXkvc3VyZmFjZS5oIiAzCmNs YXNzIENMX1N1cmZhY2UKewoKcHVibGljOgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqbG9h ZCgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9pZCwKICAgICAg ICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdlciAqbWFuYWdlcik7CgoKCgoKICAgICAgICBzdGF0 aWMgQ0xfU3VyZmFjZSAqY3JlYXRlKAogICAgICAgICAgICAgICAgQ0xfU3VyZmFjZVByb3ZpZGVy ICpwcm92aWRlciwKICAgICAgICAgICAgICAgIGJvb2wgZGVsZXRlX3Byb3ZpZGVyPWZhbHNlKTsK CgoKCgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqY3JlYXRlX2R5bmFtaWMoCiAgICAgICAg ICAgICAgICBDTF9TdXJmYWNlUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAgICAgYm9v bCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCnB1YmxpYzoKCgogICAgICAgIENMX1N1cmZhY2Uo KTsKCgoKCgoKCiAgICAgICAgQ0xfU3VyZmFjZSgKICAgICAgICAgICAgICAgIENMX1N1cmZhY2VQ cm92aWRlciAqcHJvdmlkZXIsCiAgICAgICAgICAgICAgICBib29sIGRlbGV0ZV9wcm92aWRlciA9 IGZhbHNlLAogICAgICAgICAgICAgICAgYm9vbCBkeW5hbWljID0gZmFsc2UpOwoKCiAgICAgICAg Q0xfU3VyZmFjZSgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9p ZCwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdlciAqbWFuYWdlcik7CgoKICAgICAg ICBDTF9TdXJmYWNlKGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFtZSwgYm9vbCBkeW5hbWljID0g ZmFsc2UpOwoKCiAgICAgICAgQ0xfU3VyZmFjZShjb25zdCBDTF9TdXJmYWNlICZzdXJmYWNlKTsK CgogICAgICAgIHZpcnR1YWwgfkNMX1N1cmZhY2UoKTsKCgpwdWJsaWM6CgoKICAgICAgICBvcGVy YXRvciBib29sICgpIGNvbnN0OwoKCiAgICAgICAgY29uc3QgQ0xfU3VyZmFjZSYgb3BlcmF0b3I9 KGNvbnN0IENMX1N1cmZhY2UmIHN1cmYpOwoKCiAgICAgICAgdm9pZCByZWxvYWQoKTsKCgoKICAg ICAgICBDTF9TdXJmYWNlUHJvdmlkZXIgKmdldF9wcm92aWRlcigpIGNvbnN0OwoKCgoKCgogICAg ICAgIHZvaWQgcHV0X3NjcmVlbigKICAgICAgICAgICAgICAgIGludCB4LAogICAgICAgICAgICAg ICAgaW50IHksCiAgICAgICAgICAgICAgICBpbnQgc3ByX25vPTAsCiAgICAgICAgICAgICAgICBD TF9EaXNwbGF5Q2FyZCAqY2FyZD1fX251bGwpOwojIDE2MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv RGlzcGxheS9EaXNwbGF5L3N1cmZhY2UuaCIgMwogICAgICAgIHZvaWQgcHV0X3NjcmVlbigKICAg ICAgICAgICAgICAgIGludCB4LAogICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAg ICBmbG9hdCBzY2FsZV94LAogICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVfeSwKICAgICAgICAg ICAgICAgIGludCBzcHJfbm89MCwKICAgICAgICAgICAgICAgIENMX0Rpc3BsYXlDYXJkICpjYXJk PV9fbnVsbCk7CiMgMTc3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L0Rpc3BsYXkvc3Vy ZmFjZS5oIiAzCiAgICAgICAgdm9pZCBwdXRfc2NyZWVuKAogICAgICAgICAgICAgICAgaW50IHgs CiAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgIGludCBzaXplX3gsCiAgICAg ICAgICAgICAgICBpbnQgc2l6ZV95LAogICAgICAgICAgICAgICAgaW50IHNwcl9ubz0wLAogICAg ICAgICAgICAgICAgQ0xfRGlzcGxheUNhcmQgKmNhcmQ9X19udWxsKTsKCgoKCgoKICAgICAgICB2 b2lkIHB1dF90YXJnZXQoCiAgICAgICAgICAgICAgICBpbnQgeCwKICAgICAgICAgICAgICAgIGlu dCB5LAogICAgICAgICAgICAgICAgaW50IHNwcl9ubywKICAgICAgICAgICAgICAgIENMX1Rhcmdl dCAqdGFyZ2V0KTsKCgogICAgICAgIHVuc2lnbmVkIGludCBnZXRfd2lkdGgoKSBjb25zdDsKCgog ICAgICAgIHVuc2lnbmVkIGludCBnZXRfaGVpZ2h0KCkgY29uc3Q7CgoKICAgICAgICB1bnNpZ25l ZCBpbnQgZ2V0X251bV9mcmFtZXMoKSBjb25zdDsKCgoKICAgICAgICBib29sIGlzX3ZpZGVvKENM X0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKSBjb25zdDsKCgogICAgICAgIGJvb2wgaXNfbG9h ZGVkKENMX0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKSBjb25zdDsKCgogICAgICAgIGJvb2wg Y29udmVydF92aWRlbyhDTF9EaXNwbGF5Q2FyZCAqY2FyZCA9IF9fbnVsbCk7CgoKICAgICAgICBi b29sIGNvbnZlcnRfc3lzdGVtKENMX0Rpc3BsYXlDYXJkICpjYXJkID0gX19udWxsKTsKCgogICAg ICAgIHZvaWQgZmx1c2goQ0xfRGlzcGxheUNhcmQgKmNhcmQgPSBfX251bGwpOwoKCnB1YmxpYzoK CiAgICAgICAgQ0xfU3VyZmFjZShjbGFzcyBDTF9TdXJmYWNlX0dlbmVyaWMgKmltcGwpOwoKCiAg ICAgICAgQ0xfU3VyZmFjZV9HZW5lcmljICppbXBsOwoKCiAgICAgICAgQ0xfUmVzb3VyY2UgcmVz b3VyY2U7Cn07CiMgMjcgIk1hcC5jcHAiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNw bGF5L0ZvbnQvZm9udC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvRGlzcGxheS9G b250L2ZvbnQuaCIgMwpjbGFzcyBDTF9UYXJnZXQ7CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcjsK Y2xhc3MgQ0xfRm9udF9EZXNjcmlwdGlvbjsKY2xhc3MgQ0xfRm9udF9HZW5lcmljOwpjbGFzcyBD TF9Gb250X0dlbmVyaWM7CiMgNDUgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvRm9udC9m b250LmgiIDMKY2xhc3MgQ0xfRm9udAp7CnB1YmxpYzoKCgoKICAgICAgICBlbnVtIGFsaWdubWVu dHMKICAgICAgICB7CgogICAgICAgICAgICAgICAgQUxJR05fTEVGVCwKCgogICAgICAgICAgICAg ICAgQUxJR05fQ0VOVEVSLAoKCiAgICAgICAgICAgICAgICBBTElHTl9SSUdIVAogICAgICAgIH07 CgoKcHVibGljOgoKCiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmNyZWF0ZShDTF9Gb250X0Rlc2Ny aXB0aW9uICpmb250X2Rlc2MpOwoKCgoKCiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmxvYWQoCiAg ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzb3VyY2VfaWQsCiAgICAgICAgICAg ICAgICBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlX21hbmFnZXIpOwoKCnB1YmxpYzoKCiAg ICAgICAgQ0xfRm9udChDTF9Gb250X0Rlc2NyaXB0aW9uICpwcm92aWRlcik7CgoKICAgICAgICBD TF9Gb250KGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNvdXJjZV9pZCwgQ0xfUmVzb3VyY2VNYW5hZ2Vy ICptYW5hZ2VyKTsKCgogICAgICAgIENMX0ZvbnQoY29uc3QgQ0xfRm9udCAmZm9udCk7CgoKICAg ICAgICB2aXJ0dWFsIH5DTF9Gb250KCk7CgoKcHVibGljOgoKICAgICAgICBDTF9Gb250ICZvcGVy YXRvciA9KGNvbnN0IENMX0ZvbnQgJmNvcHkpOwoKCgogICAgICAgIGludCBnZXRfaGVpZ2h0KCk7 CgoKCgogICAgICAgIGludCBnZXRfdGV4dF93aWR0aChjb25zdCBzdGQ6OnN0cmluZyAmdGV4dCk7 CgoKCgogICAgICAgIGludCBnZXRfY2hhcl93aWR0aChjb25zdCBjaGFyIGNoYXJhY3Rlcik7CgoK CgoKCiAgICAgICAgdm9pZCBwcmludF9sZWZ0KGludCB4LCBpbnQgeSwgY29uc3Qgc3RkOjpzdHJp bmcgJnRleHQsIGludCBuX2hlaWdodD0xKTsKCgoKCgoKCiAgICAgICAgdm9pZCBwcmludF9sZWZ0 KGludCB4LCBpbnQgeSwgZmxvYXQgc2NhbGVfeCwgZmxvYXQgc2NhbGVfeSwgY29uc3Qgc3RkOjpz dHJpbmcgJnRleHQpOwoKCgoKCgogICAgICAgIHZvaWQgcHJpbnRfY2VudGVyKGludCB4LCBpbnQg eSwgY29uc3Qgc3RkOjpzdHJpbmcgJnRleHQsIGludCBuX2hlaWdodD0xKTsKCgoKCgoKICAgICAg ICB2b2lkIHByaW50X3JpZ2h0KGludCB4LCBpbnQgeSwgY29uc3Qgc3RkOjpzdHJpbmcgJnRleHQs IGludCBuX2hlaWdodD0xKTsKIyAxNDggIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvRm9u dC9mb250LmgiIDMKICAgICAgICB2b2lkIHB1dF90YXJnZXQoaW50IHgsIGludCB5LCBjb25zdCBz dGQ6OnN0cmluZyAmdGV4dCwgQ0xfVGFyZ2V0ICp0YXJnZXQsIGludCBhbGlnbm1lbnQgPSBBTElH Tl9MRUZUKTsKCgoKCgogICAgICAgIGludCBjaGFuZ2Vfc2l6ZShpbnQgc2l6ZSk7CgoKCgoKCgog ICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VfY29sb3VyKHVuc2lnbmVkIGNoYXIgciwgdW5zaWdu ZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSk7CgoKcHVibGljOgoK ICAgICAgICBDTF9Gb250KGNsYXNzIENMX0ZvbnRfR2VuZXJpYyAqaW1wbCk7CgoKICAgICAgICBD TF9Gb250X0dlbmVyaWMgKmltcGw7CgoKICAgICAgICBDTF9SZXNvdXJjZSByZXNvdXJjZTsKfTsK IyAyOCAiTWFwLmNwcCIgMgoKIyAxICJDbGFuQm9tYmVyLmgiIDEKIyAyNCAiQ2xhbkJvbWJlci5o IgojIDEgIlJlc291cmNlcy5oIiAxCiMgMjIgIlJlc291cmNlcy5oIgpjbGFzcyBDTF9Gb250Owpj bGFzcyBDTF9TdXJmYWNlOwpjbGFzcyBDTF9Tb3VuZEJ1ZmZlcjsKY2xhc3MgQ0xfU291bmRCdWZm ZXJfU2Vzc2lvbjsKY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyOwoKCgoKCmNsYXNzIFJlc291cmNl cwp7CnB1YmxpYzoKICAgICAgICBSZXNvdXJjZXMoKTsKICAgICAgICB+UmVzb3VyY2VzKCk7Cgog ICAgICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKICAgICAgICBzdGF0aWMgdm9pZCBsb2FkX2FsbCgp OwoKICAgICAgICBzdGF0aWMgQ0xfRm9udCogRm9udF9iaWcoKTsKICAgICAgICBzdGF0aWMgQ0xf Rm9udCogRm9udF9zbWFsbCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogVGl0bGVzY3Jl ZW4oKTsKCiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEludHJvX2ZsX2xvZ28oKTsKICAgICAg ICBzdGF0aWMgQ0xfU291bmRCdWZmZXIqIEludHJvX3R5cGV3cml0ZXIoKTsKICAgICAgICBzdGF0 aWMgQ0xfU291bmRCdWZmZXIqIEludHJvX3dpbmxldmVsKCk7CgogICAgICAgIHN0YXRpYyBDTF9T dXJmYWNlKiBQbGF5ZXJzZXR1cF90ZWFtcygpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBQ bGF5ZXJzZXR1cF9jb250cm9scygpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBQbGF5ZXJz ZXR1cF90ZWFtbGFtcHMoKTsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogUGxheWVyc2V0dXBf YmFja2dyb3VuZCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogTWFwc2VsZWN0b3JfYmFj a2dyb3VuZCgpOwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBNYXBzZWxlY3Rvcl9ub3RfYXZh aWxhYmxlKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBHYW1lc3RhdHVzX3Rvb2xzKCk7 CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBHYW1lc3RhdHVzX2tsYXRzY2goKTsKICAg ICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogR2FtZXN0YXR1c19iYWNrZ3JvdW5kKCk7CgogICAgICAg IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogQ3JlZGl0c19mb3J3YXJkKCk7CiAgICAgICAgc3RhdGlj IENMX1NvdW5kQnVmZmVyKiBDcmVkaXRzX3Jld2luZCgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3Vu ZEJ1ZmZlciogQ3JlZGl0c19zdG9wKCk7CgoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogQ3Jl ZGl0c19ob3JzdF9ldmlsKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBCb21iZXJzKGlu dCBucik7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBFeHRyYXNfZXh0cmFzKCk7CiAgICAg ICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBFeHRyYXNfd293KCk7CiAgICAgICAgc3RhdGljIENM X1NvdW5kQnVmZmVyKiBFeHRyYXNfam9pbnQoKTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZm ZXIqIEV4dHJhc19ob3JueSgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogRXh0cmFz X3NjaG5pZWYoKTsKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBNZW51X3dob29zaCgp OwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogTWVudV9icmVhaygpOwogICAgICAgIHN0 YXRpYyBDTF9Tb3VuZEJ1ZmZlciogTWVudV9jbGVhcigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3Vu ZEJ1ZmZlciogTWVudV9iYWNrKCk7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBPYnNlcnZl cl9vYnNlcnZlcigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogT2JzZXJ2ZXJfaHVy cnlfdXAoKTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIqIE9ic2VydmVyX3RpbWVfb3Zl cigpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogT2JzZXJ2ZXJfY3J1bmNoKCk7Cgog ICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciogR2FtZV9kaWUoKTsKICAgICAgICBzdGF0aWMg Q0xfU291bmRCdWZmZXIqIEdhbWVfZXhwbG9kZSgpOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1 ZmZlciogR2FtZV9wdXRib21iKCk7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBHYW1l X2RlZXBmYWxsKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEdhbWVfbWFwdGlsZXMoKTsK ICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogR2FtZV9tYXB0aWxlX2FkZG9ucygpOwogICAgICAg IHN0YXRpYyBDTF9TdXJmYWNlKiBHYW1lX2JvbWJzKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZh Y2UqIEdhbWVfZXhwbG9zaW9uKCk7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UqIEdhbWVfY2Jf bG9nb19zbWFsbCgpOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSogTWFwRWRpdG9yX2JhY2tn cm91bmQoKTsKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyKiBDb3Jwc2VfZXhwbG9kZSgp OwogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlKiBDb3Jwc2VfcGFydCgpOwoKICAgICAgICBzdGF0 aWMgQ0xfU291bmRCdWZmZXIqIFNwbGFzaChpbnQgbnIpOwoKICAgICAgICBzdGF0aWMgQ0xfUmVz b3VyY2VNYW5hZ2VyICpyZXM7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmZu dF9iaWc7CiAgICAgICAgc3RhdGljIENMX0ZvbnQgKmZudF9zbWFsbDsKCiAgICAgICAgc3RhdGlj IENMX1N1cmZhY2UgKnN1cl90aXRsZXNjcmVlbjsKCiAgICAgICAgc3RhdGljIENMX1N1cmZhY2Ug KnN1cl9mbF9sb2dvOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X3R5cGV3cml0 ZXI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfd2lubGV2ZWw7CgogICAgICAg IHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfcHNfdGVhbXM7CiAgICAgICAgc3RhdGljIENMX1N1cmZh Y2UgKnN1cl9wc19jb250cm9sczsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX3BzX3Rl YW1sYW1wczsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX3BzX2JhY2tncm91bmQ7Cgog ICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfbHNfYmFja2dyb3VuZDsKICAgICAgICBzdGF0 aWMgQ0xfU3VyZmFjZSAqc3VyX2xzX25vdF9hdmFpbGFibGU7CgogICAgICAgIHN0YXRpYyBDTF9T dXJmYWNlICpzdXJfZ3NfdG9vbHM7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhf a2xhdHNjaDsKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX2dzX2JhY2tncm91bmQ7Cgog ICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2ZvcndhcmQ7CiAgICAgICAgc3RhdGlj IENMX1NvdW5kQnVmZmVyICpzZnhfcmV3aW5kOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZl ciAqc2Z4X3N0b3A7CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJfaG9yc3Q7CiAgICAg ICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9ob3JzdF9ldmlsOwoKICAgICAgICBzdGF0aWMgQ0xf U3VyZmFjZSAqc3VyX2JvbWJlcnNbOF07CgogICAgICAgIHN0YXRpYyBDTF9TdXJmYWNlICpzdXJf ZXh0cmFzOwogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X3dvdzsKICAgICAgICBz dGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9qb2ludDsKICAgICAgICBzdGF0aWMgQ0xfU291bmRC dWZmZXIgKnNmeF9ob3JueTsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9zY2hu aWVmOwoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF93aG9vc2g7CiAgICAgICAg c3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfYnJlYWs7CiAgICAgICAgc3RhdGljIENMX1NvdW5k QnVmZmVyICpzZnhfY2xlYXI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpzZnhfbWVu dV9iYWNrOwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX29ic2VydmVyOwogICAgICAg IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2h1cnJ5X3VwOwogICAgICAgIHN0YXRpYyBDTF9T b3VuZEJ1ZmZlciAqc2Z4X3RpbWVfb3ZlcjsKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIg KnNmeF9jcnVuY2g7CgogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2RpZTsKICAg ICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKnNmeF9leHBsb2RlOwogICAgICAgIHN0YXRpYyBD TF9Tb3VuZEJ1ZmZlciAqc2Z4X3B1dGJvbWI7CiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVy ICpzZnhfZGVlcGZhbGw7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9tYXB0aWxlczsK ICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX21hcHRpbGVfYWRkb25zOwogICAgICAgIHN0 YXRpYyBDTF9TdXJmYWNlICpzdXJfYm9tYnM7CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1 cl9leHBsb3Npb247CiAgICAgICAgc3RhdGljIENMX1N1cmZhY2UgKnN1cl9jYl9sb2dvX3NtYWxs OwoKICAgICAgICBzdGF0aWMgQ0xfU3VyZmFjZSAqc3VyX21lX2JhY2tncm91bmQ7CgogICAgICAg IHN0YXRpYyBDTF9Tb3VuZEJ1ZmZlciAqc2Z4X2NvcnBzZV9leHBsb2RlOwogICAgICAgIHN0YXRp YyBDTF9TdXJmYWNlICpzdXJfY29ycHNlX3BhcnQ7CgogICAgICAgIHN0YXRpYyBDTF9Tb3VuZEJ1 ZmZlciAqc2Z4X3NwbGFzaFsyXTsKfTsKIyAyNSAiQ2xhbkJvbWJlci5oIiAyCgpjbGFzcyBNZW51 OwpjbGFzcyBEZWJ1ZzsKY2xhc3MgT2JzZXJ2ZXI7CmNsYXNzIE1hcDsKY2xhc3MgQm9tYjsKY2xh c3MgQm9tYmVyOwpjbGFzcyBHYW1lT2JqZWN0OwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D b3JlL1N5c3RlbS9zZXR1cGNvcmUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Nv cmUvU3lzdGVtL3NldHVwY29yZS5oIiAzCmNsYXNzIENMX1NldHVwQ29yZQp7CnB1YmxpYzoKCgoK CgoKCiAgICAgICAgc3RhdGljIHZvaWQgaW5pdChib29sIHJlZ2lzdGVyX3Jlc291cmNlc19vbmx5 ID0gZmFsc2UpOwoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBkZWluaXQoKTsKCgoKCgoKCn07CiMg MzUgIkNsYW5Cb21iZXIuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Rpc3BsYXkvc2V0 dXBkaXNwbGF5LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9EaXNwbGF5L3NldHVw ZGlzcGxheS5oIiAzCmNsYXNzIENMX1NldHVwRGlzcGxheQp7CnB1YmxpYzoKCgogICAgICAgIHN0 YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25seSA9IGZhbHNlKTsKCgog ICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwojIDM2ICJDbGFuQm9tYmVyLmgiIDIKIyAx ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zZXR1cHNvdW5kLmgiIDEgMwojIDIzICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zZXR1cHNvdW5kLmgiIDMKY2xhc3MgQ0xfU2V0dXBTb3Vu ZAp7CnB1YmxpYzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNv dXJjZXNfb25seSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwoK CmNsYXNzIENMX1NldHVwQ0RBdWRpbwp7CnB1YmxpYzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGlu aXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25seSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRp YyB2b2lkIGRlaW5pdCgpOwp9OwojIDM3ICJDbGFuQm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1 ZGUvQ2xhbkxpYi9BcHBsaWNhdGlvbi9jbGFuYXBwLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv Q2xhbkxpYi9BcHBsaWNhdGlvbi9jbGFuYXBwLmgiIDMKY2xhc3MgQ0xfQ2xhbkFwcGxpY2F0aW9u CnsKcHVibGljOgoKCiAgICAgICAgQ0xfQ2xhbkFwcGxpY2F0aW9uKCk7CgoKICAgICAgICB2aXJ0 dWFsIH5DTF9DbGFuQXBwbGljYXRpb24oKTsKIyA0MyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQXBw bGljYXRpb24vY2xhbmFwcC5oIiAzCiAgICAgICAgdmlydHVhbCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhcioqIGFyZ3YpPTA7CgoKCgogICAgICAgIHZpcnR1YWwgY2hhciogZ2V0X3RpdGxlKCk9MDsK CgoKCiAgICAgICAgc3RhdGljIENMX0NsYW5BcHBsaWNhdGlvbiAqYXBwOwp9OwojIDM4ICJDbGFu Qm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbGFuc3Ry aW5nLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9jbGFuc3Ry aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJj ZXR5cGVfc3RyaW5nLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291 cmNlcy9yZXNvdXJjZXR5cGVfc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D b3JlL1Jlc291cmNlcy9yZXNvdXJjZWRhdGEuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9DbGFu TGliL0NvcmUvUmVzb3VyY2VzL3Jlc291cmNlZGF0YS5oIiAzCmNsYXNzIENMX1Jlc291cmNlRGF0 YV9HZW5lcmljOwoKCmNsYXNzIENMX1Jlc291cmNlRGF0YQp7CgpwdWJsaWM6CgogICAgICAgIENM X1Jlc291cmNlRGF0YShDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCiAgICAgICAgdmlydHVhbCB+ Q0xfUmVzb3VyY2VEYXRhKCk7CgoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZSBnZXRfcmVz b3VyY2UoKTsKCgpwcml2YXRlOgoKICAgICAgICBDTF9SZXNvdXJjZURhdGFfR2VuZXJpYyAqaW1w bDsKfTsKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2V0 eXBlX3N0cmluZy5oIiAyIDMKCgoKY2xhc3MgQ0xfUmVzb3VyY2VEYXRhX1N0cmluZyA6IHB1Ymxp YyBDTF9SZXNvdXJjZURhdGEKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZURhdGFfU3Ry aW5nKGNsYXNzIENMX1Jlc291cmNlICZyZXNvdXJjZSk7CgoKcHVibGljOgoKICAgICAgICBzdGQ6 OnN0cmluZyB2YWx1ZTsKfTsKIyA2MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0v Y2xhbnN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJj ZXMvcmVzb3VyY2VfbWFuYWdlci5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9SZXNvdXJjZXMvcmVzb3VyY2VfbWFuYWdlci5oIiAzCmNsYXNzIENMX1Jlc291cmNlOwpjbGFz cyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyOwpjbGFzcyBDTF9SZXNvdXJjZU1hbmFnZXJfRmlsZTsK CmNsYXNzIENMX1Jlc291cmNlTWFuYWdlcgojIDUxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl L1Jlc291cmNlcy9yZXNvdXJjZV9tYW5hZ2VyLmgiIDMKewoKcHVibGljOgoKCgoKICAgICAgICBD TF9SZXNvdXJjZU1hbmFnZXIoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmY29u ZmlnX2ZpbGUsCiAgICAgICAgICAgICAgICBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRl ciA9IF9fbnVsbCwKICAgICAgICAgICAgICAgIGJvb2wgcmVhZF9kaXJlY3RseV9mcm9tX3NvdXJj ZT1mYWxzZSwKICAgICAgICAgICAgICAgIGJvb2wgZGVsZXRlX2lucHV0c291cmNlX3Byb3ZpZGVy PWZhbHNlKTsKCgoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKAogICAgICAgICAgICAgICAg Y29uc3Qgc3RkOjpzdHJpbmcgJmNvbmZpZ19maWxlLAogICAgICAgICAgICAgICAgY29uc3QgYm9v bCBpc19kYXRhZmlsZSApOwoKCgoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKAogICAgICAg ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmNvbmZpZ19maWxlLAogICAgICAgICAgICAgICAg Y29uc3QgYm9vbCBpc19kYXRhZmlsZSwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFuYWdl ciAmYWRkaXRpb25hbF9yZXNvdXJjZXMpOwoKCiAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyKGNv bnN0IENMX1Jlc291cmNlTWFuYWdlciAmY29weSk7CgoKICAgICAgICBDTF9SZXNvdXJjZU1hbmFn ZXIoKTsKCgogICAgICAgIH5DTF9SZXNvdXJjZU1hbmFnZXIoKTsKCgpwdWJsaWM6CgogICAgICAg IENMX1Jlc291cmNlICZnZXRfcmVzb3VyY2UoY29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCk7CgoK CgogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gKmdldF9hbGxfcmVzb3VyY2VzKCk7CgoK CgogICAgICAgIHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gKmdldF9yZXNvdXJjZXNfb2ZfdHlwZShj b25zdCBzdGQ6OnN0cmluZyAmdHlwZV9pZCk7CgoKCgogICAgICAgIENMX0lucHV0U291cmNlUHJv dmlkZXIgKmdldF9yZXNvdXJjZV9wcm92aWRlcigpIGNvbnN0OwoKCiAgICAgICAgYm9vbCBpc19m cm9tX3NvdXJjZSgpOwoKCnB1YmxpYzoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBD TF9SZXNvdXJjZU1hbmFnZXIgJmNvcHkpOwoKCiAgICAgICAgdm9pZCBhZGRfcmVzb3VyY2VzKGNv bnN0IENMX1Jlc291cmNlTWFuYWdlciAmYWRkaXRpb25hbF9yZXNvdXJjZXMpOwoKCiAgICAgICAg dm9pZCByZW1vdmVfcmVzb3VyY2VzKGNvbnN0IENMX1Jlc291cmNlTWFuYWdlciAmYWRkaXRpb25h bF9yZXNvdXJjZXMpOwoKCiAgICAgICAgdm9pZCBsb2FkX2FsbCgpOwoKCiAgICAgICAgdm9pZCB1 bmxvYWRfYWxsKCk7CgoKICAgICAgICB2b2lkIGxvYWRfc2VjdGlvbihjb25zdCBzdGQ6OnN0cmlu ZyAmc2VjdGlvbl9uYW1lKTsKCgogICAgICAgIHZvaWQgdW5sb2FkX3NlY3Rpb24oY29uc3Qgc3Rk OjpzdHJpbmcgJnNlY3Rpb25fbmFtZSk7CgoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZU1h bmFnZXIoY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyX0ZpbGUgKmltcGwpOwoKCiAgICAgICAgQ0xf UmVzb3VyY2VNYW5hZ2VyX0ZpbGUgKmltcGw7Cn07CiMgNjIgIi91c3IvaW5jbHVkZS9DbGFuTGli L0NvcmUvU3lzdGVtL2NsYW5zdHJpbmcuaCIgMiAzCgoKCgoKCmNsYXNzIENMX1N0cmluZwp7CnB1 YmxpYzoKCgogICAgICAgIENMX1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9S ZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAgICBDTF9S ZXNvdXJjZSByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAg ICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlRGF0YV9TdHJpbmcg KmRhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAoQ0xfUmVzb3VyY2VEYXRhX1N0cmluZyAq KSByZXMuZ2V0X2RhdGEoInN0cmluZyIpOwogICAgICAgICAgICAgICAgc3RyID0gZGF0YS0+dmFs dWU7CiAgICAgICAgICAgICAgICByZXMudW5sb2FkKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xf U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNfaWQsIENMX1Jlc291cmNlTWFuYWdlciAqcmVz b3VyY2VzLCBjb25zdCBzdGQ6OnN0cmluZyAmZGVmX3ZhbHVlKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDTF9S ZXNvdXJjZSByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAg ICAgICAgICAgICAgICByZXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICBDTF9SZXNv dXJjZURhdGFfU3RyaW5nICpkYXRhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Q0xfUmVzb3VyY2VEYXRhX1N0cmluZyAqKSByZXMuZ2V0X2RhdGEoInN0cmluZyIpOwogICAgICAg ICAgICAgICAgICAgICAgICBzdHIgPSBkYXRhLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAg ICAgcmVzLnVubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2gg KENMX0Vycm9yIGVycikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg c3RyID0gZGVmX3ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIENM X1N0cmluZygpCiAgICAgICAgewogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhjb25zdCBz dGQ6OnN0cmluZyAmX3N0cikKICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5zdHIgPSBh cHBlbmRfc3RyaW5nKF9fbnVsbCwgX3N0ci5jX3N0cigpKTsKICAgICAgICB9CgoKICAgICAgICBD TF9TdHJpbmcoY29uc3QgaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1p bnRfdG9fc3RyaW5nKF9fbnVsbCwgdmFsdWUpOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmlu Zyhjb25zdCBmbG9hdCBmbG9hdF92YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9 ZmxvYXRfdG9fc3RyaW5nKF9fbnVsbCwgZmxvYXRfdmFsdWUpOwogICAgICAgIH0KCgogICAgICAg IENMX1N0cmluZyhjb25zdCBjaGFyICp0ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0 cj10ZXh0OwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhjb25zdCBDTF9TdHJpbmcgJmNs b25lKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1jbG9uZS5zdHI7CiAgICAgICAgfQoK CiAgICAgICAgQ0xfU3RyaW5nKGNvbnN0IENMX1N0cmluZyAmdGV4dDEsIGNvbnN0IENMX1N0cmlu ZyAmdGV4dDIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RyPXRleHQxLnN0cjsKICAgICAg ICAgICAgICAgIHN0cis9dGV4dDIuc3RyOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyhj b25zdCBjaGFyICp0ZXh0MSwgY29uc3QgY2hhciAqdGV4dDIpCiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RyPXRleHQxOwogICAgICAgICAgICAgICAgc3RyKz10ZXh0MjsKICAgICAgICB9CgoK ICAgICAgICBDTF9TdHJpbmcoY29uc3QgY2hhciAqdGV4dCwgaW50IGxlbmd0aCkKICAgICAgICB7 CiAgICAgICAgICAgICAgICBzdHIuYXBwZW5kKHRleHQsIGxlbmd0aCk7CiAgICAgICAgfQoKCgog ICAgICAgIENMX1N0cmluZyBvcGVyYXRvcisgKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5n KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TdHJpbmcoc3RyLCBvdGhlcl9z dHJpbmcuc3RyKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgb3BlcmF0b3IrIChjb25z dCBjaGFyICpvdGhlcl90ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9T dHJpbmcoc3RyLCBvdGhlcl90ZXh0KTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgb3Bl cmF0b3IrIChjb25zdCBpbnQgbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biBDTF9TdHJpbmcoaW50X3RvX3N0cmluZyhzdHIuY19zdHIoKSwgbnVtYmVyKSk7CiAgICAgICAg fQoKCiAgICAgICAgQ0xfU3RyaW5nIG9wZXJhdG9yKyAoY29uc3QgZmxvYXQgbnVtYmVyKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9TdHJpbmcoZmxvYXRfdG9fc3RyaW5nKHN0 ci5jX3N0cigpLCBudW1iZXIpKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJh dG9yKz0gKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5nKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIHN0ciArPSBvdGhlcl9zdHJpbmcuc3RyOwogICAgICAgICAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3IrPSAoY29uc3QgY2hh ciAqb3RoZXJfdGV4dCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0gb3RoZXJfdGV4 dDsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKICAgICAgICBDTF9T dHJpbmcgJm9wZXJhdG9yKz0gKGNvbnN0IGludCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RyID0gaW50X3RvX3N0cmluZyhzdHIuY19zdHIoKSwgbnVtYmVyKTsKICAgICAgICAg ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJh dG9yKz0gKGNvbnN0IGZsb2F0IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIg PSBmbG9hdF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcis9IChk b3VibGUgZmxvYXRfbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBvcGVy YXRvcis9ICgoZmxvYXQpIGZsb2F0X251bWJlcik7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3Ry aW5nICZvcGVyYXRvcj0gKGNvbnN0IENMX1N0cmluZyAmb3RoZXJfc3RyaW5nKQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHN0cj1vdGhlcl9zdHJpbmcuc3RyOwogICAgICAgICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I9IChjb25z dCBjaGFyICpvdGhlcl90ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ciA9IG90aGVy X3RleHQ7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAg Q0xfU3RyaW5nICZvcGVyYXRvcj0gKGNvbnN0IGludCBudW1iZXIpCiAgICAgICAgewogICAgICAg ICAgICAgICAgc3RyPWludF90b19zdHJpbmcoX19udWxsLCBudW1iZXIpOwogICAgICAgICAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I9 IChjb25zdCBmbG9hdCBmbG9hdF9udW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Ry PWZsb2F0X3RvX3N0cmluZyhfX251bGwsIGZsb2F0X251bWJlcik7CiAgICAgICAgICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcj0gKGRv dWJsZSBmbG9hdF9udW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh dG9yPSAoKGZsb2F0KSBmbG9hdF9udW1iZXIpOwogICAgICAgIH0KCgogICAgICAgIGJvb2wgb3Bl cmF0b3I9PSAoY29uc3QgQ0xfU3RyaW5nICZvdGhlcl9zdHJpbmcpCiAgICAgICAgewogICAgICAg ICAgICAgICAgcmV0dXJuIHN0ciA9PSBvdGhlcl9zdHJpbmcuc3RyOwogICAgICAgIH0KCgogICAg ICAgIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgY2hhciAqb3RoZXJfc3RyaW5nKQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHJldHVybiBzdHIgPT0gb3RoZXJfc3RyaW5nOwogICAgICAgIH0KCgog ICAgICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgQ0xfU3RyaW5nICZvdGhlcl9zdHJpbmcpCiAg ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyX3N0cmluZyk7 CiAgICAgICAgfQoKCiAgICAgICAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBjaGFyICpvdGhlcl90 ZXh0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShvdGhlcl90 ZXh0KTsKICAgICAgICB9CgoKICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKiAoKQogICAgICAg IHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHIuY19zdHIoKTsKICAgICAgICB9CgoKICAgICAg ICBvcGVyYXRvciBzdGQ6OnN0cmluZyAoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biBzdHI7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcjw8IChjb25zdCBD TF9TdHJpbmcgJm90aGVyX3N0cmluZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0g b3RoZXJfc3RyaW5nLnN0cjsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9 CgoKICAgICAgICBDTF9TdHJpbmcgJm9wZXJhdG9yPDwgKGNvbnN0IGNoYXIgKm90aGVyX3N0cmlu ZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHIgKz0gb3RoZXJfc3RyaW5nOwogICAgICAg ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3Bl cmF0b3I8PCAoY29uc3QgdW5zaWduZWQgY2hhciAqb3RoZXJfc3RyaW5nKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIHN0ciArPSAoY29uc3QgY2hhciAqKSBvdGhlcl9zdHJpbmc7CiAgICAgICAg ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVy YXRvcjw8IChjb25zdCB1bnNpZ25lZCBzaG9ydCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RyPWludF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRv cjw8IChjb25zdCBzaG9ydCBudW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3RyPWlu dF90b19zdHJpbmcoc3RyLmNfc3RyKCksIG51bWJlcik7CiAgICAgICAgICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfU3RyaW5nICZvcGVyYXRvcjw8IChjb25zdCB1 bnNpZ25lZCBpbnQgbnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cj1pbnRfdG9f c3RyaW5nKHN0ci5jX3N0cigpLCBudW1iZXIpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I8PCAoY29uc3QgaW50IG51 bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9aW50X3RvX3N0cmluZyhzdHIuY19z dHIoKSwgbnVtYmVyKTsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoK ICAgICAgICBDTF9TdHJpbmcgJm9wZXJhdG9yPDwgKGNvbnN0IGZsb2F0IGZsb2F0X251bWJlcikK ICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHI9ZmxvYXRfdG9fc3RyaW5nKHN0ci5jX3N0cigp LCBmbG9hdF9udW1iZXIpOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0K CgogICAgICAgIENMX1N0cmluZyAmb3BlcmF0b3I8PCAoZG91YmxlIGZsb2F0X251bWJlcikKICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3I8PCAoKGZsb2F0KSBmbG9hdF9u dW1iZXIpOwogICAgICAgIH0KCgoKICAgICAgICBjaGFyICpnZXRfc3RyaW5nKCkKICAgICAgICB7 CiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXIgKikgc3RyLmNfc3RyKCk7CiAgICAgICAgfQoK CiAgICAgICAgaW50IGdldF9sZW5ndGgoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biAoaW50KXN0ci5sZW5ndGgoKTsKICAgICAgICB9CgoKICAgICAgICBpbnQgZ2V0X2FzX2ludCgp CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGF0b2koc3RyLmNfc3RyKCkpOwogICAg ICAgIH0KCgogICAgICAgIGZsb2F0IGdldF9hc19mbG9hdCgpCiAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuIChmbG9hdClhdG9mKHN0ci5jX3N0cigpKTsKICAgICAgICB9CgoKICAgICAg ICBDTF9TdHJpbmcgZ2V0X3dvcmQoaW50IHdvcmRfbm8pCiAgICAgICAgewogICAgICAgICAgICAg ICAgaW50IGxlbj1nZXRfbGVuZ3RoKCk7CiAgICAgICAgICAgICAgICBpbnQgY3VyX3dvcmQ9LTE7 CiAgICAgICAgICAgICAgICBpbnQgd29yZF9zdGFydD0wOwoKICAgICAgICAgICAgICAgIGludCBj dXJfc3RhdGU9MDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cl9zdGF0ZSA9PSAw KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHN0cltpXSE9MzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXT09MzQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfc3RhcnQgPSBpKzE7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9zdGF0ZSA9IDI7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdvcmRfc3RhcnQgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdXJfc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3dvcmQr KzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VyX3N0YXRlID09IDEpCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoc3RyW2ldPT0zMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX3dvcmQgPT0gd29yZF9ubykg cmV0dXJuIG1pZCh3b3JkX3N0YXJ0LCBpLXdvcmRfc3RhcnQpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3VyX3N0YXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAoY3VyX3N0YXRlID09IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyW2ldPT0zNCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY3VyX3dvcmQgPT0gd29yZF9ubykgcmV0dXJuIG1pZCh3b3JkX3N0YXJ0LCBp LXdvcmRfc3RhcnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy X3N0YXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY3Vy X3dvcmQgPT0gd29yZF9ubykgcmV0dXJuIG1pZCh3b3JkX3N0YXJ0KTsKCiAgICAgICAgICAgICAg ICByZXR1cm4gQ0xfU3RyaW5nKCIiKTsKICAgICAgICB9CgoKICAgICAgICBDTF9TdHJpbmcgbWlk KGludCBzdGFydCwgaW50IGxlbj0tMSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAobGVu PT0tMSkgbGVuPWdldF9sZW5ndGgoKS1zdGFydDsKICAgICAgICAgICAgICAgIHJldHVybiBDTF9T dHJpbmcoc3RkOjpzdHJpbmcoc3RyLCBzdGFydCwgbGVuKSk7CiAgICAgICAgfQoKCiAgICAgICAg Q0xfU3RyaW5nIGxlZnQoaW50IGxlbikKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgc3Ry bGVuZ3RoID0gZ2V0X2xlbmd0aCgpOwogICAgICAgICAgICAgICAgaWYgKHN0cmxlbmd0aCA8IGxl bikgcmV0dXJuICp0aGlzOwogICAgICAgICAgICAgICAgcmV0dXJuIENMX1N0cmluZyhzdGQ6OnN0 cmluZyhzdHIsIDAsIGxlbikpOwogICAgICAgIH0KCgogICAgICAgIENMX1N0cmluZyByaWdodChp bnQgbGVuKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBzdHJsZW5ndGggPSBnZXRfbGVu Z3RoKCk7CiAgICAgICAgICAgICAgICBpZiAoc3RybGVuZ3RoIDwgbGVuKSByZXR1cm4gKnRoaXM7 CiAgICAgICAgICAgICAgICByZXR1cm4gQ0xfU3RyaW5nKHN0ZDo6c3RyaW5nKHN0ciwgc3RybGVu Z3RoLWxlbiwgbGVuKSk7CiAgICAgICAgfQoKCiAgICAgICAgaW50IGZpbmQoaW50IGNoYXJhY3Rl ciwgaW50IHN0YXJ0X3Bvcz0wKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnB0ciA9IHN0ci5jX3N0cigpOwogICAgICAgICAgICAgICAgY2hhciAqcG9zID0gKGNoYXIqKXN0 cmNocihwdHIrc3RhcnRfcG9zLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA9 PSBfX251bGwpIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIHJldHVybiBpbnQocG9zLXB0cik7 CiAgICAgICAgfQoKCiAgICAgICAgaW50IGZpbmRfbGFzdChjaGFyIGNoYXJhY3RlcikgY29uc3QK ICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0ZW1wID0gc3RyLmNfc3RyKCk7 CiAgICAgICAgICAgICAgICBpbnQgc3RhcnRfcG9zID0gKGludClzdHIubGVuZ3RoKCk7CiAgICAg ICAgICAgICAgICBmb3IoaW50IGkgPSBzdGFydF9wb3M7IGk7IGktLSkKICAgICAgICAgICAgICAg ICAgICAgICAgaWYoKih0ZW1wK2kpID09IGNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9 CgoKICAgICAgICBib29sIGNhc2VfY29tcGFyZShjb25zdCBjaGFyICpvdGhlcikKICAgICAgICB7 CiAgICAgICAgICAgICAgICBpZiAob3RoZXI9PV9fbnVsbCkgcmV0dXJuIGZhbHNlOwojIDQ3NyAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vY2xhbnN0cmluZy5oIiAzCiAgICAgICAg ICAgICAgICBpZiAoc3RyY2FzZWNtcChzdHIuY19zdHIoKSwgb3RoZXIpPT0wKSByZXR1cm4gdHJ1 ZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKCgogICAgICAgIHZv aWQgdG9fbG93ZXIoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBsZW4gPSAoaW50KXN0 ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gdG9sb3dlcihz dHJbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAgIHZvaWQgdG9fdXBw ZXIoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBsZW4gPSAoaW50KXN0ci5sZW5ndGgo KTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxsZW47IGkrKykKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gdG91cHBlcihzdHJbaV0pOwog ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcg c3RyOwoKICAgICAgICBzdGQ6OnN0cmluZyBpbnRfdG9fc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZp eCwgY29uc3QgaW50IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyIGJ1Zlsy MF07CiAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVkIiwgbnVtYmVyKTsKCiAgICAgICAg ICAgICAgICBpbnQgbGVuPTA7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4ICE9IF9fbnVsbCkg bGVuID0gKGludClzdHJsZW4ocHJlZml4KTsKCiAgICAgICAgICAgICAgICBjaGFyICp0ZXh0ID0g bmV3IGNoYXJbbGVuICsgc3RybGVuKGJ1ZikgKyAxXTsKICAgICAgICAgICAgICAgIGlmIChwcmVm aXggIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkodGV4dCwgcHJlZml4KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KHRleHQs IGJ1Zik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0ZXh0LCBidWYpOwogICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlcyh0ZXh0KTsKICAgICAg ICAgICAgICAgIGRlbGV0ZVtdIHRleHQ7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwogICAg ICAgIH0KCiAgICAgICAgc3RkOjpzdHJpbmcgZmxvYXRfdG9fc3RyaW5nKGNvbnN0IGNoYXIgKnBy ZWZpeCwgY29uc3QgZmxvYXQgX2Zsb2F0X251bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAg ICBjaGFyIGJ1ZlsyNV07CiAgICAgICAgICAgICAgICBidWZbMF0gPSAwOwoKICAgICAgICAgICAg ICAgIGludCBkZWNpbWFsLCBzaWduOwogICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiA9IDQ7 CiAgICAgICAgICAgICAgICBjaGFyIHRlbXA7CgogICAgICAgICAgICAgICAgZmxvYXQgZmxvYXRf bnVtYmVyID0gX2Zsb2F0X251bWJlcjsKCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfZmxv YXRfYnVmZmVyID0gZmN2dCgKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfbnVtYmVyLAog ICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgICAg ICZkZWNpbWFsLAogICAgICAgICAgICAgICAgICAgICAgICAmc2lnbik7CgogICAgICAgICAgICAg ICAgY2hhciAqZmxvYXRfYnVmZmVyID0gbmV3IGNoYXJbc3RybGVuKF9mbG9hdF9idWZmZXIpKzFd OwogICAgICAgICAgICAgICAgc3RyY3B5KGZsb2F0X2J1ZmZlciwgX2Zsb2F0X2J1ZmZlcik7Cgog ICAgICAgICAgICAgICAgaWYgKHNpZ24pIHN0cmNweShidWYsICItIik7CiAgICAgICAgICAgICAg ICBpZiAoZGVjaW1hbCA8PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICBzdHJjYXQoYnVmLCAiMC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KGJ1 ZiwgZmxvYXRfYnVmZmVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wPWZsb2F0X2J1ZmZlcltk ZWNpbWFsXTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfYnVmZmVyW2RlY2ltYWxdID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2F0KGJ1ZiwgZmxvYXRfYnVmZmVyKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZmxvYXRfYnVmZmVyW2RlY2ltYWxdID0gdGVtcDsKCiAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNhdChidWYsICIuIik7CiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cmNhdChidWYsICZmbG9hdF9idWZmZXJbZGVjaW1hbF0pOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGludCBsZW49MDsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgg IT0gX19udWxsKSBsZW4gPSAoaW50KXN0cmxlbihwcmVmaXgpOwoKICAgICAgICAgICAgICAgIGNo YXIgKnRleHQgPSBuZXcgY2hhcltsZW4gKyBzdHJsZW4oYnVmKSArIDFdOwogICAgICAgICAgICAg ICAgaWYgKHByZWZpeCAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSh0ZXh0LCBwcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICBz dHJjYXQodGV4dCwgYnVmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ug c3RyY3B5KHRleHQsIGJ1Zik7CgogICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVzKHRleHQp OwogICAgICAgICAgICAgICAgZGVsZXRlW10gdGV4dDsKICAgICAgICAgICAgICAgIHJldHVybiBy ZXM7CiAgICAgICAgfQoKICAgICAgICBzdGQ6OnN0cmluZyBhcHBlbmRfc3RyaW5nKGNvbnN0IGNo YXIgKnByZWZpeCwgY29uc3QgY2hhciAqcG9zdGZpeCkKICAgICAgICB7CiAgICAgICAgICAgICAg ICBpbnQgbGVuPTA7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4ICE9IF9fbnVsbCkgbGVuID0g KGludClzdHJsZW4ocHJlZml4KTsKICAgICAgICAgICAgICAgIGlmIChwb3N0Zml4ICE9IF9fbnVs bCkgbGVuICs9IChpbnQpc3RybGVuKHBvc3RmaXgpOwogICAgICAgICAgICAgICAgY2hhciAqdGV4 dCA9IG5ldyBjaGFyW2xlbiArIDFdOwogICAgICAgICAgICAgICAgaWYgKHByZWZpeCAhPSBfX251 bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh0ZXh0 LCBwcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zdGZpeCAhPSBfX251bGwp IHN0cmNhdCh0ZXh0LCBwb3N0Zml4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGVsc2UgaWYgKHBvc3RmaXggIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBzdHJjcHkodGV4dCwgcG9zdGZpeCk7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVzKHRleHQpOwogICAgICAgICAgICAgICAgZGVs ZXRlW10gdGV4dDsKICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfQp9OwojIDM5 ICJDbGFuQm9tYmVyLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMSAz CiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL21pa21vZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvTWlrTW9kL3NldHVwbWlrbW9kLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9NaWtNb2Qvc2V0dXBtaWttb2QuaCIgMwpjbGFzcyBDTF9TZXR1cE1pa01vZAp7CnB1Ymxp YzoKCgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQoYm9vbCByZWdpc3Rlcl9yZXNvdXJjZXNfb25s eSA9IGZhbHNlKTsKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlaW5pdCgpOwp9OwojIDI4ICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIv TWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9D bGFuTGliL01pa01vZC9zdHJlYW1lZF9taWttb2Rfc2FtcGxlLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvQ2xhbkxpYi9jb3JlLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9rZWVwX2FsaXZlLmgiIDEg MwojIDI2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9rZWVwX2FsaXZlLmgiIDMK Y2xhc3MgQ0xfS2VlcEFsaXZlCnsKcHVibGljOgoKCiAgICAgICAgQ0xfS2VlcEFsaXZlKCk7CgoK ICAgICAgICB2aXJ0dWFsIH5DTF9LZWVwQWxpdmUoKTsKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQg a2VlcF9hbGl2ZSgpPTA7Cn07CiMgNDAgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vc3lzdGVtLmgiIDEgMwojIDIy ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9zeXN0ZW0uaCIgMwpjbGFzcyBDTF9F dmVudExpc3RlbmVyOwpjbGFzcyBDTF9TaWduYWxfdjA7CgoKY2xhc3MgQ0xfU3lzdGVtCnsKcHVi bGljOgoKCiAgICAgICAgc3RhdGljIHZvaWQga2VlcF9hbGl2ZSgpOwoKCgogICAgICAgIHN0YXRp YyB2b2lkIGtlZXBfYWxpdmUoaW50IG1pbGxpcyk7CgoKCiAgICAgICAgc3RhdGljIGJvb2wga2Vl cF9hbGl2ZShDTF9FdmVudExpc3RlbmVyICZldmVudHMsIGludCB0aW1lb3V0ID0gLTEpOwoKCiAg ICAgICAgc3RhdGljIHZvaWQgc2xlZXAoaW50IG1pbGxpcyk7CgoKICAgICAgICBzdGF0aWMgdW5z aWduZWQgaW50IGdldF90aW1lKCk7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgc3VzcGVuZF90aW1l KCk7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVzdW1lX3RpbWUoKTsKCgogICAgICAgIHN0YXRp YyBib29sIGRldGVjdF9tbXgoKTsKCgogICAgICAgIHN0YXRpYyBib29sIGRldGVjdF8zZG5vdygp OwoKCiAgICAgICAgc3RhdGljIGJvb2wgZGV0ZWN0X2V4dF8zZG5vdygpOwoKCgogICAgICAgIHN0 YXRpYyBDTF9TaWduYWxfdjAgJnNpZ19xdWl0KCk7Cn07CiMgNDEgIi91c3IvaW5jbHVkZS9DbGFu TGliL2NvcmUuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS90 aHJlYWQuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL3RocmVh ZC5oIiAzCmNsYXNzIENMX1RocmVhZF9HZW5lcmljOwoKCgpjbGFzcyBDTF9SdW5uYWJsZQp7CnB1 YmxpYzoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBydW4oKT0wOwp9OwoKCmVudW0gRVRocmVhZFBy aW9yaXR5CnsKICAgICAgICBjbF9wcmlvcml0eV9hYm92ZV9ub3JtYWwsCiAgICAgICAgY2xfcHJp b3JpdHlfYmVsb3dfbm9ybWFsLAogICAgICAgIGNsX3ByaW9yaXR5X2hpZ2hlc3QsCiAgICAgICAg Y2xfcHJpb3JpdHlfaWRsZSwKICAgICAgICBjbF9wcmlvcml0eV9sb3dlc3QsCiAgICAgICAgY2xf cHJpb3JpdHlfbm9ybWFsLAogICAgICAgIGNsX3ByaW9yaXR5X3RpbWVfY3JpdGljYWwKfTsKCgpj bGFzcyBDTF9UaHJlYWQKewoKcHVibGljOgoKCgogICAgICAgIHN0YXRpYyBDTF9UaHJlYWQgKmNy ZWF0ZShDTF9SdW5uYWJsZSAqcnVubmFibGUsIGJvb2wgZGVsZXRlX3J1bm5hYmxlID0gZmFsc2Up OwoKCgoKCiAgICAgICAgc3RhdGljIENMX1RocmVhZCAqY3JlYXRlKGludCAoKmZ1bmMpKHZvaWQq KSwgdm9pZCogdmFsdWUpOwoKCiAgICAgICAgQ0xfVGhyZWFkKENMX1J1bm5hYmxlICpydW5uYWJs ZSwgYm9vbCBkZWxldGVfcnVubmFibGUgPSBmYWxzZSk7CgoKICAgICAgICBDTF9UaHJlYWQoaW50 ICgqZnVuYykodm9pZCopLCB2b2lkICp2YWx1ZSk7CgoKICAgICAgICBDTF9UaHJlYWQoY29uc3Qg Q0xfVGhyZWFkICZjb3B5KTsKCgogICAgICAgIENMX1RocmVhZCgpOwoKCiAgICAgICAgfkNMX1Ro cmVhZCgpOwoKCnB1YmxpYzoKCiAgICAgICAgQ0xfVGhyZWFkICZvcGVyYXRvciA9KGNvbnN0IENM X1RocmVhZCAmY29weSk7CgoKICAgICAgICB2b2lkIHN0YXJ0KCk7CgoKICAgICAgICB2b2lkIHRl cm1pbmF0ZSgpOwoKCiAgICAgICAgdm9pZCB3YWl0KCk7CgoKICAgICAgICB2b2lkIHNldF9wcmlv cml0eShFVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOwoKCnByaXZhdGU6CiAgICAgICAgQ0xfVGhy ZWFkX0dlbmVyaWMgKmltcGw7Cn07CiMgNDQgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vdGhyZWFkZnVuY192MC5o IiAxIDMKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgQ2xhc3M+CmNsYXNzIENMX1RocmVhZEZ1bmNfUnVu bmFibGVfdjAgOiBwdWJsaWMgQ0xfUnVubmFibGUKewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB2 b2lkIChDbGFzczo6Kk1lbWJlckZ1bmMpKCk7CgogICAgICAgIENMX1RocmVhZEZ1bmNfUnVubmFi bGVfdjAoQ2xhc3MgKnNlbGYsIE1lbWJlckZ1bmMgZnVuYykKICAgICAgICA6IHNlbGYoc2VsZiks IGZ1bmMoZnVuYykKICAgICAgICB7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICB2aXJ0dWFs IHZvaWQgcnVuKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKnNlbGYuKmZ1bmMpKCk7CiAg ICAgICAgfQoKICAgICAgICBDbGFzcyAqc2VsZjsKICAgICAgICBNZW1iZXJGdW5jIGZ1bmM7Cn07 CiMgNDUgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvQ29yZS9TeXN0ZW0vdGhyZWFkZnVuY192MS5oIiAxIDMKCgoKCgoKdGVtcGxhdGU8 Y2xhc3MgQ2xhc3MsIGNsYXNzIFBhcmFtPgpjbGFzcyBDTF9UaHJlYWRGdW5jX1J1bm5hYmxlX3Yx IDogcHVibGljIENMX1J1bm5hYmxlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdm9pZCAoQ2xh c3M6OipNZW1iZXJGdW5jKShQYXJhbSAmcGFyYW0pOwoKICAgICAgICBDTF9UaHJlYWRGdW5jX1J1 bm5hYmxlX3YxKENsYXNzICpzZWxmLCBNZW1iZXJGdW5jIGZ1bmMsIGNvbnN0IFBhcmFtICZwYXJh bSkKICAgICAgICA6IHNlbGYoc2VsZiksIGZ1bmMoZnVuYyksIHBhcmFtKHBhcmFtKQogICAgICAg IHsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIHZpcnR1YWwgdm9pZCBydW4oKQogICAgICAg IHsKICAgICAgICAgICAgICAgICgqc2VsZi4qZnVuYykocGFyYW0pOwogICAgICAgIH0KCiAgICAg ICAgQ2xhc3MgKnNlbGY7CiAgICAgICAgTWVtYmVyRnVuYyBmdW5jOwogICAgICAgIFBhcmFtIHBh cmFtOwp9OwojIDQ2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL3RocmVhZGZ1bmNfdjIuaCIgMSAzCgoKCgoKCnRl bXBsYXRlPGNsYXNzIENsYXNzLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBhcmFtMj4KY2xhc3MgQ0xf VGhyZWFkRnVuY19SdW5uYWJsZV92MiA6IHB1YmxpYyBDTF9SdW5uYWJsZQp7CnB1YmxpYzoKICAg ICAgICB0eXBlZGVmIHZvaWQgKENsYXNzOjoqTWVtYmVyRnVuYykoUGFyYW0xICZwYXJhbTEsIFBh cmFtMiAmcGFyYW0yKTsKCiAgICAgICAgQ0xfVGhyZWFkRnVuY19SdW5uYWJsZV92MihDbGFzcyAq c2VsZiwgTWVtYmVyRnVuYyBmdW5jLCBjb25zdCBQYXJhbTEgJnBhcmFtMSwgY29uc3QgUGFyYW0y ICZwYXJhbTIpCiAgICAgICAgOiBzZWxmKHNlbGYpLCBmdW5jKGZ1bmMpLCBwYXJhbTEocGFyYW0x KSwgcGFyYW0yKHBhcmFtMikKICAgICAgICB7CiAgICAgICAgfQoKcHJpdmF0ZToKICAgICAgICB2 aXJ0dWFsIHZvaWQgcnVuKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKnNlbGYuKmZ1bmMp KHBhcmFtMSwgcGFyYW0yKTsKICAgICAgICB9CgogICAgICAgIENsYXNzICpzZWxmOwogICAgICAg IE1lbWJlckZ1bmMgZnVuYzsKICAgICAgICBQYXJhbTEgcGFyYW0xOwogICAgICAgIFBhcmFtMiBw YXJhbTI7Cn07CiMgNDcgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vbXV0ZXguaCIgMSAzCiMgMjIgIi91c3IvaW5j bHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL211dGV4LmgiIDMKY2xhc3MgQ0xfTXV0ZXhfR2VuZXJp YzsKCgoKY2xhc3MgQ0xfTXV0ZXgKewpwdWJsaWM6CgoKICAgICAgICBzdGF0aWMgQ0xfTXV0ZXgg KmNyZWF0ZSgpOwoKCiAgICAgICAgQ0xfTXV0ZXgoKTsKCgogICAgICAgIH5DTF9NdXRleCgpOwoK CgogICAgICAgIHZvaWQgZW50ZXIoKTsKCgogICAgICAgIHZvaWQgbGVhdmUoKTsKIyA2MyAiL3Vz ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vbXV0ZXguaCIgMwogICAgICAgIHZvaWQgd2Fp dCgpOwojIDc1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5c3RlbS9tdXRleC5oIiAzCiAg ICAgICAgdm9pZCBub3RpZnkoKTsKCgoKCgoKICAgICAgICB2b2lkIG5vdGlmeV9hbGwoKTsKCnBy aXZhdGU6CgogICAgICAgIENMX011dGV4KGNvbnN0IENMX011dGV4ICZjb3B5KTsKCgogICAgICAg IHZvaWQgb3BlcmF0b3IgPShjb25zdCBDTF9NdXRleCAmY29weSk7CgogICAgICAgIENMX011dGV4 X0dlbmVyaWMgKmltcGw7Cn07CgoKCgoKCmNsYXNzIENMX011dGV4U2VjdGlvbgp7CgpwdWJsaWM6 CgogICAgICAgIENMX011dGV4U2VjdGlvbihDTF9NdXRleCAqbXV0ZXgsIGJvb2wgbG9ja19hdF9j b25zdHJ1Y3QgPSB0cnVlKQogICAgICAgIDogbXV0ZXgobXV0ZXgpLCBsb2NrX2NvdW50KDApCiAg ICAgICAgewogICAgICAgICAgICAgICAgaWYgKGxvY2tfYXRfY29uc3RydWN0KSBlbnRlcigpOwog ICAgICAgIH0KCgogICAgICAgIHZpcnR1YWwgfkNMX011dGV4U2VjdGlvbigpCiAgICAgICAgewog ICAgICAgICAgICAgICAgd2hpbGUgKGxvY2tfY291bnQgPiAwKSBsZWF2ZSgpOwogICAgICAgIH0K CgpwdWJsaWM6CiAgICAgICAgdm9pZCBlbnRlcigpCiAgICAgICAgewogICAgICAgICAgICAgICAg bXV0ZXgtPmVudGVyKCk7CiAgICAgICAgICAgICAgICBsb2NrX2NvdW50Kys7CiAgICAgICAgfQoK ICAgICAgICB2b2lkIGxlYXZlKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAobG9ja19j b3VudCA9PSAwKSByZXR1cm47CiAgICAgICAgICAgICAgICBtdXRleC0+bGVhdmUoKTsKICAgICAg ICAgICAgICAgIGxvY2tfY291bnQtLTsKICAgICAgICB9CgoKcHJpdmF0ZToKICAgICAgICBDTF9N dXRleCAqbXV0ZXg7CgogICAgICAgIGludCBsb2NrX2NvdW50Owp9OwojIDQ4ICIvdXNyL2luY2x1 ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1N5 c3RlbS90aW1lci5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0v dGltZXIuaCIgMwpjbGFzcyBDTF9UaW1lciA6IHB1YmxpYyBDTF9LZWVwQWxpdmUKewoKcHVibGlj OgoKCgogICAgICAgIENMX1RpbWVyKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSAxMDAwKTsKCgpw dWJsaWM6CgoKICAgICAgICB1bnNpZ25lZCBsb25nIGdldF9pbnRlcnZhbCgpOwoKCiAgICAgICAg Ym9vbCBpc19lbmFibGVkKCk7CgoKcHVibGljOgoKCiAgICAgICAgdm9pZCBzZXRfaW50ZXJ2YWwo dW5zaWduZWQgbG9uZyBpbnRlcnZhbCk7CgoKICAgICAgICB2b2lkIGVuYWJsZSgpOwoKCiAgICAg ICAgdm9pZCBkaXNhYmxlKCk7CgoKcHVibGljOgoKICAgICAgICBDTF9TaWduYWxfdjAgJnNpZ190 aW1lcigpOwoKCnByaXZhdGU6CiAgICAgICAgdmlydHVhbCB2b2lkIGtlZXBfYWxpdmUoKTsKCiAg ICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rf dGltZTsKICAgICAgICBib29sIGVuYWJsZWQ7CgogICAgICAgIENMX1NpZ25hbF92MCBzaWduYWxf dGltZXI7Cn07CiMgNTAgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9TeXN0ZW0vZXZlbnRfbGlzdGVuZXIuaCIgMSAzCiMgMjIg Ii91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2V2ZW50X2xpc3RlbmVyLmgiIDMKY2xh c3MgQ0xfRXZlbnRUcmlnZ2VyOwpjbGFzcyBDTF9FdmVudExpc3RlbmVyX0dlbmVyaWM7CgoKCgoK Y2xhc3MgQ0xfRXZlbnRMaXN0ZW5lcgp7CgpwdWJsaWM6CgogICAgICAgIENMX0V2ZW50TGlzdGVu ZXIoKTsKCgogICAgICAgIENMX0V2ZW50TGlzdGVuZXIoQ0xfRXZlbnRUcmlnZ2VyICp0cmlnZ2Vy KTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0V2ZW50TGlzdGVuZXIoKTsKCgpwdWJsaWM6CgoKcHVi bGljOgoKICAgICAgICB2b2lkIGFkZF90cmlnZ2VyKENMX0V2ZW50VHJpZ2dlciAqdHJpZ2dlcik7 CgoKICAgICAgICB2b2lkIHJlbW92ZV90cmlnZ2VyKENMX0V2ZW50VHJpZ2dlciAqdHJpZ2dlcik7 CgoKICAgICAgICB2b2lkIGNsZWFyKCk7CgoKICAgICAgICB2b2lkIHJlc2V0X2FsbCgpOwoKCgoK CiAgICAgICAgYm9vbCB3YWl0KGludCB0aW1lb3V0ID0gLTEpOwoKCnByaXZhdGU6CiAgICAgICAg Q0xfRXZlbnRMaXN0ZW5lcl9HZW5lcmljICppbXBsOwp9OwojIDUxICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVtL2V2 ZW50X3RyaWdnZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvU3lzdGVt L2V2ZW50X3RyaWdnZXIuaCIgMwpjbGFzcyBDTF9FdmVudExpc3RlbmVyOwpjbGFzcyBDTF9FdmVu dFRyaWdnZXJfR2VuZXJpYzsKCgoKCgoKY2xhc3MgQ0xfRXZlbnRUcmlnZ2VyCnsKCnB1YmxpYzoK CiAgICAgICAgQ0xfRXZlbnRUcmlnZ2VyKCk7CgoKICAgICAgICBDTF9FdmVudFRyaWdnZXIoY29u c3QgQ0xfRXZlbnRUcmlnZ2VyICZjb3B5KTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0V2ZW50VHJp Z2dlcigpOwoKCnB1YmxpYzoKCiAgICAgICAgYm9vbCBnZXRfZmxhZygpIGNvbnN0OwoKCnB1Ymxp YzoKCiAgICAgICAgQ0xfRXZlbnRUcmlnZ2VyICZvcGVyYXRvciA9KGNvbnN0IENMX0V2ZW50VHJp Z2dlciAmY29weSk7CgoKICAgICAgICB2b2lkIHJlc2V0KCkgY29uc3Q7CgoKICAgICAgICB2b2lk IHNldF9mbGFnKCk7CgoKCgoKICAgICAgICBib29sIHdhaXQoaW50IHRpbWVvdXQgPSAtMSk7CgoK cHVibGljOgogICAgICAgIENMX0V2ZW50VHJpZ2dlcl9HZW5lcmljICppbXBsOwp9OwojIDUyICIv dXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGli L0NvcmUvU3lzdGVtL2NvbnNvbGVfd2luZG93LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL1N5c3RlbS9jb25zb2xlX3dpbmRvdy5oIiAzCmNsYXNzIENMX0NvbnNvbGVXaW5k b3dfR2VuZXJpYzsKCgoKY2xhc3MgQ0xfQ29uc29sZVdpbmRvdwp7CgpwdWJsaWM6CgogICAgICAg IENMX0NvbnNvbGVXaW5kb3coCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdGl0 bGUsCiAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSA4MCwKICAgICAgICAgICAgICAgIGludCBo ZWlnaHQgPSAyNSk7CgoKICAgICAgICB+Q0xfQ29uc29sZVdpbmRvdygpOwoKCnB1YmxpYzoKCiAg ICAgICAgdm9pZCByZWRpcmVjdF9zdGRpbygpOwoKCiAgICAgICAgdm9pZCByZWRpcmVjdF9zdGRp byhjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgdm9pZCB3YWl0X2Zvcl9r ZXkoKTsKCgoKICAgICAgICB2b2lkIGRpc3BsYXlfY2xvc2VfbWVzc2FnZSgpOwoKCnByaXZhdGU6 CiAgICAgICAgQ0xfQ29uc29sZVdpbmRvd19HZW5lcmljICppbXBsOwp9OwojIDUzICIvdXNyL2lu Y2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3Jl L0lPRGF0YS9jbF9lbmRpYW4uaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv SU9EYXRhL2NsX2VuZGlhbi5oIiAzCmNsYXNzIENMX0VuZGlhbgp7CnB1YmxpYzoKCgoKCgogICAg ICAgIHN0YXRpYyB2b2lkIHN3YXAodm9pZCAqZGF0YSwgaW50IHR5cGVfc2l6ZSwgaW50IHRvdGFs X3RpbWVzPTEpOwoKCgoKICAgICAgICBzdGF0aWMgYm9vbCBpc19zeXN0ZW1fYmlnKCk7CgoKCiAg ICAgICAgc3RhdGljIGJvb2wgaXNfc3lzdGVtXzY0Yml0KCk7Cn07CiMgNTUgIi91c3IvaW5jbHVk ZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0Rh dGEvaW5wdXRzb3VyY2UuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvSU9E YXRhL2lucHV0c291cmNlLmgiIDMKY2xhc3MgQ0xfSW5wdXRTb3VyY2UKewoKcHVibGljOgoKICAg ICAgICBlbnVtIFNlZWtFbnVtCiAgICAgICAgewogICAgICAgICAgICAgICAgc2Vla19zZXQsCiAg ICAgICAgICAgICAgICBzZWVrX2N1ciwKICAgICAgICAgICAgICAgIHNlZWtfZW5kCiAgICAgICAg fTsKCgpwdWJsaWM6CgogICAgICAgIENMX0lucHV0U291cmNlKCkgeyBzZXRfc3lzdGVtX21vZGUo KTsgfQoKCiAgICAgICAgdmlydHVhbCB+Q0xfSW5wdXRTb3VyY2UoKSB7IHJldHVybjsgfQoKCnB1 YmxpYzoKCgogICAgICAgIHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdCA9IDA7CgoKCiAgICAgICAg dmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0ID0gMDsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBpc19s aXR0bGVfZW5kaWFuKCkgeyByZXR1cm4gbGl0dGxlX2VuZGlhbl9tb2RlOyB9CgoKcHVibGljOgoK ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0X3N5c3RlbV9tb2RlKCk7CgoKICAgICAgICB2aXJ0dWFs IHZvaWQgc2V0X2JpZ19lbmRpYW5fbW9kZSgpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9s aXR0bGVfZW5kaWFuX21vZGUoKTsKCgoKICAgICAgICB2aXJ0dWFsIGludCByZWFkX2ludDMyKCk7 CgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZF91aW50MzIoKTsKCgoKICAgICAg ICB2aXJ0dWFsIHNob3J0IHJlYWRfc2hvcnQxNigpOwoKCgogICAgICAgIHZpcnR1YWwgdW5zaWdu ZWQgc2hvcnQgcmVhZF91c2hvcnQxNigpOwoKCgogICAgICAgIHZpcnR1YWwgY2hhciByZWFkX2No YXI4KCk7CgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRfdWNoYXI4KCk7CgoK CiAgICAgICAgdmlydHVhbCBmbG9hdCByZWFkX2Zsb2F0MzIoKTsKCgoKICAgICAgICB2aXJ0dWFs IGJvb2wgcmVhZF9ib29sOCgpOwoKCgoKCiAgICAgICAgdmlydHVhbCBpbnQgcmVhZCh2b2lkICpk YXRhLCBpbnQgc2l6ZSkgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIG9wZW4oKSA9IDA7CgoK ICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CgoKCiAgICAgICAgdmlydHVhbCBDTF9J bnB1dFNvdXJjZSAqY2xvbmUoKSBjb25zdCA9IDA7CgoKCgoKICAgICAgICB2aXJ0dWFsIHN0ZDo6 c3RyaW5nIHJlYWRfc3RyaW5nKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBzZWVrKGludCBw b3MsIFNlZWtFbnVtIHNlZWtfdHlwZSkgPSAwOwoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwdXNo X3Bvc2l0aW9uKCkgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHBvcF9wb3NpdGlvbigpID0g MDsKCgpwcm90ZWN0ZWQ6CiAgICAgICAgYm9vbCBsaXR0bGVfZW5kaWFuX21vZGU7Cn07CiMgNTYg Ii91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5M aWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfZmlsZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfZmlsZS5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy9zdGFjayIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKysvc3RhY2siIDMKCgoKCgoj IDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgNzIgIi91c3IvaW5j bHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4NSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAzCmlubGluZSBzaXplX3QKX19kZXF1ZV9idWZf c2l6ZShzaXplX3QgX19zaXplKQp7IHJldHVybiBfX3NpemUgPCA1MTIgPyBzaXplX3QoNTEyIC8g X19zaXplKSA6IHNpemVfdCgxKTsgfQojIDEwMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9k ZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0 cnVjdCBfRGVxdWVfaXRlcmF0b3IKewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1Rw JiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBf VHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZl cl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlw ZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1Jl ZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKICB0eXBl ZGVmIF9EZXF1ZV9pdGVyYXRvciBfU2VsZjsKCiAgX1RwKiBfTV9jdXI7CiAgX1RwKiBfTV9maXJz dDsKICBfVHAqIF9NX2xhc3Q7CiAgX01hcF9wb2ludGVyIF9NX25vZGU7CgogIF9EZXF1ZV9pdGVy YXRvcihfVHAqIF9feCwgX01hcF9wb2ludGVyIF9feSkKICAgIDogX01fY3VyKF9feCksIF9NX2Zp cnN0KCpfX3kpLAogICAgICBfTV9sYXN0KCpfX3kgKyBfU19idWZmZXJfc2l6ZSgpKSwgX01fbm9k ZShfX3kpIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKCkgOiBfTV9jdXIoMCksIF9NX2ZpcnN0KDApLCBf TV9sYXN0KDApLCBfTV9ub2RlKDApIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9y JiBfX3gpCiAgICA6IF9NX2N1cihfX3guX01fY3VyKSwgX01fZmlyc3QoX194Ll9NX2ZpcnN0KSwK ICAgICAgX01fbGFzdChfX3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUpIHt9CgogIHJl ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VyOyB9CiAgcG9pbnRlciBv cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VyOyB9CgogIGRpZmZlcmVuY2VfdHlwZSBv cGVyYXRvci0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIGRpZmZlcmVuY2Vf dHlwZShfU19idWZmZXJfc2l6ZSgpKSAqIChfTV9ub2RlIC0gX194Ll9NX25vZGUgLSAxKSArCiAg ICAgIChfTV9jdXIgLSBfTV9maXJzdCkgKyAoX194Ll9NX2xhc3QgLSBfX3guX01fY3VyKTsKICB9 CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgKytfTV9jdXI7CiAgICBpZiAoX01fY3VyID09 IF9NX2xhc3QpIHsKICAgICAgX01fc2V0X25vZGUoX01fbm9kZSArIDEpOwogICAgICBfTV9jdXIg PSBfTV9maXJzdDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3Ir KyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwogICAgcmV0dXJu IF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICBpZiAoX01fY3VyID09IF9N X2ZpcnN0KSB7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgLSAxKTsKICAgICAgX01fY3VyID0g X01fbGFzdDsKICAgIH0KICAgIC0tX01fY3VyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tKnRoaXM7 CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5 cGUgX19uKQogIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fbiArIChfTV9jdXIg LSBfTV9maXJzdCk7CiAgICBpZiAoX19vZmZzZXQgPj0gMCAmJiBfX29mZnNldCA8IGRpZmZlcmVu Y2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSkKICAgICAgX01fY3VyICs9IF9fbjsKICAgIGVsc2Ug ewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19ub2RlX29mZnNldCA9CiAgICAgICAgX19vZmZzZXQg PiAwID8gX19vZmZzZXQgLyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkKICAgICAg ICAgICAgICAgICAgIDogLWRpZmZlcmVuY2VfdHlwZSgoLV9fb2Zmc2V0IC0gMSkgLyBfU19idWZm ZXJfc2l6ZSgpKSAtIDE7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyBfX25vZGVfb2Zmc2V0 KTsKICAgICAgX01fY3VyID0gX01fZmlyc3QgKwogICAgICAgIChfX29mZnNldCAtIF9fbm9kZV9v ZmZzZXQgKiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpOwogICAgfQogICAgcmV0 dXJuICp0aGlzOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv bnN0CiAgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX247 CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7IHJldHVybiAq dGhpcyArPSAtX19uOyB9CgogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBj b25zdCB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9fbjsK ICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsg cmV0dXJuICooKnRoaXMgKyBfX24pOyB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYg X194KSBjb25zdCB7IHJldHVybiBfTV9jdXIgPT0gX194Ll9NX2N1cjsgfQogIGJvb2wgb3BlcmF0 b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IF9feCk7IH0K ICBib29sIG9wZXJhdG9yPChjb25zdCBfU2VsZiYgX194KSBjb25zdCB7CiAgICByZXR1cm4gKF9N X25vZGUgPT0gX194Ll9NX25vZGUpID8KICAgICAgKF9NX2N1ciA8IF9feC5fTV9jdXIpIDogKF9N X25vZGUgPCBfX3guX01fbm9kZSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9TZWxmJiBf X3gpIGNvbnN0IHsgcmV0dXJuIF9feCA8ICp0aGlzOyB9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0 IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuICEoX194IDwgKnRoaXMpOyB9CiAgYm9vbCBvcGVy YXRvcj49KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPCBfX3gpOyB9 CgoKCgoKCgogIHZvaWQgX01fc2V0X25vZGUoX01hcF9wb2ludGVyIF9fbmV3X25vZGUpIHsKICAg IF9NX25vZGUgPSBfX25ld19ub2RlOwogICAgX01fZmlyc3QgPSAqX19uZXdfbm9kZTsKICAgIF9N X2xhc3QgPSBfTV9maXJzdCArIGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUg X0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4Kb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24s IGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gpCnsKICByZXR1cm4g X194ICsgX19uOwp9CiMgMjM5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9faXNfc3RhdGljPgpjbGFz cyBfRGVxdWVfYWxsb2NfYmFzZQp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190 cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRv cjsgfQoKICBfRGVxdWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAg OiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9tYXBfYWxsb2NhdG9yKF9fYSksCiAgICAgIF9N X21hcCgwKSwgX01fbWFwX3NpemUoMCkKICB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfVHAqLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg X01hcF9hbGxvY2F0b3JfdHlwZTsKCiAgYWxsb2NhdG9yX3R5cGUgX01fbm9kZV9hbGxvY2F0b3I7 CiAgX01hcF9hbGxvY2F0b3JfdHlwZSBfTV9tYXBfYWxsb2NhdG9yOwoKICBfVHAqIF9NX2FsbG9j YXRlX25vZGUoKSB7CiAgICByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoX19kZXF1 ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShf VHAqIF9fcCkgewogICAgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVf YnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVf dCBfX24pCiAgICB7IHJldHVybiBfTV9tYXBfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2 b2lkIF9NX2RlYWxsb2NhdGVfbWFwKF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01fbWFw X2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6 ZV90IF9NX21hcF9zaXplOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K Y2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+CnsKcHVibGljOgogIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg cmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0RlcXVlX2FsbG9jX2Jhc2UoY29uc3QgYWxs b2NhdG9yX3R5cGUmKSA6IF9NX21hcCgwKSwgX01fbWFwX3NpemUoMCkge30KCnByb3RlY3RlZDoK ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfQWxsb2NfdHlw ZSBfTm9kZV9hbGxvY190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAq LCBfQWxsb2M+OjpfQWxsb2NfdHlwZSBfTWFwX2FsbG9jX3R5cGU7CgogIF9UcCogX01fYWxsb2Nh dGVfbm9kZSgpIHsKICAgIHJldHVybiBfTm9kZV9hbGxvY190eXBlOjphbGxvY2F0ZShfX2RlcXVl X2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAgfQogIHZvaWQgX01fZGVhbGxvY2F0ZV9ub2RlKF9U cCogX19wKSB7CiAgICBfTm9kZV9hbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19kZXF1ZV9i dWZfc2l6ZShzaXplb2YoX1RwKSkpOwogIH0KICBfVHAqKiBfTV9hbGxvY2F0ZV9tYXAoc2l6ZV90 IF9fbikKICAgIHsgcmV0dXJuIF9NYXBfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZv aWQgX01fZGVhbGxvY2F0ZV9tYXAoX1RwKiogX19wLCBzaXplX3QgX19uKQogICAgeyBfTWFwX2Fs bG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CgogIF9UcCoqIF9NX21hcDsKICBzaXpl X3QgX01fbWFwX3NpemU7Cn07CiMgMzEzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVl LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVfYmFz ZQogIDogcHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxl c3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf aW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6 YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8 X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLGNv bnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jhc2Uo X19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19u dW1fZWxlbWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkK ICAgIDogX0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVlX2Jh c2UoKTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAgdm9p ZCBfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAgdm9p ZCBfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIGVu dW0geyBfU19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9yIF9N X3N0YXJ0OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+Ojp+X0RlcXVlX2Jhc2UoKQp7CiAg aWYgKF9NX21hcCkgewogICAgX01fZGVzdHJveV9ub2RlcyhfTV9zdGFydC5fTV9ub2RlLCBfTV9m aW5pc2guX01fbm9kZSArIDEpOwogICAgX01fZGVhbGxvY2F0ZV9tYXAoX01fbWFwLCBfTV9tYXBf c2l6ZSk7CiAgfQp9CiMgMzYzICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9EZXF1ZV9iYXNlPF9UcCxf QWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1fZWxlbWVudHMpCnsKICBzaXpl X3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBfX2RlcXVlX2J1Zl9zaXplKHNp emVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChzaXplX3QpIF9TX2luaXRpYWxf bWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0gX01fYWxsb2NhdGVfbWFwKF9N X21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBf X251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9fbnN0YXJ0ICsgX19udW1fbm9k ZXM7CgogIHRyeQogICAgeyBfTV9jcmVhdGVfbm9kZXMoX19uc3RhcnQsIF9fbmZpbmlzaCk7IH0K ICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFw X3NpemUpOwogICAgICBfTV9tYXAgPSAwOwogICAgICBfTV9tYXBfc2l6ZSA9IDA7CiAgICAgIHRo cm93OwogICAgfQoKICBfTV9zdGFydC5fTV9zZXRfbm9kZShfX25zdGFydCk7CiAgX01fZmluaXNo Ll9NX3NldF9ub2RlKF9fbmZpbmlzaCAtIDEpOwogIF9NX3N0YXJ0Ll9NX2N1ciA9IF9NX3N0YXJ0 Ll9NX2ZpcnN0OwogIF9NX2ZpbmlzaC5fTV9jdXIgPSBfTV9maW5pc2guX01fZmlyc3QgKwogICAg ICAgICAgICAgICBfX251bV9lbGVtZW50cyAlIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgX0RlcXVlX2Jhc2U8 X1RwLF9BbGxvYz46Ol9NX2NyZWF0ZV9ub2RlcyhfVHAqKiBfX25zdGFydCwgX1RwKiogX19uZmlu aXNoKQp7CiAgX1RwKiogX19jdXI7CiAgdHJ5IHsKICAgIGZvciAoX19jdXIgPSBfX25zdGFydDsg X19jdXIgPCBfX25maW5pc2g7ICsrX19jdXIpCiAgICAgICpfX2N1ciA9IF9NX2FsbG9jYXRlX25v ZGUoKTsKICB9CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbnN0 YXJ0LCBfX2N1cik7CiAgICAgIHRocm93OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZvaWQKX0RlcXVlX2Jhc2U8X1RwLF9BbGxvYz46Ol9NX2Rlc3Ryb3lfbm9k ZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIGZvciAoX1RwKiogX19uID0g X19uc3RhcnQ7IF9fbiA8IF9fbmZpbmlzaDsgKytfX24pCiAgICBfTV9kZWFsbG9jYXRlX25vZGUo Kl9fbik7Cn0KIyA0OTcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRl cXVlIDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPgp7CgogCgogIHR5cGVkZWYg X0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg dmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5j ZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Omdl dF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBpdGVy YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy YXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl cnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2ludGVy OwogIHN0YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1Zl9z aXplKHNpemVvZihfVHApKTsgfQoKCiAgdXNpbmcgX0Jhc2U6Ol9NX2luaXRpYWxpemVfbWFwOwog IHVzaW5nIF9CYXNlOjpfTV9jcmVhdGVfbm9kZXM7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Rlc3Ryb3lf bm9kZXM7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9N X2RlYWxsb2NhdGVfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGVfbWFwOwogIHVzaW5n IF9CYXNlOjpfTV9kZWFsbG9jYXRlX21hcDsKCgoKCgoKCiAgdXNpbmcgX0Jhc2U6Ol9NX21hcDsK ICB1c2luZyBfQmFzZTo6X01fbWFwX3NpemU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVz aW5nIF9CYXNlOjpfTV9maW5pc2g7CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy biBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNv bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9p dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVy YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBy ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKF9NX3N0YXJ0 KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJu IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoX01fZmluaXNoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9N X3N0YXJ0KTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgeyBy ZXR1cm4gX01fc3RhcnRbZGlmZmVyZW5jZV90eXBlKF9fbildOyB9CiAgY29uc3RfcmVmZXJlbmNl IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2Rp ZmZlcmVuY2VfdHlwZShfX24pXTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBf X24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X3Jh bmdlX2Vycm9yKCJkZXF1ZSIpOwogIH0KCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg ICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICBjb25zdF9y ZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19u KTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq X01fc3RhcnQ7IH0KICByZWZlcmVuY2UgYmFjaygpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f ZmluaXNoOwogICAgLS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQogIGNvbnN0X3JlZmVy ZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpfTV9zdGFydDsgfQogIGNvbnN0X3JlZmVyZW5j ZSBiYWNrKCkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSBfTV9maW5pc2g7CiAg ICAtLV9fdG1wOwogICAgcmV0dXJuICpfX3RtcDsKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29u c3QgeyByZXR1cm4gX01fZmluaXNoIC0gX01fc3RhcnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsg cmV0dXJuIF9NX2ZpbmlzaCA9PSBfTV9zdGFydDsgfQoKcHVibGljOgogIGV4cGxpY2l0IGRlcXVl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFz ZShfX2EsIDApIHt9CiAgZGVxdWUoY29uc3QgZGVxdWUmIF9feCkgOiBfQmFzZShfX3guZ2V0X2Fs bG9jYXRvcigpLCBfX3guc2l6ZSgpKQogICAgeyB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2lu KCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CiAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3Qg dmFsdWVfdHlwZSYgX192YWx1ZSwKICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EsIF9fbikKICAgIHsgX01fZmlsbF9pbml0aWFs aXplKF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0CiAgZGVxdWUoc2l6ZV90eXBlIF9fbikKICA6IF9C YXNlKGFsbG9jYXRvcl90eXBlKCksIF9fbikKICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZSh2YWx1ZV90 eXBlKCkpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIGRlcXVlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf X2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0 b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9f Zmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50 ZWdlcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICBfTV9pbml0aWFsaXplX21hcChf X24pOwogICAgICBfTV9maWxsX2luaXRpYWxpemUoX194KTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xh c3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0 LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CgogIH5kZXF1ZSgpCiAgeyBfRGVzdHJv eShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICBkZXF1ZSYgb3BlcmF0b3I9IChjb25zdCBkZXF1 ZSYgX194KSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CiAgICBpZiAoJl9f eCAhPSB0aGlzKSB7CiAgICAgIGlmIChfX2xlbiA+PSBfX3guc2l6ZSgpKQogICAgICAgIGVyYXNl KGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpLCBfTV9maW5pc2gpOwogICAg ICBlbHNlIHsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX21pZCA9IF9feC5iZWdpbigpICsgZGlm ZmVyZW5jZV90eXBlKF9fbGVuKTsKICAgICAgICBjb3B5KF9feC5iZWdpbigpLCBfX21pZCwgX01f c3RhcnQpOwogICAgICAgIGluc2VydChfTV9maW5pc2gsIF9fbWlkLCBfX3guZW5kKCkpOwogICAg ICB9CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB2b2lkIHN3YXAoZGVxdWUmIF9feCkg ewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9N X2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwLCBfX3guX01fbWFw KTsKICAgIHN0ZDo6c3dhcChfTV9tYXBfc2l6ZSwgX194Ll9NX21hcF9zaXplKTsKICB9CgpwdWJs aWM6CgoKCgoKICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYg X192YWwpIHsKICAgIGlmIChfX24gPiBzaXplKCkpIHsKICAgICAgZmlsbChiZWdpbigpLCBlbmQo KSwgX192YWwpOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX192YWwpOwogICAg fQogICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgZmls bChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgfQogIH0KCiAgdm9pZAogIGFzc2lnbihzaXpl X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQogIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3Zh bCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBhc3Np Z24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn cmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwg X0ludGVncmFsKCkpOwogICAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+ CiAgICB2b2lkCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKHN0YXRpY19jYXN0PHNpemVf dHlwZT4oX19uKSwgc3RhdGljX2Nhc3Q8X1RwPihfX3ZhbCkpOyB9CgogIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX2Fzc2lnbl9hdXgoX19m aXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBf TV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBz aXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKF9fbGVu ID4gc2l6ZSgpKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAg ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdp bigpKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UK ICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoK cHVibGljOgoKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkKICB7CiAg ICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2guX01fbGFzdCAtIDEpIHsKICAgICAg X0NvbnN0cnVjdChfTV9maW5pc2guX01fY3VyLCBfX3QpOwogICAgICArK19NX2ZpbmlzaC5fTV9j dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfYmFja19hdXgoX190KTsKICB9CgogIHZv aWQKICBwdXNoX2JhY2soKQogIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2Zpbmlz aC5fTV9sYXN0IC0gMSkgewogICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAg ICArK19NX2ZpbmlzaC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfYmFja19h dXgoKTsKICB9CgogIHZvaWQKICBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkKICB7 CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIF9D b25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyIC0gMSwgX190KTsKICAgICAgLS1fTV9zdGFydC5fTV9j dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2 b2lkCiAgcHVzaF9mcm9udCgpCiAgewogICAgaWYgKF9NX3N0YXJ0Ll9NX2N1ciAhPSBfTV9zdGFy dC5fTV9maXJzdCkgewogICAgICBfQ29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1ciAtIDEpOwogICAg ICAtLV9NX3N0YXJ0Ll9NX2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9mcm9udF9h dXgoKTsKICB9CgoKICB2b2lkCiAgcG9wX2JhY2soKQogIHsKICAgIGlmIChfTV9maW5pc2guX01f Y3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewogICAgICAtLV9NX2ZpbmlzaC5fTV9jdXI7CiAg ICAgIF9EZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgfQogICAgZWxzZQogICAgICBfTV9w b3BfYmFja19hdXgoKTsKICB9CgogIHZvaWQKICBwb3BfZnJvbnQoKQogIHsKICAgIGlmIChfTV9z dGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fbGFzdCAtIDEpIHsKICAgICAgX0Rlc3Ryb3koX01f c3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAg ICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yCiAgaW5zZXJ0 KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAgaWYgKHBv c2l0aW9uLl9NX2N1ciA9PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgICAgcHVzaF9mcm9udChfX3gp OwogICAgICByZXR1cm4gX01fc3RhcnQ7CiAgICB9CiAgICBlbHNlIGlmIChwb3NpdGlvbi5fTV9j dXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgICBwdXNoX2JhY2soX194KTsKICAgICAgaXRl cmF0b3IgX190bXAgPSBfTV9maW5pc2g7CiAgICAgIC0tX190bXA7CiAgICAgIHJldHVybiBfX3Rt cDsKICAgIH0KICAgIGVsc2UgewogICAgICByZXR1cm4gX01faW5zZXJ0X2F1eChwb3NpdGlvbiwg X194KTsKICAgIH0KICB9CgogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24p CiAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIHZhbHVlX3R5cGUoKSk7IH0KCiAgdm9pZAog IGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYg X194KQogIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkCiAgX01f ZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5 cGUmIF9feCk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAg IGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3Bh dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxh dGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0 b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKICAgIHsg X01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwgc3RhdGlj X2Nhc3Q8dmFsdWVfdHlwZT4oX194KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRv cl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBpbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9f bGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9f bmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9f bGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3X3NpemUgPCBfX2xlbikKICAgICAgZXJhc2UoX01f c3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5pc2gpOwogICAgZWxzZQogICAgICBpbnNlcnQoX01f ZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCB2YWx1ZV90eXBlKCkpOyB9CgpwdWJs aWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3MpIHsKICAgIGl0ZXJhdG9yIF9fbmV4 dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAgICBzaXplX3R5cGUgX19pbmRleCA9IF9fcG9zIC0g X01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8IChzaXplKCkgPj4gMSkpIHsKICAgICAgY29weV9i YWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9fbmV4dCk7CiAgICAgIHBvcF9mcm9udCgpOwogICAg fQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19uZXh0LCBfTV9maW5pc2gsIF9fcG9zKTsKICAgICAg cG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVybiBfTV9zdGFydCArIF9faW5kZXg7CiAgfQoKICBp dGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQg Y2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9maWxsX2luaXRpYWxpemUoY29uc3QgdmFs dWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2 b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2lu aXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHJvdGVj dGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQg X01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVf dHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoKTsKICB2b2lkIF9NX3BvcF9iYWNrX2F1 eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1eCgpOwoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K ICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJh dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bv cywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBfTV9pbnNlcnRfYXV4KGl0ZXJh dG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlw ZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbik7CgogIGl0ZXJhdG9yIF9N X3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90eXBl IF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01fY3VyIC0gX01fc3RhcnQuX01fZmlyc3Q7CiAgICBp ZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9mcm9udChfX24g LSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fc3RhcnQgLSBkaWZmZXJlbmNlX3R5cGUoX19u KTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUg X19uKSB7CiAgICBzaXplX3R5cGUgX192YWNhbmNpZXMgPSAoX01fZmluaXNoLl9NX2xhc3QgLSBf TV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9N X25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAtIF9fdmFjYW5jaWVzKTsKICAgIHJldHVybiBfTV9m aW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIHZvaWQgX01fbmV3X2VsZW1lbnRz X2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7CiAgdm9pZCBfTV9uZXdfZWxlbWVu dHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbWVudHMpOwoKcHJvdGVjdGVkOgoKCgoKCiAg dm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNrIChzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAx KSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQgKyAxID4gX01fbWFwX3NpemUgLSAoX01fZmluaXNo Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2Fk ZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCAoc2l6ZV90eXBl IF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9kZXNfdG9fYWRkID4gc2l6ZV90eXBl KF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXApKQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25v ZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2b2lkIF9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlw ZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2FkZF9hdF9mcm9udCk7Cn07CgoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQg ZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGl0ZXJhdG9yIF9fY3Vy ID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgp OyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChl bmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBpZiAoX19wb3MuX01fY3VyID09IF9NX3N0YXJ0 Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRz X2F0X2Zyb250KF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdf c3RhcnQsIF9NX3N0YXJ0LCBfX3gpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg fQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19z dGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog IH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRl cmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAg ICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19maW5pc2gs IF9feCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgIGNhdGNoKC4u LikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAx LCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQog IGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsX0FsbG9jPjo6aXRlcmF0 b3IKZGVxdWU8X1RwLF9BbGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f bGFzdCkKewogIGlmIChfX2ZpcnN0ID09IF9NX3N0YXJ0ICYmIF9fbGFzdCA9PSBfTV9maW5pc2gp IHsKICAgIGNsZWFyKCk7CiAgICByZXR1cm4gX01fZmluaXNoOwogIH0KICBlbHNlIHsKICAgIGRp ZmZlcmVuY2VfdHlwZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgZGlmZmVyZW5jZV90eXBl IF9fZWxlbXNfYmVmb3JlID0gX19maXJzdCAtIF9NX3N0YXJ0OwogICAgaWYgKHN0YXRpY19jYXN0 PHNpemVfdHlwZT4oX19lbGVtc19iZWZvcmUpIDwgKHNpemUoKSAtIF9fbikgLyAyKSB7CiAgICAg IGNvcHlfYmFja3dhcmQoX01fc3RhcnQsIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGl0ZXJhdG9y IF9fbmV3X3N0YXJ0ID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBf X25ld19zdGFydCk7CiAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX19u ZXdfc3RhcnQuX01fbm9kZSk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICB9CiAg ICBlbHNlIHsKICAgICAgY29weShfX2xhc3QsIF9NX2ZpbmlzaCwgX19maXJzdCk7CiAgICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIF9fbjsKICAgICAgX0Rlc3Ryb3koX19u ZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2Zpbmlz aC5fTV9ub2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNoID0g X19uZXdfZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1Rw LF9BbGxvYz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0YXJ0 Ll9NX25vZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAr K19fbm9kZSkgewogICAgX0Rlc3Ryb3koKl9fbm9kZSwgKl9fbm9kZSArIF9TX2J1ZmZlcl9zaXpl KCkpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX25vZGUpOwogIH0KCiAgaWYgKF9NX3N0YXJ0 Ll9NX25vZGUgIT0gX01fZmluaXNoLl9NX25vZGUpIHsKICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9N X2N1ciwgX01fc3RhcnQuX01fbGFzdCk7CiAgICBfRGVzdHJveShfTV9maW5pc2guX01fZmlyc3Qs IF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m aXJzdCk7CiAgfQogIGVsc2UKICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9NX2N1ciwgX01fZmluaXNo Ll9NX2N1cik7CgogIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0Owp9CiMgMTA1NyAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVl X3R5cGUmIF9fdmFsdWUpCnsKICBfTWFwX3BvaW50ZXIgX19jdXI7CiAgdHJ5IHsKICAgIGZvciAo X19jdXIgPSBfTV9zdGFydC5fTV9ub2RlOyBfX2N1ciA8IF9NX2ZpbmlzaC5fTV9ub2RlOyArK19f Y3VyKQogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoKl9fY3VyLCAqX19jdXIgKyBfU19idWZmZXJf c2l6ZSgpLCBfX3ZhbHVlKTsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfTV9maW5pc2guX01fZmly c3QsIF9NX2ZpbmlzaC5fTV9jdXIsIF9fdmFsdWUpOwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAg ICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXIsIF9fY3VyKSk7CiAgICAgIHRo cm93OwogICAgfQp9CiMgMTA4NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9kZXF1ZS5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9yYW5nZV9pbml0aWFsaXplKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9NX2luaXRpYWxpemVf bWFwKDApOwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp CiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQogIGNhdGNoKC4uLikKICAgIHsKICAgICAg Y2xlYXIoKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1Rw LF9BbGxvYz46Ol9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgX01faW5pdGlhbGl6ZV9tYXAoX19uKTsKCiAgX01hcF9wb2ludGVyIF9fY3Vy X25vZGU7CiAgdHJ5IHsKICAgIGZvciAoX19jdXJfbm9kZSA9IF9NX3N0YXJ0Ll9NX25vZGU7CiAg ICAgICAgIF9fY3VyX25vZGUgPCBfTV9maW5pc2guX01fbm9kZTsKICAgICAgICAgKytfX2N1cl9u b2RlKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZh bmNlKF9fbWlkLCBfU19idWZmZXJfc2l6ZSgpKTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbWlkLCAqX19jdXJfbm9kZSk7CiAgICAgIF9fZmlyc3QgPSBfX21pZDsKICAgIH0K ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX2ZpbmlzaC5fTV9maXJz dCk7CiAgfQogIGNhdGNoKC4uLikKICAgIHsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIGl0ZXJh dG9yKCpfX2N1cl9ub2RlLCBfX2N1cl9ub2RlKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6 X01fcHVzaF9iYWNrX2F1eChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCnsKICB2YWx1ZV90eXBlIF9f dF9jb3B5ID0gX190OwogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2ZpbmlzaC5f TV9ub2RlICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgdHJ5IHsKICAgIF9Db25zdHJ1Y3Qo X01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkpOwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9N X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9N X2ZpcnN0OwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgq KF9NX2ZpbmlzaC5fTV9ub2RlICsgMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVz aF9iYWNrX2F1eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CiAgKihfTV9maW5pc2gu X01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfQ29uc3RydWN0 KF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5f TV9ub2RlICsgMSk7CiAgICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0Owog IH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX2Zpbmlz aC5fTV9ub2RlICsgMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9h dXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsK ICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0g X01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9z dGFydC5fTV9ub2RlIC0gMSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0 IC0gMTsKICAgIF9Db25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyLCBfX3RfY29weSk7CiAgfQogIGNh dGNoKC4uLikKICAgIHsKICAgICAgKytfTV9zdGFydDsKICAgICAgX01fZGVhbGxvY2F0ZV9ub2Rl KCooX01fc3RhcnQuX01fbm9kZSAtIDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1 c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAgKihfTV9zdGFy dC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgdHJ5IHsKICAgIF9NX3N0YXJ0 Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9NX3N0YXJ0Ll9NX2N1ciA9 IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgX0NvbnN0cnVjdChfTV9zdGFydC5fTV9jdXIpOwog IH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgICsrX01fc3RhcnQ7CiAgICAgIF9NX2RlYWxsb2Nh dGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+ OjpfTV9wb3BfYmFja19hdXgoKQp7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m aXJzdCk7CiAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAg X01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMTsKICBfRGVzdHJveShfTV9m aW5pc2guX01fY3VyKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcG9wX2Zyb250X2F1eCgpCnsKICBfRGVzdHJveShf TV9zdGFydC5fTV9jdXIpOwogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9zdGFydC5fTV9maXJzdCk7 CiAgX01fc3RhcnQuX01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9kZSArIDEpOwogIF9NX3N0YXJ0 Ll9NX2N1ciA9IF9NX3N0YXJ0Ll9NX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAs X0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgY29weShf X2ZpcnN0LCBfX2xhc3QsIGluc2VydGVyKCp0aGlzLCBfX3BvcykpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2 b2lkCmRlcXVlPF9UcCxfQWxsb2M+OjppbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg ewogIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX3Bv cy5fTV9jdXIgPT0gX01fc3RhcnQuX01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9 IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5p dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X3N0YXJ0KTsKICAgICAgX01fc3Rh cnQgPSBfX25ld19zdGFydDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9N X2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01fc3RhcnQuX01fbm9kZSk7CiAg ICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSBpZiAoX19wb3MuX01fY3VyID09IF9NX2Zp bmlzaC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxl bWVudHNfYXRfYmFjayhfX24pOwogICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo OwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2Rlcyhf TV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgICAg dGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19maXJz dCwgX19sYXN0LCBfX24pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5 cGVuYW1lIGRlcXVlPF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKZGVxdWU8X1RwLF9BbGxvYz46Ol9N X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKewogIGRp ZmZlcmVuY2VfdHlwZSBfX2luZGV4ID0gX19wb3MgLSBfTV9zdGFydDsKICB2YWx1ZV90eXBlIF9f eF9jb3B5ID0gX194OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6 ZSgpIC8gMikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQx ID0gX01fc3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zy b250MTsKICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAg IGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQy LCBfX3BvczEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsK ICAgIGl0ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVy YXRvciBfX2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3Rh cnQgKyBfX2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7 CiAgfQogICpfX3BvcyA9IF9feF9jb3B5OwogIHJldHVybiBfX3BvczsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsX0FsbG9jPjo6aXRlcmF0 b3IKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MpCnsKICBk aWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgaWYgKHN0YXRpY19j YXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCBzaXplKCkgLyAyKSB7CiAgICBwdXNoX2Zyb250KGZy b250KCkpOwogICAgaXRlcmF0b3IgX19mcm9udDEgPSBfTV9zdGFydDsKICAgICsrX19mcm9udDE7 CiAgICBpdGVyYXRvciBfX2Zyb250MiA9IF9fZnJvbnQxOwogICAgKytfX2Zyb250MjsKICAgIF9f cG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgaXRlcmF0b3IgX19wb3MxID0gX19wb3M7CiAg ICArK19fcG9zMTsKICAgIGNvcHkoX19mcm9udDIsIF9fcG9zMSwgX19mcm9udDEpOwogIH0KICBl bHNlIHsKICAgIHB1c2hfYmFjayhiYWNrKCkpOwogICAgaXRlcmF0b3IgX19iYWNrMSA9IF9NX2Zp bmlzaDsKICAgIC0tX19iYWNrMTsKICAgIGl0ZXJhdG9yIF9fYmFjazIgPSBfX2JhY2sxOwogICAg LS1fX2JhY2syOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAgICBjb3B5X2JhY2t3 YXJkKF9fcG9zLCBfX2JhY2syLCBfX2JhY2sxKTsKICB9CiAgKl9fcG9zID0gdmFsdWVfdHlwZSgp OwogIHJldHVybiBfX3BvczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2 b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVfdHlwZSYgX194KQp7CiAg Y29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19wb3MgLSBfTV9zdGFydDsK ICBzaXplX3R5cGUgX19sZW5ndGggPSB0aGlzLT5zaXplKCk7CiAgdmFsdWVfdHlwZSBfX3hfY29w eSA9IF9feDsKICBpZiAoX19lbGVtc19iZWZvcmUgPCBkaWZmZXJlbmNlX3R5cGUoX19sZW5ndGgg LyAyKSkgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0 X2Zyb250KF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9zdGFydCA9IF9NX3N0YXJ0OwogICAgX19w b3MgPSBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogICAgdHJ5IHsKICAgICAgaWYgKF9fZWxl bXNfYmVmb3JlID49IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19z dGFydF9uID0gX01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB1bmluaXRp YWxpemVkX2NvcHkoX01fc3RhcnQsIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9N X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29weShfX3N0YXJ0X24sIF9fcG9zLCBfX29s ZF9zdGFydCk7CiAgICAgICAgZmlsbChfX3BvcyAtIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3Bv cywgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl ZF9jb3B5X2ZpbGwoX01fc3RhcnQsIF9fcG9zLCBfX25ld19zdGFydCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9NX3N0YXJ0LCBfX3hfY29weSk7CiAgICAgICAgX01fc3RhcnQg PSBfX25ld19zdGFydDsKICAgICAgICBmaWxsKF9fb2xkX3N0YXJ0LCBfX3BvcywgX194X2NvcHkp OwogICAgICB9CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95 X25vZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpOwogICAgICAgIHRo cm93OwogICAgICB9CiAgfQogIGVsc2UgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01f cmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9maW5pc2gg PSBfTV9maW5pc2g7CiAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19hZnRlciA9CiAg ICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zX2JlZm9yZTsKICAgIF9fcG9z ID0gX01fZmluaXNoIC0gX19lbGVtc19hZnRlcjsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1z X2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2Zpbmlz aF9uID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9m aW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5p c2hfbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zLCBfX3BvcyArIGRpZmZlcmVu Y2VfdHlwZShfX24pLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX191 bmluaXRpYWxpemVkX2ZpbGxfY29weShfTV9maW5pc2gsIF9fcG9zICsgZGlmZmVyZW5jZV90eXBl KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3hfY29weSwgX19wb3Ms IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGZp bGwoX19wb3MsIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBjYXRj aCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25vZGVzKF9NX2ZpbmlzaC5fTV9ub2Rl ICsgMSwgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1z YmVmb3JlID0gX19wb3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7 CiAgaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAv IDIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9m cm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9z ID0gX01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOwogICAgdHJ5IHsKICAgICAgaWYgKF9fZWxlbXNi ZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0YXJ0 X24gPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6 ZWRfY29weShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3Rh cnQgPSBfX25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0 YXJ0KTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNlX3R5 cGUoX19uKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9f bikgLSBfX2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9N X3N0YXJ0LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAg ICAgICBjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQogICAg Y2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5f TV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KICBl bHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRf YmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgY29u c3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9CiAgICAgIGRpZmZlcmVuY2VfdHlwZShf X2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19wb3MgPSBfTV9maW5pc2ggLSBfX2VsZW1z YWZ0ZXI7CiAgICB0cnkgewogICAgICBpZiAoX19lbGVtc2FmdGVyID4gZGlmZmVyZW5jZV90eXBl KF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gX01fZmluaXNoIC0gZGlmZmVy ZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmluaXNoX24sIF9N X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAg ICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKICAg ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MpOwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2Uo X19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAgICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShf X21pZCwgX19sYXN0LCBfX3BvcywgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp bmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvcyk7 CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lf bm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwog ICAgICAgIHRocm93OwogICAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9mcm9udChz aXplX3R5cGUgX19uZXdfZWxlbXMpCnsKICBzaXplX3R5cGUgX19uZXdfbm9kZXMKICAgICAgPSAo X19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6ZSgpIC0gMSkgLyBfU19idWZmZXJfc2l6ZSgpOwog IF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KF9fbmV3X25vZGVzKTsKICBzaXplX3R5cGUgX19pOwog IHRyeSB7CiAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX25ld19ub2RlczsgKytfX2kpCiAgICAg ICooX01fc3RhcnQuX01fbm9kZSAtIF9faSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNh dGNoKC4uLikgewogICAgZm9yIChzaXplX3R5cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikK ICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCooX01fc3RhcnQuX01fbm9kZSAtIF9faikpOwogICAg dGhyb3c7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx dWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19l bGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9T X2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBf YXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0cnkgewogICAgZm9yIChf X2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19pKQogICAgICAqKF9NX2ZpbmlzaC5fTV9u b2RlICsgX19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB9CiAgY2F0Y2goLi4uKSB7CiAgICBm b3IgKHNpemVfdHlwZSBfX2ogPSAxOyBfX2ogPCBfX2k7ICsrX19qKQogICAgICBfTV9kZWFsbG9j YXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSArIF9faikpOwogICAgdGhyb3c7CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46 Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2FkZF9hdF9mcm9udCkKewogIHNp emVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5pc2guX01fbm9kZSAtIF9NX3N0YXJ0Ll9N X25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1fbm9kZXMgPSBfX29sZF9udW1fbm9kZXMg KyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVyIF9fbmV3X25zdGFydDsKICBpZiAoX01f bWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7CiAgICBfX25ld19uc3RhcnQgPSBfTV9t YXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAg ICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNfdG9fYWRkIDogMCk7CiAgICBpZiAoX19u ZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAgICAgY29weShfTV9zdGFydC5fTV9ub2Rl LCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBlbHNlCiAgICAgIGNv cHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLAogICAg ICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2Rlcyk7CiAgfQogIGVs c2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXplID0KICAgICAgX01fbWFwX3NpemUgKyBt YXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSArIDI7CgogICAgX01hcF9wb2ludGVyIF9f bmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19tYXBfc2l6ZSk7CiAgICBfX25ld19uc3Rh cnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMgog ICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2Fk ZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEs IF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9zaXpl KTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBfTV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9z aXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0KTsKICBfTV9maW5p c2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzIC0gMSk7Cn0KCgoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guc2l6ZSgpID09IF9f eS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJl Z2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIGxleGljb2dy YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8 X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1Rw LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgZGVxdWU8 X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAs IF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBkZXF1ZTxfVHAs IF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9B bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGRlcXVlPF9UcCwg X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKGRlcXVlPF9UcCxfQWxsb2M+JiBfX3gs IGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNzEgIi91 c3IvaW5jbHVkZS9nKysvc3RhY2siIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxf c3RhY2suaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfc3RhY2suaCIgMwpu YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9T ZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwg Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X1NlcT4KYm9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0 YWNrPF9UcCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxdWVu Y2U+CmNsYXNzIHN0YWNrCnsKCiAKIAogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjp2YWx1 ZV90eXBlIF9TZXF1ZW5jZV92YWx1ZV90eXBlOwogIDsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEs IGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHN0YWNrPF9UcDEs IF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2s8X1RwMSwgX1Nl cTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29s IG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwKICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYpOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl bmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIF9TZXF1ZW5jZSBjb250 YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSByZWZl cmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X3JlZmVyZW5jZSBjb25z dF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVuY2UgYzsKcHVibGljOgogIHN0YWNrKCkg OiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBfU2VxdWVuY2UmIF9fcykgOiBjKF9fcykg e30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogIHNpemVfdHlw ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7IH0KICByZWZlcmVuY2UgdG9wKCkgeyBy ZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgdG9wKCkgY29uc3QgeyByZXR1cm4g Yy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IGMucHVzaF9i YWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3BfYmFjaygpOyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9T ZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuIF9feC5jID09 IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9y PChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kp CnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBz dGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPihjb25zdCBzdGFjazxfVHAs X1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX195IDwg X194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPD0o Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7 CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1Nl cT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFj azxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCn0KIyA3MiAiL3Vz ci9pbmNsdWRlL2crKy9zdGFjayIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv SU9EYXRhL2lucHV0c291cmNlX2ZpbGUuaCIgMiAzCgoKCgoKCgpjbGFzcyBDTF9JbnB1dFNvdXJj ZV9GaWxlIDogcHVibGljIENMX0lucHV0U291cmNlCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xfSW5w dXRTb3VyY2VfRmlsZShjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgQ0xf SW5wdXRTb3VyY2VfRmlsZShjb25zdCBDTF9JbnB1dFNvdXJjZV9GaWxlICpzb3VyY2UpOwoKCiAg ICAgICAgdmlydHVhbCB+Q0xfSW5wdXRTb3VyY2VfRmlsZSgpOwoKCnB1YmxpYzoKCgogICAgICAg IHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkg Y29uc3Q7CgoKcHVibGljOgoKCgoKICAgICAgICB2aXJ0dWFsIGludCByZWFkKHZvaWQgKmRhdGEs IGludCBzaXplKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBvcGVuKCk7CgoKICAgICAgICB2aXJ0 dWFsIHZvaWQgY2xvc2UoKTsKCgoKICAgICAgICB2aXJ0dWFsIENMX0lucHV0U291cmNlICpjbG9u ZSgpIGNvbnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VlayhpbnQgcG9zLCBTZWVrRW51 bSBzZWVrX3R5cGUpOwoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoX3Bvc2l0aW9uKCk7CgoK ICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wX3Bvc2l0aW9uKCk7CgoKcHJpdmF0ZToKICAgICAgICBz dGQ6OnN0YWNrPGludD4gc3RhY2s7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7CiAgICAg ICAgRklMRSAqZmlsZWhhbmRsZTsKICAgICAgICBpbnQgZmlsZXNpemU7Cn07CiMgNTcgIi91c3Iv aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9JT0RhdGEvaW5wdXRzb3VyY2VfbWVtb3J5LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL0lPRGF0YS9pbnB1dHNvdXJjZV9tZW1vcnkuaCIgMwpjbGFzcyBDTF9JbnB1dFNv dXJjZV9NZW1vcnkgOiBwdWJsaWMgQ0xfSW5wdXRTb3VyY2UKewoKcHVibGljOgoKICAgICAgICBD TF9JbnB1dFNvdXJjZV9NZW1vcnkoc3RkOjpzdHJpbmcgZGF0YSk7CgoKICAgICAgICB2aXJ0dWFs IH5DTF9JbnB1dFNvdXJjZV9NZW1vcnkoKTsKCgpwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIGlu dCB0ZWxsKCkgY29uc3Q7CgoKCiAgICAgICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0OwoKCgoK ICAgICAgICBzdGQ6OnN0cmluZyBnZXRfZGF0YSgpIGNvbnN0OwoKCnB1YmxpYzoKCgoKCiAgICAg ICAgdmlydHVhbCBpbnQgcmVhZCh2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAgICAgICB2aXJ0 dWFsIHZvaWQgb3BlbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CgoKCiAgICAg ICAgdmlydHVhbCBDTF9JbnB1dFNvdXJjZSAqY2xvbmUoKSBjb25zdDsKCgoKCiAgICAgICAgdmly dHVhbCB2b2lkIHNlZWsoaW50IHBvcywgU2Vla0VudW0gc2Vla190eXBlKTsKCgoKICAgICAgICB2 aXJ0dWFsIHZvaWQgcHVzaF9wb3NpdGlvbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHBvcF9w b3NpdGlvbigpOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcgZGF0YTsKICAgICAgICB1 bnNpZ25lZCBpbnQgcG9zOwogICAgICAgIGJvb2wgZGVsZXRlX2RhdGE7Cn07CiMgNTggIi91c3Iv aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXIuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9D bGFuTGliL0NvcmUvSU9EYXRhL2lucHV0c291cmNlX3Byb3ZpZGVyLmgiIDMKY2xhc3MgQ0xfSW5w dXRTb3VyY2U7CgoKCgoKY2xhc3MgQ0xfSW5wdXRTb3VyY2VQcm92aWRlcgp7CnB1YmxpYzoKCgog ICAgICAgIHZpcnR1YWwgfkNMX0lucHV0U291cmNlUHJvdmlkZXIoKSB7IHJldHVybjsgfQoKCgoK CiAgICAgICAgc3RhdGljIENMX0lucHV0U291cmNlUHJvdmlkZXIgKmNyZWF0ZV9maWxlX3Byb3Zp ZGVyKGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRoKTsKCgoKCgogICAgICAgIHN0YXRpYyBDTF9JbnB1 dFNvdXJjZVByb3ZpZGVyICpjcmVhdGVfZGF0YWZpbGVfcHJvdmlkZXIoY29uc3Qgc3RkOjpzdHJp bmcgJmZpbGVuYW1lKTsKCgoKCgogICAgICAgIHZpcnR1YWwgQ0xfSW5wdXRTb3VyY2UgKm9wZW5f c291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nICZoYW5kbGUpID0gMDsKCgoKICAgICAgICB2aXJ0dWFs IENMX0lucHV0U291cmNlUHJvdmlkZXIgKmNsb25lKCkgPSAwOwoKCiAgICAgICAgdmlydHVhbCBz dGQ6OnN0cmluZyBnZXRfcGF0aChjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpID0gMDsKCn07 CiMgNTkgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXJfZmlsZS5oIiAxIDMKIyAy NSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEvaW5wdXRzb3VyY2VfcHJvdmlkZXJf ZmlsZS5oIiAzCmNsYXNzIENMX0lucHV0U291cmNlOwoKCmNsYXNzIENMX0lucHV0U291cmNlUHJv dmlkZXJfRmlsZSA6IHB1YmxpYyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyCnsKCnB1YmxpYzoKCiAg ICAgICAgQ0xfSW5wdXRTb3VyY2VQcm92aWRlcl9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRo KTsKCgogICAgICAgIHZpcnR1YWwgQ0xfSW5wdXRTb3VyY2UgKm9wZW5fc291cmNlKGNvbnN0IHN0 ZDo6c3RyaW5nICZmaWxlbmFtZSk7CgoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRfcGF0aChjb25z dCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwoKCiAgICAgICAgdmlydHVhbCBDTF9JbnB1dFNvdXJj ZVByb3ZpZGVyICpjbG9uZSgpOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjpzdHJpbmcgcHJvdmlk ZXJfcGF0aDsKfTsKIyA2MCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2UuaCIgMSAzCiMgMzIg Ii91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvSU9EYXRhL291dHB1dHNvdXJjZS5oIiAzCmNsYXNz IENMX091dHB1dFNvdXJjZQp7CgpwdWJsaWM6CgogICAgICAgIENMX091dHB1dFNvdXJjZSgpIHsg c2V0X3N5c3RlbV9tb2RlKCk7IH0KCgogICAgICAgIHZpcnR1YWwgfkNMX091dHB1dFNvdXJjZSgp IHsgcmV0dXJuOyB9CgoKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCBpbnQgdGVsbCgpIGNvbnN0 ID0gMDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3QgPSAwOwoKCnB1YmxpYzoK CiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9zeXN0ZW1fbW9kZSgpOwoKCiAgICAgICAgdmlydHVh bCB2b2lkIHNldF9iaWdfZW5kaWFuX21vZGUoKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRf bGl0dGxlX2VuZGlhbl9tb2RlKCk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfaW50MzIo aW50IGRhdGEpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX3VpbnQzMih1bnNpZ25lZCBp bnQgZGF0YSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfc2hvcnQxNihzaG9ydCBkYXRh KTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZV91c2hvcnQxNih1bnNpZ25lZCBzaG9ydCBk YXRhKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9jaGFyOChjaGFyIGRhdGEpOwoKCiAg ICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX3VjaGFyOCh1bnNpZ25lZCBjaGFyIGRhdGEpOwoKCiAg ICAgICAgdmlydHVhbCB2b2lkIHdyaXRlX2Zsb2F0MzIoZmxvYXQgZGF0YSk7CgoKICAgICAgICB2 aXJ0dWFsIHZvaWQgd3JpdGVfYm9vbDgoYm9vbCBkYXRhKTsKCgoKCiAgICAgICAgdmlydHVhbCB2 b2lkIHdyaXRlX3N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmc3RyKTsKCgoKCgogICAgICAgIHZp cnR1YWwgaW50IHdyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplKSA9IDA7CgoKICAgICAg ICB2aXJ0dWFsIHZvaWQgb3BlbigpID0gMDsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgp ID0gMDsKCgoKICAgICAgICB2aXJ0dWFsIENMX091dHB1dFNvdXJjZSAqY2xvbmUoKSA9IDA7CgoK cHJvdGVjdGVkOgogICAgICAgIGJvb2wgbGl0dGxlX2VuZGlhbl9tb2RlOwp9OwojIDYxICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0Nv cmUvSU9EYXRhL291dHB1dHNvdXJjZV9maWxlLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2VfZmlsZS5oIiAzCmNsYXNzIENMX091dHB1dFNv dXJjZV9GaWxlIDogcHVibGljIENMX091dHB1dFNvdXJjZQp7CgpwdWJsaWM6CgogICAgICAgIENM X091dHB1dFNvdXJjZV9GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlKTsKCgogICAgICAgIENM X091dHB1dFNvdXJjZV9GaWxlKCk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9PdXRwdXRTb3VyY2Vf RmlsZSgpOwoKCnB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgaW50IHRlbGwoKSBjb25zdDsKCgoK ICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5n IGdldF9kYXRhKCkgY29uc3Q7CgoKcHVibGljOgoKCgoKICAgICAgICB2aXJ0dWFsIGludCB3cml0 ZShjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgb3Bl bigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CgoKCiAgICAgICAgdmlydHVhbCBD TF9PdXRwdXRTb3VyY2UgKmNsb25lKCk7CgoKcHJpdmF0ZToKICAgICAgICB1bnNpZ25lZCBpbnQg cG9zOwogICAgICAgIEZJTEUgKmZpbGU7CiAgICAgICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7Cn07 CiMgNjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX21lbW9yeS5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX21lbW9yeS5oIiAzCmNs YXNzIENMX091dHB1dFNvdXJjZV9NZW1vcnkgOiBwdWJsaWMgQ0xfT3V0cHV0U291cmNlCnsKCnB1 YmxpYzoKCiAgICAgICAgQ0xfT3V0cHV0U291cmNlX01lbW9yeSgpOwoKCiAgICAgICAgdmlydHVh bCB+Q0xfT3V0cHV0U291cmNlX01lbW9yeSgpOwoKCnB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwg aW50IHRlbGwoKSBjb25zdDsKCgoKICAgICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CgoK CgogICAgICAgIHN0ZDo6c3RyaW5nIGdldF9kYXRhKCkgY29uc3Q7CgoKcHVibGljOgoKCgoKICAg ICAgICB2aXJ0dWFsIGludCB3cml0ZShjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CgoKICAg ICAgICB2aXJ0dWFsIHZvaWQgb3BlbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7 CgoKCiAgICAgICAgdmlydHVhbCBDTF9PdXRwdXRTb3VyY2UgKmNsb25lKCk7CgoKcHJpdmF0ZToK ICAgICAgICBzdGQ6OnN0cmluZyBkYXRhOwogICAgICAgIHVuc2lnbmVkIGludCBwb3M7Cn07CiMg NjMgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0Ns YW5MaWIvQ29yZS9JT0RhdGEvb3V0cHV0c291cmNlX3Byb3ZpZGVyLmgiIDEgMwojIDI0ICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL0lPRGF0YS9vdXRwdXRzb3VyY2VfcHJvdmlkZXIuaCIgMwpj bGFzcyBDTF9PdXRwdXRTb3VyY2U7CgoKCgoKY2xhc3MgQ0xfT3V0cHV0U291cmNlUHJvdmlkZXIK ewpwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIH5DTF9PdXRwdXRTb3VyY2VQcm92aWRlcigpIHsg cmV0dXJuOyB9CgoKCgogICAgICAgIHZpcnR1YWwgQ0xfT3V0cHV0U291cmNlICpvcGVuX3NvdXJj ZShjb25zdCBzdGQ6OnN0cmluZyAmaGFuZGxlKSA9IDA7CgoKCiAgICAgICAgdmlydHVhbCBDTF9P dXRwdXRTb3VyY2VQcm92aWRlciAqY2xvbmUoKSA9IDA7Cn07CiMgNjQgIi91c3IvaW5jbHVkZS9D bGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9JT0RhdGEv ZGlyZWN0b3J5X3NjYW5uZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUv SU9EYXRhL2RpcmVjdG9yeV9zY2FubmVyLmgiIDMKY2xhc3MgQ0xfRGlyZWN0b3J5U2Nhbm5lcl9H ZW5lcmljOwoKY2xhc3MgQ0xfRGlyZWN0b3J5U2Nhbm5lcgp7CgpwdWJsaWM6CgogICAgICAgIENM X0RpcmVjdG9yeVNjYW5uZXIoKTsKCgogICAgICAgIENMX0RpcmVjdG9yeVNjYW5uZXIoY29uc3Qg Q0xfRGlyZWN0b3J5U2Nhbm5lciAmY29weSk7CgoKICAgICAgICB+Q0xfRGlyZWN0b3J5U2Nhbm5l cigpOwoKCnB1YmxpYzoKCiAgICAgICAgYm9vbCBzY2FuKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo bmFtZSk7CgoKICAgICAgICBib29sIHNjYW4oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhuYW1lLCBj b25zdCBzdGQ6OnN0cmluZyYgcGF0dGVybik7CgoKICAgICAgICBzdGQ6OnN0cmluZyBnZXRfZGly ZWN0b3J5X3BhdGgoKTsKCgogICAgICAgIHN0ZDo6c3RyaW5nIGdldF9uYW1lKCk7CgoKICAgICAg ICBzdGQ6OnN0cmluZyBnZXRfcGF0aG5hbWUoKTsKCgogICAgICAgIGJvb2wgaXNfZGlyZWN0b3J5 KCk7CgoKICAgICAgICBib29sIGlzX2hpZGRlbigpOwoKCgoKcHVibGljOgoKICAgICAgICBDTF9E aXJlY3RvcnlTY2FubmVyICZvcGVyYXRvciA9KGNvbnN0IENMX0RpcmVjdG9yeVNjYW5uZXIgJmNv cHkpOwoKCiAgICAgICAgYm9vbCBuZXh0KCk7CgoKcHJpdmF0ZToKCiAgICAgICAgQ0xfRGlyZWN0 b3J5U2Nhbm5lcl9HZW5lcmljICppbXBsOwp9OwojIDY1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9j b3JlLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVz b3VyY2V0eXBlLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNl cy9yZXNvdXJjZXR5cGUuaCIgMwpjbGFzcyBDTF9SZXNvdXJjZTsKCgpjbGFzcyBDTF9SZXNvdXJj ZVR5cGUKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJjZVR5cGUoY29uc3Qgc3RkOjpzdHJp bmcgJnR5cGUpOwoKCiAgICAgICAgdmlydHVhbCB+Q0xfUmVzb3VyY2VUeXBlKCk7CgoKcHVibGlj OgoKICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0X3R5cGUoKSBjb25zdCB7IHJldHVybiB0 eXBlOyB9CgoKICAgICAgICBzdGF0aWMgc3RkOjpsaXN0PENMX1Jlc291cmNlVHlwZSo+IHJlc291 cmNlX3R5cGVzOwoKCnB1YmxpYzoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfZGF0 YShDTF9SZXNvdXJjZSAmcmVzb3VyY2UpPTA7CgoKcHJpdmF0ZToKICAgICAgICBzdGQ6OnN0cmlu ZyB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUmVzb3VyY2U+CgoKCgpjbGFzcyBDTF9SZWdpc3Rl clJlc291cmNlVHlwZSA6IHB1YmxpYyBDTF9SZXNvdXJjZVR5cGUKewpwdWJsaWM6CgogICAgICAg IENMX1JlZ2lzdGVyUmVzb3VyY2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKSA6IENMX1Jl c291cmNlVHlwZSh0eXBlKQogICAgICAgIHsKICAgICAgICB9CgoKICAgICAgICB2aXJ0dWFsIHZv aWQgY29ubmVjdF9kYXRhKENMX1Jlc291cmNlICZyZXNvdXJjZSkKICAgICAgICB7CiAgICAgICAg ICAgICAgICBuZXcgUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgIH0KfTsKIyA2OCAiL3Vzci9p bmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9SZXNvdXJjZXMvcmVzb3VyY2VvcHRpb25zLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZW9wdGlvbnMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKysvbWFwIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy9tYXAiIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvZysrL2Jp dHMvc3RsX3RyZWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIF9SYl90cmVlX2NvbG9yIHsg X01fcmVkID0gZmFsc2UsIF9NX2JsYWNrID0gdHJ1ZSB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfbm9k ZV9iYXNlCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAg ICBfUmJfdHJlZV9jb2xvciBfTV9jb2xvcjsKICAgIF9CYXNlX3B0ciBfTV9wYXJlbnQ7CiAgICBf QmFzZV9wdHIgX01fbGVmdDsKICAgIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgICBzdGF0aWMgX0Jh c2VfcHRyCiAgICBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChf X3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgICByZXR1cm4gX194Owog ICAgfQoKICAgIHN0YXRpYyBfQmFzZV9wdHIKICAgIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkK ICAgIHsKICAgICAgd2hpbGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdo dDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs PgogICAgc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCiAg ICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKICAgICAg X1ZhbCBfTV92YWx1ZV9maWVsZDsKICAgIH07CgogIHN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJh dG9yCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9w dHI7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgIF9CYXNlX3B0 ciBfTV9ub2RlOwoKICAgIHZvaWQKICAgIF9NX2luY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChf TV9ub2RlLT5fTV9yaWdodCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX25vZGUgPSBfTV9u b2RlLT5fTV9yaWdodDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAg ICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7 CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9N X3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9 IF9feSkKICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CgogICAgdm9p ZAogICAgX01fZGVjcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09 IF9NX3JlZAogICAgICAgICAgJiYgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01f bm9kZSkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgIGVsc2UgaWYg KF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195 ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDAp CiAgICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICBfTV9ub2RlID0gX195 OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kg PSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9N X2xlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAg ICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9u b2RlID0gX195OwogICAgICAgIH0KICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFs LCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9SYl90cmVlX2l0ZXJh dG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKICAgIHsKICAgICAgdHlwZWRlZiBf VmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVk ZWYgX1B0ciBwb2ludGVyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9W YWwmLCBfVmFsKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh bCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPgogICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAg dHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiBfU2VsZjsKICAgICAg dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwoKICAgICAgX1JiX3RyZWVf aXRlcmF0b3IoKSB7fQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBf TV9ub2RlID0gX194OyB9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBf X2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBv cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9m aWVsZDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g JihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvcisrKCkKICAgICAg ewogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK ICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBf X3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3Rt cDsKICAgICAgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVu dCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yLS0oaW50KQog ICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9kZWNyZW1lbnQo KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9f eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0 cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z dCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gs CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFs Kj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z dCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAg ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFs Kj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf UmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsLCBfUmVmLCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25z dCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh bCwgX1ZhbCYsIF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9f eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh bCYsIGNvbnN0IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9N X25vZGU7IH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9u b2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90 cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICAgIF9feC0+X01fcmlnaHQgPSBf X3ktPl9NX2xlZnQ7CiAgICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgICAgX195LT5fTV9sZWZ0 LT5fTV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoK ICAgIGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChf X3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9s ZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7 CiAgICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9Cgog IGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSog X194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0 OwogICAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgICAgX195LT5fTV9yaWdodC0+X01fcGFy ZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAo X194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9f eC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g X195OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIF9f eS0+X01fcmlnaHQgPSBfX3g7CiAgICBfX3gtPl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGlu ZSB2b2lkCiAgX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJf dHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX194LT5fTV9jb2xvciA9IF9NX3JlZDsK ICAgIHdoaWxlIChfX3ggIT0gX19yb290CiAgICAgICAgICAgJiYgX194LT5fTV9wYXJlbnQtPl9N X2NvbG9yID09IF9NX3JlZCkKICAgICAgewogICAgICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBf X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgewogICAgICAgICAg ICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9N X3JpZ2h0OwogICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX01fcmVkKQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9 IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7 CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICAg ICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAg ICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsK ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f cmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50 LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBf X3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICBpZiAoX195ICYm IF9feS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195 LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9N X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N X2xlZnQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gt Pl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194 LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3Bh cmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50 LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVf cm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAg ICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgIF9fcm9vdC0+X01fY29sb3IgPSBfTV9ibGFj azsKICB9CgogIGlubGluZSBfUmJfdHJlZV9ub2RlX2Jhc2UqCiAgX1JiX3RyZWVfcmViYWxhbmNl X2Zvcl9lcmFzZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKICB7 CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsKICAgIF9SYl90cmVlX25vZGVfYmFz ZSogX194ID0gMDsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgICBp ZiAoX195LT5fTV9sZWZ0ID09IDApCiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICBlbHNl CiAgICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX194ID0gX195LT5fTV9sZWZ0 OwogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg ICAgICAgICB3aGlsZSAoX195LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9feSA9IF9feS0+ X01fbGVmdDsKICAgICAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgaWYg KF9feSAhPSBfX3opCiAgICAgIHsKCiAgICAgICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBf X3k7CiAgICAgICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0OwogICAgICAgIGlmIChfX3kg IT0gX196LT5fTV9yaWdodCkKICAgICAgICAgIHsKICAgICAgICAgICAgX194X3BhcmVudCA9IF9f eS0+X01fcGFyZW50OwogICAgICAgICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+ X01fcGFyZW50OwogICAgICAgICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAg ICAgICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgICAgICAgIF9fei0+ X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg ICAgICBfX3hfcGFyZW50ID0gX195OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAg ICAgX19yb290ID0gX195OwogICAgICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0 ID09IF9feikKICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgICAg IGVsc2UKICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgICAgICBf X3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAgICAgIHN0ZDo6c3dhcChfX3ktPl9N X2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgICAgICBfX3kgPSBfX3o7CgogICAgICB9CiAgICBl bHNlCiAgICAgIHsKICAgICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAg aWYgKF9feCkKICAgICAgICAgIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAg ICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3g7CiAgICAgICAgZWxz ZQogICAgICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICAg ICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAgICAgICBpZiAoX19sZWZ0bW9z dCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKQogICAgICAgICAgICBf X2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBf X2xlZnRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICAgICAg aWYgKF9fcmlnaHRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkK ICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVt KF9feCk7CiAgICAgIH0KICAgIGlmIChfX3ktPl9NX2NvbG9yICE9IF9NX3JlZCkKICAgICAgewog ICAgICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9y ID09IF9NX2JsYWNrKSkKICAgICAgICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194 X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01f cmVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g X01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVk OwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jv b3QpOwogICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAg ICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAg ICAgICAgICAgICAgICAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBf X3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAg IF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFy ZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwCiAg ICAgICAgICAgICAgICAgICAgICB8fCBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFj aykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5f TV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAgICAgIF9f dyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAg ICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAg ICBpZiAoX193LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5f TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAg ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsK ICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg ICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAg IF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg ICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGlmICgoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ct Pl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9f dy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv bG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193 LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsK ICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fCBfX3ctPl9NX2xlZnQtPl9NX2Nv bG9yID09IF9NX2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9NX2JsYWNr OwogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAg ICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAg ICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29s b3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg ICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpCiAgICAgICAgICAgICAgICAgICAgX193 LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJl ZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICBpZiAoX194KSBfX3gt Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgIH0KICAgIHJldHVybiBfX3k7CiAgfQoKCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgYm9vbCBfU19pbnN0YW5j ZWxlc3M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAg ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3Jf dHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxv Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX1JiX3Ry ZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX25vZGVf YWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgdHlw ZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRv cl90eXBlCiAgICAgIF9NX25vZGVfYWxsb2NhdG9yOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+ KiBfTV9oZWFkZXI7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2Rl KCkgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQK ICAgICAgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX01fbm9k ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5 cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh bGxvY2F0b3JfdHlwZSgpOyB9CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9SYl90 cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf dHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUKICAgICAgX0Fs bG9jX3R5cGU7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qCiAgICAgIF9NX2dldF9ub2RlKCkg eyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9N X3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9j YXRlKF9fcCwgMSk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPgogICAgc3RydWN0IF9SYl90cmVlX2Jhc2UgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2Nf YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv Y190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICB7CiAgICAgIHR5cGVk ZWYgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsCiAgICAgICAgX0FsbG9jLCBfQWxsb2NfdHJhaXRz PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPiBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfUmJfdHJl ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKSB7IF9N X2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICAgICAgfl9SYl90cmVlX2Jhc2UoKSB7IF9NX3B1 dF9ub2RlKF9NX2hlYWRlcik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWw+ID4KICAgIGNsYXNzIF9S Yl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPgogICAgewogICAg ICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbCwgX0FsbG9jPiBfQmFzZTsKCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CiAgICAgIHR5 cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiBfUmJfdHJlZV9ub2RlOwoKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsK ICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZh bHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAg ICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogICAgICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jh c2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdXNpbmcgX0Jhc2U6 Ol9NX2dldF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICAgIHVzaW5n IF9CYXNlOjpfTV9oZWFkZXI7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NyZWF0ZV9ub2Rl KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX190bXAg PSBfTV9nZXRfbm9kZSgpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfQ29uc3RydWN0KCZfX3Rt cC0+X01fdmFsdWVfZmllbGQsIF9feCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7 CiAgICAgICAgICBfTV9wdXRfbm9kZShfX3RtcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICAg IH0KICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9MaW5rX3R5cGUKICAgICAg X01fY2xvbmVfbm9kZShfTGlua190eXBlIF9feCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUg X190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfX3Rt cC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsK ICAgICAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAg fQoKICAgICAgdm9pZAogICAgICBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgICAgIHsK ICAgICAgICBfRGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX01fcHV0X25v ZGUoX19wKTsKICAgICAgfQoKICAgICAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7CiAgICAgIF9D b21wYXJlIF9NX2tleV9jb21wYXJlOwoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcm9vdCgp IGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KCiAg ICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5r X3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9N X3JpZ2h0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9y aWdodDsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0xpbmtfdHlw ZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3Rh dGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAo X0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYK ICAgICAgX1NfcGFyZW50KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9f eC0+X01fcGFyZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShf TGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfTGlua190eXBlIF9feCkgeyByZXR1cm4gX0tl eU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9y JgogICAgICBfU19jb2xvcihfTGlua190eXBlIF9feCkgeyByZXR1cm4gX194LT5fTV9jb2xvcjsg fQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkg eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMgX0xp bmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5 cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9T X3BhcmVudChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFy ZW50KTsgfQoKICAgICAgc3RhdGljIHJlZmVyZW5jZQogICAgICBfU192YWx1ZShfQmFzZV9wdHIg X194KSB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4g X0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9CgogICAgICBzdGF0aWMg X1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChf TGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAg ICAgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUp IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogICAgICBzdGF0aWMgX0xp bmtfdHlwZQogICAgICBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAo X0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJl bmNlLCBwb2ludGVyPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2 YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgIGNvbnN0X2l0 ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IKICAg ICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5 cGUmIF9fdik7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gs IF9MaW5rX3R5cGUgX19wKTsKCiAgICAgIHZvaWQKICAgICAgX01fZXJhc2UoX0xpbmtfdHlwZSBf X3gpOwoKICAgIHB1YmxpYzoKCiAgICAgIF9SYl90cmVlKCkKICAgICAgICA6IF9CYXNlKGFsbG9j YXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICAgIHsg X01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYg X19jb21wKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQo MCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7 IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EpCiAgICAgICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9r ZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAg ICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYgX194KQogICAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksIF9NX25v ZGVfY291bnQoMCksCiAgICAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9j b21wYXJlKQogICAgICB7CiAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgICAg IF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CiAgICAgICAgICAgIF9NX3Jvb3QoKSA9 IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgICAgICAgX01fbGVmdG1v c3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkg PSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICB9CiAgICAgICAgX01fbm9kZV9jb3Vu dCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgICB9CgogICAgICB+X1JiX3RyZWUoKSB7IGNsZWFy KCk7IH0KCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JgogICAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feCk7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBfTV9lbXB0 eV9pbml0aWFsaXplKCkKICAgICAgewogICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9y ZWQ7CgogICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hl YWRlcjsKICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgfQoKICAgIHB1 YmxpYzoKCiAgICAgIF9Db21wYXJlCiAgICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01f a2V5X2NvbXBhcmU7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkgeyByZXR1cm4gX01f bGVmdG1vc3QoKTsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7 IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKSB7IHJl dHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0 IHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVn aW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu IF9NX25vZGVfY291bnQgPT0gMDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25z dCB7IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICB2b2lkCiAgICAgIHN3 YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkK ICAgICAgewogICAgICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAg ICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICAgICAg c3RkOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogICAgICB9CgoK ICAgICAgcGFpcjxpdGVyYXRvcixib29sPgogICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVl X3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfZXF1YWwoY29uc3QgdmFs dWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF91bmlxdWUoaXRlcmF0 b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAg ICAgIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBf X3gpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQK ICAgICAgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAg IHZvaWQKICAgICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp b24pOwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoK ICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp OwoKICAgICAgdm9pZAogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwgY29uc3Qg a2V5X3R5cGUqIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkKICAgICAgewogICAg ICAgIGlmIChfTV9ub2RlX2NvdW50ICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2Vy YXNlKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg ICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f aGVhZGVyOwogICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAg fQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAg ICBjb25zdF9pdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK ICAgICAgaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7Cgog ICAgICBjb25zdF9pdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl JiBfX3gpOwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgogICAgICBl cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0 b3IsIGNvbnN0X2l0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdDsKCgogICAgICBib29sCiAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAg ICAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgIGVxdWFsKF9feC5i ZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3Jh cGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEo X194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwg dHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8 X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8 PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9f eCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9feSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogICAg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgb3Bl cmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gpCiAgICAgICAgewoKICAgICAg ICAgIGNsZWFyKCk7CiAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIF9NX2tl eV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgICAgICAgaWYgKF9feC5fTV9yb290 KCkgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAg ICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgICBfTV9yaWdo dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf TV9oZWFkZXIpOwogICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jv b3QoKSk7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3Qo KSk7CiAgICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IK ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg IF9NX2luc2VydChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWwmIF9f dikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICAgICAg X0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICAgICAgX0xpbmtfdHlwZSBfX3o7 CgogICAgICBpZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fAogICAgICAgICAgX01f a2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpCiAgICAgICAgewog ICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX2xlZnQoX195 KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX2hlYWRlcikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3Qo KSA9IF9fejsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX195ID09IF9NX2xlZnRt b3N0KCkpCiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAg ICAgIF9TX3JpZ2h0KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9yaWdodG1v c3QoKSkKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBf U19wYXJlbnQoX196KSA9IF9feTsKICAgICAgX1NfbGVmdChfX3opID0gMDsKICAgICAgX1Nfcmln aHQoX196KSA9IDA7CiAgICAgIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01f cGFyZW50KTsKICAgICAgKytfTV9ub2RlX2NvdW50OwogICAgICByZXR1cm4gaXRlcmF0b3IoX196 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWwmIF9fdikKICAgIHsK ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0g X01fcm9vdCgpOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195 ID0gX194OwogICAgICAgICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp LCBfU19rZXkoX194KSkgPwogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gp OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46Oml0ZXJhdG9yLAogICAgYm9vbD4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoY29uc3QgX1ZhbCYgX192 KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlw ZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKICAgICAgd2hpbGUg KF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9feDsKICAgICAgICAgIF9fY29t cCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAg ICAgICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAgICAg ICB9CiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIGlmIChfX2NvbXAp CiAgICAgICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0 b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgICBlbHNlCiAg ICAgICAgICAtLV9fajsKICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9k ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9v bD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgcmV0dXJuIHBhaXI8aXRl cmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwg X1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3Ry ZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKICAgIGluc2Vy dF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAg ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7 CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICBfTV9rZXlfY29tcGFy ZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAg ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01f bm9kZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5p cXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25v ZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUo X1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAg cmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRp b247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9T X2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICAgICAg ICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSxfU19rZXkoX19wb3NpdGlvbi5f TV9ub2RlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZv cmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19i ZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBy ZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBf X3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5z ZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1Ji X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0 X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAg aWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoK ICAgICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgIV9NX2tleV9jb21wYXJl KF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAg ICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9u b2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVh bChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9N X2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZW YWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICAgICAgICByZXR1cm4g X01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAg ICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgICAgICAg LS1fX2JlZm9yZTsKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShf X3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgICAgICAgJiYgIV9NX2tleV9j b21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICBy ZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUs IF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAg ICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFz cyBfSUk+CiAgICAgIHZvaWQKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxs b2M+OjoKICAgICAgaW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgICB7 CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAg aW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgIHZvaWQKICAgIF9S Yl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKF9J SSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaW5rX3R5cGUg X195ID0KICAgICAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShf X3Bvc2l0aW9uLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcmln aHQpOwogICAgICBkZXN0cm95X25vZGUoX195KTsKICAgICAgLS1fTV9ub2RlX2NvdW50OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKICAgIHsKICAgICAgcGFpcjxpdGVyYXRv cixpdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICAgICAgc2l6ZV90eXBlIF9fbiA9 IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIGVyYXNlKF9fcC5maXJzdCwg X19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9W YWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCiAgICBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gs IF9MaW5rX3R5cGUgX19wKQogICAgewoKICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25l X25vZGUoX194KTsKICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgIHRyeQogICAg ICAgIHsKICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICBfX3RvcC0+X01f cmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgICAgICAgIF9fcCA9IF9f dG9wOwogICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgICAgICAgIHdoaWxlIChfX3gg IT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xv bmVfbm9kZShfX3gpOwogICAgICAgICAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgICAg ICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgICAgICAgICBpZiAoX194LT5fTV9yaWdo dCkKICAgICAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCks IF9feSk7CiAgICAgICAgICAgICAgX19wID0gX195OwogICAgICAgICAgICAgIF9feCA9IF9TX2xl ZnQoX194KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg IHsKICAgICAgICAgIF9NX2VyYXNlKF9fdG9wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fdG9wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQogICAg ewoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX2VyYXNlKF9T X3JpZ2h0KF9feCkpOwogICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAg ICAgICAgICBkZXN0cm95X25vZGUoX194KTsKICAgICAgICAgIF9feCA9IF9feTsKICAgICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg ICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQogICAg ICAgIGNsZWFyKCk7CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp IGVyYXNlKF9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0 LCBjb25zdCBfS2V5KiBfX2xhc3QpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkKICAgICAgICBlcmFzZSgqX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tl eSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAg aWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9f eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3Jp Z2h0KF9feCk7CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1 cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9k ZSkpKSA/CiAgICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQo Y29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hl YWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgIHdoaWxlIChfX3gg IT0gMCkKICAgICAgIHsKICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg X19rKSkKICAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICAg ZWxzZQogICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgICAgICB9CiAgICAgY29uc3Rf aXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICAgICByZXR1cm4gKF9faiA9PSBl bmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAg ICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGNvdW50KGNvbnN0IF9LZXkmIF9faykg Y29uc3QKICAgIHsKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9f cCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX3Au Zmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAg ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBs b3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0g X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxl IChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2sp KQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQog ICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs bG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNv bnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190 eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAo IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBf X3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQo X194KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9y CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAg ICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195 ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdo aWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194 KSkpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNl CiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9f eSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykg Y29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r X3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlm IChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwg X194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0 KF9feCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZQog ICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9yYW5nZShjb25z dCBfS2V5JiBfX2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJf Ym91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8 X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46 OmNvbnN0X2l0ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBf QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgewogICAgcmV0 dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91 bmQoX19rKSk7CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewogICAgaWYgKF9f bm9kZSA9PSAwKQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAgICBkbwogICAg ICB7CiAgICAgICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAr K19fc3VtOwogICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAgYnJlYWs7CiAg ICAgICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdoaWxlICgxKTsK ICAgIHJldHVybiBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAgewogICAgaWYg KF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICByZXR1cm4gX01f bm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICBfTV9oZWFkZXIt Pl9NX2xlZnQgPT0gX01faGVhZGVyICYmIF9NX2hlYWRlci0+X01fcmlnaHQgPT0gX01faGVhZGVy OwoKICAgIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgp KTsKICAgIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7 ICsrX19pdCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9f aXQuX01fbm9kZTsKICAgICAgICBfTGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgICAg ICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgICAgIGlmIChfX3gtPl9NX2Nv bG9yID09IF9NX3JlZCkKICAgICAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX01f cmVkKQogICAgICAgICAgICAgIHx8IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfTV9yZWQpKQog ICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBh cmUoX1Nfa2V5KF9feCksIF9TX2tleShfX0wpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg ICAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkp CiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmICghX19MICYmICFfX1IgJiYgX19i bGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgIH0KCiAgICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6 Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9NX3Jp Z2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290KCkpKQog ICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQojIDY3ICIvdXNyL2lu Y2x1ZGUvZysrL21hcCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIg MSAzCiMgNjYgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CiMgNzcgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg ICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xh c3MgbWFwCnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBl ZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBw YWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9j b21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsK ICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoK ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5 cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7 CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVf dHlwZSwKICAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21w YXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlw ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxs b2NhdG9yX3R5cGU7CgoKCiAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl KCkpIHt9CiAgZXhwbGljaXQgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAg ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf TV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg bWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDog X01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlx dWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29u c3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5p cXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9B bGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAg fQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29t cCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVf Y29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRv ciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0b3Ig YmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVu ZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBj b25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdp bigpIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICByZXZl cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoKCgogIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoK ICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgogIHNpemVfdHlw ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KCiAgc2l6ZV90eXBlIG1heF9z aXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiMgMjIxICIvdXNyL2luY2x1 ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBl JiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9f aSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0g aW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNl Y29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9z dGxfbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBl JiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQojIDI2MSAiL3Vz ci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl cnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3Qp OwogIH0KIyAyODQgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVy YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5 NyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBlcmFzZShj b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyAzMDkgIi91 c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3Qp OyB9CgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CiMgMzMyICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyAzNTQgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9NX3QuZW5kKCkgPyAw IDogMTsKICB9CiMgMzY5ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRl cmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2Vy X2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDMK ICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7 CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KIyAzOTMgIi91c3IvaW5jbHVk ZS9nKysvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlf dHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDQwMyAiL3Vzci9p bmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5k KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5k KF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHBh aXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsK ICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDQ0MyAiL3Vzci9pbmNsdWRl L2crKy9iaXRzL3N0bF9tYXAuaCIgMwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0 b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf TV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBf VDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0 IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNz IF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25z dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK ICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh dG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B bGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK ICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjggIi91c3IvaW5jbHVkZS9nKysvbWFwIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDEgMwojIDY2ICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNz PF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tl eSwgX1RwPiA+ID4KY2xhc3MgbXVsdGltYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7CiMgOTAgIi91c3IvaW5jbHVkZS9n KysvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoK cHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5 cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXks IF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFz cyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1 ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBh cmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0 b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3Qg ewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnBy aXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAg ICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1Jl cF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw X3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpy ZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9y ZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpp dGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRl cmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVy c2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlw ZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoK ICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBl eHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAg ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf TV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog IG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkK ICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2Vy dF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2Nv bXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGlt YXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3Qo X194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9w ZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsK ICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBh cmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9j b21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5 X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1 cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7 IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N X3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBf TV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf TV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj b25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciBy ZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgp IGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25z dCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0 KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsg fQojIDI1OSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRlcmF0 b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog ICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQojIDI3MCAi L3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19s YXN0KTsKICB9CiMgMjg0ICIvdXNyL2luY2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK ICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9u KTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgc2l6 ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194 KTsgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9p ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJh c2UoX19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIo KTsgfQojIDMzMiAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgaXRl cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsg fQojIDM0NSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgY29uc3Rf aXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZp bmQoX194KTsgfQoKCgoKCgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBj b25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KIyAzNjUgIi91c3IvaW5jbHVkZS9nKysv Yml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4ICIvdXNyL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciBsb3dlcl9i b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9i b3VuZChfX3gpOwogIH0KCgoKCgoKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw ZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQoKCgoKCgoKICBjb25zdF9p dGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KIyA0MTMgIi91c3IvaW5jbHVkZS9nKysvYml0 cy9zdGxfbXVsdGltYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jhbmdl KGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7 CiAgfQojIDQzMSAiL3Vzci9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFp cjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAg ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0Ex PiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9D MSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBj bGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9U MSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L MSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkg ewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl cmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OSAiL3Vzci9pbmNsdWRlL2crKy9tYXAiIDIg MwojIDIzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZW9wdGlv bnMuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2VzL3Jlc291 cmNlb3B0aW9uLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNl cy9yZXNvdXJjZW9wdGlvbi5oIiAzCmNsYXNzIENMX1Jlc291cmNlT3B0aW9uCnsKCnB1YmxpYzoK CgoKICAgICAgICBDTF9SZXNvdXJjZU9wdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgY29u c3Qgc3RkOjpzdHJpbmcgJnZhbHVlKSA6IG5hbWUobmFtZSkKICAgICAgICB7CiAgICAgICAgICBu dW1fdmFscyA9IDE7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaF9iYWNrKHZhbHVlKTsKICAg ICAgICB9CgoKCiAgICAgICAgQ0xfUmVzb3VyY2VPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5h bWUpIDogbmFtZShuYW1lKQogICAgICAgIHsKICAgICAgICAgIG51bV92YWxzID0gMDsKICAgICAg ICB9CgoKICAgICAgICBDTF9SZXNvdXJjZU9wdGlvbigpCiAgICAgICAgewogICAgICAgICAgbnVt X3ZhbHMgPSAwOwogICAgICAgIH0KCiAgICAgICAgQ0xfUmVzb3VyY2VPcHRpb24oY29uc3QgQ0xf UmVzb3VyY2VPcHRpb24gJm90aGVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG51bV92YWxz ID0gb3RoZXIubnVtX3ZhbHM7CiAgICAgICAgICAgICAgICBuYW1lID0gb3RoZXIubmFtZTsKICAg ICAgICAgICAgICAgIGlmKG51bV92YWxzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0Owog ICAgICAgICAgICAgICAgICAgICAgICBmb3IoaXQgPSBvdGhlci52YWx1ZXMuYmVnaW4oKTsgaXQg IT0gb3RoZXIudmFsdWVzLmVuZCgpOyArK2l0KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2hfYmFjaygqaXQpOwogICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCnB1Ymxp YzoKCgogICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZnZXRfbmFtZSgpIGNvbnN0IHsgcmV0dXJu IG5hbWU7IH0KCgoKCiAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldF92YWx1ZShpbnQgaT0w KSBjb25zdCB7IHJldHVybiB2YWx1ZXNbaV07IH0KCgoKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6 OnN0cmluZz4gJmdldF92YWx1ZXMoKSB7IHJldHVybiB2YWx1ZXM7IH0KCgpwdWJsaWM6CiAgICAg ICAgdm9pZCBvcGVyYXRvciA9KCBjb25zdCBDTF9SZXNvdXJjZU9wdGlvbiAmb3RoZXIpCiAgICAg ICAgewogICAgICAgICAgICAgICAgbnVtX3ZhbHMgPSBvdGhlci5udW1fdmFsczsKICAgICAgICAg ICAgICAgIG5hbWUgPSBvdGhlci5uYW1lOwogICAgICAgICAgICAgICAgaWYobnVtX3ZhbHMpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6 c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihp dCA9IG90aGVyLnZhbHVlcy5iZWdpbigpOyBpdCAhPSBvdGhlci52YWx1ZXMuZW5kKCk7ICsraXQp CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZXMucHVzaF9iYWNrKCppdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIH0KICAgICAgICB9CgoKCgogICAgICAgIGludCBhZGRfdmFsdWUoY29uc3Qgc3Rk OjpzdHJpbmcgJnZhbHVlKSB7IHZhbHVlcy5wdXNoX2JhY2sodmFsdWUpOyByZXR1cm4gbnVtX3Zh bHMrKzsgfQoKCnByaXZhdGU6CiAgICAgICAgaW50IG51bV92YWxzOwogICAgICAgIHN0ZDo6c3Ry aW5nIG5hbWU7CiAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHZhbHVlczsKfTsKIyAy NSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2VvcHRpb25zLmgi IDIgMwoKY2xhc3MgQ0xfUmVzb3VyY2VNYW5hZ2VyOwoKCmNsYXNzIENMX1Jlc291cmNlT3B0aW9u cwp7CgpwdWJsaWM6CgogICAgICAgIENMX1Jlc291cmNlT3B0aW9ucygpOwoKCiAgICAgICAgfkNM X1Jlc291cmNlT3B0aW9ucygpOwoKCnB1YmxpYzoKCiAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJp bmcsIENMX1Jlc291cmNlT3B0aW9uPiAmZ2V0X29wdGlvbnMoKTsKCgogICAgICAgIENMX1Jlc291 cmNlT3B0aW9uICZnZXRfb3B0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKCgogICAgICAg IGNvbnN0IENMX1Jlc291cmNlT3B0aW9uICZnZXRfb3B0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZu YW1lKSBjb25zdDsKCgogICAgICAgIGJvb2wgZXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l KTsKCgpwdWJsaWM6CgogICAgICAgIHZvaWQgYWRkKGNvbnN0IENMX1Jlc291cmNlT3B0aW9uICZv cHRpb24pOwoKCnByaXZhdGU6CiAgICAgICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIENMX1Jlc291 cmNlT3B0aW9uPiBvcHRpb25zOwp9OwojIDcwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL1Jlc291cmNlcy9yZXNvdXJjZXR5 cGVfYm9vbGVhbi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9SZXNvdXJj ZXMvcmVzb3VyY2V0eXBlX2Jvb2xlYW4uaCIgMwpjbGFzcyBDTF9SZXNvdXJjZURhdGFfQm9vbGVh biA6IHB1YmxpYyBDTF9SZXNvdXJjZURhdGEKewoKcHVibGljOgoKICAgICAgICBDTF9SZXNvdXJj ZURhdGFfQm9vbGVhbihjbGFzcyBDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCnB1YmxpYzoKCiAg ICAgICAgYm9vbCB2YWx1ZTsKfTsKCgpjbGFzcyBDTF9Cb29sZWFuCnsKCnB1YmxpYzoKCiAgICAg ICAgQ0xfQm9vbGVhbihjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFn ZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZSByZXMg PSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAgICAgICAgcmVzLmxv YWQoKTsKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlRGF0YV9Cb29sZWFuICpkYXRhID0gKENM X1Jlc291cmNlRGF0YV9Cb29sZWFuICopIHJlcy5nZXRfZGF0YSgiYm9vbGVhbiIpOwogICAgICAg ICAgICAgICAgdmFsdWUgPSBkYXRhLT52YWx1ZTsKICAgICAgICAgICAgICAgIHJlcy51bmxvYWQo KTsKICAgICAgICB9CgoKICAgICAgICBDTF9Cb29sZWFuKGNvbnN0IHN0ZDo6c3RyaW5nICZyZXNf aWQsIENMX1Jlc291cmNlTWFuYWdlciAqcmVzb3VyY2VzLCBib29sIGRlZl92YWx1ZSkKICAgICAg ICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgQ0xfUmVzb3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3VyY2UocmVzX2lk KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAg ICAgICAgQ0xfUmVzb3VyY2VEYXRhX0Jvb2xlYW4gKmRhdGEgPSAoQ0xfUmVzb3VyY2VEYXRhX0Jv b2xlYW4gKikgcmVzLmdldF9kYXRhKCJib29sZWFuIik7CiAgICAgICAgICAgICAgICAgICAgICAg IHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy51bmxvYWQo KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChDTF9FcnJvciBlcnIp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmX3Zh bHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgICBvcGVyYXRvciBib29s KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAg fQoKcHJpdmF0ZToKICAgICAgICBib29sIHZhbHVlOwp9OwojIDcyICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9jb3JlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvUmVzb3VyY2Vz L3Jlc291cmNldHlwZV9pbnRlZ2VyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D b3JlL1Jlc291cmNlcy9yZXNvdXJjZXR5cGVfaW50ZWdlci5oIiAzCmNsYXNzIENMX1Jlc291cmNl RGF0YV9JbnRlZ2VyIDogcHVibGljIENMX1Jlc291cmNlRGF0YQp7CgpwdWJsaWM6CgogICAgICAg IENMX1Jlc291cmNlRGF0YV9JbnRlZ2VyKGNsYXNzIENMX1Jlc291cmNlICZyZXNvdXJjZSk7CgoK cHVibGljOgoKICAgICAgICBpbnQgdmFsdWU7Cn07CgoKY2xhc3MgQ0xfSW50ZWdlcgp7CgpwdWJs aWM6CgogICAgICAgIENMX0ludGVnZXIoY29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCwgQ0xfUmVz b3VyY2VNYW5hZ2VyICpyZXNvdXJjZXMpCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xfUmVz b3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3VyY2UocmVzX2lkKTsKICAgICAgICAgICAg ICAgIHJlcy5sb2FkKCk7CiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZURhdGFfSW50ZWdlciAq ZGF0YSA9IChDTF9SZXNvdXJjZURhdGFfSW50ZWdlciAqKSByZXMuZ2V0X2RhdGEoImludGVnZXIi KTsKICAgICAgICAgICAgICAgIHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICBy ZXMudW5sb2FkKCk7CiAgICAgICAgfQoKCiAgICAgICAgQ0xfSW50ZWdlcihjb25zdCBzdGQ6OnN0 cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcywgaW50IGRlZl92YWx1 ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2UgcmVzID0gcmVzb3VyY2VzLT5nZXRfcmVzb3Vy Y2UocmVzX2lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmxvYWQoKTsKICAgICAgICAg ICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2VEYXRhX0ludGVnZXIgKmRhdGEgPSAoQ0xfUmVzb3Vy Y2VEYXRhX0ludGVnZXIgKikgcmVzLmdldF9kYXRhKCJpbnRlZ2VyIik7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0gZGF0YS0+dmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl cy51bmxvYWQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChDTF9F cnJvciBlcnIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl ID0gZGVmX3ZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgICBvcGVy YXRvciBpbnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK ICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIGludCB2YWx1ZTsKfTsKIyA3MyAiL3Vzci9pbmNs dWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9S ZXNvdXJjZXMvcmVzb3VyY2V0eXBlX3Jhdy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL0NsYW5M aWIvQ29yZS9SZXNvdXJjZXMvcmVzb3VyY2V0eXBlX3Jhdy5oIiAzCmNsYXNzIENMX1Jlc291cmNl RGF0YV9SYXcgOiBwdWJsaWMgQ0xfUmVzb3VyY2VEYXRhCnsKCnB1YmxpYzoKCiAgICAgICAgQ0xf UmVzb3VyY2VEYXRhX1JhdyhjbGFzcyBDTF9SZXNvdXJjZSAmcmVzb3VyY2UpOwoKCnB1YmxpYzoK CiAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgY2hhcj4gdmFsdWU7CgoKcHJpdmF0ZToKICAg ICAgICB2b2lkIG9uX2xvYWRfZmlsZSgpOwogICAgICAgIHZvaWQgb25fbG9hZF9kYXRhZmlsZShj bGFzcyBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRlcik7CiAgICAgICAgdm9pZCBvbl9z YXZlX2RhdGFmaWxlKGNsYXNzIENMX091dHB1dFNvdXJjZVByb3ZpZGVyICpwcm92aWRlcik7CiAg ICAgICAgdm9pZCBvbl91bmxvYWQoKTsKCiAgICAgICAgQ0xfU2xvdCBzbG90X2xvYWRfZmlsZTsK ICAgICAgICBDTF9TbG90IHNsb3RfbG9hZF9kYXRhZmlsZTsKICAgICAgICBDTF9TbG90IHNsb3Rf c2F2ZV9kYXRhZmlsZTsKICAgICAgICBDTF9TbG90IHNsb3RfdW5sb2FkOwp9OwoKCmNsYXNzIENM X1Jhdwp7CgpwdWJsaWM6CgogICAgICAgIENMX1Jhdyhjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lk LCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAgICAgICB7CiAgICAgICAgICAgICAg ICByZXMgPSByZXNvdXJjZXMtPmdldF9yZXNvdXJjZShyZXNfaWQpOwogICAgICAgICAgICAgICAg cmVzLmxvYWQoKTsKICAgICAgICAgICAgICAgIGRhdGEgPSAoQ0xfUmVzb3VyY2VEYXRhX1JhdyAq KSByZXMuZ2V0X2RhdGEoInJhdyIpOwogICAgICAgIH0KCgogICAgICAgIH5DTF9SYXcoKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIHJlcy51bmxvYWQoKTsKICAgICAgICB9CgoKICAgICAgICBz dGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmZ2V0X2RhdGEoKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIHJldHVybiBkYXRhLT52YWx1ZTsKICAgICAgICB9CgoKICAgICAgICBjb25zdCBzdGQ6 OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmZ2V0X2RhdGEoKSBjb25zdAogICAgICAgIHsKICAgICAg ICAgICAgICAgIHJldHVybiBkYXRhLT52YWx1ZTsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAg IENMX1Jlc291cmNlIHJlczsKICAgICAgICBDTF9SZXNvdXJjZURhdGFfUmF3ICpkYXRhOwp9OwoK CmNsYXNzIENMX0lucHV0U291cmNlX1JhdyA6IHB1YmxpYyBDTF9SYXcsIHB1YmxpYyBDTF9JbnB1 dFNvdXJjZV9NZW1vcnkKewpwdWJsaWM6CgogICAgICAgIENMX0lucHV0U291cmNlX1Jhdyhjb25z dCBzdGQ6OnN0cmluZyAmcmVzX2lkLCBDTF9SZXNvdXJjZU1hbmFnZXIgKnJlc291cmNlcykKICAg ICAgICAgICAgICAgIDogQ0xfUmF3KHJlc19pZCwgcmVzb3VyY2VzKSwgQ0xfSW5wdXRTb3VyY2Vf TWVtb3J5KHN0ZDo6c3RyaW5nKChjaGFyICopICZDTF9SYXc6OmdldF9kYXRhKClbMF0sIENMX1Jh dzo6Z2V0X2RhdGEoKS5zaXplKCkpKQogICAgICAgIHsKICAgICAgICB9Cn07CiMgNzUgIi91c3Iv aW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9SZXNvdXJjZXMvZGF0YWZpbGVfY29tcGlsZXIuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9D bGFuTGliL0NvcmUvUmVzb3VyY2VzL2RhdGFmaWxlX2NvbXBpbGVyLmgiIDMKY2xhc3MgQ0xfRGF0 YWZpbGVDb21waWxlcgp7CnB1YmxpYzoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgd3JpdGUoCiAg ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc2NyX2ZpbGUsCiAgICAgICAgICAgICAg ICBjb25zdCBzdGQ6OnN0cmluZyAmZGF0X2ZpbGUpOwp9OwojIDc2ICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9jb3JlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvY2xf dmVjdG9yLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvY2xfdmVj dG9yLmgiIDMKY2xhc3MgQ0xfVmVjdG9yCnsKcHVibGljOgoKCiAgICAgICAgZmxvYXQgeDsKCiAg ICAgICAgZmxvYXQgeTsKCiAgICAgICAgZmxvYXQgejsKCiAgICAgICAgZmxvYXQgdzsKCnB1Ymxp YzoKCgoKICAgICAgICBDTF9WZWN0b3IoZmxvYXQgeCA9IDAuMCwgZmxvYXQgeSA9IDAuMCwgZmxv YXQgeiA9IDAuMCwgZmxvYXQgdyA9IDEuMCk7CgoKCiAgICAgICAgQ0xfVmVjdG9yKGNvbnN0IENM X1ZlY3RvciAmb3RoZXIpOwoKCgoKICAgICAgICBmbG9hdCBub3JtKCkgY29uc3Q7CgoKICAgICAg ICB2b2lkIG5vcm1hbGl6ZSgpOwoKCgoKICAgICAgICBmbG9hdCBkb3QoY29uc3QgQ0xfVmVjdG9y JiB2KSBjb25zdDsKCgoKCiAgICAgICAgZmxvYXQgYW5nbGUoY29uc3QgQ0xfVmVjdG9yJiB2KSBj b25zdDsKCgoKCiAgICAgICAgQ0xfVmVjdG9yIGNyb3NzKGNvbnN0IENMX1ZlY3RvciYgdikgY29u c3Q7CgoKCgoKICAgICAgICBDTF9WZWN0b3Igcm90YXRlKGZsb2F0IGFuZ2xlLCBjb25zdCBDTF9W ZWN0b3ImIGEpIGNvbnN0OwoKCiAgICAgICAgdm9pZCByb3VuZCgpOwoKCgoKICAgICAgICBDTF9W ZWN0b3Igb3BlcmF0b3IgKiAoZmxvYXQgcyk7CgoKCiAgICAgICAgZnJpZW5kIENMX1ZlY3RvciBv cGVyYXRvciAqIChmbG9hdCBzLCBjb25zdCBDTF9WZWN0b3ImIHYpOwoKCiAgICAgICAgdm9pZCBv cGVyYXRvciArPSAoY29uc3QgQ0xfVmVjdG9yJiB2KTsKCgogICAgICAgIHZvaWQgb3BlcmF0b3Ig LT0gKGNvbnN0IENMX1ZlY3RvciYgdik7CgoKICAgICAgICB2b2lkIG9wZXJhdG9yICo9IChmbG9h dCBzKTsKCgogICAgICAgIENMX1ZlY3RvciBvcGVyYXRvciArIChjb25zdCBDTF9WZWN0b3ImIHYp OwoKCiAgICAgICAgQ0xfVmVjdG9yIG9wZXJhdG9yIC0gKGNvbnN0IENMX1ZlY3RvciYgdik7CgoK ICAgICAgICBDTF9WZWN0b3Igb3BlcmF0b3IgLSAoKTsKCgogICAgICAgIENMX1ZlY3RvciYgb3Bl cmF0b3IgPSAoY29uc3QgQ0xfVmVjdG9yJiB2KTsKCgoKCiAgICAgICAgaW50IG9wZXJhdG9yID09 IChjb25zdCBDTF9WZWN0b3ImIHYpIGNvbnN0OwoKCgoKICAgICAgICBpbnQgb3BlcmF0b3IgIT0g KGNvbnN0IENMX1ZlY3RvciYgdikgY29uc3Q7CgoKCgogICAgICAgIGZsb2F0JiBvcGVyYXRvciBb XSAoaW50IG4pOwoKCiAgICAgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKHN0 ZDo6b3N0cmVhbSYsIENMX1ZlY3RvciYgdik7Cn07CiMgNzggIi91c3IvaW5jbHVkZS9DbGFuTGli L2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3ZlY3RvcjIu aCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmgiIDMK Y2xhc3MgQ0xfVmVjdG9yMgp7CnB1YmxpYzoKCgogICAgICAgIENMX1ZlY3RvcjIoKTsKCgoKCiAg ICAgICAgQ0xfVmVjdG9yMihmbG9hdCBmWCwgZmxvYXQgZlkpOwoKCiAgICAgICAgQ0xfVmVjdG9y MihmbG9hdCBhZkNvb3JkaW5hdGVbMl0pOwoKCgogICAgICAgIENMX1ZlY3RvcjIoY29uc3QgQ0xf VmVjdG9yMiYgcmtWZWN0b3IpOwojIDU3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgv dmVjdG9yMi5oIiAzCiAgICAgICAgZmxvYXQmIG9wZXJhdG9yW10gKGludCBpKSBjb25zdDsKCgog ICAgICAgIG9wZXJhdG9yIGZsb2F0KiAoKTsKCgogICAgICAgIENMX1ZlY3RvcjImIG9wZXJhdG9y PSAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0b3IpOwoKCgoKCiAgICAgICAgYm9vbCBvcGVyYXRv cj09IChjb25zdCBDTF9WZWN0b3IyJiBya1ZlY3RvcikgY29uc3Q7CgoKCiAgICAgICAgYm9vbCBv cGVyYXRvciE9IChjb25zdCBDTF9WZWN0b3IyJiBya1ZlY3RvcikgY29uc3Q7CgoKCiAgICAgICAg Ym9vbCBvcGVyYXRvcjwgKGNvbnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsKCgoKICAg ICAgICBib29sIG9wZXJhdG9yPD0gKGNvbnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsK CgoKICAgICAgICBib29sIG9wZXJhdG9yPiAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0b3IpIGNv bnN0OwoKCgogICAgICAgIGJvb2wgb3BlcmF0b3I+PSAoY29uc3QgQ0xfVmVjdG9yMiYgcmtWZWN0 b3IpIGNvbnN0OwoKCgoKICAgICAgICBDTF9WZWN0b3IyIG9wZXJhdG9yKyAoY29uc3QgQ0xfVmVj dG9yMiYgcmtWZWN0b3IpIGNvbnN0OwoKCiAgICAgICAgQ0xfVmVjdG9yMiBvcGVyYXRvci0gKGNv bnN0IENMX1ZlY3RvcjImIHJrVmVjdG9yKSBjb25zdDsKCgogICAgICAgIENMX1ZlY3RvcjIgb3Bl cmF0b3IqIChmbG9hdCBmU2NhbGFyKSBjb25zdDsKCgogICAgICAgIENMX1ZlY3RvcjIgb3BlcmF0 b3IvIChmbG9hdCBmU2NhbGFyKSBjb25zdDsKCgoKICAgICAgICBDTF9WZWN0b3IyIG9wZXJhdG9y LSAoKSBjb25zdDsKCgoKCgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRvcis9IChjb25zdCBD TF9WZWN0b3IyJiBya1ZlY3Rvcik7CgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRvci09IChj b25zdCBDTF9WZWN0b3IyJiBya1ZlY3Rvcik7CgoKICAgICAgICBDTF9WZWN0b3IyJiBvcGVyYXRv cio9IChmbG9hdCBmU2NhbGFyKTsKCgogICAgICAgIENMX1ZlY3RvcjImIG9wZXJhdG9yLz0gKGZs b2F0IGZTY2FsYXIpOwoKCgoKICAgICAgICB2b2lkIHNldF9mdXp6KCkgeyBGVVpaID0gMS4wOyB9 CgoKICAgICAgICB2b2lkIGRpc2FibGVfZnV6eigpIHsgRlVaWiA9IDAuMDsgfQoKCgogICAgICAg IGJvb2wgZ2V0X2Z1enooKSB7IHJldHVybiAoRlVaWiA+IDAuMCk/IHRydWUgOiBmYWxzZSA7fQoK CgoKICAgICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKCgoKICAgICAgICBmbG9hdCBzcXVhcmVk X2xlbmd0aCgpIGNvbnN0OwoKCiAgICAgICAgZmxvYXQgZG90KGNvbnN0IENMX1ZlY3RvcjImIHJr VmVjdG9yKSBjb25zdDsKCgogICAgICAgIGZsb2F0IHVuaXRpemUoZmxvYXQgZlRvbGVyYW5jZSA9 IDFlLTA2Zik7CgoKCgogICAgICAgIENMX1ZlY3RvcjIgY3Jvc3MoKSBjb25zdDsKCgoKICAgICAg ICBDTF9WZWN0b3IyIHVuaXRfY3Jvc3MoKSBjb25zdDsKCgoKCgoKICAgICAgICBmbG9hdCB4LCB5 OwoKCiAgICAgICAgc3RhdGljIGNvbnN0IENMX1ZlY3RvcjIgWkVSTzsKICAgICAgICBzdGF0aWMg Y29uc3QgQ0xfVmVjdG9yMiBVTklUX1g7CiAgICAgICAgc3RhdGljIGNvbnN0IENMX1ZlY3RvcjIg VU5JVF9ZOwoKCiAgICAgICAgc3RhdGljIGZsb2F0IEZVWlo7Cn07CgojIDEgIi91c3IvaW5jbHVk ZS9DbGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmlubCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9D bGFuTGliL0NvcmUvTWF0aC92ZWN0b3IyLmlubCIgMwppbmxpbmUgQ0xfVmVjdG9yMjo6Q0xfVmVj dG9yMiAoKQp7CgoKfQoKaW5saW5lIGZsb2F0JiBDTF9WZWN0b3IyOjpvcGVyYXRvcltdKGludCBp KSBjb25zdAp7CiAgICByZXR1cm4gKChmbG9hdCopdGhpcylbaV07Cn0KCmlubGluZSBDTF9WZWN0 b3IyOjpvcGVyYXRvciBmbG9hdCooKQp7CiAgICByZXR1cm4gKGZsb2F0Kil0aGlzOwp9Cgppbmxp bmUgZmxvYXQgQ0xfVmVjdG9yMjo6c3F1YXJlZF9sZW5ndGgoKSBjb25zdAp7CiAgICByZXR1cm4g eCp4ICsgeSp5Owp9CiMgMTc4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvdmVjdG9y Mi5oIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1 ZGUvQ2xhbkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDMKY2xhc3MgQ0xfQmV6aWVyQ3VydmUKewpw cm90ZWN0ZWQ6CiAgICAgICAgQ0xfVmVjdG9yICpjdXJ2ZTsKICAgICAgICBDTF9WZWN0b3IgKmNw OwoKICAgICAgICBpbnQgc3RlcHMsIGNzOwogICAgICAgIGJvb2wgc3RlcHBpbmc7CgogICAgICAg IHZpcnR1YWwgdm9pZCBtYWtlX2N1cnZlKCk7CgpwdWJsaWM6CgoKCgoKCiAgICAgICAgQ0xfQmV6 aWVyQ3VydmUoY29uc3QgQ0xfVmVjdG9yICpjcCwgaW50IGNzLCBpbnQgc3RlcHMsIGJvb2wgc3Rl cHBpbmcgPSB0cnVlKTsKCgogICAgICAgIHZpcnR1YWwgfkNMX0JlemllckN1cnZlKCk7CgoKCgog ICAgICAgIHZpcnR1YWwgaW50IGdldF9zdGVwcygpIGNvbnN0IHsgcmV0dXJuIHN0ZXBzOyB9CgoK CiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X2NzKCkgY29uc3QgeyByZXR1cm4gY3M7IH0KCgoKICAg ICAgICB2aXJ0dWFsIGJvb2wgZ2V0X3N0ZXBwaW5nKCkgY29uc3QgeyByZXR1cm4gc3RlcHBpbmc7 IH0KCgoKCiAgICAgICAgdmlydHVhbCBmbG9hdCBnZXRfbGVuZ3RoKGludCBzZWdtZW50ID0gLTEp IGNvbnN0OwoKCgogICAgICAgIHZpcnR1YWwgQ0xfVmVjdG9yKiBnZXRfY3VydmUoKSBjb25zdCB7 IHJldHVybiBjdXJ2ZTsgfQoKCgogICAgICAgIHZpcnR1YWwgQ0xfVmVjdG9yKiBnZXRfY29udHJv bF9wb2ludHMoKSBjb25zdCB7IHJldHVybiBjcDsgfQoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQg c2V0X3N0ZXBzKGludCBzdGVwcyk7CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHNldF9zdGVwcGlu Zyhib29sIHN0ZXBwaW5nKTsKCgoKCgogICAgICAgIENMX1ZlY3RvciBvcGVyYXRvciBbXSAoaW50 IG4pIHsgcmV0dXJuIGN1cnZlW25dOyB9Cn07CiMgMTQwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9D b3JlL01hdGgvYmV6aWVyLmgiIDMKY2xhc3MgQ0xfQmV6aWVyU3VyZmFjZQp7CnByb3RlY3RlZDoK ICAgICAgICBDTF9WZWN0b3IgKnN1cmZhY2U7CiAgICAgICAgQ0xfVmVjdG9yICpjcDsKCiAgICAg ICAgaW50IHhzdGVwcywgeXN0ZXBzOwogICAgICAgIGludCB4cywgeXM7CiAgICAgICAgYm9vbCBz dGVwcGluZzsKCiAgICAgICAgdmlydHVhbCBDTF9WZWN0b3IgZXZhbHVhdGUoZmxvYXQsIGZsb2F0 LCBpbnQpOwogICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlX3N1cmZhY2UoKTsKCnB1YmxpYzoKIyAx NjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9iZXppZXIuaCIgMwogICAgICAgIENM X0JlemllclN1cmZhY2UoY29uc3QgQ0xfVmVjdG9yICpjcCwgaW50IHhzLCBpbnQgeXMsIGludCB4 c3RlcHMsIGludCB5c3RlcHMsIGJvb2wgc3RlcHBpbmcgPSB0cnVlKTsKCgogICAgICAgIHZpcnR1 YWwgfkNMX0JlemllclN1cmZhY2UoKTsKCgoKCiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X3hzdGVw cygpIGNvbnN0IHsgcmV0dXJuIHhzdGVwczsgfQoKICAgICAgICB2aXJ0dWFsIGludCBnZXRfeXN0 ZXBzKCkgY29uc3QgeyByZXR1cm4geXN0ZXBzOyB9CgoKCgoKICAgICAgICB2aXJ0dWFsIGludCBn ZXRfeHMoKSBjb25zdCB7IHJldHVybiB4czsgfQoKCgogICAgICAgIHZpcnR1YWwgaW50IGdldF95 cygpIGNvbnN0IHsgcmV0dXJuIHlzOyB9CgoKCiAgICAgICAgdmlydHVhbCBib29sIGdldF9zdGVw cGluZygpIGNvbnN0IHsgcmV0dXJuIHN0ZXBwaW5nOyB9CiMgMTk2ICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL01hdGgvYmV6aWVyLmgiIDMKICAgICAgICB2aXJ0dWFsIENMX1ZlY3RvciogZ2V0 X3N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBzdXJmYWNlOyB9CgoKCiAgICAgICAgdmlydHVhbCBD TF9WZWN0b3IqIGdldF9jb250cm9sX3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIGNwOyB9CgoKCgog ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRfeHN0ZXBzKGludCB4c3RlcHMpOwoKCgogICAgICAgIHZp cnR1YWwgdm9pZCBzZXRfeXN0ZXBzKGludCB5c3RlcHMpOwoKCgogICAgICAgIHZpcnR1YWwgdm9p ZCBzZXRfc3RlcHBpbmcoYm9vbCBzdGVwcGluZyk7CgoKCgoKICAgICAgICBDTF9WZWN0b3Igb3Bl cmF0b3IgW10gKGludCBuKSB7IHJldHVybiBzdXJmYWNlW25dOyB9Cn07CiMgODAgIi91c3IvaW5j bHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9N YXRoL21hdGguaCIgMSAzCiMgODEgIi91c3IvaW5jbHVkZS9DbGFuTGliL2NvcmUuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3JlY3QuaCIgMSAzCiMgMjcgIi91c3Iv aW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9yZWN0LmgiIDMKY2xhc3MgQ0xfUmVjdAp7CgpwdWJs aWM6CgogICAgICAgIGludCB4MTsKCiAgICAgICAgaW50IHkxOwoKICAgICAgICBpbnQgeDI7Cgog ICAgICAgIGludCB5MjsKCnB1YmxpYzoKCgoKCgoKICAgICAgICBDTF9SZWN0KGludCBueDEgPSAw LCBpbnQgbnkxID0gMCwgaW50IG54MiA9IDAsIGludCBueTIgPSAwKSA6IHgxKG54MSksIHkxKG55 MSksIHgyKG54MiksIHkyKG55MikgeyB9CgoKCiAgICAgICAgQ0xfUmVjdChjb25zdCBDTF9SZWN0 ICZyZWN0KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPngxID0gcmVjdC54MTsKICAg ICAgICAgICAgICAgIHRoaXMtPngyID0gcmVjdC54MjsKICAgICAgICAgICAgICAgIHRoaXMtPnkx ID0gcmVjdC55MTsKICAgICAgICAgICAgICAgIHRoaXMtPnkyID0gcmVjdC55MjsKICAgICAgICB9 OwojIDY2ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Db3JlL01hdGgvcmVjdC5oIiAzCiAgICAgICAg c3RhdGljIENMX1JlY3QgY2VudGVyKGludCBjZW50ZXJfeCwgaW50IGNlbnRlcl95LCBpbnQgd2lk dGgsIGludCBoZWlnaHQpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIENMX1JlY3Qo CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlcl94IC0gd2lkdGgvMiwKICAgICAgICAgICAg ICAgICAgICAgICAgY2VudGVyX3kgLSBoZWlnaHQvMiwKICAgICAgICAgICAgICAgICAgICAgICAg Y2VudGVyX3ggKyB3aWR0aC8yLAogICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJfeSArIGhl aWdodC8yKTsKICAgICAgICB9CiMgODIgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9y ZWN0LmgiIDMKICAgICAgICBzdGF0aWMgQ0xfUmVjdCBsZWZ0KGludCB4LCBpbnQgeSwgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0LCBib29sIGNlbnRlcl92ZXJ0ID0gdHJ1ZSkKICAgICAgICB7CiAgICAg ICAgICAgICAgICByZXR1cm4gQ0xfUmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgeCAtIHdp ZHRoLAogICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJfdmVydCA/ICh5IC0gaGVpZ2h0LzIp IDogeSwKICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg Y2VudGVyX3ZlcnQgPyAoeSArIGhlaWdodC8yKSA6IHkgKyBoZWlnaHQpOwogICAgICAgIH0KIyA5 OCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3JlY3QuaCIgMwogICAgICAgIHN0YXRp YyBDTF9SZWN0IHJpZ2h0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29s IGNlbnRlcl92ZXJ0ID0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gQ0xf UmVjdCgKICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAg Y2VudGVyX3ZlcnQgPyAoeSAtIGhlaWdodC8yKSA6IHksCiAgICAgICAgICAgICAgICAgICAgICAg IHggKyB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyX3ZlcnQgPyAoeSArIGhl aWdodC8yKSA6IHkgKyBoZWlnaHQpOwogICAgICAgIH0KCgoKCiAgICAgICAgdm9pZCBtb3ZlKGlu dCBkZWx0YV94LCBpbnQgZGVsdGFfeSkKICAgICAgICB7CiAgICAgICAgICAgICAgICB4MSArPSBk ZWx0YV94OwogICAgICAgICAgICAgICAgeDIgKz0gZGVsdGFfeDsKICAgICAgICAgICAgICAgIHkx ICs9IGRlbHRhX3k7CiAgICAgICAgICAgICAgICB5MiArPSBkZWx0YV95OwogICAgICAgIH0KCgog ICAgICAgIHZvaWQgbm9ybWFsaXplKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoeDEg PiB4MikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlbXAg PSB4MjsKICAgICAgICAgICAgICAgICAgICAgICAgeDIgPSB4MTsKICAgICAgICAgICAgICAgICAg ICAgICAgeDEgPSB0ZW1wOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh5 MSA+IHkyKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGVt cCA9IHkyOwogICAgICAgICAgICAgICAgICAgICAgICB5MiA9IHkxOwogICAgICAgICAgICAgICAg ICAgICAgICB5MSA9IHRlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgoKCgogICAg ICAgIGJvb2wgaW5zaWRlKGludCB4LCBpbnQgeSkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAg ICAgICByZXR1cm4geCA+PSB4MSAmJiB5ID49IHkxICYmIHggPCB4MiAmJiB5IDwgeTI7CiAgICAg ICAgfQoKCgogICAgICAgIGludCBnZXRfd2lkdGgoKSBjb25zdCB7IHJldHVybiB4MiAtIHgxOyB9 OwoKCgogICAgICAgIGludCBnZXRfaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4geTIgLSB5MTsgfTsK CgogICAgICAgIHZvaWQgY2xlYXIoKSB7IHgxID0geTEgPSB4MiA9IHkyID0gMDsgfTsKCgoKICAg ICAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBDTF9SZWN0ICZyZWN0KSBjb25zdDsKfTsKIyA4 MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xh bkxpYi9Db3JlL01hdGgvc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29y ZS9NYXRoL3NpemUuaCIgMwpjbGFzcyBDTF9TaXplCnsKcHVibGljOgoKCiAgICAgICAgQ0xfU2l6 ZSgpIDogd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KCgoKCiAgICAgICAgQ0xfU2l6ZShpbnQgdywg aW50IGgpIDogd2lkdGgodyksIGhlaWdodChoKSB7IH0KCgoKICAgICAgICBpbnQgd2lkdGg7CgoK ICAgICAgICBpbnQgaGVpZ2h0Owp9OwojIDgzICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9jb3JlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9DbGFuTGliL0NvcmUvTWF0aC9wb2ludC5oIiAxIDMKIyAy OCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvQ29yZS9NYXRoL3BvaW50LmgiIDMKY2xhc3MgQ0xfUG9p bnQKewpwdWJsaWM6CgoKICAgICAgICBDTF9Qb2ludCgpIDogeCgwKSwgeSgwKSB7IH0KCgogICAg ICAgIENMX1BvaW50KGludCB4MSwgaW50IHkxKSA6IHgoeDEpLCB5KHkxKSB7IH0KCgoKICAgICAg ICBpbnQgeCwgeTsKfTsKIyA4NCAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvY29yZS5oIiAyIDMKIyAz MiAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc3RyZWFtX3NvdW5kcHJvdmlkZXIu aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NvdW5kL3N0cmVhbV9zb3VuZHByb3Zp ZGVyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGZvcm1hdC5oIiAx IDMKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc291bmRmb3JtYXQuaCIgMwplbnVt IFNvdW5kRm9ybWF0CnsKICAgICAgICBzZl84Yml0X3NpZ25lZCwKICAgICAgICBzZl84Yml0X3Np Z25lZF9zdGVyZW8sCiAgICAgICAgc2ZfMTZiaXRfc2lnbmVkLAogICAgICAgIHNmXzE2Yml0X3Np Z25lZF9zdGVyZW8KfTsKIyAyMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc3RyZWFtX3Nv dW5kcHJvdmlkZXIuaCIgMiAzCgpjbGFzcyBDTF9TdHJlYW1Tb3VuZFByb3ZpZGVyX1Nlc3Npb247 CgoKCmNsYXNzIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIKewpwdWJsaWM6CgoKICAgICAgICB2aXJ0 dWFsIH5DTF9TdHJlYW1Tb3VuZFByb3ZpZGVyKCkgeyA7IH0KCgoKCgogICAgICAgIHZpcnR1YWwg Q0xfU3RyZWFtU291bmRQcm92aWRlcl9TZXNzaW9uICpiZWdpbl9zZXNzaW9uKCk9MDsKCgoKCiAg ICAgICAgdmlydHVhbCB2b2lkIGVuZF9zZXNzaW9uKENMX1N0cmVhbVNvdW5kUHJvdmlkZXJfU2Vz c2lvbiAqc2Vzc2lvbik9MDsKfTsKCgoKY2xhc3MgQ0xfU3RyZWFtU291bmRQcm92aWRlcl9TZXNz aW9uCnsKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU3RyZWFtU291bmRQcm92aWRlcl9T ZXNzaW9uKCkgeyA7IH0KCgoKCiAgICAgICAgdmlydHVhbCBib29sIGVvZigpIGNvbnN0ID0wOwoK CiAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKT0wOwoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBw bGF5KCk9MDsKCgoKCiAgICAgICAgdmlydHVhbCBib29sIHNldF9wb3NpdGlvbihpbnQgcG9zKT0w OwoKCgoKCgoKICAgICAgICB2aXJ0dWFsIGludCBnZXRfZGF0YSh2b2lkICpkYXRhX3B0ciwgaW50 IGRhdGFfcmVxdWVzdGVkKT0wOwoKCgogICAgICAgIHZpcnR1YWwgaW50IGdldF9mcmVxdWVuY3ko KSBjb25zdCA9MDsKCgoKICAgICAgICB2aXJ0dWFsIFNvdW5kRm9ybWF0IGdldF9mb3JtYXQoKSBj b25zdCA9MDsKfTsKIyAzMyAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21p a21vZF9zYW1wbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL0NsYW5MaWIvU291bmQvc291bmRi dWZmZXIuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9DbGFuTGliL1NvdW5kL3NvdW5kYnVmZmVy LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlcl9zZXNzaW9u LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlcl9zZXNz aW9uLmgiIDMKY2xhc3MgQ0xfU291bmRDYXJkOwpjbGFzcyBDTF9Tb3VuZFBsYXlCYWNrRGVzYzsK Y2xhc3MgQ0xfU291bmRCdWZmZXJfU2Vzc2lvbgojIDQwICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9T b3VuZC9zb3VuZGJ1ZmZlcl9zZXNzaW9uLmgiIDMKewpwdWJsaWM6CgoKICAgICAgICBDTF9Tb3Vu ZEJ1ZmZlcl9TZXNzaW9uKCkgeyBoYW5kbGUgPSBfX251bGw7IGNhcmQgPSBfX251bGw7IH0KCgog ICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24odm9pZCAqaGFuZGxlLCBDTF9Tb3VuZENhcmQg Kl9jYXJkKTsKCgogICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24oY29uc3QgQ0xfU291bmRC dWZmZXJfU2Vzc2lvbiAmY29weSk7CgoKICAgICAgICB+Q0xfU291bmRCdWZmZXJfU2Vzc2lvbigp OwoKCgogICAgICAgIENMX1NvdW5kQnVmZmVyX1Nlc3Npb24mIG9wZXJhdG9yPShjb25zdCBDTF9T b3VuZEJ1ZmZlcl9TZXNzaW9uICZzZXNzaW9uKTsKCgoKICAgICAgICB2b2lkICpnZXRfaGFuZGxl KCkgY29uc3QgeyByZXR1cm4gaGFuZGxlOyB9CgoKCgogICAgICAgIENMX1NvdW5kQ2FyZCAqZ2V0 X2NhcmQoKSBjb25zdCB7IHJldHVybiBjYXJkOyB9CgoKCiAgICAgICAgaW50IGdldF9wb3NpdGlv bigpIGNvbnN0OwoKCgoKCgoKICAgICAgICBmbG9hdCBnZXRfcG9zaXRpb25fcmVsYXRpdmUoKSBj b25zdDsKCgoKCiAgICAgICAgYm9vbCBzZXRfcG9zaXRpb24oaW50IG5ld19wb3MpOwoKCgoKCgoK ICAgICAgICBib29sIHNldF9wb3NpdGlvbl9yZWxhdGl2ZShmbG9hdCBuZXdfcG9zKTsKCgoKCgog ICAgICAgIGludCBnZXRfbGVuZ3RoKCkgY29uc3Q7CgoKCiAgICAgICAgaW50IGdldF9mcmVxdWVu Y3koKSBjb25zdDsKCgoKCiAgICAgICAgYm9vbCBzZXRfZnJlcXVlbmN5KGludCBuZXdfZnJlcSk7 CgoKCgoKICAgICAgICBmbG9hdCBnZXRfdm9sdW1lKCkgY29uc3Q7CgoKCgoKICAgICAgICBmbG9h dCBnZXRfcGFuKCkgY29uc3Q7CgoKCgoKCgogICAgICAgIGJvb2wgc2V0X3ZvbHVtZShmbG9hdCBu ZXdfdm9sdW1lKTsKCgoKCgoKCiAgICAgICAgYm9vbCBzZXRfcGFuKGZsb2F0IG5ld19wYW4pOwoK CiAgICAgICAgdm9pZCBwbGF5KCk7CgoKICAgICAgICB2b2lkIHN0b3AoKTsKCgogICAgICAgIGJv b2wgaXNfcGxheWluZygpOwoKCgogICAgICAgIHZvaWQgc2V0X2xvb3BpbmcoYm9vbCBsb29wKTsK CgoKCiAgICAgICAgdm9pZCBhZGRfZmlsdGVyKGNsYXNzIENMX1NvdW5kRmlsdGVyICpmaWx0ZXIs IGJvb2wgZGVsZXRlX2ZpbHRlciA9IGZhbHNlKTsKCgogICAgICAgIHZvaWQgcmVtb3ZlX2ZpbHRl cihjbGFzcyBDTF9Tb3VuZEZpbHRlciAqZmlsdGVyKTsKCgpwcml2YXRlOgogICAgICAgIHZvaWQg KmhhbmRsZTsKICAgICAgICBDTF9Tb3VuZENhcmQgKmNhcmQ7Cn07CiMgMjMgIi91c3IvaW5jbHVk ZS9DbGFuTGliL1NvdW5kL3NvdW5kYnVmZmVyLmgiIDIgMwoKCgpjbGFzcyBDTF9TdGF0aWNTb3Vu ZFByb3ZpZGVyOwpjbGFzcyBDTF9TdHJlYW1Tb3VuZFByb3ZpZGVyOwpjbGFzcyBDTF9Tb3VuZENh cmQ7CmNsYXNzIENMX1NvdW5kQnVmZmVyX0dlbmVyaWM7CgpjbGFzcyBDTF9Tb3VuZEJ1ZmZlcgoj IDQ3ICIvdXNyL2luY2x1ZGUvQ2xhbkxpYi9Tb3VuZC9zb3VuZGJ1ZmZlci5oIiAzCnsKcHVibGlj OgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU291bmRCdWZmZXIoKTsKCgogICAgICAgIHN0YXRpYyBD TF9Tb3VuZEJ1ZmZlciAqbG9hZCgKICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZy ZXNfaWQsCiAgICAgICAgICAgICAgICBDTF9SZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIpOwoKCgoK ICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKmNyZWF0ZSgKICAgICAgICAgICAgICAgIENM X1N0YXRpY1NvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAgICAgYm9vbCBkZWxl dGVfcHJvdmlkZXI9ZmFsc2UpOwoKCgoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZmZXIgKmNy ZWF0ZSgKICAgICAgICAgICAgICAgIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAog ICAgICAgICAgICAgICAgYm9vbCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCiAgICAgICAgQ0xf U291bmRCdWZmZXIoKTsKCgogICAgICAgIENMX1NvdW5kQnVmZmVyKAogICAgICAgICAgICAgICAg Y29uc3Qgc3RkOjpzdHJpbmcgJnJlc19pZCwKICAgICAgICAgICAgICAgIENMX1Jlc291cmNlTWFu YWdlciAqbWFuYWdlcik7CgoKCiAgICAgICAgQ0xfU291bmRCdWZmZXIoCiAgICAgICAgICAgICAg ICBDTF9TdGF0aWNTb3VuZFByb3ZpZGVyICpwcm92aWRlciwKICAgICAgICAgICAgICAgIGJvb2wg ZGVsZXRlX3Byb3ZpZGVyPWZhbHNlKTsKCgoKICAgICAgICBDTF9Tb3VuZEJ1ZmZlcigKICAgICAg ICAgICAgICAgIENMX1N0cmVhbVNvdW5kUHJvdmlkZXIgKnByb3ZpZGVyLAogICAgICAgICAgICAg ICAgYm9vbCBkZWxldGVfcHJvdmlkZXI9ZmFsc2UpOwoKCgogICAgICAgIENMX1NvdW5kQnVmZmVy KGNvbnN0IENMX1NvdW5kQnVmZmVyICZjb3B5KTsKCgoKICAgICAgICB2b2lkIG9wZXJhdG9yID0o Y29uc3QgQ0xfU291bmRCdWZmZXIgJmNvcHkpOwoKCgoKCiAgICAgICAgQ0xfU3RhdGljU291bmRQ cm92aWRlciAqZ2V0X3N0YXRpY19wcm92aWRlcigpIGNvbnN0OwoKCgoKICAgICAgICBDTF9TdHJl YW1Tb3VuZFByb3ZpZGVyICpnZXRfc3RyZWFtX3Byb3ZpZGVyKCkgY29uc3Q7CgoKCgogICAgICAg IGludCBnZXRfbGVuZ3RoKCkgY29uc3Q7CgoKCiAgICAgICAgaW50IGdldF9udW1fc2FtcGxlcygp IGNvbnN0OwoKCgogICAgICAgIGludCBnZXRfZnJlcXVlbmN5KCkgY29uc3Q7CgoKCgoKICAgICAg ICBib29sIHNldF9mcmVxdWVuY3koaW50IG5ld19mcmVxKTsKCgoKICAgICAgICBmbG9hdCBnZXRf dm9sdW1lKCkgY29uc3Q7CgoKCgogICAgICAgIGJvb2wgc2V0X3ZvbHVtZShmbG9hdCBuZXdfdm9s dW1lKTsKCgoKICAgICAgICBmbG9hdCBnZXRfcGFuKCkgY29uc3Q7CgoKCgogICAgICAgIGJvb2wg c2V0X3BhbihmbG9hdCBuZXdfcGFuKTsKCgoKCiAgICAgICAgYm9vbCBpc19wbGF5aW5nKENMX1Nv dW5kQnVmZmVyX1Nlc3Npb24gKipzZXNzaW9uPV9fbnVsbCwgQ0xfU291bmRDYXJkICpjYXJkPV9f bnVsbCkgY29uc3Q7CgoKICAgICAgICB2b2lkIHN0b3AoQ0xfU291bmRDYXJkICpjYXJkPV9fbnVs bCk7CgoKCgoKCiAgICAgICAgQ0xfU291bmRCdWZmZXJfU2Vzc2lvbiBwbGF5KGJvb2wgbG9vcGlu Zz1mYWxzZSwgQ0xfU291bmRDYXJkICpjYXJkPV9fbnVsbCk7CgoKCgoKICAgICAgICBDTF9Tb3Vu ZEJ1ZmZlcl9TZXNzaW9uIHByZXBhcmUoYm9vbCBsb29waW5nPWZhbHNlLCBDTF9Tb3VuZENhcmQg KmNhcmQ9X19udWxsKTsKCgpwdWJsaWM6CiAgICAgICAgQ0xfU291bmRCdWZmZXJfR2VuZXJpYyAq aW1wbDsKICAgICAgICBDTF9SZXNvdXJjZSByZXNvdXJjZTsKfTsKIyAzNCAiL3Vzci9pbmNsdWRl L0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMiAzCgojIDEgIi91c3Iv aW5jbHVkZS9taWttb2QuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9taWttb2QuaCIgMwpleHRl cm4gIkMiIHsKIyA2NiAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCiBleHRlcm4gbG9uZyBNaWtN b2RfR2V0VmVyc2lvbih2b2lkKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVk ZWYgY2hhciBDSEFSOwojIDEwMiAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc2ln bmVkIGNoYXIgU0JZVEU7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBVQllURTsKdHlwZWRlZiBzaWdu ZWQgc2hvcnQgU1dPUkQ7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVdPUkQ7CnR5cGVkZWYgc2ln bmVkIGxvbmcgU0xPTkc7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUxPTkc7CnR5cGVkZWYgaW50 IEJPT0w7CgoKCgoKCgplbnVtIHsKICAgICAgICBNTUVSUl9PUEVOSU5HX0ZJTEUgPSAxLAogICAg ICAgIE1NRVJSX09VVF9PRl9NRU1PUlksCiAgICAgICAgTU1FUlJfRFlOQU1JQ19MSU5LSU5HLAoK ICAgICAgICBNTUVSUl9TQU1QTEVfVE9PX0JJRywKICAgICAgICBNTUVSUl9PVVRfT0ZfSEFORExF UywKICAgICAgICBNTUVSUl9VTktOT1dOX1dBVkVfVFlQRSwKCiAgICAgICAgTU1FUlJfTE9BRElO R19QQVRURVJOLAogICAgICAgIE1NRVJSX0xPQURJTkdfVFJBQ0ssCiAgICAgICAgTU1FUlJfTE9B RElOR19IRUFERVIsCiAgICAgICAgTU1FUlJfTE9BRElOR19TQU1QTEVJTkZPLAogICAgICAgIE1N RVJSX05PVF9BX01PRFVMRSwKICAgICAgICBNTUVSUl9OT1RfQV9TVFJFQU0sCiAgICAgICAgTU1F UlJfTUVEX1NZTlRIU0FNUExFUywKICAgICAgICBNTUVSUl9JVFBBQ0tfSU5WQUxJRF9EQVRBLAoK ICAgICAgICBNTUVSUl9ERVRFQ1RJTkdfREVWSUNFLAogICAgICAgIE1NRVJSX0lOVkFMSURfREVW SUNFLAogICAgICAgIE1NRVJSX0lOSVRJQUxJWklOR19NSVhFUiwKICAgICAgICBNTUVSUl9PUEVO SU5HX0FVRElPLAogICAgICAgIE1NRVJSXzhCSVRfT05MWSwKICAgICAgICBNTUVSUl8xNkJJVF9P TkxZLAogICAgICAgIE1NRVJSX1NURVJFT19PTkxZLAogICAgICAgIE1NRVJSX1VMQVcsCiAgICAg ICAgTU1FUlJfTk9OX0JMT0NLLAoKICAgICAgICBNTUVSUl9BRl9BVURJT19QT1JULAoKICAgICAg ICBNTUVSUl9BSVhfQ09ORklHX0lOSVQsCiAgICAgICAgTU1FUlJfQUlYX0NPTkZJR19DT05UUk9M LAogICAgICAgIE1NRVJSX0FJWF9DT05GSUdfU1RBUlQsCgogICAgICAgIE1NRVJSX0dVU19TRVRU SU5HUywKICAgICAgICBNTUVSUl9HVVNfUkVTRVQsCiAgICAgICAgTU1FUlJfR1VTX1RJTUVSLAoK ICAgICAgICBNTUVSUl9IUF9TRVRTQU1QTEVTSVpFLAogICAgICAgIE1NRVJSX0hQX1NFVFNQRUVE LAogICAgICAgIE1NRVJSX0hQX0NIQU5ORUxTLAogICAgICAgIE1NRVJSX0hQX0FVRElPX09VVFBV VCwKICAgICAgICBNTUVSUl9IUF9BVURJT19ERVNDLAogICAgICAgIE1NRVJSX0hQX0JVRkZFUlNJ WkUsCgogICAgICAgIE1NRVJSX09TU19TRVRGUkFHTUVOVCwKICAgICAgICBNTUVSUl9PU1NfU0VU U0FNUExFU0laRSwKICAgICAgICBNTUVSUl9PU1NfU0VUU1RFUkVPLAogICAgICAgIE1NRVJSX09T U19TRVRTUEVFRCwKCiAgICAgICAgTU1FUlJfU0dJX1NQRUVELAogICAgICAgIE1NRVJSX1NHSV8x NkJJVCwKICAgICAgICBNTUVSUl9TR0lfOEJJVCwKICAgICAgICBNTUVSUl9TR0lfU1RFUkVPLAog ICAgICAgIE1NRVJSX1NHSV9NT05PLAoKICAgICAgICBNTUVSUl9TVU5fSU5JVCwKCiAgICAgICAg TU1FUlJfT1MyX01JWFNFVFVQLAogICAgICAgIE1NRVJSX09TMl9TRU1BUEhPUkUsCiAgICAgICAg TU1FUlJfT1MyX1RJTUVSLAogICAgICAgIE1NRVJSX09TMl9USFJFQUQsCgogICAgICAgIE1NRVJS X0RTX1BSSU9SSVRZLAogICAgICAgIE1NRVJSX0RTX0JVRkZFUiwKICAgICAgICBNTUVSUl9EU19G T1JNQVQsCiAgICAgICAgTU1FUlJfRFNfTk9USUZZLAogICAgICAgIE1NRVJSX0RTX0VWRU5ULAog ICAgICAgIE1NRVJSX0RTX1RIUkVBRCwKICAgICAgICBNTUVSUl9EU19VUERBVEUsCgogICAgICAg IE1NRVJSX1dJTk1NX0hBTkRMRSwKICAgICAgICBNTUVSUl9XSU5NTV9BTExPQ0FURUQsCiAgICAg ICAgTU1FUlJfV0lOTU1fREVWSUNFSUQsCiAgICAgICAgTU1FUlJfV0lOTU1fRk9STUFULAogICAg ICAgIE1NRVJSX1dJTk1NX1VOS05PV04sCgogICAgICAgIE1NRVJSX01BQ19TUEVFRCwKICAgICAg ICBNTUVSUl9NQUNfU1RBUlQsCgogICAgICAgIE1NRVJSX01BWAp9OwoKCgoKCnR5cGVkZWYgdm9p ZCAoTWlrTW9kX2hhbmRsZXIpKHZvaWQpOwp0eXBlZGVmIE1pa01vZF9oYW5kbGVyICpNaWtNb2Rf aGFuZGxlcl90OwoKIGV4dGVybiBpbnQgTWlrTW9kX2Vycm5vOwogZXh0ZXJuIEJPT0wgTWlrTW9k X2NyaXRpY2FsOwogZXh0ZXJuIGNoYXIgKk1pa01vZF9zdHJlcnJvcihpbnQpOwoKIGV4dGVybiBN aWtNb2RfaGFuZGxlcl90IE1pa01vZF9SZWdpc3RlckVycm9ySGFuZGxlcihNaWtNb2RfaGFuZGxl cl90KTsKCgoKCgpzdHJ1Y3QgTURSSVZFUjsKCiBleHRlcm4gdm9pZCBNaWtNb2RfUmVnaXN0ZXJB bGxEcml2ZXJzKHZvaWQpOwoKIGV4dGVybiBDSEFSKiBNaWtNb2RfSW5mb0RyaXZlcih2b2lkKTsK IGV4dGVybiB2b2lkIE1pa01vZF9SZWdpc3RlckRyaXZlcihzdHJ1Y3QgTURSSVZFUiopOwogZXh0 ZXJuIGludCBNaWtNb2RfRHJpdmVyRnJvbUFsaWFzKENIQVIqKTsKCiBleHRlcm4gQk9PTCBNaWtN b2RfSW5pdChDSEFSKik7CiBleHRlcm4gdm9pZCBNaWtNb2RfRXhpdCh2b2lkKTsKIGV4dGVybiBC T09MIE1pa01vZF9SZXNldChDSEFSKik7CiBleHRlcm4gQk9PTCBNaWtNb2RfU2V0TnVtVm9pY2Vz KGludCxpbnQpOwogZXh0ZXJuIEJPT0wgTWlrTW9kX0FjdGl2ZSh2b2lkKTsKIGV4dGVybiBCT09M IE1pa01vZF9FbmFibGVPdXRwdXQodm9pZCk7CiBleHRlcm4gdm9pZCBNaWtNb2RfRGlzYWJsZU91 dHB1dCh2b2lkKTsKIGV4dGVybiB2b2lkIE1pa01vZF9VcGRhdGUodm9pZCk7CgogZXh0ZXJuIEJP T0wgTWlrTW9kX0luaXRUaHJlYWRzKHZvaWQpOwogZXh0ZXJuIHZvaWQgTWlrTW9kX0xvY2sodm9p ZCk7CiBleHRlcm4gdm9pZCBNaWtNb2RfVW5sb2NrKHZvaWQpOwoKCgoKCnR5cGVkZWYgc3RydWN0 IE1SRUFERVIgewogICAgICAgIEJPT0wgKCpTZWVrKShzdHJ1Y3QgTVJFQURFUiosbG9uZyxpbnQp OwogICAgICAgIGxvbmcgKCpUZWxsKShzdHJ1Y3QgTVJFQURFUiopOwogICAgICAgIEJPT0wgKCpS ZWFkKShzdHJ1Y3QgTVJFQURFUiosdm9pZCosc2l6ZV90KTsKICAgICAgICBpbnQgKCpHZXQpKHN0 cnVjdCBNUkVBREVSKik7CiAgICAgICAgQk9PTCAoKkVvZikoc3RydWN0IE1SRUFERVIqKTsKfSBN UkVBREVSOwoKdHlwZWRlZiBzdHJ1Y3QgTVdSSVRFUiB7CiAgICAgICAgQk9PTCAoKlNlZWspKHN0 cnVjdCBNV1JJVEVSKixsb25nLGludCk7CiAgICAgICAgbG9uZyAoKlRlbGwpKHN0cnVjdCBNV1JJ VEVSKik7CiAgICAgICAgQk9PTCAoKldyaXRlKShzdHJ1Y3QgTVdSSVRFUiosdm9pZCosc2l6ZV90 KTsKICAgICAgICBCT09MICgqUHV0KShzdHJ1Y3QgTVdSSVRFUiosaW50KTsKfSBNV1JJVEVSOwoj IDI5OCAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc3RydWN0IFNBTVBMRSB7CiAg ICAgICAgU1dPUkQgcGFubmluZzsKICAgICAgICBVTE9ORyBzcGVlZDsKICAgICAgICBVQllURSB2 b2x1bWU7CiAgICAgICAgVVdPUkQgaW5mbGFnczsKICAgICAgICBVV09SRCBmbGFnczsKICAgICAg ICBVTE9ORyBsZW5ndGg7CiAgICAgICAgVUxPTkcgbG9vcHN0YXJ0OwogICAgICAgIFVMT05HIGxv b3BlbmQ7CiAgICAgICAgVUxPTkcgc3VzYmVnaW47CiAgICAgICAgVUxPTkcgc3VzZW5kOwoKCiAg ICAgICAgVUJZVEUgZ2xvYnZvbDsKICAgICAgICBVQllURSB2aWJmbGFnczsKICAgICAgICBVQllU RSB2aWJ0eXBlOwogICAgICAgIFVCWVRFIHZpYnN3ZWVwOwogICAgICAgIFVCWVRFIHZpYmRlcHRo OwogICAgICAgIFVCWVRFIHZpYnJhdGU7CiAgICAgICAgQ0hBUiogc2FtcGxlbmFtZTsKCgogICAg ICAgIFVXT1JEIGF2aWJwb3M7CiAgICAgICAgVUJZVEUgZGl2ZmFjdG9yOwogICAgICAgIFVMT05H IHNlZWtwb3M7CiAgICAgICAgU1dPUkQgaGFuZGxlOwp9IFNBTVBMRTsKCgoKIGV4dGVybiBTQU1Q TEUgKlNhbXBsZV9Mb2FkKENIQVIqKTsKIGV4dGVybiBTQU1QTEUgKlNhbXBsZV9Mb2FkRlAoRklM RSopOwogZXh0ZXJuIFNBTVBMRSAqU2FtcGxlX0xvYWRHZW5lcmljKE1SRUFERVIqKTsKIGV4dGVy biB2b2lkIFNhbXBsZV9GcmVlKFNBTVBMRSopOwogZXh0ZXJuIFNCWVRFIFNhbXBsZV9QbGF5KFNB TVBMRSosVUxPTkcsVUJZVEUpOwoKIGV4dGVybiB2b2lkIFZvaWNlX1NldFZvbHVtZShTQllURSxV V09SRCk7CiBleHRlcm4gVVdPUkQgVm9pY2VfR2V0Vm9sdW1lKFNCWVRFKTsKIGV4dGVybiB2b2lk IFZvaWNlX1NldEZyZXF1ZW5jeShTQllURSxVTE9ORyk7CiBleHRlcm4gVUxPTkcgVm9pY2VfR2V0 RnJlcXVlbmN5KFNCWVRFKTsKIGV4dGVybiB2b2lkIFZvaWNlX1NldFBhbm5pbmcoU0JZVEUsVUxP TkcpOwogZXh0ZXJuIFVMT05HIFZvaWNlX0dldFBhbm5pbmcoU0JZVEUpOwogZXh0ZXJuIHZvaWQg Vm9pY2VfUGxheShTQllURSxTQU1QTEUqLFVMT05HKTsKIGV4dGVybiB2b2lkIFZvaWNlX1N0b3Ao U0JZVEUpOwogZXh0ZXJuIEJPT0wgVm9pY2VfU3RvcHBlZChTQllURSk7CiBleHRlcm4gU0xPTkcg Vm9pY2VfR2V0UG9zaXRpb24oU0JZVEUpOwogZXh0ZXJuIFVMT05HIFZvaWNlX1JlYWxWb2x1bWUo U0JZVEUpOwojIDM1OSAiL3Vzci9pbmNsdWRlL21pa21vZC5oIiAzCnR5cGVkZWYgc3RydWN0IEVO VlBUIHsKICAgICAgICBTV09SRCBwb3M7CiAgICAgICAgU1dPUkQgdmFsOwp9IEVOVlBUOwoKCgoK CnR5cGVkZWYgc3RydWN0IElOU1RSVU1FTlQgewogICAgICAgIENIQVIqIGluc25hbWU7CgogICAg ICAgIFVCWVRFIGZsYWdzOwogICAgICAgIFVXT1JEIHNhbXBsZW51bWJlclsxMjBdOwogICAgICAg IFVCWVRFIHNhbXBsZW5vdGVbMTIwXTsKCiAgICAgICAgVUJZVEUgbm5hdHlwZTsKICAgICAgICBV QllURSBkY2E7CiAgICAgICAgVUJZVEUgZGN0OwogICAgICAgIFVCWVRFIGdsb2J2b2w7CiAgICAg ICAgVVdPUkQgdm9sZmFkZTsKICAgICAgICBTV09SRCBwYW5uaW5nOwoKICAgICAgICBVQllURSBw aXRwYW5zZXA7CiAgICAgICAgVUJZVEUgcGl0cGFuY2VudGVyOwogICAgICAgIFVCWVRFIHJ2b2x2 YXI7CiAgICAgICAgVUJZVEUgcnBhbnZhcjsKCgogICAgICAgIFVCWVRFIHZvbGZsZzsKICAgICAg ICBVQllURSB2b2xwdHM7CiAgICAgICAgVUJZVEUgdm9sc3VzYmVnOwogICAgICAgIFVCWVRFIHZv bHN1c2VuZDsKICAgICAgICBVQllURSB2b2xiZWc7CiAgICAgICAgVUJZVEUgdm9sZW5kOwogICAg ICAgIEVOVlBUIHZvbGVudlszMl07CgogICAgICAgIFVCWVRFIHBhbmZsZzsKICAgICAgICBVQllU RSBwYW5wdHM7CiAgICAgICAgVUJZVEUgcGFuc3VzYmVnOwogICAgICAgIFVCWVRFIHBhbnN1c2Vu ZDsKICAgICAgICBVQllURSBwYW5iZWc7CiAgICAgICAgVUJZVEUgcGFuZW5kOwogICAgICAgIEVO VlBUIHBhbmVudlszMl07CgogICAgICAgIFVCWVRFIHBpdGZsZzsKICAgICAgICBVQllURSBwaXRw dHM7CiAgICAgICAgVUJZVEUgcGl0c3VzYmVnOwogICAgICAgIFVCWVRFIHBpdHN1c2VuZDsKICAg ICAgICBVQllURSBwaXRiZWc7CiAgICAgICAgVUJZVEUgcGl0ZW5kOwogICAgICAgIEVOVlBUIHBp dGVudlszMl07Cn0gSU5TVFJVTUVOVDsKCnN0cnVjdCBNUF9DT05UUk9MOwpzdHJ1Y3QgTVBfVk9J Q0U7CiMgNDM5ICIvdXNyL2luY2x1ZGUvbWlrbW9kLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgTU9EVUxF IHsKCiAgICAgICAgICAgICAgICBDSEFSKiBzb25nbmFtZTsKICAgICAgICAgICAgICAgIENIQVIq IG1vZHR5cGU7CiAgICAgICAgICAgICAgICBDSEFSKiBjb21tZW50OwoKICAgICAgICAgICAgICAg IFVXT1JEIGZsYWdzOwogICAgICAgICAgICAgICAgVUJZVEUgbnVtY2huOwogICAgICAgICAgICAg ICAgVUJZVEUgbnVtdm9pY2VzOwogICAgICAgICAgICAgICAgVVdPUkQgbnVtcG9zOwogICAgICAg ICAgICAgICAgVVdPUkQgbnVtcGF0OwogICAgICAgICAgICAgICAgVVdPUkQgbnVtaW5zOwogICAg ICAgICAgICAgICAgVVdPUkQgbnVtc21wOwpzdHJ1Y3QgSU5TVFJVTUVOVCogaW5zdHJ1bWVudHM7 CnN0cnVjdCBTQU1QTEUqIHNhbXBsZXM7CiAgICAgICAgICAgICAgICBVQllURSByZWFsY2huOwog ICAgICAgICAgICAgICAgVUJZVEUgdG90YWxjaG47CgoKICAgICAgICAgICAgICAgIFVXT1JEIHJl cHBvczsKICAgICAgICAgICAgICAgIFVCWVRFIGluaXRzcGVlZDsKICAgICAgICAgICAgICAgIFVX T1JEIGluaXR0ZW1wbzsKICAgICAgICAgICAgICAgIFVCWVRFIGluaXR2b2x1bWU7CiAgICAgICAg ICAgICAgICBVV09SRCBwYW5uaW5nWzY0XTsKICAgICAgICAgICAgICAgIFVCWVRFIGNoYW52b2xb NjRdOwogICAgICAgICAgICAgICAgVVdPUkQgYnBtOwogICAgICAgICAgICAgICAgVVdPUkQgc25n c3BkOwogICAgICAgICAgICAgICAgU1dPUkQgdm9sdW1lOwoKICAgICAgICAgICAgICAgIEJPT0wg ZXh0c3BkOwogICAgICAgICAgICAgICAgQk9PTCBwYW5mbGFnOwogICAgICAgICAgICAgICAgQk9P TCB3cmFwOwogICAgICAgICAgICAgICAgQk9PTCBsb29wOwogICAgICAgICAgICAgICAgQk9PTCBm YWRlb3V0OwoKICAgICAgICAgICAgICAgIFVXT1JEIHBhdHBvczsKICAgICAgICAgICAgICAgIFNX T1JEIHNuZ3BvczsKICAgICAgICAgICAgICAgIFVMT05HIHNuZ3RpbWU7CgogICAgICAgICAgICAg ICAgU1dPUkQgcmVsc3BkOwoKCiAgICAgICAgICAgICAgICBVV09SRCBudW10cms7CiAgICAgICAg ICAgICAgICBVQllURSoqIHRyYWNrczsKICAgICAgICAgICAgICAgIFVXT1JEKiBwYXR0ZXJuczsK ICAgICAgICAgICAgICAgIFVXT1JEKiBwYXR0cm93czsKICAgICAgICAgICAgICAgIFVXT1JEKiBw b3NpdGlvbnM7CgogICAgICAgICAgICAgICAgQk9PTCBmb3JiaWQ7CiAgICAgICAgICAgICAgICBV V09SRCBudW1yb3c7CiAgICAgICAgICAgICAgICBVV09SRCB2YnRpY2s7CiAgICAgICAgICAgICAg ICBVV09SRCBzbmdyZW1haW5kZXI7CgpzdHJ1Y3QgTVBfQ09OVFJPTCogY29udHJvbDsKc3RydWN0 IE1QX1ZPSUNFKiB2b2ljZTsKCiAgICAgICAgICAgICAgICBVQllURSBnbG9iYWxzbGlkZTsKICAg ICAgICAgICAgICAgIFVCWVRFIHBhdF9yZXBjcmF6eTsKICAgICAgICAgICAgICAgIFVXT1JEIHBh dGJyazsKICAgICAgICAgICAgICAgIFVCWVRFIHBhdGRseTsKICAgICAgICAgICAgICAgIFVCWVRF IHBhdGRseTI7CiAgICAgICAgICAgICAgICBTV09SRCBwb3NqbXA7CiAgICAgICAgICAgICAgICBV V09SRCBicG1saW1pdDsKfSBNT0RVTEU7CgoKCgoKc3RydWN0IE1MT0FERVI7CgogZXh0ZXJuIENI QVIqIE1pa01vZF9JbmZvTG9hZGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgTWlrTW9kX1JlZ2lzdGVy QWxsTG9hZGVycyh2b2lkKTsKIGV4dGVybiB2b2lkIE1pa01vZF9SZWdpc3RlckxvYWRlcihzdHJ1 Y3QgTUxPQURFUiopOwoKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkXzY2OTsKIGV4dGVybiBz dHJ1Y3QgTUxPQURFUiBsb2FkX2FtZjsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2RzbTsK IGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2ZhcjsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBs b2FkX2dkbTsKIGV4dGVybiBzdHJ1Y3QgTUxPQURFUiBsb2FkX2l0OwogZXh0ZXJuIHN0cnVjdCBN TE9BREVSIGxvYWRfaW1mOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbWVkOwogZXh0ZXJu IHN0cnVjdCBNTE9BREVSIGxvYWRfbTE1OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbW9k OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfbXRtOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVS IGxvYWRfb2t0OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfc3RtOwogZXh0ZXJuIHN0cnVj dCBNTE9BREVSIGxvYWRfc3R4OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfczNtOwogZXh0 ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfdWx0OwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRf dW5pOwogZXh0ZXJuIHN0cnVjdCBNTE9BREVSIGxvYWRfeG07CgoKCgoKIGV4dGVybiBNT0RVTEUq IFBsYXllcl9Mb2FkKENIQVIqLGludCxCT09MKTsKIGV4dGVybiBNT0RVTEUqIFBsYXllcl9Mb2Fk RlAoRklMRSosaW50LEJPT0wpOwogZXh0ZXJuIE1PRFVMRSogUGxheWVyX0xvYWRHZW5lcmljKE1S RUFERVIqLGludCxCT09MKTsKIGV4dGVybiBDSEFSKiBQbGF5ZXJfTG9hZFRpdGxlKENIQVIqKTsK IGV4dGVybiBDSEFSKiBQbGF5ZXJfTG9hZFRpdGxlRlAoRklMRSopOwogZXh0ZXJuIHZvaWQgUGxh eWVyX0ZyZWUoTU9EVUxFKik7CiBleHRlcm4gdm9pZCBQbGF5ZXJfU3RhcnQoTU9EVUxFKik7CiBl eHRlcm4gQk9PTCBQbGF5ZXJfQWN0aXZlKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGxheWVyX1N0b3Ao dm9pZCk7CiBleHRlcm4gdm9pZCBQbGF5ZXJfVG9nZ2xlUGF1c2Uodm9pZCk7CiBleHRlcm4gQk9P TCBQbGF5ZXJfUGF1c2VkKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGxheWVyX05leHRQb3NpdGlvbih2 b2lkKTsKIGV4dGVybiB2b2lkIFBsYXllcl9QcmV2UG9zaXRpb24odm9pZCk7CiBleHRlcm4gdm9p ZCBQbGF5ZXJfU2V0UG9zaXRpb24oVVdPUkQpOwogZXh0ZXJuIEJPT0wgUGxheWVyX011dGVkKFVC WVRFKTsKIGV4dGVybiB2b2lkIFBsYXllcl9TZXRWb2x1bWUoU1dPUkQpOwogZXh0ZXJuIE1PRFVM RSogUGxheWVyX0dldE1vZHVsZSh2b2lkKTsKIGV4dGVybiB2b2lkIFBsYXllcl9TZXRTcGVlZChV V09SRCk7CiBleHRlcm4gdm9pZCBQbGF5ZXJfU2V0VGVtcG8oVVdPUkQpOwogZXh0ZXJuIHZvaWQg UGxheWVyX1VubXV0ZShTTE9ORywuLi4pOwogZXh0ZXJuIHZvaWQgUGxheWVyX011dGUoU0xPTkcs Li4uKTsKIGV4dGVybiB2b2lkIFBsYXllcl9Ub2dnbGVNdXRlKFNMT05HLC4uLik7CiBleHRlcm4g aW50IFBsYXllcl9HZXRDaGFubmVsVm9pY2UoVUJZVEUpOwogZXh0ZXJuIFVXT1JEIFBsYXllcl9H ZXRDaGFubmVsUGVyaW9kKFVCWVRFKTsKCnR5cGVkZWYgdm9pZCAoTWlrTW9kX3BsYXllcikodm9p ZCk7CnR5cGVkZWYgTWlrTW9kX3BsYXllciAqTWlrTW9kX3BsYXllcl90OwoKIGV4dGVybiBNaWtN b2RfcGxheWVyX3QgTWlrTW9kX1JlZ2lzdGVyUGxheWVyKE1pa01vZF9wbGF5ZXJfdCk7CiMgNTc0 ICIvdXNyL2luY2x1ZGUvbWlrbW9kLmgiIDMKZW51bSB7CiAgICAgICAgTURfTVVTSUMgPSAwLAog ICAgICAgIE1EX1NOREZYCn07CgplbnVtIHsKICAgICAgICBNRF9IQVJEV0FSRSA9IDAsCiAgICAg ICAgTURfU09GVFdBUkUKfTsKIyA1OTcgIi91c3IvaW5jbHVkZS9taWttb2QuaCIgMwpzdHJ1Y3Qg U0FNUExPQUQ7CnR5cGVkZWYgc3RydWN0IE1EUklWRVIgewpzdHJ1Y3QgTURSSVZFUiogbmV4dDsK ICAgICAgICBDSEFSKiBOYW1lOwogICAgICAgIENIQVIqIFZlcnNpb247CgogICAgICAgIFVCWVRF IEhhcmRWb2ljZUxpbWl0OwogICAgICAgIFVCWVRFIFNvZnRWb2ljZUxpbWl0OwoKICAgICAgICBD SEFSKiBBbGlhczsKCiAgICAgICAgdm9pZCAoKkNvbW1hbmRMaW5lKSAoQ0hBUiopOwogICAgICAg IEJPT0wgKCpJc1ByZXNlbnQpICh2b2lkKTsKICAgICAgICBTV09SRCAoKlNhbXBsZUxvYWQpIChz dHJ1Y3QgU0FNUExPQUQqLGludCk7CiAgICAgICAgdm9pZCAoKlNhbXBsZVVubG9hZCkgKFNXT1JE KTsKICAgICAgICBVTE9ORyAoKkZyZWVTYW1wbGVTcGFjZSkgKGludCk7CiAgICAgICAgVUxPTkcg KCpSZWFsU2FtcGxlTGVuZ3RoKSAoaW50LHN0cnVjdCBTQU1QTEUqKTsKICAgICAgICBCT09MICgq SW5pdCkgKHZvaWQpOwogICAgICAgIHZvaWQgKCpFeGl0KSAodm9pZCk7CiAgICAgICAgQk9PTCAo KlJlc2V0KSAodm9pZCk7CiAgICAgICAgQk9PTCAoKlNldE51bVZvaWNlcykgKHZvaWQpOwogICAg ICAgIEJPT0wgKCpQbGF5U3RhcnQpICh2b2lkKTsKICAgICAgICB2b2lkICgqUGxheVN0b3ApICh2 b2lkKTsKICAgICAgICB2b2lkICgqVXBkYXRlKSAodm9pZCk7CiAgICAgICAgdm9pZCAoKlBhdXNl KSAodm9pZCk7CiAgICAgICAgdm9pZCAoKlZvaWNlU2V0Vm9sdW1lKSAoVUJZVEUsVVdPUkQpOwog ICAgICAgIFVXT1JEICgqVm9pY2VHZXRWb2x1bWUpIChVQllURSk7CiAgICAgICAgdm9pZCAoKlZv aWNlU2V0RnJlcXVlbmN5KShVQllURSxVTE9ORyk7CiAgICAgICAgVUxPTkcgKCpWb2ljZUdldEZy ZXF1ZW5jeSkoVUJZVEUpOwogICAgICAgIHZvaWQgKCpWb2ljZVNldFBhbm5pbmcpIChVQllURSxV TE9ORyk7CiAgICAgICAgVUxPTkcgKCpWb2ljZUdldFBhbm5pbmcpIChVQllURSk7CiAgICAgICAg dm9pZCAoKlZvaWNlUGxheSkgKFVCWVRFLFNXT1JELFVMT05HLFVMT05HLFVMT05HLFVMT05HLFVX T1JEKTsKICAgICAgICB2b2lkICgqVm9pY2VTdG9wKSAoVUJZVEUpOwogICAgICAgIEJPT0wgKCpW b2ljZVN0b3BwZWQpIChVQllURSk7CiAgICAgICAgU0xPTkcgKCpWb2ljZUdldFBvc2l0aW9uKSAo VUJZVEUpOwogICAgICAgIFVMT05HICgqVm9pY2VSZWFsVm9sdW1lKSAoVUJZVEUpOwp9IE1EUklW RVI7CgoKIGV4dGVybiBVQllURSBtZF92b2x1bWU7CiBleHRlcm4gVUJZVEUgbWRfbXVzaWN2b2x1 bWU7CiBleHRlcm4gVUJZVEUgbWRfc25kZnh2b2x1bWU7CiBleHRlcm4gVUJZVEUgbWRfcmV2ZXJi OwogZXh0ZXJuIFVCWVRFIG1kX3BhbnNlcDsKCgoKCgogZXh0ZXJuIFVXT1JEIG1kX2RldmljZTsK IGV4dGVybiBVV09SRCBtZF9taXhmcmVxOwogZXh0ZXJuIFVXT1JEIG1kX21vZGU7CgoKIGV4dGVy biBNRFJJVkVSKiBtZF9kcml2ZXI7CgoKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X25vczsK IGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfcGlwZTsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBk cnZfcmF3OwogZXh0ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zdGRvdXQ7CiBleHRlcm4gc3RydWN0 IE1EUklWRVIgZHJ2X3dhdjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X3VsdHJhOwogZXh0 ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zYW05NDA3OwoKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBk cnZfQUY7CiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2FpeDsKIGV4dGVybiBzdHJ1Y3QgTURS SVZFUiBkcnZfYWxzYTsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfZXNkOwogZXh0ZXJuIHN0 cnVjdCBNRFJJVkVSIGRydl9ocDsKIGV4dGVybiBzdHJ1Y3QgTURSSVZFUiBkcnZfb3NzOwogZXh0 ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9zZ2k7CiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X3N1 bjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2RhcnQ7CiBleHRlcm4gc3RydWN0IE1EUklW RVIgZHJ2X29zMjsKCiBleHRlcm4gc3RydWN0IE1EUklWRVIgZHJ2X2RzOwogZXh0ZXJuIHN0cnVj dCBNRFJJVkVSIGRydl93aW47CgogZXh0ZXJuIHN0cnVjdCBNRFJJVkVSIGRydl9tYWM7CgoKCiBl eHRlcm4gQk9PTCBWQ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVkNfRXhpdCh2b2lkKTsKIGV4 dGVybiBCT09MIFZDX1NldE51bVZvaWNlcyh2b2lkKTsKIGV4dGVybiBVTE9ORyBWQ19TYW1wbGVT cGFjZShpbnQpOwogZXh0ZXJuIFVMT05HIFZDX1NhbXBsZUxlbmd0aChpbnQsU0FNUExFKik7Cgog ZXh0ZXJuIEJPT0wgVkNfUGxheVN0YXJ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgVkNfUGxheVN0b3Ao dm9pZCk7CgogZXh0ZXJuIFNXT1JEIFZDX1NhbXBsZUxvYWQoc3RydWN0IFNBTVBMT0FEKixpbnQp OwogZXh0ZXJuIHZvaWQgVkNfU2FtcGxlVW5sb2FkKFNXT1JEKTsKCiBleHRlcm4gVUxPTkcgVkNf V3JpdGVCeXRlcyhTQllURSosVUxPTkcpOwogZXh0ZXJuIFVMT05HIFZDX1NpbGVuY2VCeXRlcyhT QllURSosVUxPTkcpOwoKIGV4dGVybiB2b2lkIFZDX1ZvaWNlU2V0Vm9sdW1lKFVCWVRFLFVXT1JE KTsKIGV4dGVybiBVV09SRCBWQ19Wb2ljZUdldFZvbHVtZShVQllURSk7CiBleHRlcm4gdm9pZCBW Q19Wb2ljZVNldEZyZXF1ZW5jeShVQllURSxVTE9ORyk7CiBleHRlcm4gVUxPTkcgVkNfVm9pY2VH ZXRGcmVxdWVuY3koVUJZVEUpOwogZXh0ZXJuIHZvaWQgVkNfVm9pY2VTZXRQYW5uaW5nKFVCWVRF LFVMT05HKTsKIGV4dGVybiBVTE9ORyBWQ19Wb2ljZUdldFBhbm5pbmcoVUJZVEUpOwogZXh0ZXJu IHZvaWQgVkNfVm9pY2VQbGF5KFVCWVRFLFNXT1JELFVMT05HLFVMT05HLFVMT05HLFVMT05HLFVX T1JEKTsKCiBleHRlcm4gdm9pZCBWQ19Wb2ljZVN0b3AoVUJZVEUpOwogZXh0ZXJuIEJPT0wgVkNf Vm9pY2VTdG9wcGVkKFVCWVRFKTsKIGV4dGVybiBTTE9ORyBWQ19Wb2ljZUdldFBvc2l0aW9uKFVC WVRFKTsKIGV4dGVybiBVTE9ORyBWQ19Wb2ljZVJlYWxWb2x1bWUoVUJZVEUpOwoKCn0KIyAzNiAi L3Vzci9pbmNsdWRlL0NsYW5MaWIvTWlrTW9kL3N0cmVhbWVkX21pa21vZF9zYW1wbGUuaCIgMiAz CgoKCgoKCmNsYXNzIENMX1N0cmVhbWVkX01pa01vZFNhbXBsZSA6IHB1YmxpYyBDTF9TdHJlYW1T b3VuZFByb3ZpZGVyCnsKcHJvdGVjdGVkOgogICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lOwog ICAgICAgIGJvb2wgbG9vcGVkOwogICAgICAgIGJvb2wgbG9hZGVkX2Zyb21fcmVzb3VyY2U7CiAg ICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyOwoKICAgICAgICBNT0RVTEUgKm1vZHVs ZTsKcHVibGljOgoKCiAgICAgICAgc3RhdGljIENMX1NvdW5kQnVmZmVyICpjcmVhdGUoCiAgICAg ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICBD TF9JbnB1dFNvdXJjZVByb3ZpZGVyICppbnB1dHByb3ZpZGVyID0gX19udWxsLAogICAgICAgICAg ICAgICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBzdGF0aWMgQ0xfU291bmRCdWZm ZXIgKmxvYWQoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLAogICAg ICAgICAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLAogICAgICAgICAgICAgICAg Ym9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBDTF9TdHJlYW1lZF9NaWtNb2RTYW1wbGUo CiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsCiAgICAgICAgICAg ICAgICBDTF9JbnB1dFNvdXJjZVByb3ZpZGVyICppbnB1dHByb3ZpZGVyID0gX19udWxsLAogICAg ICAgICAgICAgICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICBDTF9TdHJlYW1lZF9N aWtNb2RTYW1wbGUoCiAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmcmVzX2lkLAog ICAgICAgICAgICAgICAgQ0xfUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLAogICAgICAgICAgICAg ICAgYm9vbCBsb29wZWQgPSBmYWxzZSk7CgoKICAgICAgICB2aXJ0dWFsIH5DTF9TdHJlYW1lZF9N aWtNb2RTYW1wbGUoKTsKCgoKICAgICAgICB2aXJ0dWFsIENMX1N0cmVhbVNvdW5kUHJvdmlkZXJf U2Vzc2lvbiAqYmVnaW5fc2Vzc2lvbigpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGVuZF9zZXNz aW9uKENMX1N0cmVhbVNvdW5kUHJvdmlkZXJfU2Vzc2lvbiAqc2Vzc2lvbik7Cgp9OwoKCmNsYXNz IENMX1N0cmVhbWVkX01pa01vZFNhbXBsZV9TZXNzaW9uIDogcHVibGljIENMX1N0cmVhbVNvdW5k UHJvdmlkZXJfU2Vzc2lvbgp7CnByb3RlY3RlZDoKICAgICAgICBmcmllbmQgY2xhc3MgQ0xfU3Ry ZWFtZWRfTWlrTW9kU2FtcGxlOwoKICAgICAgICBDTF9TdHJlYW1lZF9NaWtNb2RTYW1wbGVfU2Vz c2lvbihNT0RVTEUgKl9tb2R1bGUsIGJvb2wgX2xvb3BlZCk7CgogICAgICAgIE1PRFVMRSAqbW9k dWxlOwogICAgICAgIGJvb2wgbG9vcGVkOwoKICAgICAgICBTb3VuZEZvcm1hdCBzYW1wbGVfZm9y bWF0OwogICAgICAgIGludCBzYW1wbGVfc2l6ZTsKICAgICAgICBpbnQgc2FtcGxlX2ZyZXE7CiAg ICAgICAgaW50IHNhbXBsZV9sZWZ0OwoKcHVibGljOgoKCiAgICAgICAgdmlydHVhbCB+Q0xfU3Ry ZWFtZWRfTWlrTW9kU2FtcGxlX1Nlc3Npb24oKTsKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgc3Rv cCgpOwoKCiAgICAgICAgdmlydHVhbCBib29sIHBsYXkoKTsKCgogICAgICAgIHZpcnR1YWwgYm9v bCBzZXRfcG9zaXRpb24oaW50IHBvcyk7CgoKICAgICAgICBzdGF0aWMgdm9pZCBjbGFuTWlrTW9k X1VwZGF0ZSgpIHsgfQoKCgogICAgICAgIHZpcnR1YWwgYm9vbCBlb2YoKSBjb25zdDsKCgogICAg ICAgIHZpcnR1YWwgaW50IGdldF9kYXRhKHZvaWQgKmRhdGFfcHRyLCBpbnQgZGF0YV9yZXF1ZXN0 ZWQpOwoKCiAgICAgICAgdmlydHVhbCBpbnQgZ2V0X2ZyZXF1ZW5jeSgpIGNvbnN0OwoKCiAgICAg ICAgdmlydHVhbCBTb3VuZEZvcm1hdCBnZXRfZm9ybWF0KCkgY29uc3Q7CgoKICAgICAgICBzdGF0 aWMgQk9PTCBjbGFuTWlrTW9kX0lzUHJlc2VudCgpIHsgcmV0dXJuIDE7IH0KCgp9OwojIDI5ICIv dXNyL2luY2x1ZGUvQ2xhbkxpYi9taWttb2QuaCIgMiAzCiMgNDAgIkNsYW5Cb21iZXIuaCIgMgoj IDEgImxpbmsuaCIgMQojIDI1ICJsaW5rLmgiCmNsYXNzIENMX0xpbmsKewpwdWJsaWM6CiAgICAg ICAgQ0xfTGluayAqcHJldjsKICAgICAgICBDTF9MaW5rICpuZXh0OwogICAgICAgIHZvaWQgKmlu c3RhbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CmNsYXNzIENMX0xpc3QKCgoKCgoKewoK cHVibGljOgogICAgICAgIENMX0xpbmsgKmZpcnN0OwogICAgICAgIENMX0xpbmsgKmxhc3Q7CiAg ICAgICAgaW50IG51bV9pdGVtczsKCnB1YmxpYzoKICAgICAgICBDTF9MaXN0KCkKICAgICAgICB7 CiAgICAgICAgICAgICAgICBmaXJzdCA9IF9fbnVsbDsKICAgICAgICAgICAgICAgIGxhc3QgPSBf X251bGw7CiAgICAgICAgICAgICAgICBudW1faXRlbXMgPSAwOwogICAgICAgIH0KCgogICAgICAg IENMX0xpc3QoY29uc3QgQ0xfTGlzdDxUWVBFPiAmY2xvbmUpCiAgICAgICAgewogICAgICAgICAg ICAgICAgZmlyc3QgPSBfX251bGw7CiAgICAgICAgICAgICAgICBsYXN0ID0gX19udWxsOwogICAg ICAgICAgICAgICAgbnVtX2l0ZW1zID0gMDsKCiAgICAgICAgICAgICAgICBjb3B5KGNsb25lKTsK ICAgICAgICB9CgoKCiAgICAgICAgfkNMX0xpc3QoKQogICAgICAgIHsKICAgICAgICAgICAgICAg IGNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICB2b2lkIGNsZWFyKCkKICAgICAgICB7CiAgICAg ICAgICAgICAgICBDTF9MaW5rICpjdXJfaW5zdGFuY2UgPSBmaXJzdDsKICAgICAgICAgICAgICAg IHdoaWxlIChjdXJfaW5zdGFuY2UgIT0gX19udWxsKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICBDTF9MaW5rICpkZWxldGVfaW5zdGFuY2UgPSBjdXJfaW5zdGFuY2U7 CiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pbnN0YW5jZSA9IGN1cl9pbnN0YW5jZS0+bmV4 dDsKCgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVsZXRlX2luc3RhbmNlOwogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZpcnN0ID0gX19udWxsOwogICAgICAgICAg ICAgICAgbGFzdCA9IF9fbnVsbDsKICAgICAgICAgICAgICAgIG51bV9pdGVtcyA9IDA7CiAgICAg ICAgfQoKCiAgICAgICAgdm9pZCBjb3B5KGNvbnN0IENMX0xpc3Q8VFlQRT4gJm90aGVyKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgICAgICAgICBhZGQob3RoZXIp OwogICAgICAgIH0KCgoKCgogICAgICAgIHZvaWQgYWRkKGNvbnN0IENMX0xpc3Q8VFlQRT4gJm90 aGVyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIENMX0xpbmsgKmN1ciA9IG90aGVyLmZpcnN0 OwogICAgICAgICAgICAgICAgd2hpbGUgKGN1ciAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgoVFlQRSAqKSBjdXItPmluc3RhbmNlKTsKICAg ICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgICAgICAgICAgfQog ICAgICAgIH0KCgoKICAgICAgICBDTF9MaW5rICphZGQoVFlQRSAqaXRlbSkKICAgICAgICB7Cgog ICAgICAgICAgICAgICAgQ0xfTGluayAqY3VyID0gbmV3IENMX0xpbms7CgogICAgICAgICAgICAg ICAgY3VyLT5pbnN0YW5jZSA9IGl0ZW07CiAgICAgICAgICAgICAgICBjdXItPnByZXYgPSBsYXN0 OwogICAgICAgICAgICAgICAgY3VyLT5uZXh0ID0gX19udWxsOwoKICAgICAgICAgICAgICAgIGlm IChmaXJzdCA9PSBfX251bGwpIGZpcnN0ID0gY3VyOwogICAgICAgICAgICAgICAgaWYgKGxhc3Qg IT0gX19udWxsKSBsYXN0LT5uZXh0ID0gY3VyOwogICAgICAgICAgICAgICAgbGFzdCA9IGN1cjsK CiAgICAgICAgICAgICAgICBudW1faXRlbXMrKzsKCiAgICAgICAgICAgICAgICByZXR1cm4gY3Vy OwogICAgICAgIH0KCgoKCiAgICAgICAgVFlQRSAqZ2V0X2l0ZW0oaW50IG51bWJlcikKICAgICAg ICB7CiAgICAgICAgICAgICAgICBpZiAobnVtYmVyPDAgfHwgbnVtYmVyPm51bV9pdGVtcykgcmV0 dXJuIF9fbnVsbDsKCiAgICAgICAgICAgICAgICBDTF9MaW5rICpjdXJfaW5zdGFuY2UgPSBmaXJz dDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxudW1iZXI7IGkrKykKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2luc3RhbmNlPWN1cl9pbnN0YW5j ZS0+bmV4dDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUg KikgY3VyX2luc3RhbmNlLT5pbnN0YW5jZTsKICAgICAgICB9CgoKCgogICAgICAgIFRZUEUqIG9w ZXJhdG9yW10oaW50IG51bWJlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0 X2l0ZW0obnVtYmVyKTsKICAgICAgICB9CgoKCgogICAgICAgIGludCBnZXRfbnVtX2l0ZW1zKCkK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVtX2l0ZW1zOwogICAgICAgIH0KCgoK ICAgICAgICBUWVBFICpnZXRfZmlyc3QoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChm aXJzdD09X19udWxsKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIChUWVBF ICopIGZpcnN0LT5pbnN0YW5jZTsKICAgICAgICB9CgoKCiAgICAgICAgVFlQRSAqZ2V0X2xhc3Qo KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChsYXN0PT1fX251bGwpIHJldHVybiBfX251 bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgbGFzdC0+aW5zdGFuY2U7CiAgICAg ICAgfQoKCgogICAgICAgIGJvb2wgZGVsKFRZUEUgKml0ZW0pCiAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuIGRlbChmaW5kX2xpbmsoaXRlbSkpOwogICAgICAgIH0KCgoKCiAgICAgICAg Ym9vbCBkZWwoQ0xfTGluayAqaXRlbSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaXRl bSA9PSBfX251bGwpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICBpZiAoaXRlbS0+cHJl diAhPSBfX251bGwpIGl0ZW0tPnByZXYtPm5leHQgPSBpdGVtLT5uZXh0OwogICAgICAgICAgICAg ICAgZWxzZSBmaXJzdCA9IGl0ZW0tPm5leHQ7CgogICAgICAgICAgICAgICAgaWYgKGl0ZW0tPm5l eHQgIT0gX19udWxsKSBpdGVtLT5uZXh0LT5wcmV2ID0gaXRlbS0+cHJldjsKICAgICAgICAgICAg ICAgIGVsc2UgbGFzdCA9IGl0ZW0tPnByZXY7CgoKICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVt OwoKICAgICAgICAgICAgICAgIG51bV9pdGVtcy0tOwoKICAgICAgICAgICAgICAgIHJldHVybiB0 cnVlOwogICAgICAgIH0KCgoKCgogICAgICAgIENMX0xpbmsgKmZpbmRfbGluayhUWVBFICppdGVt KQogICAgICAgIHsKICAgICAgICAgICAgICAgIENMX0xpbmsgKmN1ciA9IGZpcnN0OwogICAgICAg ICAgICAgICAgd2hpbGUgKGN1ciAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoY3VyLT5pbnN0YW5jZSkgPT0gaXRlbSkgcmV0dXJuIGN1cjsK ICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIFRZUEU+CmNsYXNzIENMX0l0ZXJhdG9yCnsKcHJpdmF0ZToKICAgICAgICBDTF9MaXN0 PFRZUEU+ICpsaXN0OwogICAgICAgIENMX0xpbmsgKmN1cnJlbnQ7CgpwdWJsaWM6CiAgICAgICAg Q0xfSXRlcmF0b3IoQ0xfTGlzdDxUWVBFPiAqX2xpc3QpCiAgICAgICAgewogICAgICAgICAgICAg ICAgbGlzdCA9IF9saXN0OwogICAgICAgICAgICAgICAgY3VycmVudCA9IF9fbnVsbDsKICAgICAg ICB9CgogICAgICAgIENMX0l0ZXJhdG9yKENMX0xpc3Q8VFlQRT4gJl9saXN0KQogICAgICAgIHsK ICAgICAgICAgICAgICAgIGxpc3QgPSAmX2xpc3Q7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0g X19udWxsOwogICAgICAgIH0KCiAgICAgICAgVFlQRSAqZmlyc3QoKQogICAgICAgIHsKICAgICAg ICAgICAgICAgIGN1cnJlbnQgPSBsaXN0LT5maXJzdDsKCiAgICAgICAgICAgICAgICBpZiAoY3Vy cmVudCA9PSBfX251bGwpIHJldHVybiBfX251bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZ UEUgKikgKFRZUEUgKikgY3VycmVudC0+aW5zdGFuY2U7CiAgICAgICAgfQoKICAgICAgICBUWVBF ICpsYXN0KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbGlzdC0+bGFzdDsK CiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJldHVybiBfX251bGw7CiAg ICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgY3VycmVudC0+aW5zdGFuY2U7CiAgICAgICAg fQoKICAgICAgICBUWVBFICpwcmV2KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoY3Vy cmVudCA9PSBfX251bGwpIHJldHVybiBsYXN0KCk7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0g Y3VycmVudC0+cHJldjsKCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJl dHVybiBfX251bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gKFRZUEUgKikgY3VycmVudC0+aW5z dGFuY2U7CiAgICAgICAgfQoKICAgICAgICBUWVBFICpuZXh0KCkKICAgICAgICB7CiAgICAgICAg ICAgICAgICBpZiAoY3VycmVudCA9PSBfX251bGwpIHJldHVybiBmaXJzdCgpOwogICAgICAgICAg ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CgogICAgICAgICAgICAgICAgaWYgKGN1cnJl bnQgPT0gX19udWxsKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIChUWVBF ICopIGN1cnJlbnQtPmluc3RhbmNlOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZW1vdmUoKQog ICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IF9fbnVsbCkgcmV0dXJuOwoK ICAgICAgICAgICAgICAgIENMX0xpbmsgKmRlbF9saW5rPWN1cnJlbnQ7CiAgICAgICAgICAgICAg ICBjdXJyZW50PWN1cnJlbnQtPnByZXY7CiAgICAgICAgICAgICAgICBsaXN0LT5kZWwoZGVsX2xp bmspOwogICAgICAgIH0KCiAgICAgICAgVFlQRSogb3BlcmF0b3IoKSgpCiAgICAgICAgewogICAg ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gX19udWxsKSByZXR1cm4gX19udWxsOwoKICAgICAg ICAgICAgICAgIHJldHVybiAoVFlQRSAqKSBjdXJyZW50LT5pbnN0YW5jZTsKICAgICAgICB9Cn07 CiMgNDEgIkNsYW5Cb21iZXIuaCIgMgoKZW51bQp7CiAgICAgICAgTUVOVV9MT0NBTEdBTUUsCiAg ICAgICAgTUVOVV9PUFRJT05TLAogICAgICAgIE1FTlVfQ1JFRElUUywKICAgICAgICBNRU5VX1BM QVlFUl9TRVRVUCwKICAgICAgICBNRU5VX0VYVFJBX1ZBTFVFUywKICAgICAgICBNRU5VX0VYVFJB X09OT0ZGLAogICAgICAgIE1FTlVfRVhJVCwKICAgICAgICBNRU5VX0NPTlRST0xMRVIsCiAgICAg ICAgTUVOVV9IRUxQLAogICAgICAgIE1FTlVfRElTRUFTRV9PTk9GRiwKICAgICAgICBNRU5VX01B UF9FRElUT1IsCiAgICAgICAgTUVOVV9USU1JTkcsCgogICAgICAgIENPTkZJR19TVEFSVF9CT01C UywKICAgICAgICBDT05GSUdfU1RBUlRfUE9XRVIsCiAgICAgICAgQ09ORklHX1NUQVJUX1NLQVRF UywKICAgICAgICBDT05GSUdfU1RBUlRfS0lDSywKICAgICAgICBDT05GSUdfU1RBUlRfR0xPVkUs CgogICAgICAgIENPTkZJR19CT01CUywKICAgICAgICBDT05GSUdfUE9XRVIsCiAgICAgICAgQ09O RklHX1NLQVRFUywKICAgICAgICBDT05GSUdfS0lDSywKICAgICAgICBDT05GSUdfR0xPVkUsCgog ICAgICAgIENPTkZJR19NQVhfQk9NQlMsCiAgICAgICAgQ09ORklHX01BWF9QT1dFUiwKICAgICAg ICBDT05GSUdfTUFYX1NLQVRFUywKCiAgICAgICAgQ09ORklHX1BPSU5UUywKICAgICAgICBDT05G SUdfTUFQX1NFTCwKICAgICAgICBDT05GSUdfUk9VTkRfVElNRSwKICAgICAgICBDT05GSUdfTVVT SUMsCgogICAgICAgIENPTkZJR19KT0lOVCwKICAgICAgICBDT05GSUdfVklBR1JBLAogICAgICAg IENPTkZJR19LT0tTLAoKICAgICAgICBDT05GSUdfS0lEU19NT0RFLAogICAgICAgIENPTkZJR19T SEFLRSwKICAgICAgICBDT05GSUdfQ09SUFNFX1BBUlRTLAogICAgICAgIENPTkZJR19SQU5ET01f UE9TSVRJT05TLAogICAgICAgIENPTkZJR19SQU5ET01fTUFQX09SREVSLAoKICAgICAgICBDT05G SUdfQk9NQl9DT1VOVERPV04sCiAgICAgICAgQ09ORklHX0JPTUJfREVMQVksCiAgICAgICAgQ09O RklHX0JPTUJfU1BFRUQsCgogICAgICAgIExPQ0FMR0FNRV9TVEFSVAp9OwoKdHlwZWRlZiBlbnVt CnsKICAgICAgICBESVJfTk9ORSA9IC0xLAogICAgICAgIERJUl9ET1dOID0gMCwKICAgICAgICBE SVJfTEVGVCA9IDEsCiAgICAgICAgRElSX1VQID0gMiwKICAgICAgICBESVJfUklHSFQgPSAzCn0g RGlyZWN0aW9uOwoKCmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbiA6IHB1YmxpYyBDTF9DbGFu QXBwbGljYXRpb24KewpmcmllbmQgY2xhc3MgRGVidWc7CnByb3RlY3RlZDoKCiAgICAgICAgdm9p ZCBydW5faW50cm8oKTsKICAgICAgICB2b2lkIGluaXRfZ2FtZSgpOwogICAgICAgIHZvaWQgZGVp bml0X2dhbWUoKTsKICAgICAgICB2b2lkIHNob3dfdHV0b3JpYWwoKTsKCiAgICAgICAgdm9pZCBy dW5fZ2FtZSgpOwogICAgICAgIHZvaWQgc2hvd19hbGwoKTsKICAgICAgICB2b2lkIGFjdF9hbGwo KTsKICAgICAgICB2b2lkIGRlbGV0ZV9zb21lKCk7CgoKICAgICAgICBNZW51KiBtZW51OwoKICAg ICAgICBPYnNlcnZlciogb2JzZXJ2ZXI7CiAgICAgICAgQ0xfU291bmRCdWZmZXIqIHdhdjsKICAg ICAgICBDTF9Tb3VuZEJ1ZmZlcl9TZXNzaW9uKiBzZXM7CgogICAgICAgIHN0YXRpYyBDTF9TdHJp bmcgbWFwX3BhdGg7CiAgICAgICAgc3RhdGljIENMX1N0cmluZyBsb2NhbF9tYXBfcGF0aDsKCiAg ICAgICAgYm9vbCBrZXlfRjE7CiAgICAgICAgYm9vbCBzaG93X2ZwczsKICAgICAgICBpbnQgZnBz OwogICAgICAgIGludCBmcmFtZV9jb3VudDsKICAgICAgICBmbG9hdCBmcmFtZV90aW1lOwoKcHVi bGljOgogICAgICAgIE1hcCogbWFwOwogICAgICAgIENMX0xpc3Q8R2FtZU9iamVjdD4gb2JqZWN0 czsKICAgICAgICBDTF9MaXN0PEJvbWJlcj4gYm9tYmVyX29iamVjdHM7CiAgICAgICAgdmlydHVh bCBjaGFyICpnZXRfdGl0bGUoKTsKICAgICAgICB2aXJ0dWFsIGludCBtYWluKGludCBhcmdjLCBj aGFyKiogYXJndik7CgogICAgICAgIHN0YXRpYyBDTF9TdHJpbmcgZ2V0X21hcF9wYXRoKCk7CiAg ICAgICAgc3RhdGljIENMX1N0cmluZyBnZXRfbG9jYWxfbWFwX3BhdGgoKTsKCgogICAgICAgIHZp cnR1YWwgdm9pZCBpbml0X21vZHVsZXMoKQogICAgewogICAgICAgICAgICAgICAgICAgICAgICBD TF9TZXR1cENvcmU6OmluaXQoKTsKICAgICAgICAgICAgICAgIENMX1NldHVwRGlzcGxheTo6aW5p dCgpOwogICAgICAgICAgICAgICAgQ0xfU2V0dXBTb3VuZDo6aW5pdCgpOwogICAgICAgICAgICAg ICAgQ0xfU2V0dXBNaWtNb2Q6OmluaXQoKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgdm9p ZCBkZWluaXRfbW9kdWxlcygpCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xfU2V0dXBNaWtN b2Q6OmRlaW5pdCgpOwogICAgICAgICAgICAgICAgQ0xfU2V0dXBTb3VuZDo6ZGVpbml0KCk7CiAg ICAgICAgICAgICAgICBDTF9TZXR1cERpc3BsYXk6OmRlaW5pdCgpOwogICAgICAgICAgICAgICAg Q0xfU2V0dXBDb3JlOjpkZWluaXQoKTsKICAgICAgICB9Cn07CiMgMTc3ICJDbGFuQm9tYmVyLmgi CmNsYXNzIENMX0lucHV0U291cmNlOwpjbGFzcyBDTF9JbnB1dEJ1ZmZlcjsKQ0xfU3RyaW5nIHJl YWRfbGluZSggQ0xfSW5wdXRTb3VyY2UqIGluICk7CmludCBlbnRlcl9zdHJpbmcoIENMX0lucHV0 QnVmZmVyICprZXlfYnVmZmVyLCBDTF9TdHJpbmcgJnN0cmluZyApOwojIDMwICJNYXAuY3BwIiAy CiMgMSAiTWFwLmgiIDEKIyAyMyAiTWFwLmgiCiMgMSAiTWFwRW50cnkuaCIgMQojIDI3ICJNYXBF bnRyeS5oIgpjbGFzcyBNYXBFbnRyeQp7CnB1YmxpYzoKICAgICAgICBNYXBFbnRyeSggQ0xfU3Ry aW5nIF9wYXRoLCBDTF9TdHJpbmcgX2ZpbGVuYW1lICk7CiAgICAgICAgTWFwRW50cnkoIENMX1N0 cmluZyBfbmFtZSApOwogICAgICAgIH5NYXBFbnRyeSgpOwoKICAgICAgICBDTF9WZWN0b3IgZ2V0 X2JvbWJlcl9wb3MoaW50IG5yKTsKICAgICAgICBpbnQgZ2V0X21heF9wbGF5ZXJzKCk7CiAgICAg ICAgQ0xfU3RyaW5nIGdldF9uYW1lKCk7CiAgICAgICAgQ0xfU3RyaW5nIGdldF9hdXRob3IoKTsK ICAgICAgICBib29sIGlzX2VuYWJsZWQoKTsKICAgICAgICBib29sIGlzX3dyaXRhYmxlKCk7CiAg ICAgICAgYm9vbCB0b2dnbGUoKTsKICAgICAgICB2b2lkIGVuYWJsZSgpOwogICAgICAgIHZvaWQg ZGlzYWJsZSgpOwoKICAgICAgICBpbnQgZ2V0X2RhdGEoaW50IHgsIGludCB5KTsKICAgICAgICB2 b2lkIHNldF9kYXRhKGludCB4LCBpbnQgeSwgY2hhciBkYXRhKTsKICAgICAgICB2b2lkIHNldF9i b21iZXJfcG9zKGludCB4LCBpbnQgeSwgaW50IG51bWJlcik7CiAgICAgICAgdm9pZCBzZXRfbWF4 X3BsYXllcnMoaW50IG5yKTsKICAgICAgICB2b2lkIHNldF9hdXRob3IoQ0xfU3RyaW5nIF9hdXRo b3IpOwogICAgICAgIHZvaWQgd3JpdGVfYmFjaygpOwogICAgICAgIHZvaWQgY2xlYXIoKTsKICAg ICAgICB2b2lkIHJlbG9hZCgpOwogICAgICAgIHZvaWQgcmVhZF9ib21iZXJfcG9zaXRpb25zKCk7 CiAgICAgICAgdm9pZCBkZWxldGVfZmlsZSgpOwogICAgICAgIHZvaWQgcmFuZG9taXplX2JvbWJl cl9wb3NpdGlvbnMoKTsKCnByb3RlY3RlZDoKICAgICAgICBDTF9TdHJpbmcgcGF0aDsKICAgICAg ICBDTF9TdHJpbmcgZmlsZW5hbWU7CiAgICAgICAgQ0xfU3RyaW5nIG1hcF9uYW1lOwogICAgICAg IENMX1N0cmluZyBhdXRob3I7CiAgICAgICAgYm9vbCBlbmFibGVkOwogICAgICAgIGJvb2wgd3Jp dGFibGU7CiAgICAgICAgaW50IG1heF9wbGF5ZXJzOwogICAgICAgIENMX1ZlY3RvciBib21iZXJf cG9zWzhdOwogICAgICAgIGNoYXIgbWFwX2RhdGFbMTddWzEzXTsKfTsKIyAyNCAiTWFwLmgiIDIK CmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbjsKY2xhc3MgTWFwVGlsZTsKCmNsYXNzIE1hcAp7 CnB1YmxpYzoKICAgICAgICBNYXAoIENsYW5Cb21iZXJBcHBsaWNhdGlvbiogX2FwcCApOwogICAg ICAgIH5NYXAoKTsKCiAgICAgICAgYm9vbCBhZGRfYm9tYiggaW50IGJ4LCBpbnQgYnksIGludCBi cG93ZXIsIEJvbWJlciAqYm9tYmVyICk7CiAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgIHZv aWQgbG9hZChpbnQgbWFwX25yICk7CiAgICAgICAgdm9pZCBsb2FkX3JhbmRvbV92YWxpZCgpOwog ICAgICAgIHZvaWQgbG9hZF9uZXh0X3ZhbGlkKGludCBtYXBfbnIgPSAtMSk7CiAgICAgICAgdm9p ZCBsb2FkX3ByZXZpb3VzX3ZhbGlkKGludCBtYXBfbnIgPSAtMSk7CiAgICAgICAgdm9pZCBzaG93 KCk7CiAgICAgICAgdm9pZCBzaG93X3ByZXZpZXcoIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9y ICk7CiAgICAgICAgdm9pZCBzaG93X3JhbmRvbV9ib3hlcygpOwogICAgICAgIHZvaWQgc2hvd19z dGFydF9wb3NpdGlvbnMoKTsKICAgICAgICB2b2lkIHJlZnJlc2hfaG9sZXMoKTsKICAgICAgICB2 b2lkIGFjdCgpOwogICAgICAgIHZvaWQgc2hha2UoIGludCBfc2hha2UgKTsKICAgICAgICB2b2lk IHNhdmVfc2VsZWN0aW9uKCk7CiAgICAgICAgdm9pZCBsb2FkX3NlbGVjdGlvbigpOwogICAgICAg IE1hcFRpbGUqIGdldF9wYXNzYWJsZSgpOwogICAgICAgIE1hcFRpbGUqIGdldF9yYW5kb20oKTsK ICAgICAgICBNYXBUaWxlKiBnZXRfbWFwdGlsZShpbnQgeCwgaW50IHkpOwogICAgICAgIE1hcFRp bGUqIGdldF9tYXB0aWxlX3h5IChpbnQgeCwgaW50IHkpOwoKICAgICAgICBDTF9TdHJpbmcgZ2V0 X25hbWUoKTsKICAgICAgICBDTF9TdHJpbmcgZ2V0X2F1dGhvcigpOwogICAgICAgIGludCBnZXRf bWF4X3BsYXllcnMoKTsKCiAgICAgICAgQ0xfVmVjdG9yIGdldF9ib21iZXJfcG9zKGludCBucik7 CiAgICAgICAgdm9pZCByYW5kb21pemVfYm9tYmVyX3Bvc2l0aW9ucygpOwoKICAgICAgICB2b2lk IHJlbG9hZCgpOwogICAgICAgIGludCBnZXRfbWFwX2NvdW50KCk7CiAgICAgICAgYm9vbCBhbnlf dmFsaWRfbWFwKCk7CgogICAgICAgIGludCBuZXdfZW50cnkoIENMX1N0cmluZyBfbmFtZSApOwog ICAgICAgIGludCBkZWxldGVfZW50cnkoIGludCBuciApOwoKICAgICAgICBmcmllbmQgc3RkOjpv c3RyZWFtJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiwgTWFwJiBtKTsKCgogICAgICAgIHN0 YXRpYyBDTF9MaXN0PE1hcEVudHJ5PiBtYXBfbGlzdDsKCnByb3RlY3RlZDoKICAgICAgICBDbGFu Qm9tYmVyQXBwbGljYXRpb24qIGFwcDsKICAgICAgICBpbnQgaXNfc2hha2VuOwoKICAgICAgICBN YXBUaWxlKiBtYXB0aWxlc1sxN11bMTNdOwogICAgICAgIE1hcFRpbGUqIGR1bW15X21hcHRpbGU7 CgogICAgICAgIE1hcEVudHJ5ICpjdXJyZW50X21hcDsKICAgICAgICBDTF9JdGVyYXRvcjxNYXBF bnRyeT4gKm1hcHM7CgogICAgICAgIHZvaWQgZW51bV9tYXBzKCk7CiAgICAgICAgdm9pZCBzb3J0 X21hcHMoKTsKICAgICAgICB2b2lkIHNwaW5fdXAoKTsKICAgICAgICB2b2lkIHNwaW5fZG93bigp OwogICAgICAgIHZvaWQgc3Bpbl90byhpbnQgbnIpOwp9OwojIDMxICJNYXAuY3BwIiAyCgojIDEg Ik1hcFRpbGUuaCIgMQojIDIyICJNYXBUaWxlLmgiCmNsYXNzIEdhbWVPYmplY3Q7CmNsYXNzIEJv bWI7CgoKCgoKY2xhc3MgTWFwVGlsZQp7CnB1YmxpYzoKICAgICAgICBNYXBUaWxlKGludCBfeCwg aW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHApOwogICAgICAgIHZpcnR1YWwgfk1h cFRpbGUoKTsKCiAgICAgICAgdHlwZWRlZiBlbnVtCiAgICAgICAgewogICAgICAgICAgICAgICAg Tk9ORSA9IC0zLAogICAgICAgICAgICAgICAgQVJST1cgPSAtMiwKICAgICAgICAgICAgICAgIElD RSA9IC0xLAogICAgICAgICAgICAgICAgR1JPVU5EID0gMCwKICAgICAgICAgICAgICAgIFdBTEwg PSAxLAogICAgICAgICAgICAgICAgQk9YID0gMiwKICAgICAgICAgICAgICAgIFRSQVAsCiAgICAg ICAgfSBUWVBFOwoKICAgICAgICB2aXJ0dWFsIFRZUEUgZ2V0X3R5cGUoKSA9MDsKCiAgICAgICAg c3RhdGljIE1hcFRpbGUqIGNyZWF0ZSggVFlQRSB0eXBlLCBpbnQgX3gsIGludCBfeSwgQ2xhbkJv bWJlckFwcGxpY2F0aW9uKiBfYXBwICk7CiAgICAgICAgc3RhdGljIE1hcFRpbGUqIHNwYXduKCBN YXBUaWxlKiBvbGRfdGlsZSApOwoKICAgICAgICB2b2lkIHNldF9wb3MoIGludCBfeCwgaW50IF95 ICk7CiAgICAgICAgaW50IGdldF94KCk7CiAgICAgICAgaW50IGdldF95KCk7CiAgICAgICAgdm9p ZCBzZXRfc3ByaXRlX25yKCBpbnQgc3ByaXRlICk7CgogICAgICAgIHZvaWQgc3Bhd25fZXh0cmEo KTsKCiAgICAgICAgdmlydHVhbCB2b2lkIGFjdCgpOwogICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3 KGludCBhZGR4ID0wLCBpbnQgYWRkeSA9MCk7CiAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdfdGlu eShpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvcik7CiAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdf c2hha2VuKCk7CgogICAgICAgIENMX0xpc3Q8R2FtZU9iamVjdD4gb2JqZWN0czsKCiAgICAgICAg TWFwVGlsZSAqcmlnaHQsICpsZWZ0LCAqdXAsICpkb3duOwoKICAgICAgICBib29sIGlzX3Zhbmlz aGluZygpIHsgcmV0dXJuIHZhbmlzaGluZzsgfQogICAgICAgIGJvb2wgaXNfZGVzdHJveWVkKCkg eyByZXR1cm4gZGVzdHJveWVkOyB9CiAgICAgICAgYm9vbCBoYXNfZXh0cmEoKTsKICAgICAgICBi b29sIGhhc19ib21iZXIoKTsKICAgICAgICBib29sIGlzX3Bhc3NhYmxlKCk7CiAgICAgICAgYm9v bCBpc19ibG9ja2luZygpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQgdmFuaXNoKCk7CiAgICAgICAg dmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKCiAgICAgICAgQm9tYiAqYm9tYjsKCiAgICAgICAgYm9v bCBkZWxldGVfbWU7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHg7CiAgICAgICAgaW50IHk7CiAg ICAgICAgaW50IHNwcml0ZV9ucjsKICAgICAgICBUWVBFIG5leHQ7CgogICAgICAgIGJvb2wgdmFu aXNoaW5nOwogICAgICAgIGJvb2wgZGVzdHJveWVkOwogICAgICAgIGJvb2wgcGFzc2FibGU7CiAg ICAgICAgYm9vbCBibG9ja2luZzsKCiAgICAgICAgZmxvYXQgdmFuaXNoX2NvdW50ZG93bjsKICAg ICAgICBmbG9hdCBkZXN0cm95X2NvdW50ZG93bjsKCiAgICAgICAgQ2xhbkJvbWJlckFwcGxpY2F0 aW9uKiBhcHA7Cn07CiMgMzMgIk1hcC5jcHAiIDIKIyAxICJNYXBUaWxlX0Fycm93LmgiIDEKIyAy MSAiTWFwVGlsZV9BcnJvdy5oIgojIDEgIk1hcFRpbGVfR3JvdW5kLmgiIDEKIyAyOCAiTWFwVGls ZV9Hcm91bmQuaCIKY2xhc3MgTWFwVGlsZV9Hcm91bmQgOiBwdWJsaWMgTWFwVGlsZQp7CnB1Ymxp YzoKICAgICAgICBNYXBUaWxlX0dyb3VuZChpbnQgX3gsIGludCBfeSwgQ2xhbkJvbWJlckFwcGxp Y2F0aW9uKiBfYXBwKTsKICAgICAgICB2aXJ0dWFsIH5NYXBUaWxlX0dyb3VuZCgpOwoKICAgICAg ICB2b2lkIGFjdCgpOwoKICAgICAgICBUWVBFIGdldF90eXBlKCkgeyByZXR1cm4gR1JPVU5EOyB9 Cn07CiMgMjIgIk1hcFRpbGVfQXJyb3cuaCIgMgoKCgoKCmNsYXNzIE1hcFRpbGVfQXJyb3cgOiBw dWJsaWMgTWFwVGlsZV9Hcm91bmQKewpwdWJsaWM6CgoKICAgICAgICBNYXBUaWxlX0Fycm93KGlu dCBfeCwgaW50IF95LCBEaXJlY3Rpb24gX2RpciwgQ2xhbkJvbWJlckFwcGxpY2F0aW9uKiBfYXBw KTsKICAgICAgICB2aXJ0dWFsIH5NYXBUaWxlX0Fycm93KCk7CgogICAgICAgIHZvaWQgYWN0KCk7 CiAgICAgICAgdm9pZCBkcmF3KGludCBhZGR4LCBpbnQgYWRkeSk7CiAgICAgICAgdm9pZCBkcmF3 X3RpbnkoIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yICk7CiAgRGlyZWN0aW9uIGdldF9kaXJl Y3Rpb24oKSBjb25zdAogICAgICAgIHsKICAgIHJldHVybiBkaXI7CiAgICAgICAgfQogICAgICAg IFRZUEUgZ2V0X3R5cGUoKSB7IHJldHVybiBBUlJPVzsgfQoKcHJvdGVjdGVkOgogICAgICAgIERp cmVjdGlvbiBkaXI7CiAgICAgICAgQm9tYiogb2xkX2JvbWI7CiAgICAgICAgZmxvYXQgY2hpbGxf Y291bnRkb3duOwp9OwojIDM0ICJNYXAuY3BwIiAyCiMgMSAiTWFwVGlsZV9UcmFwLmgiIDEKIyAy MiAiTWFwVGlsZV9UcmFwLmgiCmNsYXNzIEJvbWI7CgoKCgoKCgpjbGFzcyBNYXBUaWxlX1RyYXAg OiBwdWJsaWMgTWFwVGlsZV9Hcm91bmQgewpwdWJsaWM6CiAgICAgICAgTWFwVGlsZV9UcmFwKGlu dCBfeCwgaW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHApOwogICAgICAgIH5NYXBU aWxlX1RyYXAoKTsKCiAgICAgICAgdm9pZCBhY3QoKTsKICAgICAgICB2b2lkIGRyYXcoaW50IGFk ZHgsIGludCBhZGR5KTsKICAgICAgICB2b2lkIGRyYXdfdGlueSggaW50IHgsIGludCB5LCBmbG9h dCBmYWN0b3IgKTsKICAgICAgICBUWVBFIGdldF90eXBlKCkgeyByZXR1cm4gVFJBUDsgfQoKcHJv dGVjdGVkOgogICAgICAgIGNsYXNzIEJvbWJfRW50cnkKICAgICAgICB7CiAgICAgICAgcHVibGlj OgogICAgICAgICAgICAgICAgQm9tYl9FbnRyeSggQm9tYiAqX2JvbWIgKTsKICAgICAgICAgICAg ICAgIHZvaWQgY291bnQoKTsKICAgICAgICAgICAgICAgIGJvb2wgcmVhZHlfdG9fc2hvb3QoKTsK ICAgICAgICAgICAgICAgIEJvbWIgKmdldF9ib21iKCkgeyByZXR1cm4gYm9tYjsgfQogICAgICAg IHByb3RlY3RlZDoKICAgICAgICAgICAgICAgIGZsb2F0IGNvdW50ZG93bjsKICAgICAgICAgICAg ICAgIEJvbWIgKmJvbWI7CiAgICAgICAgfTsKCiAgICAgICAgQ0xfTGlzdDxCb21iX0VudHJ5PiBi b21iczsKfTsKIyAzNSAiTWFwLmNwcCIgMgojIDEgIk1hcFRpbGVfV2FsbC5oIiAxCiMgMjggIk1h cFRpbGVfV2FsbC5oIgpjbGFzcyBNYXBUaWxlX1dhbGwgOiBwdWJsaWMgTWFwVGlsZQp7CnB1Ymxp YzoKICAgICAgICBNYXBUaWxlX1dhbGwoaW50IF94LCBpbnQgX3ksIENsYW5Cb21iZXJBcHBsaWNh dGlvbiogX2FwcCk7CiAgICAgICAgdmlydHVhbCB+TWFwVGlsZV9XYWxsKCk7CgogICAgICAgIHZv aWQgYWN0KCk7CgogICAgICAgIHZpcnR1YWwgdm9pZCB2YW5pc2goKTsKCiAgICAgICAgVFlQRSBn ZXRfdHlwZSgpIHsgcmV0dXJuIFdBTEw7IH0KfTsKIyAzNiAiTWFwLmNwcCIgMgoKIyAxICJDb25m aWcuaCIgMQojIDIyICJDb25maWcuaCIKY2xhc3MgQm9tYmVyQ29uZmlnCnsKcHVibGljOgogICAg ICAgIEJvbWJlckNvbmZpZygpOwogICAgICAgIH5Cb21iZXJDb25maWcoKTsKCiAgICAgICAgaW50 IGdldF9za2luKCk7CiAgICAgICAgQ0xfU3RyaW5nIGdldF9uYW1lKCk7CiAgICAgICAgaW50IGdl dF90ZWFtKCk7CiAgICAgICAgaW50IGdldF9jb250cm9sbGVyKCk7CgogICAgICAgIHZvaWQgc2V0 X3NraW4oaW50IF9za2luKTsKICAgICAgICB2b2lkIHNldF9uYW1lKENMX1N0cmluZyBfbmFtZSk7 CiAgICAgICAgdm9pZCBzZXRfdGVhbShpbnQgX3RlYW0pOwogICAgICAgIHZvaWQgc2V0X2NvbnRy b2xsZXIoaW50IF9jb250cm9sbGVyKTsKICAgICAgICB2b2lkIHNldF9oaWdobGlnaHRfbWFwdGls ZShib29sIF9oaWdobGlnaHRfbWFwdGlsZSk7CiAgICAgICAgaW50IGdldF9oaWdobGlnaHRfbWFw dGlsZSgpOwogICAgICAgIHZvaWQgZW5hYmxlKCk7CiAgICAgICAgdm9pZCBkaXNhYmxlKCk7CiAg ICAgICAgaW50IGlzX2VuYWJsZWQoKTsKICAgICAgICB2b2lkIHNldF9lbmFibGVkKGJvb2wgX2Vu YWJsZWQpOwoKcHJvdGVjdGVkOgogICAgICAgIGludCBlbmFibGVkOwogICAgICAgIGludCBza2lu OwogICAgICAgIENMX1N0cmluZyBuYW1lOwogICAgICAgIGludCB0ZWFtOwogICAgICAgIGludCBj b250cm9sbGVyOwogICAgICAgIGludCBoaWdobGlnaHRfbWFwdGlsZTsKfTsKCmNsYXNzIENvbmZp Zwp7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfcm91bmRfdGltZShpbnQpOwoKICAg ICAgICBzdGF0aWMgdm9pZCBzZXRfbWF4X3NrYXRlYm9hcmRzKGludCk7CiAgICAgICAgc3RhdGlj IHZvaWQgc2V0X21heF9wb3dlcihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9tYXhfYm9t YnMoaW50KTsKCiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0X3NrYXRlYm9hcmRzKGludCk7 CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0X3Bvd2VyKGludCk7CiAgICAgICAgc3RhdGlj IHZvaWQgc2V0X3N0YXJ0X2JvbWJzKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3N0YXJ0 X2tpY2soaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfc3RhcnRfZ2xvdmUoaW50KTsKCiAg ICAgICAgc3RhdGljIHZvaWQgc2V0X3NrYXRlYm9hcmRzKGludCk7CiAgICAgICAgc3RhdGljIHZv aWQgc2V0X3Bvd2VyKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2JvbWJzKGludCk7CiAg ICAgICAgc3RhdGljIHZvaWQgc2V0X2tpY2soaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRf Z2xvdmUoaW50KTsKCiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2pvaW50KGludCk7CiAgICAgICAg c3RhdGljIHZvaWQgc2V0X3ZpYWdyYShpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9rb2tz KGludCk7CgogICAgICAgIHN0YXRpYyB2b2lkIHNldF9zdGFydF9tYXAoaW50KTsKICAgICAgICBz dGF0aWMgdm9pZCBzZXRfcmFuZG9tX21hcF9vcmRlcihpbnQpOwoKICAgICAgICBzdGF0aWMgdm9p ZCBzZXRfcG9pbnRzX3RvX3dpbihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF90aGVtZShp bnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9tdXNpYyhpbnQpOwoKICAgICAgICBzdGF0aWMg dm9pZCBzZXRfa2lkc19tb2RlKGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3NoYWt5X2V4 cGxvc2lvbnMoaW50KTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRfaGlnaGxpZ2h0X21hcHRpbGVz KGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X3JhbmRvbV9wb3NpdGlvbnMoaW50KTsKICAg ICAgICBzdGF0aWMgdm9pZCBzZXRfY29ycHNlX3BhcnRzKGludCk7CgogICAgICAgIHN0YXRpYyB2 b2lkIHNldF9ib21iX2NvdW50ZG93bihpbnQpOwogICAgICAgIHN0YXRpYyB2b2lkIHNldF9ib21i X2RlbGF5KGludCk7CiAgICAgICAgc3RhdGljIHZvaWQgc2V0X2JvbWJfc3BlZWQoaW50KTsKCiAg ICAgICAgc3RhdGljIHZvaWQgc2V0X2ZpbGVuYW1lKENMX1N0cmluZyBfZmlsZW5hbWUpOwoKICAg ICAgICBzdGF0aWMgaW50IGdldF9yb3VuZF90aW1lKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRf cmFuZG9tX21hcF9vcmRlcigpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9tYXhfc2thdGVib2Fy ZHMoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9tYXhfcG93ZXIoKTsKICAgICAgICBzdGF0aWMg aW50IGdldF9tYXhfYm9tYnMoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRfc2thdGVi b2FyZHMoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9zdGFydF9wb3dlcigpOwogICAgICAgIHN0 YXRpYyBpbnQgZ2V0X3N0YXJ0X2JvbWJzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRf a2ljaygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3N0YXJ0X2dsb3ZlKCk7CgogICAgICAgIHN0 YXRpYyBpbnQgZ2V0X3NrYXRlYm9hcmRzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfcG93ZXIo KTsKICAgICAgICBzdGF0aWMgaW50IGdldF9ib21icygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0 X2tpY2soKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9nbG92ZSgpOwoKICAgICAgICBzdGF0aWMg aW50IGdldF9qb2ludCgpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3ZpYWdyYSgpOwogICAgICAg IHN0YXRpYyBpbnQgZ2V0X2tva3MoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfc3RhcnRfbWFw KCk7CgogICAgICAgIHN0YXRpYyBpbnQgZ2V0X3BvaW50c190b193aW4oKTsKICAgICAgICBzdGF0 aWMgaW50IGdldF90aGVtZSgpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9tdXNpYygpOwoKICAg ICAgICBzdGF0aWMgaW50IGdldF9raWRzX21vZGUoKTsKICAgICAgICBzdGF0aWMgaW50IGdldF9z aGFreV9leHBsb3Npb25zKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfaGlnaGxpZ2h0X21hcHRp bGVzKCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfcmFuZG9tX3Bvc2l0aW9ucygpOwogICAgICAg IHN0YXRpYyBpbnQgZ2V0X2NvcnBzZV9wYXJ0cygpOwoKICAgICAgICBzdGF0aWMgaW50IGdldF9u dW1iZXJfb2ZfcGxheWVycygpOwogICAgICAgIHN0YXRpYyBpbnQgZ2V0X251bWJlcl9vZl9vcHBv bmVudHMoKTsKCiAgICAgICAgc3RhdGljIGludCBnZXRfYm9tYl9jb3VudGRvd24oKTsKICAgICAg ICBzdGF0aWMgaW50IGdldF9ib21iX2RlbGF5KCk7CiAgICAgICAgc3RhdGljIGludCBnZXRfYm9t Yl9zcGVlZCgpOwoKICAgICAgICBzdGF0aWMgYm9vbCBsb2FkKCk7CiAgICAgICAgc3RhdGljIGJv b2wgc2F2ZShib29sIGluaXQ9ZmFsc2UpOwoKICAgICAgICBzdGF0aWMgQm9tYmVyQ29uZmlnIGJv bWJlcls4XTsKCnByb3RlY3RlZDoKICAgICAgICBzdGF0aWMgaW50IHJvdW5kX3RpbWU7CiAgICAg ICAgc3RhdGljIGludCByYW5kb21fbWFwX29yZGVyOwoKICAgICAgICBzdGF0aWMgaW50IG1heF9z a2F0ZWJvYXJkczsKICAgICAgICBzdGF0aWMgaW50IG1heF9wb3dlcjsKICAgICAgICBzdGF0aWMg aW50IG1heF9ib21iczsKCiAgICAgICAgc3RhdGljIGludCBzdGFydF9ib21iczsKICAgICAgICBz dGF0aWMgaW50IHN0YXJ0X3Bvd2VyOwogICAgICAgIHN0YXRpYyBpbnQgc3RhcnRfc2thdGVib2Fy ZHM7CiAgICAgICAgc3RhdGljIGludCBzdGFydF9raWNrOwogICAgICAgIHN0YXRpYyBpbnQgc3Rh cnRfZ2xvdmU7CgogICAgICAgIHN0YXRpYyBpbnQgYm9tYnM7CiAgICAgICAgc3RhdGljIGludCBw b3dlcjsKICAgICAgICBzdGF0aWMgaW50IHNrYXRlYm9hcmRzOwogICAgICAgIHN0YXRpYyBpbnQg a2ljazsKICAgICAgICBzdGF0aWMgaW50IGdsb3ZlOwoKICAgICAgICBzdGF0aWMgaW50IGpvaW50 OwogICAgICAgIHN0YXRpYyBpbnQgdmlhZ3JhOwogICAgICAgIHN0YXRpYyBpbnQga29rczsKCiAg ICAgICAgc3RhdGljIGludCBzdGFydF9tYXA7CiAgICAgICAgc3RhdGljIGludCBtdXNpYzsKICAg ICAgICBzdGF0aWMgaW50IGtpZHNfbW9kZTsKICAgICAgICBzdGF0aWMgaW50IHNoYWt5X2V4cGxv c2lvbnM7CiAgICAgICAgc3RhdGljIGludCBoaWdobGlnaHRfbWFwdGlsZXM7CiAgICAgICAgc3Rh dGljIGludCByYW5kb21fcG9zaXRpb25zOwogICAgICAgIHN0YXRpYyBpbnQgY29ycHNlX3BhcnRz OwoKICAgICAgICBzdGF0aWMgaW50IGJvbWJfY291bnRkb3duOwogICAgICAgIHN0YXRpYyBpbnQg Ym9tYl9kZWxheTsKICAgICAgICBzdGF0aWMgaW50IGJvbWJfc3BlZWQ7CgogICAgICAgIHN0YXRp YyBpbnQgcG9pbnRzX3RvX3dpbjsKICAgICAgICBzdGF0aWMgaW50IHRoZW1lOwoKICAgICAgICBz dGF0aWMgQ0xfU3RyaW5nIGZpbGVuYW1lOwp9OwojIDM4ICJNYXAuY3BwIiAyCiMgMSAiQm9tYi5o IiAxCiMgMjIgIkJvbWIuaCIKY2xhc3MgQm9tYmVyOwpjbGFzcyBNYXBUaWxlOwoKIyAxICJHYW1l T2JqZWN0LmgiIDEKIyAyMiAiR2FtZU9iamVjdC5oIgojIDEgIkNsYW5Cb21iZXIuaCIgMQojIDE3 NyAiQ2xhbkJvbWJlci5oIgpjbGFzcyBDTF9JbnB1dFNvdXJjZTsKY2xhc3MgQ0xfSW5wdXRCdWZm ZXI7CkNMX1N0cmluZyByZWFkX2xpbmUoIENMX0lucHV0U291cmNlKiBpbiApOwppbnQgZW50ZXJf c3RyaW5nKCBDTF9JbnB1dEJ1ZmZlciAqa2V5X2J1ZmZlciwgQ0xfU3RyaW5nICZzdHJpbmcgKTsK IyAyMyAiR2FtZU9iamVjdC5oIiAyCmNsYXNzIENsYW5Cb21iZXJBcHBsaWNhdGlvbjsKY2xhc3Mg TWFwVGlsZTsKIyAzOCAiR2FtZU9iamVjdC5oIgpjbGFzcyBHYW1lT2JqZWN0CnsKcHVibGljOgog ICAgICAgIEdhbWVPYmplY3QoIGludCBfeCwgaW50IF95LCBDbGFuQm9tYmVyQXBwbGljYXRpb24g Kl9hcHAgKTsKICAgICAgICB2aXJ0dWFsIH5HYW1lT2JqZWN0KCk7CgogICAgICAgIHZvaWQgc2V0 X3BvcyggaW50IF94LCBpbnQgX3kgKTsKICAgICAgICB2b2lkIHNldF9kaXIgKERpcmVjdGlvbiBf ZGlyKTsKICAgICAgICB2b2lkIHNldF9vcmlnKCBpbnQgX3gsIGludCBfeSApOwogICAgICAgIHZv aWQgbW92ZV9wb3MoIGludCBfeCwgaW50IF95ICk7CiAgICAgICAgdm9pZCBzbmFwKCk7CiAgICAg ICAgYm9vbCBtb3ZlKGludCBfc3BlZWQsIERpcmVjdGlvbiBfZGlyPURJUl9OT05FKTsKICAgICAg ICB2b2lkIGluY19zcGVlZCggaW50IF9jPTEgKTsKICAgICAgICB2b2lkIGRlY19zcGVlZCggaW50 IF9jPTEgKTsKICAgICAgICB2b2lkIHNldF9zcGVlZCggaW50IF9zcGVlZCApOwogICAgICAgIHZp cnR1YWwgdm9pZCBmYWxsKCk7CgogICAgICAgIGludCBnZXRfeCgpIGNvbnN0OwogICAgICAgIGlu dCBnZXRfeSgpIGNvbnN0OwogICAgICAgIGludCBnZXRfeigpIGNvbnN0OwogICAgICAgIGludCBn ZXRfbWFwX3goKSBjb25zdDsKICAgICAgICBpbnQgZ2V0X21hcF95KCkgY29uc3Q7CgogICAgICAg IGludCBnZXRfc3BlZWQoKSBjb25zdDsKCiAgICAgICAgTWFwVGlsZSogZ2V0X21hcHRpbGUoKSBj b25zdDsKCiAgICAgICAgYm9vbCBpc19mbHlpbmcoKSBjb25zdDsKICAgICAgICBib29sIGlzX3N0 b3BwZWQoKSBjb25zdDsKCiAgICAgICAgdm9pZCBzZXRfZmx5X292ZXJfd2FsbHMoYm9vbCB2YWwp CiAgICAgICAgewogICAgICAgICAgICAgICAgY2FuX2ZseV9vdmVyX3dhbGxzID0gdmFsOwogICAg ICAgIH0KCiAgICAgICAgRGlyZWN0aW9uIGdldF9jdXJfZGlyKCkgY29uc3Q7CgogICAgICAgIHR5 cGVkZWYgZW51bQogICAgICAgIHsKICAgICAgICAgICAgICAgIEJPTUIsCiAgICAgICAgICAgICAg ICBCT01CRVIsCiAgICAgICAgICAgICAgICBCT01CRVJfQ09SUFNFLAogICAgICAgICAgICAgICAg RVhQTE9TSU9OLAogICAgICAgICAgICAgICAgRVhUUkEsCiAgICAgICAgICAgICAgICBERUJVRywK ICAgICAgICAgICAgICAgIE9CU0VSVkVSLAogICAgICAgICAgICAgICAgQ09SUFNFX1BBUlQKICAg ICAgICB9IE9iamVjdFR5cGU7CgogICAgICAgIHZpcnR1YWwgT2JqZWN0VHlwZSBnZXRfdHlwZSgp IGNvbnN0ID0wOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAgICAgICAgdmlydHVhbCB2 b2lkIHNob3coKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWN0KCk7CiAgICAgICAgdm9pZCBzaG93 IChpbnQgX3gsIGludCBfeSk7CiAgICAgICAgdm9pZCBzaG93IChpbnQgX3gsIGludCBfeSwgZmxv YXQgX3NjYWxlKTsKICAgICAgICB2b2lkIGZseV90byAoaW50IF94LCBpbnQgX3ksIGludCBfc3Bl ZWQ9MCk7CiAgICAgICAgdm9pZCBmbHlfdG8gKE1hcFRpbGUqLCBpbnQgX3NwZWVkPTApOwogICAg ICAgIHZvaWQgZ2Fpbl9raWNrKCk7CiAgICAgICAgdm9pZCBsb29zZV9raWNrKCk7CgogICAgICAg IGJvb2wgaXNfZmFsbGluZygpOwogICAgICAgIGJvb2wgaXNfYWJsZV90b19raWNrKCkgY29uc3QK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FuX2tpY2s7CiAgICAgICAgfQoKCiAg ICAgICAgYm9vbCBkZWxldGVfbWU7CiAgICAgICAgQ2xhbkJvbWJlckFwcGxpY2F0aW9uICphcHA7 Cgpwcm90ZWN0ZWQ6CgogICAgICAgIENMX1N1cmZhY2UqIHN1cmZhY2U7CgogICAgICAgIGludCBz cHJpdGVfbnI7CgogICAgICAgIGludCBvZmZzZXRfeDsKICAgICAgICBpbnQgb2Zmc2V0X3k7Cgog ICAgICAgIGZsb2F0IHg7CiAgICAgICAgZmxvYXQgeTsKICAgICAgICBpbnQgejsKICAgICAgICBp bnQgb3JpZ194OwogICAgICAgIGludCBvcmlnX3k7CiAgICAgICAgZmxvYXQgcmVtYWluZGVyOwog ICAgICAgIERpcmVjdGlvbiBjdXJfZGlyOwogICAgICAgIGludCBzcGVlZDsKCiAgICAgICAgYm9v bCBtb3ZlKCk7CiAgICAgICAgYm9vbCBtb3ZlX2xlZnQoKTsKICAgICAgICBib29sIG1vdmVfcmln aHQoKTsKICAgICAgICBib29sIG1vdmVfdXAoKTsKICAgICAgICBib29sIG1vdmVfZG93bigpOwoK ICAgICAgICBpbnQgd2hhdHNfbGVmdCgpOwogICAgICAgIGludCB3aGF0c19yaWdodCgpOwogICAg ICAgIGludCB3aGF0c191cCgpOwogICAgICAgIGludCB3aGF0c19kb3duKCk7CgogICAgICAgIHZv aWQgY29udGludWVfZmx5aW5nKCk7CiAgICAgICAgdm9pZCBjb250aW51ZV9mYWxsaW5nKCk7Cgog ICAgICAgIGJvb2wgZmFsbGluZzsKICAgICAgICBib29sIGZhbGxlbl9kb3duOwogICAgICAgIGZs b2F0IGZhbGxfY291bnRkb3duOwoKICAgICAgICBib29sIGZseWluZzsKICAgICAgICBmbG9hdCBm bHlfZGlzdF94OwogICAgICAgIGZsb2F0IGZseV9kaXN0X3k7CiAgICAgICAgZmxvYXQgZmx5X2Rl c3RfeDsKICAgICAgICBmbG9hdCBmbHlfZGVzdF95OwogICAgICAgIGZsb2F0IGZseV9zcGVlZDsK ICAgICAgICBmbG9hdCBmbHlfcHJvZ3Jlc3M7CgogICAgICAgIGJvb2wgY2FuX2tpY2s7CiAgICAg ICAgYm9vbCBjYW5fcGFzc19ib21iZXI7CiAgICAgICAgYm9vbCBjYW5fZmx5X292ZXJfd2FsbHM7 CiAgICAgICAgYm9vbCBzdG9wcGVkOwoKcHJpdmF0ZToKICAgICAgICB2b2lkIGluaXQoQ2xhbkJv bWJlckFwcGxpY2F0aW9uICpfYXBwKTsKCn07CiMgMjYgIkJvbWIuaCIgMgoKCmNsYXNzIEJvbWIg OiBwdWJsaWMgR2FtZU9iamVjdAp7CnB1YmxpYzoKICAgICAgICB2b2lkIGV4cGxvZGVfZGVsYXll ZCgpOwogICAgICAgIHZvaWQgZXhwbG9kZSgpOwogICAgICAgIHZvaWQga2ljayhEaXJlY3Rpb24g ZGlyKTsKICAgICAgICB2b2lkIHRocm93dyhEaXJlY3Rpb24gZGlyLCBpbnQgZmllbGRzPTQgKTsK ICAgICAgICB2b2lkIHN0b3AoKTsKICAgICAgICBpbnQgZ2V0X3Bvd2VyKCk7CiAgICAgICAgZmxv YXQgZ2V0X2NvdW50ZG93bigpOwogICAgICAgIHZvaWQgc2V0X2NvdW50ZG93biggZmxvYXQgX2Nv dW50ZG93biApOwogICAgICAgIEJvbWJlciogZ2V0X2JvbWJlcigpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgICAgICAgcmV0dXJuIGJvbWJlcjsKICAgICAgICB9CiAgICAgICAgQm9tYiggaW50 IF94LCBpbnQgX3ksIGludCBfcG93ZXIsIEJvbWJlciAqX2JvbWJlciwgQ2xhbkJvbWJlckFwcGxp Y2F0aW9uICpfYXBwICk7CiAgICAgICAgfkJvbWIoKTsKCiAgICAgICAgdmlydHVhbCB2b2lkIHNo b3coKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgYWN0KCk7CiAgICAgICAgT2JqZWN0VHlwZSBnZXRf dHlwZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEJPTUI7CiAgICAg ICAgfQoKcHJvdGVjdGVkOgogICAgICAgIGZsb2F0IGN1cl9zY2FsZTsKICAgICAgICBib29sIGV4 cGxvZGluZzsKICAgICAgICBpbnQgcG93ZXI7CiAgICAgICAgZmxvYXQgZGV0b25hdGlvbl9jb3Vu dGRvd247CiAgICAgICAgQm9tYmVyICpib21iZXI7Cgpwcml2YXRlOgogICAgICAgIHZvaWQgaW5p dCgpOwp9OwojIDM5ICJNYXAuY3BwIiAyCiMgMSAiQm9tYmVyLmgiIDEKIyAyNCAiQm9tYmVyLmgi CmNsYXNzIERpc2Vhc2U7CmNsYXNzIENvbnRyb2xsZXI7CgpjbGFzcyBCb21iZXIgOiBwdWJsaWMg R2FtZU9iamVjdAp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIGVudW0KICAgICAgICB7CiAgICAg ICAgICAgICAgICBSRUQgPSAwLAogICAgICAgICAgICAgICAgQkxVRSA9IDEsCiAgICAgICAgICAg ICAgICBZRUxMT1cgPSAyLAogICAgICAgICAgICAgICAgR1JFRU4gPSAzLAogICAgICAgICAgICAg ICAgUkVEMiA9IDQsCiAgICAgICAgICAgICAgICBCTFVFMiA9IDUsCiAgICAgICAgICAgICAgICBZ RUxMT1cyID0gNiwKICAgICAgICAgICAgICAgIEdSRUVOMiA9IDcsCiAgICAgICAgfSBDT0xPUjsK CiAgICAgICAgQm9tYmVyKCBpbnQgX3gsIGludCBfeSwgQ09MT1IgX2NvbG9yLCBDb250cm9sbGVy KiBfY29udHJvbGxlciwgQ0xfU3RyaW5nIF9uYW1lLCBpbnQgX3RlYW0sIGludCBfbnVtYmVyLCBD bGFuQm9tYmVyQXBwbGljYXRpb24gKl9hcHApOwogICAgICAgIH5Cb21iZXIoKTsKCiAgICAgICAg dm9pZCBkZWNfcG9pbnRzKCk7CiAgICAgICAgdm9pZCBpbmNfcG9pbnRzKCk7CiAgICAgICAgdm9p ZCBzZXRfcG9pbnRzKCBpbnQgX3BvaW50cyApOwogICAgICAgIGludCBnZXRfcG9pbnRzKCkgY29u c3Q7CiAgICAgICAgYm9vbCBpc19kZWFkKCkgY29uc3Q7CiAgICAgICAgaW50IGdldF9kZWF0aHMo KSBjb25zdDsKICAgICAgICBpbnQgZ2V0X2tpbGxzKCkgY29uc3Q7CiAgICAgICAgdm9pZCBpbmNf a2lsbHMoKTsKICAgICAgICBpbnQgZ2V0X2N1cl9ib21icygpIGNvbnN0OwogICAgICAgIGludCBn ZXRfcG93ZXIoKSBjb25zdDsKICAgICAgICBpbnQgZ2V0X2JvbWJzKCkgY29uc3Q7CgogICAgICAg IGludCBnZXRfbnVtYmVyKCkgY29uc3Q7CiAgICAgICAgaW50IGdldF90ZWFtKCkgY29uc3Q7CiAg ICAgICAgdm9pZCBzZXRfdGVhbSggaW50IF90ZWFtKTsKCiAgICAgICAgQ09MT1IgZ2V0X2NvbG9y KCkgY29uc3Q7CgogICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9ib21iKCk7CiAgICAgICAgdm9pZCBn YWluX2V4dHJhX3NrYXRlYm9hcmQoKTsKICAgICAgICB2b2lkIGdhaW5fZXh0cmFfa2ljaygpOwog ICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9nbG92ZSgpOwogICAgICAgIHZvaWQgZ2Fpbl9leHRyYV9w b3dlcigpOwogICAgICAgIHZvaWQgbG9vc2VfYWxsX2V4dHJhcygpOwogICAgICAgIHZvaWQgbG9v c2VfZGlzZWFzZSgpOwoKICAgICAgICB2b2lkIGluZmVjdCAoRGlzZWFzZSogX2Rpc2Vhc2UpOwog ICAgICAgIHZvaWQgaW5mZWN0X290aGVycygpOwoKICAgICAgICB2b2lkIGluY19jdXJfYm9tYnMo KTsKICAgICAgICB2b2lkIGRlY19jdXJfYm9tYnMoKTsKCiAgICAgICAgdm9pZCBwdXRfYm9tYigp OwogICAgICAgIGJvb2wgZGllKCk7CiAgICAgICAgdm9pZCBzaG93KCk7CiAgICAgICAgdm9pZCBh Y3QoKTsKICAgICAgICB2b2lkIHJlc2V0KCk7CgogICAgICAgIENMX1N0cmluZyBnZXRfbmFtZSgp IGNvbnN0OwoKICAgICAgICBPYmplY3RUeXBlIGdldF90eXBlKCkgY29uc3Q7CgogICAgICAgIENv bnRyb2xsZXIqIGNvbnRyb2xsZXI7CgogICAgICAgIGJvb2wgaXNfZGlzZWFzZWQoKTsKICAgICAg ICBib29sIGlzX2FibGVfdG9fdGhyb3coKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBjYW5fdGhyb3c7CiAgICAgICAgfQoKcHJvdGVjdGVkOgogICAgICAgIENPTE9SIGNv bG9yOwogICAgICAgIENMX1N0cmluZyBuYW1lOwogICAgICAgIGludCBkZWF0aHM7CiAgICAgICAg aW50IGtpbGxzOwogICAgICAgIGJvb2wgZGVhZDsKICAgICAgICBmbG9hdCBhbmltX2NvdW50Owog ICAgICAgIGludCBwb2ludHM7CiAgICAgICAgYm9vbCBjYW5fdGhyb3c7CiAgICAgICAgRGlzZWFz ZSogZGlzZWFzZTsKCgogICAgICAgIGludCBza2F0ZWJvYXJkczsKICAgICAgICBpbnQgY3VyX2Jv bWJzOwogICAgICAgIGludCBib21iczsKICAgICAgICBpbnQgcG93ZXI7CiAgICAgICAgaW50IGds b3ZlczsKCiAgICAgICAgaW50IGV4dHJhX2dsb3ZlczsKICAgICAgICBpbnQgZXh0cmFfc2thdGVi b2FyZHM7CiAgICAgICAgaW50IGV4dHJhX3Bvd2VyOwogICAgICAgIGludCBleHRyYV9raWNrOwog ICAgICAgIGludCBleHRyYV9ib21iczsKCiAgICAgICAgYm9vbCBib21iX2tleTsKCiAgICAgICAg aW50IHRlYW07CiAgICAgICAgaW50IG51bWJlcjsKfTsKIyA0MCAiTWFwLmNwcCIgMgoKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2RpcmVudC5o IiAzCmV4dGVybiAiQyIgewojIDYyICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9kaXJlbnQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2RpcmVu dC5oIiAzCnN0cnVjdCBkaXJlbnQKICB7CgogICAgX19pbm9fdCBkX2lubzsKICAgIF9fb2ZmX3Qg ZF9vZmY7CgoKCgogICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQg Y2hhciBkX3R5cGU7CiAgICBjaGFyIGRfbmFtZVsyNTZdOwogIH07CgoKc3RydWN0IGRpcmVudDY0 CiAgewogICAgX19pbm82NF90IGRfaW5vOwogICAgX19vZmY2NF90IGRfb2ZmOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7CiAgICBjaGFy IGRfbmFtZVsyNTZdOwogIH07CiMgNjMgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCiMgOTgg Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwplbnVtCiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgog ICAgRFRfRklGTyA9IDEsCgogICAgRFRfQ0hSID0gMiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERU X0JMSyA9IDYsCgogICAgRFRfUkVHID0gOCwKCiAgICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NL ID0gMTIsCgogICAgRFRfV0hUID0gMTQKCiAgfTsKIyAxMjggIi91c3IvaW5jbHVkZS9kaXJlbnQu aCIgMwp0eXBlZGVmIHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgoKCmV4dGVybiBESVIgKm9wZW5k aXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZWRp ciAoRElSICpfX2RpcnApIHRocm93ICgpOwojIDE0NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz CmV4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMg MTU2ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQ2NCAqcmVh ZGRpcjY0IChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmVhZGRpcl9y IChESVIgKl9fcmVzdHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp cmVudCAqX19yZXN0cmljdCBfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp cmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwojIDE3OSAiL3Vzci9pbmNsdWRl L2RpcmVudC5oIiAzCmV4dGVybiBpbnQgcmVhZGRpcjY0X3IgKERJUiAqX19yZXN0cmljdCBfX2Rp cnAsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2NCAqX19yZXN0cmljdCBf X2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKipfX3Jlc3Ry aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHJld2luZGRpciAoRElSICpf X2RpcnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBs b25nIGludCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHRlbGxkaXIgKERJUiAq X19kaXJwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRpcmZkIChESVIgKl9fZGlycCkgdGhy b3cgKCk7CiMgMjIwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k0ODYtc3VzZS1saW51eC8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91 c3IvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQgc2NhbmRpciAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJl bnQgKioqX19yZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgIGludCAoKl9f c2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQgKiksCiAgICAgICAgICAgICAgICAgICAg aW50ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsK IyAyNDcgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHNjYW5kaXI2NCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRpcmVudDY0ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAg IGludCAoKl9fc2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQ2NCAqKSwKICAgICAgICAg ICAgICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAq KSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2Ux LCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CiMgMjY5ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBhbHBoYXNv cnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCB2ZXJzaW9uc29y dCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjkwICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi IDMKZXh0ZXJuIGludCB2ZXJzaW9uc29ydDY0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qg dm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAz MDAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJp ZXMgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX29mZl90ICpfX3Jlc3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwojIDMxNiAiL3Vzci9p bmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllczY0IChpbnQg X19mZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fb2ZmNjRfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKCgoKCn0KIyA0NiAiTWFw LmNwcCIgMgoKCnVzaW5nIHN0ZDo6b3N0cmVhbTsKdXNpbmcgc3RkOjpvZnN0cmVhbTsKdXNpbmcg c3RkOjplbmRsOwoKQ0xfTGlzdDxNYXBFbnRyeT4gTWFwOjptYXBfbGlzdDsKCk1hcDo6TWFwKCBD bGFuQm9tYmVyQXBwbGljYXRpb24qIF9hcHAgKQp7CiAgICAgICAgYXBwID0gX2FwcDsKICAgICAg ICBkdW1teV9tYXB0aWxlID0gbmV3IE1hcFRpbGVfV2FsbCgxMDAwLDEwMDAsYXBwKTsKCiAgICAg ICAgZm9yIChpbnQgeT0wOyB5PDEzOyB5KyspCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9y IChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIG1hcHRpbGVzW3hdW3ldID0gX19udWxsOwogICAgICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgICBjdXJyZW50X21hcCA9IF9fbnVsbDsKCiAgICAgICAgZW51bV9tYXBzKCk7CiAg ICAgICAgc29ydF9tYXBzKCk7CiAgICAgICAgbG9hZF9zZWxlY3Rpb24oKTsKCiAgICAgICAgbWFw cyA9IG5ldyBDTF9JdGVyYXRvcjxNYXBFbnRyeT4obWFwX2xpc3QpOwp9CgpNYXA6On5NYXAoKQp7 CiAgICAgICAgZGVsZXRlIG1hcHM7Cn0KCnZvaWQgTWFwOjpzb3J0X21hcHMoKQp7CiAgICAgICAg TWFwRW50cnkgKiptYXBzcyA9IG5ldyBNYXBFbnRyeSpbbWFwX2xpc3QuZ2V0X251bV9pdGVtcygp XTsKICAgICAgICBpbnQgbnVtID0gbWFwX2xpc3QuZ2V0X251bV9pdGVtcygpOwoKICAgICAgICBp bnQgaTsKCiAgICAgICAgZm9yIChpPTA7IGk8bnVtOyBpKyspCiAgICAgICAgewogICAgICAgICAg ICAgICAgbWFwc3NbaV0gPSBtYXBfbGlzdFtpXTsKICAgICAgICB9CgogICAgICAgIGJvb2wgZm91 bmQgPSB0cnVlOwogICAgICAgIHdoaWxlIChmb3VuZCkKICAgICAgICB7CiAgICAgICAgICAgICAg ICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8bnVtLTE7IGkrKykK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAo IG1hcHNzW2ldLT5nZXRfbmFtZSgpLCBtYXBzc1tpKzFdLT5nZXRfbmFtZSgpICkgPiAwKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFw RW50cnkgKnRlbXAgPSBtYXBzc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YXBzc1tpXSA9IG1hcHNzW2krMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw c3NbaSsxXSA9IHRlbXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0 cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICBtYXBfbGlzdC5jbGVhcigpOwogICAgICAgIGZvciAoaT0wOyBpPG51bTsgaSsr KQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1hcF9saXN0LmFkZCggbWFwc3NbaV0gKTsKICAg ICAgICB9CgogICAgICAgIGRlbGV0ZVtdIG1hcHNzOwp9CiMgMTQ3ICJNYXAuY3BwIgp2b2lkIE1h cDo6ZW51bV9tYXBzKCkKewogICAgICAgIGlmIChtYXBfbGlzdC5nZXRfbnVtX2l0ZW1zKCkpCiAg ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgRElSICpk aXI7CiAgICAgICAgZGlyZW50ICplbnRyeTsKCiAgICAgICAgQ0xfU3RyaW5nIGNfcGF0aCA9IGFw cC0+Z2V0X21hcF9wYXRoKCk7CiAgICAgICAgZGlyID0gb3BlbmRpciggY19wYXRoICk7CiAgICAg ICAgaWYgKCFkaXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgQ0xfRXJyb3IoIkNv dWxkIG5vdCBmaW5kIGFueSBtYXAgZmlsZXMhIik7CiAgICAgICAgfQogICAgICAgIHdoaWxlICgg KGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIENMX1N0cmluZyBzKGVudHJ5LT5kX25hbWUpOwoKICAgICAgICAgICAgICAgIGlmICggcy5y aWdodCg0KSA9PSAiLm1hcCIgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICBtYXBfbGlzdC5hZGQoIG5ldyBNYXBFbnRyeSggY19wYXRoLCBzICkgKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xvc2VkaXIoIGRpciApOwoKICAgICAgICBjX3Bh dGggPSBhcHAtPmdldF9sb2NhbF9tYXBfcGF0aCgpOwogICAgICAgIGRpciA9IG9wZW5kaXIoIGNf cGF0aCApOwogICAgICAgIGlmIChkaXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgd2hpbGUg KCAoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IF9fbnVsbCApCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIENMX1N0cmluZyBzKGVudHJ5LT5kX25hbWUpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCBzLnJpZ2h0KDQpID09ICIubWFwIiApCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfbGlzdC5h ZGQoIG5ldyBNYXBFbnRyeSggY19wYXRoLCBzICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKCgpib29sIE1hcDo6YW55X3ZhbGlkX21h cCgpCnsKICAgICAgICBmb3IgKGludCBpPTA7IGk8Z2V0X21hcF9jb3VudCgpOyBpKyspCiAgICAg ICAgewogICAgICAgICAgICAgICAgaWYgKENvbmZpZzo6Z2V0X251bWJlcl9vZl9wbGF5ZXJzKCkg PD0gbWFwX2xpc3RbaV0tPmdldF9tYXhfcGxheWVycygpICYmIG1hcF9saXN0W2ldLT5pc19lbmFi bGVkKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0 cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7Cn0K CmludCBNYXA6OmdldF9tYXBfY291bnQoKQp7CiAgICAgICAgcmV0dXJuIG1hcF9saXN0LmdldF9u dW1faXRlbXMoKTsKfQoKdm9pZCBNYXA6OnNwaW5fdXAoKQp7CiAgICAgICAgY3VycmVudF9tYXAg PSBtYXBzLT5uZXh0KCk7CiAgICAgICAgaWYgKCFjdXJyZW50X21hcCkKICAgICAgICB7CiAgICAg ICAgICAgICAgICBjdXJyZW50X21hcCA9IG1hcHMtPm5leHQoKTsKICAgICAgICB9Cn0KCnZvaWQg TWFwOjpzcGluX2Rvd24oKQp7CiAgICAgICAgY3VycmVudF9tYXAgPSBtYXBzLT5wcmV2KCk7CiAg ICAgICAgaWYgKCFjdXJyZW50X21hcCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjdXJyZW50 X21hcCA9IG1hcHMtPnByZXYoKTsKICAgICAgICB9Cn0KCnZvaWQgTWFwOjpzcGluX3RvKGludCBu cikKewogICAgICAgIENMX0Fzc2VydDo6ZGllKG5yID49IDAsICJNYXAuY3BwIiwgMjI5LCBfX251 bGwsICJuciA+PSAwIik7OwogICAgICAgIENMX0Fzc2VydDo6ZGllKG5yIDwgZ2V0X21hcF9jb3Vu dCgpLCAiTWFwLmNwcCIsIDIzMCwgX19udWxsLCAibnIgPCBnZXRfbWFwX2NvdW50KCkiKTs7Cgog ICAgICAgIGN1cnJlbnRfbWFwID0gbWFwcy0+Zmlyc3QoKTsKCiAgICAgICAgZm9yIChpbnQgaT0w OyBpPG5yOyBpKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgY3VycmVudF9tYXAgPSBtYXBz LT5uZXh0KCk7CiAgICAgICAgfQp9CgoKdm9pZCBNYXA6OmxvYWRfcmFuZG9tX3ZhbGlkKCkKewog ICAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Bpbl90byhyYW5kKCklZ2V0X21h cF9jb3VudCgpKTsKICAgICAgICB9IHdoaWxlIChDb25maWc6OmdldF9udW1iZXJfb2ZfcGxheWVy cygpID4gZ2V0X21heF9wbGF5ZXJzKCkgfHwgIWN1cnJlbnRfbWFwLT5pc19lbmFibGVkKCkpOwog ICAgICAgIHJlbG9hZCgpOwp9CgoKdm9pZCBNYXA6OmxvYWRfbmV4dF92YWxpZChpbnQgbWFwX25y KQp7CiAgICAgICAgaWYgKG1hcF9uciAhPSAtMSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBz cGluX3RvKG1hcF9ucik7CiAgICAgICAgfSBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAg c3Bpbl91cCgpOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKENvbmZpZzo6Z2V0X251bWJlcl9v Zl9wbGF5ZXJzKCkgPiBnZXRfbWF4X3BsYXllcnMoKSB8fCAhY3VycmVudF9tYXAtPmlzX2VuYWJs ZWQoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBzcGluX3VwKCk7CiAgICAgICAgfQoKICAg ICAgICByZWxvYWQoKTsKfQoKCnZvaWQgTWFwOjpsb2FkX3ByZXZpb3VzX3ZhbGlkKGludCBtYXBf bnIpCnsKICAgICAgICBpZiAobWFwX25yICE9IC0xKQogICAgICAgIHsKICAgICAgICAgICAgICAg IHNwaW5fdG8obWFwX25yKTsKICAgICAgICB9IGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAg ICBzcGluX2Rvd24oKTsKICAgICAgICB9CgogICAgICAgIHdoaWxlIChDb25maWc6OmdldF9udW1i ZXJfb2ZfcGxheWVycygpID4gZ2V0X21heF9wbGF5ZXJzKCkgfHwgIWN1cnJlbnRfbWFwLT5pc19l bmFibGVkKCkpCiAgICAgICAgewogICAgICAgICAgICAgICAgc3Bpbl9kb3duKCk7CiAgICAgICAg fQoKICAgICAgICByZWxvYWQoKTsKfQoKdm9pZCBNYXA6OmxvYWQoIGludCBtYXBfbnIgKQp7CiAg ICAgICAgc3Bpbl90byhtYXBfbnIpOwogICAgICAgIHJlbG9hZCgpOwp9Cgp2b2lkIE1hcDo6cmVs b2FkKCkKewogICAgICAgIGN1cnJlbnRfbWFwLT5yZWFkX2JvbWJlcl9wb3NpdGlvbnMoKTsKICAg ICAgICBjbGVhcigpOwoKICAgICAgICBmb3IgKGludCB5PTA7IHk8MTM7IHkrKykKICAgICAgICB7 CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7IHgrKykKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50X21hcC0+Z2V0X2RhdGEo eCx5KSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgNDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OToK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgNTE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSA1MjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUzOgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTQ6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSA1NToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcg JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ld ID0gTWFwVGlsZTo6Y3JlYXRlKE1hcFRpbGU6OkdST1VORCwgNDAqeCwgNDAqeSwgYXBwKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBNYXBUaWxlOjpjcmVhdGUoTWFwVGlsZTo6V0FM TCwgNDAqeCwgNDAqeSwgYXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBNYXBU aWxlOjpjcmVhdGUoTWFwVGlsZTo6Qk9YLCA0MCp4LCA0MCp5LCBhcHApOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSAnUic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIHJhbmQoKSAlMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGls ZXNbeF1beV0gPSBNYXBUaWxlOjpjcmVhdGUoTWFwVGlsZTo6Qk9YLCA0MCp4LCA0MCp5LCBhcHAp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYXB0aWxlc1t4XVt5XSA9IE1hcFRpbGU6OmNyZWF0ZShNYXBUaWxlOjpHUk9VTkQs IDQwKngsIDQwKnksIGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gTWFwVGlsZTo6Y3JlYXRlKCBNYXBU aWxlOjpJQ0UsIDQwKngsIDQwKnksIGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8 JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ld ID0gbmV3IE1hcFRpbGVfQXJyb3coNDAqeCwgNDAqeSwgRElSX0xFRlQsYXBwKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFwdGlsZXNbeF1beV0gPSBuZXcgTWFwVGlsZV9BcnJvdyg0MCp4LCA0MCp5LCBESVJf UklHSFQsYXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ14nOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNbeF1beV0gPSBuZXcgTWFwVGlsZV9B cnJvdyggNDAqeCwgNDAqeSwgRElSX1VQLGFwcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl ICd2JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hd W3ldID0gbmV3IE1hcFRpbGVfQXJyb3coIDQwKngsIDQwKnksIERJUl9ET1dOLGFwcCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlICdvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gbmV3IE1hcFRpbGVfVHJhcCggNDAqeCwgNDAqeSwg YXBwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XSA9IE1hcFRpbGU6OmNyZWF0ZShNYXBU aWxlOjpOT05FLCA0MCp4LCA0MCp5LCBhcHApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjpzaG93KCkKewogICAgICAgIGZvciAoaW50IHk9 MDsgeTwxMzsgeSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDwx NzsgeCsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFw dGlsZXNbeF1beV0tPmdldF90eXBlKCkhPU1hcFRpbGU6Ok5PTkUpCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2hha2VuID4g MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAobWFwdGlsZXNbeF1beV0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldLT5kcmF3X3NoYWtlbigpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYXB0aWxlc1t4XVt5XS0+ZHJhdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNf c2hha2VuID4gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpc19zaGFrZW4tLTsKICAgICAg ICB9Cn0KCnZvaWQgTWFwOjpzaG93X3JhbmRvbV9ib3hlcygpCnsKICAgICAgICBmb3IgKGludCB5 PTA7IHk8MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8 MTc7IHgrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1 cnJlbnRfbWFwLT5nZXRfZGF0YSh4LHkpID09ICdSJykKICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlczo6R2FtZV9tYXB0aWxl X2FkZG9ucygpLT5wdXRfc2NyZWVuKCA2MCt4KjQwLCA0MCt5KjQwLCA1ICk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjpz aG93X3N0YXJ0X3Bvc2l0aW9ucygpCnsKICAgICAgICBmb3IgKGludCBpPTA7IGk8Y3VycmVudF9t YXAtPmdldF9tYXhfcGxheWVycygpOyBpKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgQ0xf VmVjdG9yIHBvcyA9IGN1cnJlbnRfbWFwLT5nZXRfYm9tYmVyX3BvcyhpKTsKICAgICAgICAgICAg ICAgIFJlc291cmNlczo6R2FtZV9tYXB0aWxlX2FkZG9ucygpLT5wdXRfc2NyZWVuKCBpbnQoNjAg KyBwb3MueCo0MCksIGludCg0MCtwb3MueSo0MCksIDYgKTsKCiAgICAgICAgICAgICAgICBDTF9T dHJpbmcgbnVtYmVyID0gaSsxOwogICAgICAgICAgICAgICAgUmVzb3VyY2VzOjpGb250X3NtYWxs KCktPnByaW50X2NlbnRlciggaW50KDg0ICsgcG9zLngqNDApLCBpbnQoNTIgKyBwb3MueSo0MCks IG51bWJlciApOwogICAgICAgIH0KfQoKdm9pZCBNYXA6OnNob3dfcHJldmlldyggaW50IHgsIGlu dCB5LCBmbG9hdCBmYWN0b3IgKQp7CiAgICAgICAgaW50IHRpbGVfc2l6ZSA9IChpbnQpKDQwKmZh Y3Rvcik7CiAgICAgICAgZm9yIChpbnQgeXk9MDsgeXk8MTM7IHl5KyspCiAgICAgICAgewogICAg ICAgICAgICAgICAgZm9yIChpbnQgeHg9MDsgeHg8MTc7IHh4KyspCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXB0aWxlc1t4eF1beXldKQogICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwdGlsZXNb eHhdW3l5XS0+ZHJhd190aW55KCB4K3h4KnRpbGVfc2l6ZSwgeSt5eSp0aWxlX3NpemUsIGZhY3Rv ciApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg fQp9Cgp2b2lkIE1hcDo6cmVmcmVzaF9ob2xlcygpCnsKICAgICAgICBmb3IgKGludCB5PTA7IHk8 MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7IHgr KykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVz W3hdW3ldLT5nZXRfdHlwZSgpPT1NYXBUaWxlOjpOT05FKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NoYWtlbiA+IDApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+ZHJhd19zaGFrZW4oKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChtYXB0aWxlc1t4XVt5XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw dGlsZXNbeF1beV0tPmRyYXcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgTWFwOjphY3QoKQp7 CiAgICAgICAgaW50IHk7CgoKICAgICAgICBmb3IgKHk9MDsgeTwxMzsgeSsrKQogICAgICAgIHsK ICAgICAgICAgICAgICAgIGZvciAoaW50IHg9MDsgeDwxNzsgeCsrKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+b2JqZWN0cy5jbGVhcigp OwogICAgICAgICAgICAgICAgICAgICAgICBtYXB0aWxlc1t4XVt5XS0+Ym9tYiA9IF9fbnVsbDsK ICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgICBDTF9JdGVyYXRvcjxCb21iZXI+ IGJvbWJlcl9vYmplY3RfY291bnRlcihhcHAtPmJvbWJlcl9vYmplY3RzKTsKICAgICAgICB3aGls ZSAoYm9tYmVyX29iamVjdF9jb3VudGVyLm5leHQoKSAhPSBfX251bGwpCiAgICAgICAgewogICAg ICAgICAgICAgICAgaWYgKCFib21iZXJfb2JqZWN0X2NvdW50ZXIoKS0+aXNfZmx5aW5nKCkgJiYg IWJvbWJlcl9vYmplY3RfY291bnRlcigpLT5pc19kZWFkKCkpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJvbWJlcl9vYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGls ZSgpLT5vYmplY3RzLmFkZChib21iZXJfb2JqZWN0X2NvdW50ZXIoKSk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgfQoKCiAgICAgICAgQ0xfSXRlcmF0b3I8R2FtZU9iamVjdD4gb2JqZWN0X2Nv dW50ZXIoYXBwLT5vYmplY3RzKTsKICAgICAgICB3aGlsZSAob2JqZWN0X2NvdW50ZXIubmV4dCgp ICE9IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIW9iamVjdF9jb3VudGVy KCktPmlzX2ZseWluZygpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBvYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGlsZSgpLT5vYmplY3RzLmFkZChvYmplY3RfY291 bnRlcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdF9jb3VudGVyKCktPmdl dF90eXBlKCkgPT0gR2FtZU9iamVjdDo6Qk9NQiAmJiAhKG9iamVjdF9jb3VudGVyKCktPmlzX2Zh bGxpbmcoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvYmplY3RfY291bnRlcigpLT5nZXRfbWFwdGlsZSgpLT5ib21iID0gKEJvbWIq KShvYmplY3RfY291bnRlcigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgfQogICAgICAgIH0KCgogICAgICAgIGZvciAoeT0wOyB5PDEzOyB5KyspCiAgICAgICAg ewogICAgICAgICAgICAgICAgZm9yIChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcHRpbGVzW3hdW3ldLT5hY3QoKTsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG1hcHRpbGVzW3hdW3ldLT5kZWxldGVfbWUpCiAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBUaWxl KiBuZXdfdGlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdGlsZSA9IE1h cFRpbGU6OnNwYXduKCBtYXB0aWxlc1t4XVt5XSApOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlbGV0ZSBtYXB0aWxlc1t4XVt5XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXB0aWxlc1t4XVt5XSA9IG5ld190aWxlOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9CgoKdm9pZCBNYXA6OnNoYWtlKCBpbnQgX3No YWtlICkKewogICAgICAgIGlzX3NoYWtlbiA9IENvbmZpZzo6Z2V0X3NoYWt5X2V4cGxvc2lvbnMo KT9fc2hha2U6MDsKfQoKCnZvaWQgTWFwOjpjbGVhcigpCnsKICAgICAgICBmb3IgKGludCB5PTA7 IHk8MTM7IHkrKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB4PTA7IHg8MTc7 IHgrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHRp bGVzW3hdW3ldKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVsZXRlIG1hcHRpbGVzW3hdW3ldOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1hcHRpbGVzW3hdW3ldID0gX19udWxsOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlzX3NoYWtlbiA9IDA7Cn0K CmJvb2wgTWFwOjphZGRfYm9tYihpbnQgYngsIGludCBieSwgaW50IGJwb3dlciwgQm9tYmVyICpi b21iZXIpCnsKICAgICAgICBpZiAoKGJ4PDApIHx8IChieTwwKSB8fCAoYng+PTE3KSB8fCAoYnk+ PTEzKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoK ICAgICAgICBpZiAobWFwdGlsZXNbYnhdW2J5XSA9PSBfX251bGwpCiAgICAgICAgewogICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKG1hcHRpbGVzW2J4 XVtieV0tPmJvbWIgPT0gX19udWxsKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1hcHRpbGVz W2J4XVtieV0tPmJvbWIgPSBuZXcgQm9tYiggYngqNDAsIGJ5KjQwLGJwb3dlciwgYm9tYmVyLCBh cHAgKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0 dXJuIGZhbHNlOwp9CgpDTF9TdHJpbmcgTWFwOjpnZXRfbmFtZSgpCnsKICAgICAgICBDTF9Bc3Nl cnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTU4LCBfX251bGwsICJj dXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJyZW50X21hcC0+Z2V0 X25hbWUoKTsKfQoKQ0xfU3RyaW5nIE1hcDo6Z2V0X2F1dGhvcigpCnsKICAgICAgICBDTF9Bc3Nl cnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTY1LCBfX251bGwsICJj dXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJyZW50X21hcC0+Z2V0 X2F1dGhvcigpOwp9CgpDTF9WZWN0b3IgTWFwOjpnZXRfYm9tYmVyX3BvcyhpbnQgbnIpCnsKICAg ICAgICBDTF9Bc3NlcnQ6OmRpZShjdXJyZW50X21hcCAhPSBfX251bGwsICJNYXAuY3BwIiwgNTcy LCBfX251bGwsICJjdXJyZW50X21hcCAhPSBfX251bGwiKTs7CgogICAgICAgIHJldHVybiBjdXJy ZW50X21hcC0+Z2V0X2JvbWJlcl9wb3MobnIpOwp9Cgp2b2lkIE1hcDo6cmFuZG9taXplX2JvbWJl cl9wb3NpdGlvbnMoKQp7CiAgICAgICAgQ0xfQXNzZXJ0OjpkaWUoY3VycmVudF9tYXAgIT0gX19u dWxsLCAiTWFwLmNwcCIsIDU3OSwgX19udWxsLCAiY3VycmVudF9tYXAgIT0gX19udWxsIik7OwoK ICAgICAgICBjdXJyZW50X21hcC0+cmFuZG9taXplX2JvbWJlcl9wb3NpdGlvbnMoKTsKfQoKaW50 IE1hcDo6Z2V0X21heF9wbGF5ZXJzKCkKewogICAgICAgIENMX0Fzc2VydDo6ZGllKGN1cnJlbnRf bWFwICE9IF9fbnVsbCwgIk1hcC5jcHAiLCA1ODYsIF9fbnVsbCwgImN1cnJlbnRfbWFwICE9IF9f bnVsbCIpOzsKCiAgICAgICAgcmV0dXJuIGN1cnJlbnRfbWFwLT5nZXRfbWF4X3BsYXllcnMoKTsK fQoKCk1hcFRpbGUqIE1hcDo6Z2V0X3Bhc3NhYmxlKCkKewogICAgICAgIGludCBpID0wOwogICAg ICAgIGludCB4bWFwZmllbGQ7CiAgICAgICAgaW50IHltYXBmaWVsZDsKICAgICAgICBkbwogICAg ICAgIHsKICAgICAgICAgICAgICAgIHhtYXBmaWVsZCA9IHJhbmQoKSAlIDE3OwogICAgICAgICAg ICAgICAgeW1hcGZpZWxkID0gcmFuZCgpICUgMTM7CiAgICAgICAgICAgICAgICBpZiAobWFwdGls ZXNbeG1hcGZpZWxkXVt5bWFwZmllbGRdLT5pc19wYXNzYWJsZSgpICYmICFtYXB0aWxlc1t4bWFw ZmllbGRdW3ltYXBmaWVsZF0tPmlzX3ZhbmlzaGluZygpKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4bWFwZmllbGRdW3lt YXBmaWVsZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAg fSB3aGlsZSAoaTwxMDAwKTsKCiAgICAgICAgcmV0dXJuIF9fbnVsbDsKfQoKTWFwVGlsZSogTWFw OjpnZXRfcmFuZG9tKCkKewogICAgICAgIGludCBpID0wOwogICAgICAgIGludCB4bWFwZmllbGQ7 CiAgICAgICAgaW50IHltYXBmaWVsZDsKICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAgICAg ICAgIHhtYXBmaWVsZCA9IHJhbmQoKSAlIDE3OwogICAgICAgICAgICAgICAgeW1hcGZpZWxkID0g cmFuZCgpICUgMTM7CiAgICAgICAgICAgICAgICBpZiAobWFwdGlsZXNbeG1hcGZpZWxkXVt5bWFw ZmllbGRdLT5nZXRfdHlwZSgpIT1NYXBUaWxlOjpOT05FICYmICFtYXB0aWxlc1t4bWFwZmllbGRd W3ltYXBmaWVsZF0tPmlzX3ZhbmlzaGluZygpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4bWFwZmllbGRdW3ltYXBmaWVs ZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgfSB3aGls ZSAoaTwxMDAwKTsKCiAgICAgICAgcmV0dXJuIF9fbnVsbDsKfQoKCk1hcFRpbGUqIE1hcDo6Z2V0 X21hcHRpbGUoaW50IHgsIGludCB5KQp7CiAgICAgICAgaWYgKHggPCAwIHx8IHggPiAxNyAtMSB8 fCB5IDwgMCB8fCB5ID4gMTMgLTEpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGR1 bW15X21hcHRpbGU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAg ICAgICByZXR1cm4gbWFwdGlsZXNbeF1beV07CiAgICAgICAgfQp9CgpNYXBUaWxlKiBNYXA6Omdl dF9tYXB0aWxlX3h5KGludCB4LCBpbnQgeSkKewogICAgICAgIGlmICh4IDwgMCB8fCB4ID49ICgx NykqNDAgfHwgeSA8IDAgfHwgeSA+PSAoMTMpKjQwICkKICAgICAgICB7CiAgICAgICAgICAgICAg ICByZXR1cm4gZHVtbXlfbWFwdGlsZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHJldHVybiBtYXB0aWxlc1t4LzQwXVt5LzQwXTsKICAgICAgICB9Cn0K CgppbnQgTWFwOjpuZXdfZW50cnkoIENMX1N0cmluZyBfbmFtZSApCnsKICAgICAgICB0cnkKICAg ICAgICB7CiAgICAgICAgICAgICAgICBtYXBfbGlzdC5hZGQoIG5ldyBNYXBFbnRyeShfbmFtZSkg KTsKICAgICAgICAgICAgICAgIHJldHVybiBtYXBfbGlzdC5nZXRfbnVtX2l0ZW1zKCkgLTE7CiAg ICAgICAgfQogICAgICAgIGNhdGNoKCBDTF9FcnJvciBlcnIgKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIGRlbGV0ZSBtYXBfbGlzdC5nZXRfbGFzdCgpOwogICAgICAgICAgICAgICAgbWFwX2xp c3QuZGVsKG1hcF9saXN0LmdldF9sYXN0KCkpOwogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwog ICAgICAgIH0KfQoKaW50IE1hcDo6ZGVsZXRlX2VudHJ5KCBpbnQgbnIgKQp7CiAgICAgICAgQ0xf QXNzZXJ0OjpkaWUobnIgPj0gMCwgIk1hcC5jcHAiLCA2NzMsIF9fbnVsbCwgIm5yID49IDAiKTs7 CiAgICAgICAgQ0xfQXNzZXJ0OjpkaWUobnIgPCBnZXRfbWFwX2NvdW50KCksICJNYXAuY3BwIiwg Njc0LCBfX251bGwsICJuciA8IGdldF9tYXBfY291bnQoKSIpOzsKCiAgICAgICAgbWFwX2xpc3Rb bnJdLT5kZWxldGVfZmlsZSgpOwogICAgICAgIGRlbGV0ZSBtYXBfbGlzdFtucl07CiAgICAgICAg bWFwX2xpc3QuZGVsKG1hcF9saXN0W25yXSk7CgogICAgICAgIGlmIChuciA+IGdldF9tYXBfY291 bnQoKS0xKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuci0xOwogICAgICAgIH0K ICAgICAgICByZXR1cm4gbnI7Cn0KCm9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBvcywg TWFwJiBtKQp7CiAgICAgICAgZm9yIChpbnQgeT0wOyB5PDEzOyB5KyspCiAgICAgICAgewogICAg ICAgICAgICAgICAgZm9yIChpbnQgeD0wOyB4PDE3OyB4KyspCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChtLm1hcHRpbGVzW3hdW3ldLT5ib21iKQogICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwg IioiOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG0ubWFwdGlsZXNbeF1beV0tPmhhc19ib21iZXIoKSkKICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICJCIjsKICAgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLm1h cHRpbGVzW3hdW3ldLT5oYXNfZXh0cmEoKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICJlIjsKICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKG0ubWFwdGlsZXNbeF1beV0tPmdldF90eXBlKCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBNYXBUaWxlOjpOT05FOgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcyA8PCAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBNYXBUaWxlOjpHUk9VTkQ6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIgIjsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OldBTEw6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIjIjsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OkJPWDoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIisiOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTWFwVGlsZTo6VFJBUDoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTWFwVGlsZTo6QVJST1c6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICIgIjsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1hcFRpbGU6OklDRToKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgb3MgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9zOwp9CgoKdm9p ZCBNYXA6OnNhdmVfc2VsZWN0aW9uKCkKewogICAgICAgIENMX1N0cmluZyBmaWxlbmFtZTsKCgoK ICAgICAgICBmaWxlbmFtZSA9IGdldGVudigiSE9NRSIpOwogICAgICAgIGZpbGVuYW1lICs9ICIv LmNsYW5ib21iZXIvbWFwcy5kaXNhYmxlZCI7CgogICAgICAgIG9mc3RyZWFtIG1hcF9zZWxlY3Rp b25fZmlsZShmaWxlbmFtZSk7CiAgICAgICAgQ0xfSXRlcmF0b3I8TWFwRW50cnk+IG1hcF9lbnRy eV9pdGVyYXRvcihtYXBfbGlzdCk7CiAgICAgICAgd2hpbGUgKG1hcF9lbnRyeV9pdGVyYXRvci5u ZXh0KCkhPV9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIShtYXBfZW50cnlf aXRlcmF0b3IoKS0+aXNfZW5hYmxlZCgpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgbWFwX3NlbGVjdGlvbl9maWxlIDw8IG1hcF9lbnRyeV9pdGVyYXRvcigpLT5n ZXRfbmFtZSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQp9Cgp2b2lkIE1h cDo6bG9hZF9zZWxlY3Rpb24oKQp7CiAgICAgICAgQ0xfU3RyaW5nIGZpbGVuYW1lOwoKCgogICAg ICAgIGZpbGVuYW1lID0gZ2V0ZW52KCJIT01FIik7CiAgICAgICAgZmlsZW5hbWUgKz0gIi8uY2xh bmJvbWJlci9tYXBzLmRpc2FibGVkIjsKCgogICAgICAgIEZJTEUqIG1hcF9zZWxlY3Rpb25fZmls ZTsKICAgICAgICBjaGFyIG1hcF9uYW1lWzEwMF07CgogICAgICAgIGlmICgobWFwX3NlbGVjdGlv bl9maWxlID0gZm9wZW4oIGZpbGVuYW1lLCAiciIgKSkgIT0gX19udWxsKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIHdoaWxlICghKGZlb2YobWFwX3NlbGVjdGlvbl9maWxlKSkpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZzY2FuZiggbWFwX3NlbGVjdGlvbl9m aWxlLCAiJXNcbiIsIG1hcF9uYW1lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIENMX0l0ZXJh dG9yPE1hcEVudHJ5PiBtYXBfZW50cnlfaXRlcmF0b3IobWFwX2xpc3QpOwogICAgICAgICAgICAg ICAgICAgICAgICB3aGlsZSAobWFwX2VudHJ5X2l0ZXJhdG9yLm5leHQoKSE9X19udWxsKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG1hcF9lbnRyeV9pdGVyYXRvcigpLT5nZXRfbmFtZSgpID09IG1hcF9uYW1lKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1hcF9lbnRyeV9pdGVyYXRvcigpLT5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBmY2xvc2UobWFwX3NlbGVjdGlvbl9maWxlKTsKICAgICAgICB9 Cn0K