From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19253 invoked by alias); 24 Jan 2003 10:00:58 -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 18826 invoked by uid 71); 24 Jan 2003 09:57:05 -0000 Resent-Date: 24 Jan 2003 09:57:05 -0000 Resent-Message-ID: <20030124095705.18825.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, t-gcc@snowelm.com Received: (qmail 15127 invoked by uid 48); 24 Jan 2003 09:52:31 -0000 Message-Id: <20030124095231.15126.qmail@sources.redhat.com> Date: Fri, 24 Jan 2003 10:00:00 -0000 From: t-gcc@snowelm.com Reply-To: t-gcc@snowelm.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9429: ICE in template instantiation with a pointered new operator X-SW-Source: 2003-01/txt/msg01408.txt.bz2 List-Id: >Number: 9429 >Category: c++ >Synopsis: ICE in template instantiation with a pointered new operator >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Fri Jan 24 09:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: t-gcc@snowelm.com >Release: gcc version 3.2.2 20030109 (Debian prerelease) i386-linux >Organization: >Environment: Debian GNU/Linux with kernel updated to 2.4.20 >Description: The attached code causes ICE on GCC version 3.2.2 (it seems GCC 3.2 20020927 has the same problem). GCC 2.95.4 compiles the same source perfectly (if you use the non-preprocessed code), so I believe the code is legal... --------------- $ g++ -O0 array.ii array.h: In member function `ARRAYBASE* ArrayMakerKeyTemplate::MakeEntry(ARRAYBASE::hashkey_t) [with ARRAYBASE = ArrayEntry]': hash.h:546: instantiated from here array.h:215: Internal compiler error in convert_from_eh_region_ranges_1, at except.c:1404 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. $ g++ -v Reading specs from /usr/lib/gcc-lib/i386-linux/3.2.2/specs Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux Thread model: posix gcc version 3.2.2 20030109 (Debian prerelease) --------------- >How-To-Repeat: Compile the attached file: g++ -O0 array.ii >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="array.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="array.ii" IyAxICJhcnJheS5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx ICJhcnJheS5jcHAiCgoKCnN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiJElkOiBhcnJheS5j cHAsdiAxLjIxIDIwMDMvMDEvMjMgMTQ6MTg6MjAgbWFrIEV4cCAkIjsKIyAyMSAiYXJyYXkuY3Bw IgojIDEgImFsbC5oIiAxCiMgMTEgImFsbC5oIgojIDEgInJ0X2NvbmZpZy5oIiAxCiMgMzggInJ0 X2NvbmZpZy5oIgojIDEgIi4uL2NvbXBpbGVyL2lkZW50LmgiIDEKIyAzOSAicnRfY29uZmlnLmgi IDIKIyAxICIuLi9jb25maWcuaCIgMQojIDQwICJydF9jb25maWcuaCIgMgojIDkwICJydF9jb25m aWcuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv c3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAz CiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzE1ICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk ZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMg MjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9zdGRpbnQu aCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50MTZf dDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9u ZyBpbnQgaW50NjRfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQz Ml90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVp bnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBz aG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKX19l eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoK X19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9sZWFzdDY0 X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBp bnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18K dHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3QxNl90 Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zhc3Q2NF90OwojIDEyNiAiL3Vzci9pbmNs dWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lv bl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRtYXhfdDsKX19leHRlbnNpb25fXwp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90OwojIDkxICJydF9jb25maWcuaCIgMgoj IDEyMSAicnRfY29uZmlnLmgiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKIyAxICJtZW1jaGsuaCIg MQojIDI1ICJtZW1jaGsuaCIKY2xhc3MgX19pbml0X3Rlcm1fbWVtY2hrCnsKcHVibGljOgogICAg ICAgIF9faW5pdF90ZXJtX21lbWNoaygpIHRocm93KCk7CiAgICAgICAgfl9faW5pdF90ZXJtX21l bWNoaygpIHRocm93KCk7Cn07CgoKc3RhdGljIF9faW5pdF90ZXJtX21lbWNoayBfX2luaXRfdGVy bV9tZW1jaGtfaW5zdGFuY2U7CiMgMTI1ICJydF9jb25maWcuaCIgMgojIDEyICJhbGwuaCIgMgoj IDEgImJhc2ljLmgiIDEKIyAzNSAiYmFzaWMuaCIKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuICJDIiB7CiMgMTc1ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQu aCIgMSAzCiMgMTc2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52 aXJvbm1lbnRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAy NCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9p Mzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQg c2l6ZV90OwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9y dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQg X19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNp b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3IvaW5jbHVk ZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMuaCIgMSAz CiMgMTI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lu b190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVu c2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBl ZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5 cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNp ZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNv bmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190 Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVk ZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlw ZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2 NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBs b25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2Zz ZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3Qg X19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2Nh ZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBf X3NvY2tsZW5fdDsKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKdHlwZWRlZiBf X3NzaXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MiAzCgoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90 OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2Zm NjRfdDsKCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCgp0eXBlZGVmIF9f cGlkX3QgcGlkX3Q7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX3Nv Y2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu IGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5 cGUpIHRocm93ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29m Zl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJv dyAoKTsKIyAzMDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxz ZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNz aXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93 ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1 Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19m ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0 aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpf X2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0 KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVf dCBwcmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAg ICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4g c3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAz NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1 bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRz KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNf dCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25l ciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2Nv bnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYs IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9k aXJfbmFtZSAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAq X19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBp bnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwK ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hh ciAqX19jb25zdCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3Yg KF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIg Kl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19j b25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50 IF9faW5jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2NvbmZuYW1lLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVu dW0KICB7CiAgICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFY X0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJ UEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAg ICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAg IF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRT LAoKICAgIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpF LAoKICAgIF9QQ19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgog ICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0K ICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENL LAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVB TV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9T Q19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZ X1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoK ICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9T Q19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9T Q19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVT U0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZ X09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAg IF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9T Q19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgog ICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNf TUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAg X1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9N QVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBf U0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19F WFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAg ICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18y X0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0Nf Ml9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAg ICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9T Q19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1ND X1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9f TUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJO RVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoK ICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURT LAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9N QVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoK ICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElP TlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwK CiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FE RFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9S SVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RI UkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAg X1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1ND X1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwK CiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BF Tl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQs CgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18y X0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBf U0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwK CgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4s CgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoK ICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgog ICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4s CgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFY LAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9N QVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05M X01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19O TF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAz Ml9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19P RkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoK ICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywK CiAgICBfU0NfQkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JU LAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgog ICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0Vf SU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1Is CgogICAgX1NDX0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1ND X0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZ U1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoK ICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVB REVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoK ICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywK CiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFE X1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNU RU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9P QkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAg ICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xP Q0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAg X1NDX1NZTUxPT1BfTUFYLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BP SU5ULAoKCiAgICBfU0NfVjZfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywK CiAgICBfU0NfVjZfTFA2NF9PRkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBf U0NfSE9TVF9OQU1FX01BWCwKCiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJ TFRFUiwKCiAgICBfU0NfVFJBQ0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoK CgoKZW51bQogIHsKICAgIF9DU19QQVRILAoKCgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwK CiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElO VEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgog ICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1Nf WEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMy X0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9J TFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywK CiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P RkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9D U19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFH UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2 NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1Nf WEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElC UywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lY X1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERG TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhf VjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdf Q0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1Nf UE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJ R19MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9D U19QT1NJWF9WNl9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZG NjRfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NT X1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09G RkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBf Q1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9S RVNUUklDVEVEX0VOVlMKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoK ZXh0ZXJuIGxvbmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFt ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBf X25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29u ZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoK CgpleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90 IGdldHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9p ZCkgdGhyb3cgKCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlk X3QgX19nZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdl dHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQg KF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5j bHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4 MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cg KCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9f dWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2 b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBnZXRyZXN1aWQgKF9fdWlkX3QgKl9fZXVpZCwgX191aWRfdCAqX19ydWlkLCBf X3VpZF90ICpfX3N1aWQpOwoKCgpleHRlcm4gaW50IGdldHJlc2dpZCAoX19naWRfdCAqX19lZ2lk LCBfX2dpZF90ICpfX3JnaWQsIF9fZ2lkX3QgKl9fc2dpZCk7CgoKCmV4dGVybiBpbnQgc2V0cmVz dWlkIChfX3VpZF90IF9fZXVpZCwgX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19zdWlkKTsKCgoK ZXh0ZXJuIGludCBzZXRyZXNnaWQgKF9fZ2lkX3QgX19lZ2lkLCBfX2dpZF90IF9fcmdpZCwgX19n aWRfdCBfX3NnaWQpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lkKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBj aGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9y IChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB0dHlz bG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAoX19jb25zdCBjaGFyICpf X2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc3ltbGlu ayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoj IDc0NCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5o IiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDQ3ICIv dXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9p bmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRl cnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAz CmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNv bnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwp9 CiMgNzQ1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRo b3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRl cm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcgaW50IF9faWQpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19s ZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19u YW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9p ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxlKSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9f c2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg YWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0 dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lk KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cg KCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIgKl9fcHJvbXB0KSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHN5 bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAodm9pZCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0 ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1 NCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25z dCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg2 OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBf X2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRh Ymxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODg0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg KnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93ICgpOwojIDkwNSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4p IHRocm93ICgpOwojIDkyNSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9j a2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkzNSAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGlu dCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5NTYgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBj aGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Js b2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAg ICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpj dGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwojIDEwMDEgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsK Cgp9CiMgMzYgImJhc2ljLmgiIDIKCgp0eXBlZGVmIHNob3J0IGludDE2Owp0eXBlZGVmIHNpZ25l ZCBzaG9ydCBzaW50MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2Owp0eXBlZGVmIGlu dCBpbnQzMjsKdHlwZWRlZiBzaWduZWQgaW50IHNpbnQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dWludDMyOwojIDgxICJiYXNpYy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKIyA5 NCAiYmFzaWMuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwojIDEwNyAiYmFzaWMuaCIK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOwojIDEyMCAiYmFzaWMuaCIKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdWludDsKIyAxMzMgImJhc2ljLmgiCnR5cGVkZWYgc2lnbmVkIHNob3J0IHNzaG9y dDsKIyAxNDYgImJhc2ljLmgiCnR5cGVkZWYgc2lnbmVkIGxvbmcgc2xvbmc7CiMgMTU5ICJiYXNp Yy5oIgp0eXBlZGVmIHNpZ25lZCBjaGFyIHNjaGFyOwojIDE3MiAiYmFzaWMuaCIKdHlwZWRlZiBz aWduZWQgaW50IHNpbnQ7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAx IDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvaW5j bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQ2ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 cmluZ2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3Ry dWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9 IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdGVtcGxhdGU8 PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+ IHN0cmluZzsKCgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKICB0 eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQ3ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hh cl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFp dHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j c3RkZGVmIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIg Mwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRk ZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpz aXplX3Q7Cn0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMiAzCgojIDEgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpl eHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoK ZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lk ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1l bWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRo cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19z MSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAq X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hh ciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAz CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVf c3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3Qg dW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93 ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpfX25hbWVz WzEzXTsKfSAqX19sb2NhbGVfdDsKIyAxMTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK ZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNo YXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwoKCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz dHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0 cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ss IHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg Kl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJp Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9p ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl X3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3Ry aW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYs IHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lk ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25z dCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj aGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0 ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcg bG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2Fz ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAg KGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2 ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFs IChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg dGhyb3cgKCk7CiMgMzc5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0 cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1v dmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0 OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsK ICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsK ICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAg dXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAg dXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBf X2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+ KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAg c3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihj b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7 CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikK ICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mx KSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hy KGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3Rf Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlu bGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIp OyB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kz ODYtbGludXgvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4 Ni1saW51eC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8i IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKCgoKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzkgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu ICJDIiB7CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4y L2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoK IyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIg Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIv aTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDMyMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgi IDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29u ZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5 ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAg d2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0 ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QK ewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5 cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK fSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDMKCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vz ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9f R0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05W X0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lO UFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NS SVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lT X0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0 cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2Nv bnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBp bnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZf c3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIHdp bnRfdCAoKl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25l ZCBjaGFyKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9f Z2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp bnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlw ZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1 Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2J0b3djX2ZjdCBf X2J0b3djX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRf ZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25l ZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsK CgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAq X19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3Vu dGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwog IF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190 cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3Rl cHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVj dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9p bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZf aW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAg IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2lj b252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMy X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVk ZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAyIDMKIyAxNjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVt cF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBl ZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9J T19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7 CiMgMTk1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3Vs dAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJv ciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQg KCpfX2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVj dnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90 ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdj aGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgd2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9f Y29kZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICos IGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0 cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAq Kik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICop OwogIGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0 ICopOwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwg X19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgp IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29u dl90IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9f cmVhZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jh c2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsK ICB3Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hh cl90ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpf SU9fYmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3Qg X0lPX3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29k ZWN2dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVt cF90ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoK CgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9J T19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0 cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBf SU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jh c2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7 CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2Zs YWdzMjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2Nv bHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK CgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAg X19vZmY2NF90IF9vZmZzZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0 cnVjdCBfSU9fd2lkZV9kYXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIg X3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoK CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP XzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87 CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQg Kl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYg X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9f YnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoK CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19w b3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2ll KTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVk ZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3Nl ZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tp ZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJl YWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9f Y2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lP X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lP X2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19j b29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zu cyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2lu dF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193 dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChf SU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g aW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVy cm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr ZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tm aWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklM RSAqKSB0aHJvdyAoKTsKIyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQg X0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJp Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJp Y3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJp Y3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxF ICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9J T19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lP X3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRl cm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhy b3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhy b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnAp IHRocm93ICgpOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21v ZGUpIHRocm93ICgpOwojIDUxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf SU9fdmZ3c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVz dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jl c3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19y ZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRu IChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9J T19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA4MiAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0 eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgX0dfZnBv c190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDE0NyAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxNDggIi91c3IvbGliL2djYy1saWIv aTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9J T19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3Ry dWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBj aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNo YXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJ TEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFy ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMjAy ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9f cGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0 ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZs dXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwg KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjQ4ICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVu NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4g RklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2Rl cykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3Ry aWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29r aWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZt ZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJp Y3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3Ry aWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y ZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9f bikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3By aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZw cmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmlu dGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoK ZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10 LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNz Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwg MCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoK CmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBn ZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lk KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGlu dCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg KmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykg dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0g KGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9f ZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9f cmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0 cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNf dW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2Vk IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9u ZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRl bGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKIyA1MzcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFt LCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3Qg ZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTUzICIvdXNyL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBv cyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25z dCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s aW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklM RSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0 ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g aW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVz dHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpf X3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRo cm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lzX25l cnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4g aW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3Rb XTsKIyA2MDkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlv LmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK CgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBv YnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQg b2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp KSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY4 NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp9 CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNp bmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNp bmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6 ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3Bl bjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwog IHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVz aW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcg Ojpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6Omdl dHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwog IHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNp bmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6 OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6 c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVu Z2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZz cHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNl IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251 X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvaW5j bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg MwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGlu dCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl ZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog IH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQg Kl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxh Z3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CgoKCgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJh bQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMzMgIi91c3IvaW5jbHVkZS9z Y2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0 cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9z ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwg c3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzY2hlZF9zZXRh ZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIHRocm93ICgp OwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVk IGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFk LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt bGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1l LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRl ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5 cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5 cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg Mwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3Vy OwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dk YXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2Zm OwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoKCgoKc3RydWN0IGl0aW1lcnNw ZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNw ZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTc2ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs ZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3Ry dWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3Qg dG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGNo YXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAq X190cCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVf dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9f Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1 Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAp IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAq X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190 aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0 cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25z dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJd OwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoK ZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoK CgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMg MzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3Qg dG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0g Kl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAg KF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj ICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3Qg X19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1l c3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAg KGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg Y2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tf aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3Qg X19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGlt ZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1l cmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1l cmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj dCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJz cGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1 biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM3OCAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRh dGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM5MyAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f cmVzYnVmcCkgdGhyb3cgKCk7CgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zaWdu YWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19h dG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192 YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdz ZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRl L3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzggIi91c3IvaW5j bHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAx IDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKdHlwZWRlZiBp bnQgX19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBp bnQgX19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVm IHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVk ZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBf X3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQg X19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGlu dCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tz aXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhy ZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0 aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVh ZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoK dHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBf cHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0 CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBp bnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7 CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJz OwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVh ZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19y d19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9y d2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7 CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7 CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNj ciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qgewog IGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9wdGhy ZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JF QVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhS RUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgog IFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURf TlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNI RUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhf Tk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lW RSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVD SyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQg PSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRI UkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklW QVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldM T0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwK ICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFE X1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9Owoj IDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGlu dCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7 Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxf RElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURf Q0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK ZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFk cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y ZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFy dF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19y ZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9f dGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRo cmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9f dGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl dGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19y ZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRp bmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf X2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2Nv cGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy LCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRk cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2Nv bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9h dHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0 dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJf dCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFy YW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhy ZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0 IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kg KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0 ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRy X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0 cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90 ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy X3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg Kl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl c3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9p bml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2Nv bmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVh ZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh aXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3Qg Kl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRf Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0 dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVh ZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAo cHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2Nr X3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcnds b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190 aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0 aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0 aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3By ZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAg KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5s b2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpf X2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJl YWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp bl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0 IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy ZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2Jh cnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmll cmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh ZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w c2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJl YWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1NiAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAq X19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5j dGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRl IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpw dGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NzYg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJl YWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAq X19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFk X3QgX19jYW5jZWx0aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0 Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51 cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2Ns ZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMg NjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFu dXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVy biB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVh bnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9n ZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRz L3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3Qg X19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0 cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJl YWRfdCBfX3RocmVhZGlkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjU2ICIvdXNyL2luY2x1 ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu IGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMg MzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIg MiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJl YWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3Ro cmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJh Z21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVj aWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211 dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s aW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9h Y3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0 ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9w dHIgIT0gMDsKfQojIDQzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0 aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJl YWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9h Y3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UK ICAgIHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUg KF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4g cHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAo cHRyKQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAg cmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0 aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoK c3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5 X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBp bmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29u c3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsK fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRl eF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo cmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp bmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0 ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0 ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5l IGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsK ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5s b2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9jKysv My4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBl ZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5 cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFt cG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBG SUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9y dCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9 IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19s ZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tp cHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4 MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgw MDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJp dCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsK CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4 OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2No YXIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKCgoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0 aW1lIiAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1 c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNp bmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6 Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5j bHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4 LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDg4ICIvdXNyL2luY2x1ZGUvd2No YXIuaCIgMwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwoKCgojIDExMyAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3QgdG07CgoKCgoKCgoKCmV4 dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93 ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3Qg Kndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9f Y29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0 IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAq X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25j YXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf X3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRl cm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAq X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm1fbCAod2NoYXJf dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3Qg Kndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3Qg Kl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg d2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hh cl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK ZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdj aGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0 IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9f Y29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5 c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2No YXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3 Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVf dCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK CgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg X19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3Mx LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19y ZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4g d2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2lu dF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRl X3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g c2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVf dCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAg ICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRl cm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykg dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry aWN0IF9fcHMpIHRocm93ICgpOwoKIyAzMjQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCmV4 dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f cHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmlj dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNu cnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBf X3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3Ry aWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBz aXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry aWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19j KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFy X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3Rv ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk b3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n IGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0 ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWxfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK X19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsX2wgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsX2wgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g ZmxvYXQgd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs ZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2Zf aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVy bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25l ZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f d2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1NjMgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25z dCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3 Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19t b2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsK CmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJf dCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2Fu ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4 dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKCmV4dGVybiBpbnQg dmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3NjYW5m IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2c3dz Y2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCgoKCgpleHRlcm4g d2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No YXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBfX3dj LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJf dCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1dHdj aGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1 dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAg IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3Qg dW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4 dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9f d2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3Vu bG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdz X3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90 Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAg dXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNp bmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2lu ZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcg OjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2lu ZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2lu ZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVz aW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsK ICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7 CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwog IHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwog IHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAg dXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwog IHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVz aW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNp bmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5n IDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2lu ZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2No cih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0 PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5s aW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsg cmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9 CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90 KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3 Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFy X3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nz c3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6 OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hh cl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg d2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4 CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91 bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2lu ZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRl OgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAg cHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBf TV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9z dCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChf X3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90 eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChf X3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29m ZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01f b2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y LT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAg ICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBf X3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikK ICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAg ICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNv bnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01f b2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVh bW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAg dm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7 IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVk ZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0 ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBl OwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1v ZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm IF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29u c3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGlj IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl KiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNv bnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg X19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3Mx LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJf dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg c2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90 eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJf dHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0 aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAg ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv bnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsK CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2Mp OwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAg IHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5 cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVh bW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAg IHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw ZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg ZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3Qg Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9f YzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90 eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0 dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg IGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90 eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9 CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29u c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMg Y2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPiht ZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg IGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsg fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5 cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoK CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUm IF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0 dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90 eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9f YyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2Zm IG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVk ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9f YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAg ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh cl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGlj IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl KiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9f bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog X19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7 IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBj b25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1v dmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29w eShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAg ICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hh cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw ZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsg cmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9f aW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0K CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2Mx LCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90 X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2Ms IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAg ICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19j KSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29u c3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRz IiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL2xpbWl0 cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUv bGltaXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4 LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2 LWxpbnV4LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vz ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGlt aXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3 ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEg MwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2lu Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl bl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAi L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xp bWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNs dWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIv aW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51 eC8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Y2xpbWl0cyIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUv Yml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3 ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4u aCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVk ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVz OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7 CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGlu dCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0g X193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBp bnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAg ICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsK IyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVj dAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0g bGxkaXZfdDsKCgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3Qg X19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91Ymxl IGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29u c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIg Kl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg bG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs b25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRl bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg 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 aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9j aGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVf aW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5 cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0 eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0 eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwojIDcy ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoK Cgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwojIDEwNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CiMgMTE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJf dDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0 OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVu c2lnbmVkIGludCB1aW50OwojIDE5NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0 ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNiAiL3Vzci9p bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAz CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu aCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNv bmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK IyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRf bWFzazsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIHN0cnVjdAog IHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFz aykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoj IDk5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRl cm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywK ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAg ICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAg ICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl YWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVv dXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3Np Z21hc2spIHRocm93ICgpOwoKCn0KIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMjAgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsK CgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRf dCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1OCAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0 X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxj bnQ2NF90IGZzZmlsY250NjRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAxIDMKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKfQojIDQx NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRv bSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f c2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50 IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f c3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50 MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGlu dCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQz Ml90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2Rh dGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVk IGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJu IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0 YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0 cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBl cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFu ZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQg aW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpl eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cg KCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBf X3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQg bG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp OwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9y IChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAg IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2Vl ZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i dWZmZXIpIHRocm93ICgpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19z aXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg KmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2 b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNs dWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZv aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3Np emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50 IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6 ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9f c3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAq Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50 IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50 IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp IHRocm93ICgpOwojIDY2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0 ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7 CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0 IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK CgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK ZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg aW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50 IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBl eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdj dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAq cWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0 cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAg ICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAo aW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQs IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0 cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBf X2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRs aWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsK CiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2lu ZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFy Y2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVz aW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjps ZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3dj czsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1 c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2lu ZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcg Ojp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf X2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19p LCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Omxs ZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxv bmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcg bG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9f eDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19k KQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUg X19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9f biwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsg X19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVz aW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVz aW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRp dl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAg dXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBf X2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVf Y3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4 eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9uZXciIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKIyAxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysr LzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog IGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsg fQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBj aGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24g OiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJv dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAg dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1 bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0 ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4 cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlv biIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDMgIi91 c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0 ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRo cm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhy b3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19o YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDc5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0 aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkg dGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93 KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9y IG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBv cGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv dygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp IHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCog X19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10o c3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUg dm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2 b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgNzAg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lv c2Z3ZCIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK ewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7Cgog IHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dp Y19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVy ZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1l IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVh bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3Ry ZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19p b3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsK ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29z dHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVm IGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj X29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu Z3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+ IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVh bTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2No YXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJl YW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBl ZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp Y19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2No YXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0KIyA3MSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7 CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoK CgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYg X19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVt cGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4m IF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVy biBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICBy ZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9f eC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBf VDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g X195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl cmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1 cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9w YWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9U MSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9U MSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3Ry YWl0cy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5o IiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1 Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhp c19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxf VHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBz dHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsK ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J c19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hv cnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+ IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9p dGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNl IF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u dGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwg X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNzMgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMg ODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg MwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0 b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRf aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBw dWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlz dGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0 eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAgICB0 eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAg ICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVm ZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAg c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y OjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAg IHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg ICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1Rw JiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl ZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5j ZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNl IHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rp c3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5w dXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hpbGUgKF9fZmly c3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAgICByZXR1cm4g X19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICBpbmxp bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAx MTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg Mwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgZGlzdGFuY2Uo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogIHsKCiAgICBy ZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0 YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5j ZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHdoaWxlIChfX24tLSkgKytf X2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5h bWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRl cmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcpCiAgewoKICAgCgogICAgaWYgKF9fbiA+IDApCiAgICAgIHdoaWxlIChfX24tLSkg KytfX2k7CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24rKykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5s aW5lIHZvaWQKICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5j ZSBfX24sCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAog ICAgX19pICs9IF9fbjsKICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9p dGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3Is IHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0 b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBj bGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90 ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVm ZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJz ZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRv cihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNl X2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9f eC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAg ICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAg ICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQog ICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVu Y2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3Rt cCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAg IHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkp OyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAg ICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoK CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAg ICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsK ICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0 b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7 CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19u KSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9 CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5j ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVy biAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl bnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZl cmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVy biAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkg PCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0 dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAg IHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9w ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2Uo KSAtIF9fbik7IH0KIyAzMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNl cnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWlu ZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29u dGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Io X0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2Ug X192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y JgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBi YWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7 IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gp CiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMg Mzk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgog ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVy OwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsK CgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6 IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsK ICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv ciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0 ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0 NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxf Q29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1 cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzAgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVy YXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewog ICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29u dGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBj b250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkK ICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsK ICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5z ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAg IGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo aXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0Nv bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFt ZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwog IHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJs aWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBf TV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJl bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9N X2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxf aXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0 b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAg ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgog ICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJu ICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkg eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9y bWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsg cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVu Y2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAg ICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9j dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25v cm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f bikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25v cm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24p OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBf TV9jdXJyZW50OyB9CiAgICB9OwojIDY0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09 KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv ciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp bmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg IT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl cmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf X2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg aW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg PCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y PD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8 PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog IGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVu YW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNl X3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9f cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l cj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQoj IDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1l c3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBf Rm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBf X3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9 CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9U cCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0g X19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp bmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAg IHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwog ICAgfQojIDE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29u c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2Eg PCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1Rw JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAo X19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1h eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAg fQojIDIyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f Y29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFu Y2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7 IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3Ry aXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs dCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAo X19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m aXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVf dHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4g X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCog X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJl dHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRw dXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2 YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK ICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w eV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9y bWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2Uo KSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFs IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK CiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv cjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkx KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2Fy ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRp cmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0 IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAg ICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp c3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHko X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U cCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0 IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsK ICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAg bWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAg ICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog ICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq LCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwg X0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy ZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQu YmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3Io X0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9f Y29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs X2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0 eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u b3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9i YWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoK ICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgp KTsKICAgIH0KIyA1MDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv aWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUz MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAg X091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv bnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0t X19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4g X19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19m aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAg ewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3Rt cCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNo YXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2Mp CiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog IGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNo YXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAg ZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQg Y2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7 CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBf U2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJz dCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24o Y2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZp bGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBf X247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy PgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAg ICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4g cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9 CiMgNjQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAg ICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7 CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJl dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK ICAgIH0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg ICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0 MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAg ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJl ZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAg ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoK ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3Qy KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dy YXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1 dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBm b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAg ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwg Kl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8 ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4g X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg ICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29t cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK ICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg dW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19s YXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2Zp cnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIs IG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3Vs dCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBo aWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFy KiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0 IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoK ICB9Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODggIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNz ZXJ0IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNy L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0 ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fz c2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3Nl cnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lk IF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBp bnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK Cgp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDIgMwojIDg5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25f ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2Vw dC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9u KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9f dGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7 CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19s ZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jh bmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2 b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgOTAgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZj b3VudF9CYXNlCiAgewoKICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBf UkNfdCBfTV9yZWZfY291bnQ7CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9s b2NrOwoKICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQog ICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9N VVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1w OwoKCgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVh ZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50Owog ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9Cgog ICAgX1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygm X01fcmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVm X2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7 CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1 Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3 YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhf dAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAw LCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVk IGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBf X3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+Ojpf U19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19w ID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46 Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfbXV0ZXhfbG9j awogIHsKCgoKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKCiAgICB2b2lkCiAgICBf TV9pbml0aWFsaXplKCkKICAgIHsKIyAxODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7 CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lk CiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9t dXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYg X19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygp OyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9 CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwog ICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDkxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50 IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18g KChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQg Kl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAg X19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAg ICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIg KF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIp OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18g KChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVt LCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEi CiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6 ICJtZW1vcnkiKTsKfQojIDkzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDEwNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRp YyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3Ig bmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp emVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTI3ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K ICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAg ICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwoKCiAgICAgIHN0YXRpYyB2b2lk KiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCiAgICAgIHN0YXRpYyB2b2lkICgqIF9f bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZv aWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jl c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0 ID09IDAsIDApKQogICAgICAgICAgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFs bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0KCgogICAgICBz dGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBf X25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f bmV3X3N6KTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkK ICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAg ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9t YWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBf X29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQogICAg fTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVt cGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAo KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZv ciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9t YWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsK ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9p ZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46OgogICAgX1Nfb29tX3JlYWxs b2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9j X2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAg ICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXI7CiAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX215X21hbGxvY19oYW5kbGVy ID09IDAsIDApKQogICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpf X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg X19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgICAgIH0KICAgIH0KCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNl OwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19zaW1wbGVfYWxs b2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6 ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24p CiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19u ICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0 YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lk CiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f cCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBf X2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoKCiAgICAgIGVudW0ge19TX2V4dHJhID0g OH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90 IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxs b2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9 IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p CiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l eHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0g X19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI5MSwgX19QUkVUVFlfRlVO Q1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g KyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVh bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAg ICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7 CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xk X3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9z eiIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMzAwLCBfX1BSRVRU WV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikgX0Fs bG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGlu dCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg ICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgICB9CiAgICB9OwojIDM0 MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgICAgZW51 bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRF UyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAgICAgIHsKICAgICAgICB1bmlvbiBfT2Jq KiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAg ICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU U107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFy KiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgogICAgICBz dGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgICBzdGF0 aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVy biAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0g MSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOIC0g MSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgX1Nf cmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1NfY2h1bmtf YWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0IF9Mb2Nr CiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0 b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhy ZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgICB9 IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7 CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsKCiAgICBwdWJsaWM6Cgog ICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAg ICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAgaWYgKF9TX2ZvcmNlX25ldyA9PSAwKQog ICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQog ICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAxKTsKICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CgogICAg ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChfU19mb3JjZV9uZXcgIT0gMCkgPyAwIDogKF9f YXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcgIT0gMCIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGxvYy5oIiwgNDA5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAg ICAgIH0KCiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9y Y2VfbmV3ID4gMCkpCiAgICAgICAgICBfX3JldCA9IF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX24p OwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9f bXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9p bmRleChfX24pOwoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAg ICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg ICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICAg ICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3Vs dCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7 CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3JldCA9 PSAwLCAwKSkKICAgICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQog ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgaWYgKChfX24g PiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBf X25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAg ewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp c3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICAgIF9P YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu Y2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlz dDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgICAgfQogICAgICB9 CgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg X19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgICB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4gX0F0b21pY193b3JkCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZm9yY2VfbmV3ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAg ICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQog ICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsg fQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgog ICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6CiAgICBfU19j aHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIq IF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7 CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7 CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgICAgewogICAg ICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSAr PSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0IDsKICAgICAgICB9CiAg ICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAg X19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9i eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy ZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg c2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBf U19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVm dCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m cmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAt PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19t eV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAg ICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNf dG9fZ2V0KTsKICAgICAgICAgIGlmIChfU19zdGFydF9mcmVlID09IDApCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBf X215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAg X19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9C WVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRl eChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg ICAgICAgICAgIGlmIChfX3AgIT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAg ICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAg ICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwoKCiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2Vu ZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbmV3X2Fs bG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAg X1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf U19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4gX1NfY2h1bmtf YWxsb2MoX19zaXplLCBfX25vYmpzKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxi b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsK ICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2Fs bG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsK ICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9P YmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKQog ICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz dCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19j aHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVu ayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykKICAgICAgICB7CiAgICAgICAg ICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICAgIF9fbmV4dF9vYmogPSAoX09i aiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICAgIGlmIChfX25vYmpzIC0gMSA9 PSBfX2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2Zy ZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZQogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5r ID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoK ICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6CiAgICByZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQqIF9f cmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4gKHNp emVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg ICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICBpZiAoX1Nfcm91bmRfdXAo X19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkKICAgICAgICByZXR1cm4oX19wKTsK ICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9f bmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jl c3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgID0geyB7MCwg MCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9v bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICAgIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAg dHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVk ZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxv YzsKIyA2NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0b3IKICAgIHsKICAgICAgdHlwZWRl ZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90 eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsK ICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNv bnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAgICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9 CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAx PiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50 ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9Cgog ICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29u c3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlw ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwog ICAgICAgIGlmIChfX24pCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfX24gPD0gdGhpcy0+ bWF4X3NpemUoKSkKICAgICAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxv Yzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f cmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz aXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv ZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3co KSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQgY29uc3Ry dWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7 IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9 OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAgIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICAgICAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZvaWQgdmFsdWVf dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu ZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CiAgICB9OwoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYs IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgNzQzICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsKICAgICAg X0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw ZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVm IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg ICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25z dF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2NhdG9yKCkg dGhyb3coKSB7fQogICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJv dygpCiAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9 CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0 IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDogX191bmRl cmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19hbGxvY2F0 b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9f eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRy ZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAg X1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAg IHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgX19y ZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHAp KSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFs bG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19h bGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz aXplb2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAg ICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgog ICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0 eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1 ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmVi aW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBf X2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikK ICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n X2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+ JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f YTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs eWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAg ICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQogICAgeyBy ZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAg ICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQogICAgeyBy ZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0 dXJuIGZhbHNlOyB9CiMgODk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgc3Ry dWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxh dGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY29uc3QgYm9vbCBfQWxsb2Nf dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg YWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+ IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBl OwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBpbnQgX19pbnN0PgogICAgc3Ry dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1 Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs IF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf X2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9j YXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgaW50IF9faW5zdD4K ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f YWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5 cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CiAg ICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxv YzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgX0Fs bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxs b2M8X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxs b2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg X19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPjsKfQojIDU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1v cnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAx IDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAg aW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkK ICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoK CgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChf VDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5 OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lf YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f ZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBf RGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg aW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJ dGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3Bv aW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29u c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu ZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9W YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5 cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190 cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5p bml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5p bml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIK ICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0 dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAg ICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAg ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29u c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0K ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBf X2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJ dGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioK ICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19s YXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf X2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0 KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hh cl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNp emVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQg KyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9m aWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7 IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxf YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9y ICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19j dXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E ZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K IyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l IHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0Rf dHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19s YXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194 LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9f eCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Np emUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2Zp bGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAg IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICgg OyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwg X194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAg ICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93 OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Vu aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5p dGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9U cCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0 dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9E KCkpOwogICAgfQojIDIyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFs aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg ICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQg PSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAg dHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3Qy LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E ZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9 CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxp emVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qp CiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAg ICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh c3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2Nv cHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQog ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXpl ZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAg ICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0 aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9y eSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRl ci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2Vf aXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1 YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lk PgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7Cgog ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9y d2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9yYWdlX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkKICAg ICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ dGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICArK19NX2l0 ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVy YXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7 CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3Rt cCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAg IH0KICAgIH07Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCgoKCm5h bWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxh dGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9i dWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIx NDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2Yo X1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6 Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAg IT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwog ICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCop MCwgMCk7Cn0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFy eV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQogIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3Jhcnlf YnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDEyMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv bWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFy eV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3Ry dWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9f cHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvaW5j bHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0 b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgoKICB0eXBlZGVmIF9UcCBl bGVtZW50X3R5cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBf X3AgPSAwKSB0aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7IH0KIyAyMDIgIi91c3IvaW5jbHVkZS9j KysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9N X3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9y eSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAx PiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMjYgIi91 c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyJgogIG9wZXJhdG9yPShhdXRv X3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnki IDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0b3I9 KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVh c2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigp IGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUq CiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29u c3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4y L21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAg ICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICBy ZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMK ICB2b2lkCiAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgICB7CiAgICAg IGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAg ICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgfQogICAgfQojIDM0NSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4g X19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHIm CiAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAg ICB7CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAg ICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw MT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7 IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1 bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBf QXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7 Cn07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewog IF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy ZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRp cGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg KiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7 CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0K fTsKIyAxNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0 IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+ CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z dCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBf X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9 OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4K ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsg fQp9OwojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMg dW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4g ewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5h cnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29s IG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194 KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25z dCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+ KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25l Z2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz dF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJl ZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGlj aXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3Vt ZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0 ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3By ZWQoX194LCBfX3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5l IGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQp CnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6 CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90 eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAg ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYg X195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vj b25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gp OwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0 eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29u c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmlu ZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0 ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gs CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy YXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9u OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZh bHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9y KCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7 CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQo Y29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVu YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJu IGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1 bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigp IHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShf QXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29u c3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh c3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3Vs dD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy ZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9m dW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7 CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoK ICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJf dG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDog X01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9f eSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9p bnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVz dWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1 bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBf VHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9U cCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9Q YWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy YXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlw ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f eC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVu Y3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVu X3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp dCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv cGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNv bnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQg KF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj b25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19w ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7 IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1 cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg cmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko X0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw KixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAo X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01f ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m dW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1Ymxp YzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBf TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3Qg eyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp KF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0 IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko X194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVu YXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZv aWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAq IF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZv aWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1Ymxp YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkg OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7 IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4g OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l bV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv cGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0 X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6Oipf X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg bWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBf QXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs YXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19w LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0 Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Jl Zl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcs dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19w ZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0Fy ZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6 Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz IGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1 bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4q X01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9 OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8 X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f dDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5s aW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkg Y29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9U cD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVm X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu bGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6 OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4o X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s aW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9B cmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9m dW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0 KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4x X3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykp CiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9m dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4o X19mKTsgfQoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMgNDQgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7 CiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJf dHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAg IHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJp bmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8 Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlw ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl cmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz aWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVz X2FsbG9jOwojIDE0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIg MwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3Rh dGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0 aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9N X3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAog ICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAg ICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAw OyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3Jl ZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkK ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBf TV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0No YXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNp emVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0K CiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwg Y29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9p c19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBf TV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3Rh dGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAg ICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsK ICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAw KQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAg ICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQq CiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21p Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsK ICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm LCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hp ZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwg Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9 CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0 YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoK ICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoK ICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXAp ICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5 cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQq IF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBf UmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9j YXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBf TV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBp dGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp ICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewog ICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19o YXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBf X3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAg ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAg ICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRv cgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAog ICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9f cG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhp cy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsg X19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAg ICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVy YXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19r MSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu KCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5 X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7 IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBz dGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRv ciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBf X2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j b3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAg eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBf X2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBf X2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lk CiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5 X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlf cmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2lj X3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv YyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7 CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAg ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAg ICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAg ICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3Ry aW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAg ICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYg X19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg ICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBf X2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7 CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlz LT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9y PShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9f cykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9 CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygp OwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25z dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAg ICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhp cy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29u c3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgp KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVy biByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBy ZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoK ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1Ymxp YzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCkt Pl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0 dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAg IHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVz aXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f Y2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJn ID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6 ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMt PnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10g KHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsg fQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAg ICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwog ICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29u c3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190 aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01f ZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUg X19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAg ICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhp cy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9 KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMt PmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBw ZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFw cGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0K CiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVw bGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19z dHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAg ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAg ICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAg IGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0g X19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3Bv cywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19u ID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp Y19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkg fHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBs ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAg ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3Ms IF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3Mg Pj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBf X24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xl bmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5h bDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1 cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9f Yyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCks IF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQo aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJl cGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRv ciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9f cCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJl dHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu c2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93 X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29s IF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg ICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwg X19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6 ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewog ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYg KF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBf X24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQi KTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0No YXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQq PigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNl X3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAg ICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01f ZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAg IF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2Rh dGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBp ZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyAr IF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0g KF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6 ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5z ZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0No YXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9f biwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg ICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewog ICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMt Pmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9y ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSAr IF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlw ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoK ICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewog ICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAg dGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9k YXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJu IF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5 cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19m aXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9N X3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5 cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5 cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3Ms CiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkK ICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsK ICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAt IF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkg LSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVw bGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25z dCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9D aGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3Jl cGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7 CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2lu KCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5 KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9f bjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJl dHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6 ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs IGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBf TV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFy VCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNf c3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAg ICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAg ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19p MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVw bGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg Y29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAg IH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxh Y2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9f azEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0 b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9f ZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29u c3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAg fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog ICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl Z2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2Nv bnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoK ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9B bGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cgog ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBf Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0 cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsK ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJt aW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0No YXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxv Y2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBs dXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3Ms IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp emVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRh KCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBy ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19j LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9f YywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9v ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90 X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg PSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19z dHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu cG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAg ICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAg IGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAg IHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVf dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBh cmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAg ICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAg fQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w YXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBj b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsK CgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u MSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAg ICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBv cGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1 cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B bGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hh clQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jo cyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAg ICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJh dG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywg X0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0 cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19z dHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAg ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBh cmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUo X19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9f cmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz LAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog ICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp IDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hh clQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAw OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJu IF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo cy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2Fw KGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMu c3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAg ICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNTQgIi91c3IvaW5jbHVkZS9j KysvMy4yL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i IDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaGVh cC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg ICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3Zh bHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAv IDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsg X19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9 ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog ICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAo X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh c3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAg ICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3Qp IC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihf X2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlz dGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGls ZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVu dCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2Zp cnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAg X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0 ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg ICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBl KDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXAp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBf RGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNv bmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxk IDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9f Zmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsK ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo aWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNv bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3Nl Y29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g KihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBf X3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAg IF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jl c3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7 CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs IF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5l IHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f bGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAg ICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1 c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5k ZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsK ICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAo KihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g MSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hv bGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRl eCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRD aGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAg ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hp bGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAg fQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192 YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK ICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9f YWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19m aXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBf X3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihf X2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs dWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg ICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9f Zmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBf X2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAg ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVu dCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYg KF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAg CgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1 c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBf VmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9f cGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNv cnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBf X2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAg ICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgog IHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9N X2J1ZmZlcjsKCgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxf bGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRp ZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0 NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZl ciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVm ZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQg X01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBf TV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1 bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6 CgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZf dCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBf VHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4g X01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcgog ICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9N X2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFs KCkpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9idWZmZXIp OwogICAgICAgIF9NX2J1ZmZlciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAgICB0aHJv dzsKICAgICAgfQogIH0KCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ryb3koX01f YnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnBy aXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30K ICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBz dGQKewojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0 IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAog ICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1 cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7 CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwg X19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAg ICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTgg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19t ZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0Nv bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpCiAg ICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAg IGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19jOwogICAgICAg IGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9f YykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkK ICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0K IyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgog ICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0 aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3Qg PT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0 ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNv bnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4g MjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f Zmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFs KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRj aChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAy OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVm YXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf UmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f dHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3Ig KCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3By ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAg IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7 CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr K19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0 KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJl ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2Fz ZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4g X19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg ICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFz dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMjkgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAg X0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9f bGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g X19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g X19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNv dW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192 YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7Cgog ICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKytfX247 CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRl cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0 ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19s YXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3Rt cChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQog ICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogICAg ICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3Ax OwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3Qx LCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19j dXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAg ICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9f cCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBf X2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAg ICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0K ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw ZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0 ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s YXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIy IF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFz dDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUo Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICByZXR1 cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog ICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJy ZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgICBpZiAoX19wcmVkaWNh dGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsr X19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm ICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFz dDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAg ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgICAg ICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgICAgIGlmICgr K19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBp ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg ICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0 MTsKICAgIH0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVu YW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBj b25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19j b3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBf X2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwog ICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAg ICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwp IHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAg ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg IGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAg ICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5 cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2Vy IF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2Jp bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQog ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3Zh bCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAg ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9 IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAg ICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYm IF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAg ICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9f aSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3Zh bCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAg ICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAg ICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dhcF9yYW5n ZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx LCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIpOwogICAg ICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAg IHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkK ICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2Zp cnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0 eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0 MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEs ICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgX1RwJiBfX29s ZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAg IAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBp ZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3Zh bHVlOwogICAgfQojIDgyNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0 eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwg Y29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODU2 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAg X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUp CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qg PT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0 SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAg ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2Zp cnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg IH0KIyA5MTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAgIHZvaWQK ICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBf R2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAg fQojIDk0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJh dG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICgg OyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv cHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy biBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19m aXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEw NzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRl cgogICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgog ICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAgIF9G b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Qg PyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lm KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAq X19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg ICAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpf X2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAg cmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlx dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdo aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9PSAqX19m aXJzdCkpCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytf X3Jlc3VsdDsKICAgIH0KIyAxMTQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7 CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0 dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkp OwogICAgfQojIDExNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAg IHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6 dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7 CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlf cHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr K19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191 bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVk KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1 cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRl cgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2Nh dGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f cmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVz dWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAg ICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICBy ZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkw ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2Fy ZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg IAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3Qs IF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAg d2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0 ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKICAgIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBf X3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICAgICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAoKICAg ICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgog ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAg ICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4K ICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50 IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hpbGUgKF9fbiAh PSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAg ICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAgIHJldHVybiBf X207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgdm9p ZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9fZmlyc3QgPT0g X19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAg IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAgICAgICAgc3dh cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk bGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxlIChfX2ZpcnN0 MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChf X2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0Misr KTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0g X19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICAgICAg X19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2Zp cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47 CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBf X21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZlcnNlKF9fbWlk ZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICAg IGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0g X19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBf RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fayA9IF9f bWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKCiAgICAg IGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUs IF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0YW5jZSBfX2Qg PSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBf X2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChfX2sgPCBfX2wp IHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisr KSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAgICAg Kl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAg ICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICBfX3AgKz0g X19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICBmb3Ig KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAg ICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag KyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAg ICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsrX19maXJzdDsK ICAgICAgfQogICAgfQojIDE1NjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSB2b2lkCiAg ICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX0Zv cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7 CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsK ICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHko X19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAg IH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRv bV9udW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBf X247CgoKCiAgICB9CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9p ZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCAr IF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2 b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh dG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf X2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19y YW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg ICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAoKytf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIgX19u ZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgICAg aWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7 CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt ZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUg KHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg ICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICAt LV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICghX19w cmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgcGFydGl0aW9uKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gX19wYXJ0aXRp b24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19p bnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl ZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBpZiAoX19sZW4gPT0gMSkKICAgICAgICBy ZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJk SXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8g Mik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRp b24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJl ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5k KTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAg ICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fc3RhYmxlX3BhcnRp dGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3Rh bmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0 MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmly c3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgICAqX19yZXN1 bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwogICAgICAgICAgfQogICAg ICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAgICAg ICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShfX2J1ZmZlciwgX19yZXN1 bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAg ZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBh ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2lu ID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJl ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9Gb3J3 YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSggX19taWRkbGUsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3Np emUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICAgIGFk dmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgICAgcmV0dXJu IF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewog ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAg ICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAgcmV0 dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw ZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBlbHNl CiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19s YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgog ICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAg ICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAgICAg ICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAgICAt LV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsr X19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFj Y2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsK ICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsrX19m aXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpf X2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0g MTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9f bmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4 dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1f X25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9f bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0 OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg ewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg ICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsK ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZv ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsr X19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3Zh bCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19p ICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7 CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJf aW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr X19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpf X2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf X2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9p bnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0 aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9 CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBf U2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9y IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg X1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChf X2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0 aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3Vu Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0g X19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9v cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsK ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s YXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3Nv cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9f bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+ CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAg ICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRy b3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsK ICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0K ICAgIH0KIyAyMTk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBf X2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQog ICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkg LyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAg ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sYXN0IC0gX19taWRkbGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5w bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9 CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBf X2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRs ZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qs IF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAg ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1Jh bmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBf X3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVw X3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAg ICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBf X3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9f Zmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rp c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmly c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs CiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf c29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0 LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXpl OwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAg IF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29f c3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0K ICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0 ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg ICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jl c3VsdCwKICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUg PSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf RGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9f Y2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g X19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0 ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXpl OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg X1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9E aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19z dGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwog ICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0 LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIs IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2Ug X19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0g X19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5r X3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0 ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAg ICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVw X3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdl X3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUs IF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVu YW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkg LyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsK ICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRf YWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg ICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRf d2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdl X3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAg ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl KF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9f bGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVu YW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz dCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0g X19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAg ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhf YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAg IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9f bWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFz dCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlu bGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBv cmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBf X2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3Rh YmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3Nv cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShi dWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl VHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNj ZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYu YmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f Zmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0 LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7 IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAg ICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7 CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlk ZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmly c3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVU eXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgaWYgKF9fcmVzdWx0X2Zp cnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hp bGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh c3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytf X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2Vf aGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgd2hpbGUgKF9f Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0 KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgw KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xh c3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVl VHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hl YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHJldHVybiBfX3Jl c3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIK ICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz dCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1 dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCgogICAgICBpZiAo X19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0 OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0g X19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsK ICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K ICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29t cCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVz dWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlz dGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9o ZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHJl dHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK CiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRp b24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1 ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz dCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3Qg PSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQog ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgbnRoX2Vs ZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAg ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsK ICAgIH0KIyAyNzY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJk SXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxl IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7 CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9 CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJf Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJz dCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xl biAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3Vu ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf X3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw ZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxl KQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2Zp cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICB9CiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7 CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9f dmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAg ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2Uo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192 YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7 CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVu ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpf X21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAg ICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9 IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVu KTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBf X3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4o X19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0Zv cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBh aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJl bmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdo dDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAg IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAo X192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNl IHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh bCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAg X19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXAp OwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVm dCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJk SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0KIyAzMDUyICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9y d2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAg IHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f aSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg IF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAg ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVy biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs dCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAg fHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4y ID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgICAgICAgICAg aXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19s ZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+ IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2Uo X19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3Rh bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg IF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xl bjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl LCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m aXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9f c2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2Zp cnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBf X3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2Zp cnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu MTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwg X19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x IC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBf RGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICBy ZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChfX2Nv bXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qs IF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj b25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9E aXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAg IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu MTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs ICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRk bGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9 IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAg ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u ZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly c3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJz dF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19z ZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEx LCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9CaWRpcmVj dGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9f bGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf X21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJf c2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAg IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAg ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkp OwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy MiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0 aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly c3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsK ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f bGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0 cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICotLV9f cmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg ICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1 bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg ICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19s YXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0 MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21l cmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf X2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAg IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAg IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xh c3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpf X2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChf X2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAg ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAg ICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFz dDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyPgog ICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAg ICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg ewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs IF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBp ZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9f bWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs IF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2Ug X19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAg ICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19s ZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7 CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5j ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl IHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAg ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7 CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1 dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p ZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBf X21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRh cHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7 CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICB9CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAg ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgICAgIGlmIChf X2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy KTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9f bGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9f bGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu ZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdl X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9 IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9f bGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsK ICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAg ICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpf X2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNl KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ug ewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAg ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2Zp cnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBf X2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m aXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21l cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxl LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg X19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+ CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAg ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNl VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9f bWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9f bGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBf X2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVm ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0 KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAg ZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg X19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf RGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlw ZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlz dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNl VHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3Jh cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwg X19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dp dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBf X2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f YnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsr X19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkK ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAg ICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0 MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5p b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAK CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7 CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg ICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpf X2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsr X19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsr X19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAg ICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19m aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlv bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK ICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJ dGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAg IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAg ICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+ CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg ICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7 CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpf X2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAg ICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJl bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg ICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICAr K19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIs IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAg c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAg IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAg ICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0 OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVy biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs dCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9y d2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0 OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fcmVzdWx0 IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX3Jl c3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJ dGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy ZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAg ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9f cmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwg Kl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+ CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0g X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAt LV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g X19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqX19p IDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7 CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsK ICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNl KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0 KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsK CiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog ICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2Nv bXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks IF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICBy ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K ICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t X19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf X2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCotLV9f aiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsK ICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2Uo X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3Qp CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoK ICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAg ICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29t cCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwg X19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0 cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJl dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9 CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0 ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkK ICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9f bGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAg ICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9J bnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoK CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkK ICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9f bGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIp KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAg fQojIDQyMDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBf Rm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1bHQg PT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7 CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0 MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj YXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5 UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEg X19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2Fy ZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0 MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0 ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2Ug ewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJz dDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAg ICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGlyZWN0aW9uYWxJ dGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg ewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk aXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19m aXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRl cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0 Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xh c3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0g X19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m aXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg X0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u YWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly ZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmly c3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIx IF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgICAgIGlmIChf X3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2Ug ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp OwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0Mikp OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUg X0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv cndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0 dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAg ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy LAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh cmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK ICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAyIDMKIyA1NyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9T X21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkg LyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBv czsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFy VCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9J bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09 IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAo KS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVf dHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXpl b2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVm W19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAg ICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190 eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9N X2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9y ICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+ X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9f bGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAg ICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAo X19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAg ICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAg ICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAg ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xl bik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAg IF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47 CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAg IHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUg PGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19j YXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChfX2Jl ZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlf cmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19iZWcg PT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJyb3IoImF0dGVtcHQg dG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKCiAgICAgICAgX1JlcCogX19y ID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsg X1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAg IGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7 CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0g X19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVy bWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBf X2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAg cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBf UmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBp ZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgp LCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAg ICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAg IF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1Jl cDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj X3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0 ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAg ICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlw ZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9k YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBf QWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9f cG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3Ms IF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u c3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25z dCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Nv bnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBucG9zLCBfX2EpLCBfX2EpCiAgICB7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh c2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkK ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRl ciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh dGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAg ICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9y KCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19h LCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo X19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhy b3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9j YXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19h KS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xl YWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f b2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXpl ID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3Ny YyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19o b3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAo KS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFs bG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVw KiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6 ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf X25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAg ICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7 CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rp c3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEo X19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYg X19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUo X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9 CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xl bmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9T X3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAg aWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkp CiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAg ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAg ICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlz LT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7 CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMg LSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg ICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBf X3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01f cmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19s ZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBp ZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAg ewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEo X19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoK ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJl Z2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19z dHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlz ID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVw KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf U19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry aW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAg ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAg ICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBz aXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmlu Zy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25z dCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9j X2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9f bWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6 ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxs b2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsK ICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAg ICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9S ZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAg ICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2Vz aXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkK ICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4 dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEp ICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lk KiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwog ICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNp dHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3At Pl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJU KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf TV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsK CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBf X21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAg ICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVz dGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0 eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01f Y2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAg OiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6 Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0 aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29w eShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAg ICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3ko X19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZk YXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAg ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi YXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6 ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBf X3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5l cmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShp dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAg ICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAg ICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFj ZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAg IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBz aXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9 IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAg ICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRh dGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAg ICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl IF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl KCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2Zf cmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4y ID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s ZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4g dGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBz aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+ IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdp bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsK CgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24p ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog ICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19j KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6 ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7 CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBf X3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwog ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsK ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2Vy dmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7 CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAg ICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0g X19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkg LSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAg ICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29m ZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBp ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9z KQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6 OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9 IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z KQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywg X19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQg PSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29u c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0g X19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBl OjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAg ICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9z ID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9 PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAg ICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChf X3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9y ICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6 ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsK ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7 CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAg ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBy ZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5 cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f cG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEo KVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBu cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQog ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3Nd KSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm aW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7 CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMt PnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgp W19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9f cywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAg ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6 ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19z aXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg PSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3Np emUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg X19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVf dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8 IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0 cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0g X19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBf X3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3Np emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w b3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsg X19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf X3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0No YXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX2xlbik7CiAgICAgIGlm ICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj b25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29z aXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9 IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf X3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N X2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19y ID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21w YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAog ICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9f dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVf dHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAg IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6 ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJh aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBp ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f cjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg X0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQq IF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVf dHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0g bWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1Ziwg X19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsK ICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzxjaGFyPjsKICBl eHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2lj X29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25z dCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAg ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFyKTsKICBleHRlcm4g dGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl YW08Y2hhcj4mLCBzdHJpbmcmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJp bmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+ JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxh dGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNp Y19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg d3N0cmluZyYpOwoKfQojIDU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDE4 MCAiYmFzaWMuaCIgMgojIDE5NyAiYmFzaWMuaCIKc3RyaW5nIGludDJzdHIoaW50IGkpOwojIDIz NSAiYmFzaWMuaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzZXJpYWw7CiMgMjU1ICJiYXNpYy5o Igpjb25zdCBzZXJpYWwgU19JTlZBTElEID0oc2VyaWFsKSgtMSk7CiMgMjcwICJiYXNpYy5oIgp0 eXBlZGVmIHVpbnQxNiB0c2VyaWFsOwojIDI4MyAiYmFzaWMuaCIKdHlwZWRlZiB1aW50MTYgcHNl cmlhbDsKIyAyOTYgImJhc2ljLmgiCnR5cGVkZWYgdWludDMyIHNzZXJpYWw7CiMgMzE3ICJiYXNp Yy5oIgpjb25zdCB0c2VyaWFsIFRTX0lOVkFMSUQgPSAodHNlcmlhbCkoLTEpOwojIDMzNyAiYmFz aWMuaCIKY29uc3QgcHNlcmlhbCBQU19JTlZBTElEID0gKHBzZXJpYWwpKC0xKTsKIyAzNTcgImJh c2ljLmgiCmNvbnN0IHNzZXJpYWwgU1NfSU5WQUxJRCA9IChzc2VyaWFsKSgtMSk7CiMgNDUwICJi YXNpYy5oIgppbmxpbmUgaW50MTYgVW5hbGlnbmVkMTYoY29uc3QgY2hhciAqcCkgeyByZXR1cm4g KGludDE2KSgoKHVpbnQpcFsxXTw8OCkrKHVpbnQpcFswXSk7IH0KaW5saW5lIGludDE2IFVuYWxp Z25lZDE2KGNvbnN0IHVjaGFyICpwKSB7IHJldHVybiAoaW50MTYpKCgodWludClwWzFdPDw4KSso dWludClwWzBdKTsgfQppbmxpbmUgaW50MTYgVW5hbGlnbmVkMTYoY29uc3Qgc2NoYXIgKnApIHsg cmV0dXJuIChpbnQxNikoKCh1aW50KXBbMV08PDgpKyh1aW50KXBbMF0pOyB9CmlubGluZSBpbnQz MiBVbmFsaWduZWQzMihjb25zdCBjaGFyICpwKSB7IHJldHVybiAoKCgoKHBbM10gPDwgOCkgKyBw WzJdKSA8PCA4KSArIHBbMV0pIDw8IDgpICsgcFswXTsgfQppbmxpbmUgaW50MzIgVW5hbGlnbmVk MzIoY29uc3QgdWNoYXIgKnApIHsgcmV0dXJuICgoKCgocFszXSA8PCA4KSArIHBbMl0pIDw8IDgp ICsgcFsxXSkgPDwgOCkgKyBwWzBdOyB9CmlubGluZSBpbnQzMiBVbmFsaWduZWQzMihjb25zdCBz Y2hhciAqcCkgeyByZXR1cm4gKCgoKChwWzNdIDw8IDgpICsgcFsyXSkgPDwgOCkgKyBwWzFdKSA8 PCA4KSArIHBbMF07IH0KIyA0NjggImJhc2ljLmgiCnR5cGVkZWYgY29uc3Qgdm9pZCAqIChjb2Rl KSgpOwp0eXBlZGVmIGNvbnN0IHZvaWQgKiAoKmNvZGVwdHIpKCk7CiMgNDg5ICJiYXNpYy5oIgpj b25zdCBpbnQgQ0hBUlNfUEVSX0NFTEw9NDsKIyA1MTIgImJhc2ljLmgiCmlubGluZSB1bnNpZ25l ZCBpbnQgTEVOX1RPX0NFTExTKHVuc2lnbmVkIGludCB4KQp7CiAgICAgICAgcmV0dXJuICggeCAr IChDSEFSU19QRVJfQ0VMTC0xKSApIC8gQ0hBUlNfUEVSX0NFTEw7Cn0KIyAxMyAiYWxsLmgiIDIK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zZWFyY2guaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z ZWFyY2guaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NlYXJjaC5oIiAyIDMKCmV4dGVybiAi QyIgewoKCgoKCgpzdHJ1Y3QgcWVsZW0KICB7CiAgICBzdHJ1Y3QgcWVsZW0gKnFfZm9ydzsKICAg IHN0cnVjdCBxZWxlbSAqcV9iYWNrOwogICAgY2hhciBxX2RhdGFbMV07CiAgfTsKCgoKCmV4dGVy biB2b2lkIGluc3F1ZSAodm9pZCAqX19lbGVtLCB2b2lkICpfX3ByZXYpIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIHJlbXF1ZSAodm9pZCAqX19lbGVtKSB0aHJvdyAoKTsKIyA2MyAiL3Vzci9pbmNs dWRlL3NlYXJjaC5oIiAzCnR5cGVkZWYgZW51bQogIHsKICAgIEZJTkQsCiAgICBFTlRFUgogIH0K QUNUSU9OOwoKdHlwZWRlZiBzdHJ1Y3QgZW50cnkKICB7CiAgICBjaGFyICprZXk7CiAgICB2b2lk ICpkYXRhOwogIH0KRU5UUlk7CgoKc3RydWN0IF9FTlRSWTsKIyA4OCAiL3Vzci9pbmNsdWRlL3Nl YXJjaC5oIiAzCmV4dGVybiBFTlRSWSAqaHNlYXJjaCAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19h Y3Rpb24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaGNyZWF0ZSAoc2l6ZV90IF9fbmVsKSB0aHJv dyAoKTsKCgpleHRlcm4gdm9pZCBoZGVzdHJveSAodm9pZCkgdGhyb3cgKCk7CgoKCnN0cnVjdCBo c2VhcmNoX2RhdGEKICB7CiAgICBzdHJ1Y3QgX0VOVFJZICp0YWJsZTsKICAgIHVuc2lnbmVkIGlu dCBzaXplOwogICAgdW5zaWduZWQgaW50IGZpbGxlZDsKICB9OwoKCgpleHRlcm4gaW50IGhzZWFy Y2hfciAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19hY3Rpb24sIEVOVFJZICoqX19yZXR2YWwsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHNlYXJjaF9kYXRhICpfX2h0YWIpIHRocm93ICgp OwpleHRlcm4gaW50IGhjcmVhdGVfciAoc2l6ZV90IF9fbmVsLCBzdHJ1Y3QgaHNlYXJjaF9kYXRh ICpfX2h0YWIpIHRocm93ICgpOwpleHRlcm4gdm9pZCBoZGVzdHJveV9yIChzdHJ1Y3QgaHNlYXJj aF9kYXRhICpfX2h0YWIpIHRocm93ICgpOwojIDExOSAiL3Vzci9pbmNsdWRlL3NlYXJjaC5oIiAz CnR5cGVkZWYgZW51bQp7CiAgcHJlb3JkZXIsCiAgcG9zdG9yZGVyLAogIGVuZG9yZGVyLAogIGxl YWYKfQpWSVNJVDsKCgoKZXh0ZXJuIHZvaWQgKnRzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXks IHZvaWQgKipfX3Jvb3RwLAogICAgICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2Nv bXBhcik7CgoKCmV4dGVybiB2b2lkICp0ZmluZCAoX19jb25zdCB2b2lkICpfX2tleSwgdm9pZCAq X19jb25zdCAqX19yb290cCwKICAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29t cGFyKTsKCgpleHRlcm4gdm9pZCAqdGRlbGV0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f a2V5LAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19yb290cCwKICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgp0eXBlZGVmIHZv aWQgKCpfX2FjdGlvbl9mbl90KSAoX19jb25zdCB2b2lkICpfX25vZGVwLCBWSVNJVCBfX3ZhbHVl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGV2ZWwpOwoKCgoKZXh0ZXJu IHZvaWQgdHdhbGsgKF9fY29uc3Qgdm9pZCAqX19yb290LCBfX2FjdGlvbl9mbl90IF9fYWN0aW9u KTsKCgoKCnR5cGVkZWYgdm9pZCAoKl9fZnJlZV9mbl90KSAodm9pZCAqX19ub2RlcCk7CgoKZXh0 ZXJuIHZvaWQgdGRlc3Ryb3kgKHZvaWQgKl9fcm9vdCwgX19mcmVlX2ZuX3QgX19mcmVlZmN0KTsK CgoKCgpleHRlcm4gdm9pZCAqbGZpbmQgKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9p ZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19ubWVtYiwgc2l6ZV90IF9f c2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkICpsc2VhcmNoIChf X2NvbnN0IHZvaWQgKl9fa2V5LCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKl9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK fQojIDE5ICJhbGwuaCIgMgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMSAzCiMg NDYgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s aW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL21hbGxv Yy5oIiAyIDMKIyAxMDYgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwpleHRlcm4gIkMiIHsKCgoK ZXh0ZXJuIHZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1i LCBzaXplX3QgX19zaXplKSB0aHJvdyAoKQogICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKZXh0ZXJuIHZvaWQgKiByZWFsbG9jICh2b2lkICogX19wdHIsIHNpemVfdCBfX3Np emUpIHRocm93ICgpCgogICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgpleHRl cm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGNmcmVl ICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWVtYWxpZ24gKHNpemVf dCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiB2 YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f KSk7CgoKCmV4dGVybiB2b2lkICogcHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkKICAg ICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkICogKCpfX21v cmVjb3JlKSAocHRyZGlmZl90IF9fc2l6ZSk7CgoKZXh0ZXJuIHZvaWQgKiBfX2RlZmF1bHRfbW9y ZWNvcmUgKHB0cmRpZmZfdCBfX3NpemUpIHRocm93ICgpCiAgICAgICBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKCgpzdHJ1Y3QgbWFsbGluZm8gewogIGludCBhcmVuYTsKICBpbnQgb3Jk YmxrczsKICBpbnQgc21ibGtzOwogIGludCBoYmxrczsKICBpbnQgaGJsa2hkOwogIGludCB1c21i bGtzOwogIGludCBmc21ibGtzOwogIGludCB1b3JkYmxrczsKICBpbnQgZm9yZGJsa3M7CiAgaW50 IGtlZXBjb3N0Owp9OwoKCmV4dGVybiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gKHZvaWQpIHRo cm93ICgpOwojIDE4NyAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAzCmV4dGVybiBpbnQgbWFsbG9w dCAoaW50IF9fcGFyYW0sIGludCBfX3ZhbCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWFsbG9j X3RyaW0gKHNpemVfdCBfX3BhZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWFsbG9jX3Vz YWJsZV9zaXplICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIG1hbGxvY19z dGF0cyAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBtYWxsb2NfZ2V0X3N0YXRlICh2 b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYWxsb2Nfc2V0X3N0YXRlICh2b2lkICogX19w dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKCpfX21hbGxvY19pbml0aWFsaXplX2hvb2sp ICh2b2lkKTsKCmV4dGVybiB2b2lkICgqX19mcmVlX2hvb2spICh2b2lkICogX19wdHIsIF9fY29u c3Qgdm9pZCAqKTsKCmV4dGVybiB2b2lkICogKCpfX21hbGxvY19ob29rKSAoc2l6ZV90IF9fc2l6 ZSwgX19jb25zdCB2b2lkICopOwoKZXh0ZXJuIHZvaWQgKiAoKl9fcmVhbGxvY19ob29rKSAodm9p ZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLCBfX2NvbnN0IHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQg KiAoKl9fbWVtYWxpZ25faG9vaykgKHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSwg X19jb25zdCB2b2lkICopOwoKCmV4dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSAo dm9pZCk7CgoKZXh0ZXJuIHZvaWQgX19tYWxsb2NfY2hlY2tfaW5pdCAodm9pZCkgdGhyb3cgKCk7 CgoKc3RydWN0IG1hbGxvY19zdGF0ZTsKdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlICptc3Rh dGU7CgpleHRlcm4gbXN0YXRlIF9pbnRfbmV3X2FyZW5hIChzaXplX3QgX19pbmlfc2l6ZSkgdGhy b3cgKCk7CmV4dGVybiB2b2lkICogX2ludF9tYWxsb2MgKG1zdGF0ZSBfX20sIHNpemVfdCBfX3Np emUpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfaW50X2ZyZWUgKG1zdGF0ZSBfX20sIHZvaWQgKiBf X3B0cikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICogX2ludF9yZWFsbG9jIChtc3RhdGUgX19tLCB2 b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogX2lu dF9tZW1hbGlnbiAobXN0YXRlIF9fbSwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXpl KSB0aHJvdyAoKTsKCgoKfTsKIyAyNiAiYWxsLmgiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz ODYtbGludXgvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjcgImFsbC5oIiAyCgoKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9j KysvMy4yL2lvc3RyZWFtIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAx IDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pb3MiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoK CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xv Y2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1 ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9s b2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAog IF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwK ICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAg X19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAs CiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9Owoj IDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3Iv aW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2lu dDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBj aGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1v bl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9n cm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAg Y2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3By ZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7Cgog IGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5f c2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBf Ynlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5 X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9w b3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCn07CgoKCgoKZXh0ZXJuIGNoYXIg KnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93 ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwoK CiMgMTQ4ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKdHlwZWRlZiBfX2xvY2FsZV90IGxvY2Fs ZV90OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFz aywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi IDMKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhy b3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChfX2xvY2FsZV90IF9f ZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Ns b2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcg OjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvaW5jbHVkZS9j KysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2xhbmdpbmZvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgi IDMKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5s X2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1l LCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQg X19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2Ug KG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdp bmZvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91 c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNs dWRlL2xhbmdpbmZvLmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwg MTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlf NSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8z LAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoK ICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82 LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJN T05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1P Tl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgog IE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgog IERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAg X19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1U LAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVf RVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRB WV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9O TF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAog IF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoK ICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FC TU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAg X05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJN T05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBf TkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9O TF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9O TF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwK CiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1U X0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElH SVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dF RUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVL LAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBf TkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQs CgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJ TUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwg KDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9O TF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVf SU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05M X0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdI VFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBf TkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwK ICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9O TF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENf Q09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwg KDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVf VE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZ UEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVf R0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBf TkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVT RVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBF X1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZT RVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwK ICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05M X0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQ RV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5E SUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRT OF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19M RU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAog IF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxf Q1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBF X0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJ R0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQw X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwK ICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05M X0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQ RV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VU RElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU MV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0Ms CiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9O TF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZ UEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RS QU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZ UEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxf Q1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJ TkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBF X1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9F WFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01B UF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAg X05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VY VFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9N QVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChf X0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgog IF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01P Tl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoK CgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BS RUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgog IF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NO LAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoK ICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9f SU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05f U0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9N T05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNf RElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RV T19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05M X01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllf U1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRB UllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BS RUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05F VEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBf TkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9O X1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZ X1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVU QVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9N T05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dD LAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19E RUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElY Q0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAg PSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1B TF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklD X0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01F U1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19O T1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoK ICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxf UEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAg X05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05B TUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBf TkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VU LAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENf QUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05M X0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9B RERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERS RVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVT U19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RF Uk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxf TlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RF TEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9O TF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05M X1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VS RU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAog IF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9O TF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8 ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05f QUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJ T05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05f RkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05f VEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklD QVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBf TkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAg X05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VU LAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNy L2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0g X19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVy biBjaGFyICpubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9 CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvaWNv bnYuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4dGVybiAiQyIg ewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGljb252X29wZW4g KF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29kZSkKICAgICB0 aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAqKl9f cmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f b3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19vdXRieXRl c2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkgdGhyb3cgKCk7 Cgp9CiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVk ZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4dCAoX19j b25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChf X2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRo cm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5h bWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9fY29uc3Qg Y2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0 ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0 dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lkMiwKICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25zdCBjaGFy ICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAo X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25n IGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChf X2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5k dGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4g Y2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19j b2Rlc2V0KSB0aHJvdyAoKTsKIyAxMjAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKfQojIDQw ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoK CgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2Fs ZSkgX191c2Vsb2NhbGU7Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9fbG9jYWxlX3Qg X19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZl cnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2Zt dCwKCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xv YywgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVf Y3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwojIDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2 LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYgKF9f cHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQs IF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQs IF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu dXgvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xk KTsKCgoKCiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0 eXBlIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy biAiQyIgewojIDQ4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwplbnVtCnsKICBfSVN1cHBlciA9 ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lT bG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkp LAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikp ID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEg PDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4 KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1 KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgo MSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8 IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9 ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lT Y250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkp LAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgx MCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6 ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0 ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9pZCkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipf X2N0eXBlX3RvbG93ZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7 CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKIyA5NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDMKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz YWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVy IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBl ciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21hc2spIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3Vw cGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwoj IDI0NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtX2wgKGludCwg X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYV9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50 X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdF9sIChpbnQs IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2VfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp OwpleHRlcm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp OwojIDMyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1ZGUvYysr LzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKbmFt ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2lu ZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2lu ZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2lu ZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNp bmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0 cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5j dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3Mg bG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz cHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9D aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9D aGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBl X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVt cGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hh cl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1l OwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+ CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFy LCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwg bWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg IGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5j dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1l X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+ CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVf cHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg IGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1 dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNs YXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0g ZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jh c2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xh c3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29y eTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAg IGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9m YWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAg IGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVn b3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0g MUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAg IHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBj YXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVz c2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8 IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRpbWUgfCBtb25ldGFyeSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3co KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxp Y2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxl JiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShj b25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQp OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2Fs ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNv bnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7 CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmlu ZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBj b25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29u c3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxl JiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09 KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25z dDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0 YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwq IF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9J bXBsKiBfU19nbG9iYWw7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2NhdGVnb3Jp ZXNfc2l6ZSA9IDY7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVn b3JpZXNfc2l6ZSA9IDY7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19jYXRlZ29yaWVz W19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9J bXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUo KQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoK ICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsK CiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9j YWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1w bAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFz cyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp ZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0 KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9N X3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNf c2l6ZTsKCiAgICBjaGFyKiBfTV9uYW1lc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmll c19zaXplXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtd OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAg IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0 aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0 IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9j YWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6 OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lk CiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3Jl ZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2Uo KSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5j ZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0 ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0K ICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBj aGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0lt cGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3Bl cmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVf bmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBf X2kgPSAwOwogICAgICAgICAgIF9fcmV0ICYmIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9T X2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAgICAgICAgKytfX2kpCiAgICAgICAgX19y ZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9uYW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3Jp ZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRl Z29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAog ICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAg ICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoK ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01f aW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0Zh Y2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg ICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAg ewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBf TV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNp emVfdCBfX2kgPSAwOwogICAgICAgICAgIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4 dHJhX2NhdGVnb3JpZXNfc2l6ZTsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtd IF9NX2ltcGwtPl9NX25hbWVzW19faV07CiAgICAgICAgICBjaGFyKiBfX25ldyA9IG5ldyBjaGFy WzJdOwogICAgICAgICAgc3RyY3B5KF9fbmV3LCAiKiIpOwogICAgICAgICAgX01faW1wbC0+X01f bmFtZXNbX19pXSA9IF9fbmV3OwogICAgICAgIH0KICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFj ZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xh c3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJv dGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCgogICAgc3RhdGlj IGNoYXIgX1NfY19uYW1lWzJdOwoKICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZz ID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9p ZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciog X19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSAwKTsKCiAgICBz dGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9j KTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93 KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFj ZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsK ICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFz cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0 KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmll bmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CgoKCgogICAg bXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1NfaGln aHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNvbnN0 IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBpbmxpbmUgc2l6ZV90CiAgICBfTV9p ZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5kZXgpCiAgICAgICAgX01faW5kZXggPSAx ICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIsIDEpOwogICAgICByZXR1cm4gX01f aW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNv bnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYg X19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgog IGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoK ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv c19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+ KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz CiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl dHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRm bGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh dGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUg X0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZs YWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10 ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip CiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg b3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y fihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2Fz dDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVf ZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lv c19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v ZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19P cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9f YSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAg b3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVy biBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4o X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1v ZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9 CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2Es IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxp bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf T3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19P cGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUg eyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRl CiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1 cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4o X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUg X19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2Fz dDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lv c3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7 IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8 aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lv c3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7 IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2Es IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGlu ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3Rh dGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0 YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl KH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9z X3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1Ymxp YzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1Ymxp YzoKCgogICAgICBleHBsaWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRo cm93KCk7CgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2 YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVb X01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdz OwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19m bGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhl ZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVu dGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jh c2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3Mg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0 YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3Rm aWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2Vm aWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9f aW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9z dGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh Z3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRl KF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJp dCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlv c3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBv cGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19m bGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShf X2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBv cGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBp biA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v ZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qg b3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0 eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVn ID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7 CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyOSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAg ICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZtdF9ldmVudAog ICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFz ZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sg X19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVj aXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAg ICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOwoK CgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCog X01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQg X01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFj a19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAg ICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2Ni KSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAg ICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZj b3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0 dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291bnQsIC0xKTsgfQogICAgfTsKCiAgICAg X0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxi YWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJh Y2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3Jk OwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9p d29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBfTV93b3JkX3plcm87CgoKICAgIHN0YXRp YyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0gODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93 b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGludCBfTV93b3JkX3NpemU7CiAgICBfV29y ZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7 CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAg cHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3Nf YmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMg dm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBp bnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3Rk aW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1 cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9f Zm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2Zs YWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRm bGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19v bGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10Zmws IGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsK ICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBf X21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVu c2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGlu ZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247 IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVj KQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9w cmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUg c3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlu bGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAg c3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAg ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3Rk aW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2Nh bGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVy biBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7 CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRz JiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAg PyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29y ZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkK ICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAg ICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsK ICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7Cgog IHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNv bnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jh c2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFz ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAg ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3Nf YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2lu dCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3Mo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7 CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3Mp OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2Up OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsK ICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVm KTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5h bChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJu YWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAg ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQp OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6 OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgs IGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf YmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK CiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jh c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5j bHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVm IiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1l c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp bnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9z X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90 eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5 cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0 YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFy X3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hh cl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNo YXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVy YXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1i dWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFt c2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0 c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw ZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoK CgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoK ICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmll ZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01f aW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9v dXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01f b3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2Nh bGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoK ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90 eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1 cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9N X3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKCiAgICAg IHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJh Y2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2Vu ZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9TX3BiYWNrX3Np emUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9p bl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7 CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0 aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAg ICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2 b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNr X2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBzaXplX3QgX19vZmZfY3VyID0gX01faW5f Y3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAg ICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAg ICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAg ICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2Zm X2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGco X01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAg ICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNr X2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVs bDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9 CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7 CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciAr PSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAg IF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9z dHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19u KQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01f b3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQog ICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291 dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoK ICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247 CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZf c2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9N X291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9i dWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9v dXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2Vu ZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9 CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAg ewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAw OwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl OjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAg fQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAg ICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5p bWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUK ICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2lu aXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAg ICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAg ICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVy biB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVr b2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6 Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7 IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z X2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9 CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgog ICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNp emUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQp CiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUg LSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9 IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVu IC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQog ICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAg cmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAg ICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg cmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQog ICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBp bnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAg ICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01f aW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50 X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRo aXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3Ry ZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAg IHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAg ICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRj KCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBz dHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3Rl ZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVm X3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAgX01fYnVmX3VuaWZpZWQoZmFs c2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLAogICAgICBfTV9v dXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9tb2RlKGlv c19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9i dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5k X3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNo YXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAg IGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAg ICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoK ICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAg ICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0 LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsK ICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsK ICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4 dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsK ICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBf TV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVy biBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyBy ZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9N X291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3Bi ZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291 dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAo IShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAg IF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0 dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAg IF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0g X19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2 aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1Zihj aGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0 dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAog ICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl OjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZp cnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl dHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBz eW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93 bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNn ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90 eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg fQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBp bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVv ZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOwog ICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9p bl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAg IHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1 cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZp ZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3Vy OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1 YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigp KQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0 cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJh aXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA0 ODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0ZToKICAgICAg YmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IH07CgogICAgICBfX3N0 cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsg cmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYg KF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAg Y2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFj a2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wg X190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9v bCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0 cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0 ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9f cmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1 ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3Vy X21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N X2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFj a2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUg X19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAq X01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAg IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5 cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChf X3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5f ZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAg ICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAg ICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAg ICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAg aWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j ID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRf dHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAg ICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1 Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBf X3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVt YWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3Ms IF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3Mg Kz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAg ICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlw ZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVh bWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAg ICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQog IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAg ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9f c2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9f dGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAg ICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2J1ZnNpemUgIT0gMCAmJiBfX3NiaW4tPmdw dHIoKSAhPSBfX251bGwKICAgICAgICAgICAgICAgICAgJiYgX19zYmluLT5ncHRyKCkgKyBfX2J1 ZnNpemUgPD0gX19zYmluLT5lZ3B0cigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7 CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIF9f c2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0 cmN0ICE9IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX3NpemUgPQogICAgICAgICAgICAgICAgICAgIF9fc2Jpbi0+X01fYnVmX3Np emVfb3B0ID4gMCA/IF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0IDogMTsKICAgICAgICAgICAgICAg ICAgX0NoYXJUKiBfX2J1ZiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fc2l6ZSkpOwogICAgICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fY2hhcnNyZWFkID0gX19zYmluLT5zZ2V0bihfX2J1ZiwgX19z aXplKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fYnVmLCBf X2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAg ICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFkKQogICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9p bnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigpKSkKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg ICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hh cj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPGNoYXI+Kik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFt YnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5 X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+ KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwoKfQoj IDQ5OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2lj X2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAx IDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIg MwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJh dG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJs aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0 cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBz dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBtdXRhYmxlIHN0cmVh bWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBfTV9jOwoKICAgIHB1YmxpYzoKICAg ICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKDApLCBfTV9j KHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJl YW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2Mo dHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFt YnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYyh0cmFpdHNf dHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25z dAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9NX2dldCgpKTsgfQoK ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBp ZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c2J1bXBjKCks IF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9N X2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpc3RyZWFtYnVmX2l0 ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9NX3NidWYKICAgICAgICAgICAgJiYg dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lb2YpKQogICAgICAg ICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAg ICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25z dCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGhpc2Vv ZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQoKSwgX19lb2YpOwogICAgICAgIGJv b2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2Yp OwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAh X19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01f Z2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz X3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0ID0gX19lb2Y7CiAgICAgICAgaWYg KF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3Jl dCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0g MDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz PiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19h LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0 cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJh dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk LCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBw cml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWls ZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihv c3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwg X01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFt YnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCgh X01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0o X0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsg fQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3Qg dGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxl ZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwg X1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KfQojIDQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAz CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1 ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu dXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUu aCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoKCgojIDY0ICIvdXNyL2luY2x1 ZGUvd2N0eXBlLmgiIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVfdDsKCiMg ODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVtCnsKICBfX0lTd3VwcGVyID0gMCwKICBf X0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwKICBfX0lTd2RpZ2l0ID0gMywKICBfX0lT d3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAgX19JU3dwcmludCA9IDYsCiAgX19JU3dn cmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19JU3djbnRybCA9IDksCiAgX19JU3dwdW5j dCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lTd3VwcGVyID0gKChfX0lTd3VwcGVyKSA8 IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpIDw8IDI0KSA6ICgoX19JU3d1cHBlcikg PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIp IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDgpIDogKGludCkgKCgxVUwg PDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lTd2xvd2VyID0gKChfX0lTd2xvd2VyKSA8 IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpIDw8IDI0KSA6ICgoX19JU3dsb3dlcikg PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIp IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDgpIDogKGludCkgKCgxVUwg PDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2FscGhhID0gKChfX0lTd2FscGhhKSA8 IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8IDI0KSA6ICgoX19JU3dhbHBoYSkg PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEp IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDgpIDogKGludCkgKCgxVUwg PDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lTd2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8 IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3dkaWdpdCkg PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQp IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwg PDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQp IDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3d4ZGln aXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4 ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQp ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3 c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgMjQpIDogKChfX0lT d3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCA4KSA6ICgoX19J U3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkpKSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3 cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgMjQpIDogKChfX0lT d3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCA4KSA6ICgoX19J U3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkpKSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3 Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgMjQpIDogKChfX0lT d2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19J U3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkpKSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3 YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgMjQpIDogKChfX0lT d2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCA4KSA6ICgoX19J U3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkpKSwKICBfSVN3Y250cmwgPSAoKF9fSVN3 Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgMjQpIDogKChfX0lT d2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCA4KSA6ICgoX19J U3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkpKSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3 cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgMjQpIDogKChfX0lT d3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCA4KSA6ICgoX19J U3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkpKSwKICBfSVN3YWxudW0gPSAoKF9fSVN3 YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgMjQpIDogKChfX0lT d2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCA4KSA6ICgoX19J U3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50 KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoK CgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3 Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2lu dF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dz cGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2lu dF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3dj KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cg KCk7CiMgMTg2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlw ZSAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dj dHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgoKCgp0 eXBlZGVmIF9fY29uc3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKCgoKCgpleHRlcm4gd2ludF90 IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBl ciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCn0KIyAyMjggIi91c3IvaW5jbHVkZS93Y3R5cGUu aCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBj aGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2lu dF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQg aXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh bGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0X2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dn cmFwaF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGlzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3RfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFj ZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGlzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmtfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3Qgd2N0 eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAg ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBl X3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIHdpbnRfdCB0b3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2Nh bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFuc19sIChf X2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBf X2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo cm93ICgpOwoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n IDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1 c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsK ICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFw aDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dw cmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjpp c3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5n IDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1 c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzYgIi91c3IvaW5j bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5 cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOwoKCgogICAgdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBf SVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0 aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGln aXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3Qg bWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNn cmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMg Y29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0g PSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9m YWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAg ICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog ICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFz ayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9f dmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25z dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f c2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBw ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihf X2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNo YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsg fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xv d2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0 IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo YXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywg X19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNo YXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9f ZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBf X2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93 KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw bGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9j YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0 cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20s IGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq IF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIo Y2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9f ZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFy X3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0 KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog ICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fi c3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj aGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy IF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+ OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5 cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj aGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j YWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7 CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsK CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29u c3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEp OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJv b2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg ICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29s IF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlu bGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxp bmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0 OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy biBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFi bGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1 YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5 cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj b25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNl X2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8 PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl PHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6 CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3Qg X19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xv Yywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBl CiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAg dmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyht YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93 KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAg ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1w bGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y L2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9j KysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxj aGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3RhYmxl W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNvbnN0IGNoYXIq CiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp Z2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAg ICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cr KyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46 OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp Z2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgIShf TV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCiAgICAg ICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo YXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIq IF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAm JiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9 IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4K ICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAg ZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVm cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1l KCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5 cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0 eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVm cyk7CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0 X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAg IHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0 YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJu VCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAg dHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0 ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29u c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l eHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAog ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICBy ZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25l eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0 KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f dW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3Vs dAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t LAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAg IHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5k LCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQs IF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRo cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAog ICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5k b19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVf dHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNv bnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAg ICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAg ICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh Y2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3Rf YmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmly dHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5f dHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90 eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co KSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0 IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0 YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29u c3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZp cnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07 CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fi c3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVk ZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5 cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKICAgIHB1YmxpYzoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVf dCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBf RXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3Vs dAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGlu dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJv dygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0 aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5 cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0 ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQK ICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAg ICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoK ICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAg IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4K ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAg dHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90 eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs aWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAg IGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90 eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBf X3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSog X190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z dCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190 bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0 IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNv bnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3Rh dGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25z dCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBs YXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBw dWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pgog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBlOwogICAg ICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRl X3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK ICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm IF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u ZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp cnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1 YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp cnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k ZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+ CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNv bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBf RXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMSAz CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jb2RlY3Z0X3NwZWNp YWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRzCiAgewogIHB1YmxpYzoKCgoKICAg IHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMg Y29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hhciBfTV9pbnRfZW5jW19TX21heF9z aXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3NpemVdOwoKCiAgICBfX2Rlc2NfdHlw ZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291dF9kZXNjOwoKCiAgICBpbnQgX01f ZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1YmxpYzoKICAgIGV4cGxpY2l0IF9f ZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRf Ym9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1lbXNldChfTV9pbnRfZW5jLCAwLCBf U19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAg ICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0IGNoYXIqIF9faW50LCBjb25zdCBj aGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pYm9tID0gMCwgaW50 IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRf Ym9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19p bnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX2V4dCwgX1NfbWF4 X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRzKGNvbnN0IF9fZW5jX3RyYWl0cyYg X19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKQogICAgewogICAgICBzdHJuY3B5 KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNw eShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4 dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50 X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAgb3BlcmF0b3I9KGNvbnN0IF9fZW5j X3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01f aW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9N X2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5fZGVzYyA9IDA7CiAgICAgIF9NX291 dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9N X2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog ICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRl cnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChfTV9pbl9kZXNjICYmIF9NX2luX2Rl c2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01faW5fZGVzYyk7CiAgICAgIGlmIChf TV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikKICAgICAgICBpY29udl9jbG9zZShf TV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01faW5pdCgpCiAgICB7CiAgICAgIGNv bnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAg ICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9kZXNjID0gaWNv bnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAgICAgIGlmIChfTV9pbl9kZXNj ID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGlj b252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgICAgaWYgKCFfTV9v dXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRfZGVzYyA9IGljb252X29wZW4oX01f ZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAoX01fb3V0X2Rlc2MgPT0gX19lcnIp CiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgb3V0cHV0 IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBfTV9n b29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9j YXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3QgPSBfTV9pbl9kZXNjICYmIF9NX2lu X2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVz YyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0KCiAgICBjb25zdCBfX2Rlc2Nf dHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9pbl9kZXNj OyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKQog ICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50CiAgICBfTV9nZXRfZXh0ZXJuYWxf Ym9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAgICBpbnQKICAgIF9NX2dldF9pbnRl cm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsgfQoKICAgIGNvbnN0IGNoYXIqCiAg ICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2ludF9lbmM7IH0KCiAgICBj b25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9leHRf ZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F eHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0 cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu VCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0 X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7 CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNf dHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzOjpfX2Rlc2NfdHlw ZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgX19lbmNfdHlwZTsKCgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJu X3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBfX2VuYywgc2l6ZV90IF9fcmVmcyA9 IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90 eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg ZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAg ICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3Qg dGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29u c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0 ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0 IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgbG9jYWxlOjppZAog ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OmlkOwoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6ZV90CiAgICBfX2ljb252X2FkYXB0 b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCop LAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwgY2hhcioqIF9faW5idWYsIHNpemVf dCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNoYXIqKiBfX291dGJ1Ziwgc2l6ZV90 KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9fY2QsIChfVClfX2luYnVmLCBfX2lu Ynl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50 ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29k ZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fb3V0KHN0YXRl X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgY29u c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l eHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVz dWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29v ZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUg X19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0 ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0 aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mYnl0ZXMgPSBf X2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVf dCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190 Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hh ciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIq IF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9f aW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9f aW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zy b21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0 YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5 cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNf Y2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxp bnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAg ICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAg ICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9t LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmJ5dGVzLCAmX19j dG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJu X3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0 PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9y KGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihf X2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVy bl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsK ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRf Y2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3Rv X25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAg ICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6 ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29k ZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190 cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq IF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFz ZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAg ICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAg Y29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3Io KTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlw ZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBf X3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o X190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpf X2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90 KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBf X3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBj b2RlY3Z0X2Jhc2U6Om5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkK ICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6 ZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVz dWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg X19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAg ICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRl Ll9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVz Y190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9 IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBf X2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVu ID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBz aXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90 IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBj aGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hh ciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQg X19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAo X19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9f ZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0g c3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5f dHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRp Y19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRz PGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAg ICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAg ICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zy b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0 bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5 cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNo YXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGlj b252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAg ICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9t KTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBl Kj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAg ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f ZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2Fz dDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25l eHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAg ICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJy b3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAg ICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNv ZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYg KHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNp emVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBi b29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAg ICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5n dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7 IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsg fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg IGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzMzUgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAyIDMKIyA0MjYgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBfX251bV9iYXNl CiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAg ICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsgMTAsCiAg ICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAgIH07CgoK CiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNlJiBfX2lv LCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3Nf YmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGlj IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlw ZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAg ICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1 ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoK ICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl OjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAg ICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1w dW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hh cl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBl CiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUo KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19k ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoK ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAg ICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAg ICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7 IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBk b19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAg ICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBf X251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjpp ZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8Y2hhcj46 On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxjaGFyPjo6 X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTw+ CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZv aWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1 bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9j YWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9f cywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAg ICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7 CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5 bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7 IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jh c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk OwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192 KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0 KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0 KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQog ICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYg X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkg eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAgICAgICAg ICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4 dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0 YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25zdDsKCgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0 JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg ICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxvbmcmKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGRv dWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAg ICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6aWQ7CiMgNzIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBj bGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog ICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6 ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWdu ZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg X19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAg ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf dHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1 dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBs b25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9f ZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB2b2lk KiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxs LCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU PgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQoaXRlcl90eXBlLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9pbnQoaXRlcl90 eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAg aXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8s IGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICAgIGludCBf X2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5faW50KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg ICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2lu c2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAg dmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBf X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf dHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwg bG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcg bG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f ZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh clQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2Nf bG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2Nf bG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2NhbGUgX19jbG9j LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg eyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgfQoKICAg ICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBf X2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9f aGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwg X19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0 IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChj b25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAgICBfTV9jb21w YXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAgc2l6ZV90CiAg ICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0OwoK ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAgICB7IF9TX2Rl c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50 CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hp MSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9f aGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3Jt KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU KiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv Y2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAg Y29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0 OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9y bShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBp bnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCosIGNvbnN0 IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPHdj aGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpIGNv bnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5h bWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVm cykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0 ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7 CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnlu YW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVu dW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxv Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7 CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJU KiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9j X2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBj b25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVf ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29u c3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0 ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1h dDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFy VCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hh clQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0No YXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25z dCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAg IGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw NzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAg Y29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhf YTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9h MDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQq IF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNv bnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ex MjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBf X3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUg X19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIHZvaWQK ICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCog X19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lk CiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAg IHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFd ID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVf Zm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190 aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFf Zm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiog X19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAg X19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1l X2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0 WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1l X2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hh clQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwog ICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsK ICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7 CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3 OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0No YXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2Ex OwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9k YXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9 IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlz WzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25z dCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0g X01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19t b250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsK ICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBf TV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21v bnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5Owog ICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBf TV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9u dGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAg ICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBf TV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAg X19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250 aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250 aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7 CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBd ID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAg ICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsK CgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j bG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv Y2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25z dCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBs YXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVw dW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGlt ZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRt KikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVu Y3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg IF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxl IF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+ OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1l em9uZXNbMTRdOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL3Rp bWVfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9i aXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX190 aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKICAgIDogbG9jYWxl OjpmYWNldChfX3JlZnMpCiAgICB7CgoKCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGltZXB1bmN0PF9DaGFy VD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQogICAgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykKICAgIHsKCgoKCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0 KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGltZXB1 bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CgoKCgogICAgICBfU19kZXN0cm95X2Nf bG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CiAgICB9CiMgMTE1OCAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2Nh bGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRh dGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f ZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFt ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2 aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5 KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVt KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAg ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQK ICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25h bWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9m b3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1h dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1l X2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J bkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNv bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXpl X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcs IGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg IGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1h dCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1 dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190 bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2Fs ZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDog cHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90 eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwg c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19y ZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l X3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1Ymxp YzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAg ICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBh dHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2Nv bnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9z bik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xh c3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBw cml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9N X2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9N X3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsK ICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAg ICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp CiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg IGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3Bv aW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAg ICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9 CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBv c2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWdu KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBm cmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7 IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0 KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vy cl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog ICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVf c2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAg ICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9 CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5pdGlh bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVsbCk7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1v bmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Omlu dGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0 KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5j dCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojpf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKICB0ZW1w bGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6 ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRlPD4KICAg IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K ICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0 ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXpl X21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZv aWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu Y3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlw dW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21v bmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1 bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1v bmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRl X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlh bGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsg X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25l eXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxv Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk OwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90 eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lv LCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl IF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywg X19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3Vu aXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRz KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9u ZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5p dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p bnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0 cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5 X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsK ICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3Nh Z2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBw cm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKICAgICAg Y2hhciogX01fbmFtZV9tZXNzYWdlczsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6 OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDAp OwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGNhdGFsb2cKICAgICAgb3Bl bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNh dGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm LCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3Mp OyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5tZXNzYWdlcygpOwoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4o Y29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qg c3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBk b19jbG9zZShjYXRhbG9nKSBjb25zdDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3Rv X2NoYXIoY29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHJl dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNf c3RyKCkpKTsKICAgICAgfQoKCiAgICAgIHN0cmluZ190eXBlCiAgICAgIF9NX2NvbnZlcnRfZnJv bV9jaGFyKGNoYXIqIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdCBfX2xlbiA9 IGNoYXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19tc2cpIC0gMTsKIyAxNzAzICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJpbmdf dHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg bG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmlu ZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3Ry aW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBtZXNzYWdlczx3Y2hh cl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJikgY29uc3Q7CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBw dWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciog X19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg ICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNz YWdlcyhzaXplX3QgX19yZWZzKQogICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgewoK CgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsKICAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhf X2NfbG9jYWxlIF9fY2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg ICB7CgoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShf X2Nsb2MpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUg bWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25z dCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJp bmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19v cGVuKF9fcywgX19sb2MpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg bWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsKCgoKCiAgICAgIF9TX2Rlc3Ryb3lf Y19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNz YWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgewoKCiAg ICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9f Y2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQoKCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNo YXIqIF9fcywgc2l6ZV90IF9fcmVmcykKICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQog ICAgIHsKCgoKCgoKICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2Fn ZXMpOwogICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3Mp OwogICAgIH0KIyAxNzM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMiAzCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRy bChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl OjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3Jh cGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy VAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1 cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6 IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+ IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQs IF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlw ZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoK ICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90 aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBf TV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9z dHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5cGU7CgogICAgICBj b25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlw ZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4o dGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xl YXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRl KGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBf X3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAg ICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9v bAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChi YWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBiYWQoKSBjb25zdAog ICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBp b3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRp b247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAg ICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIo X01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj X2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgp CiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf aW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0 aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJl dHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9Cgog ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAg ICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAg IGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAg ICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICAgICAgICBf TV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfTV9maWxsOwog ICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAg ewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxs ID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAg ICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhj aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAg ICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9z KCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hl Y2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAg aWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRy dWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2Fs ZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz aWNfaW9zLnRjYyIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z LnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNs ZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAgICAg ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAgICAgX01f c3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5yZHN0 YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUo ImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpy ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwog ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1 cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAg ICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29y ZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMuX01fd29y ZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNr czsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAg ICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9N X2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAg ICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7 CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg PCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhz Ll9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog ICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6ZSA9IF9f cmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAg ICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhz LnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRp b25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhj aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFyIF9fcmV0 ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAg IF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBf X2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAg ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlw ZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAg bG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9j KTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkg IT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVy biBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6 X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9N X3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50Y2Mi IDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsK CiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7 CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxv Y2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xv YykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsK ICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9f bnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251 bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAg ICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdl dCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAg X01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19p b3M8Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPHdjaGFyX3Q+OwoK fQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNTIg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4y L29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1 YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190 eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m Zl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAg ICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg ICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1i dWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+ IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7 CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJh c2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFz cyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0 cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoK ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikg KGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv bmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk IGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wg X19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikK ICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3Qg fHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9y PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UK ICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikp OwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25l ZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQg JiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVy biB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7 CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy YXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl JgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5v cGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUK ICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlw ZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNl OjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50 cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9U cmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShi YXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAg ICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1 bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5y ZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBf TV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAg ICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg X19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1w bGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f Yyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v dXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj aGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0 YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0No YXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAg dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25z dCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0 IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNs YXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJh dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0 IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29z LnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg ZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBf X29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2go YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5m bHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0u dGNjIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9sb2NhbGUiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVf ZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDEgMwojIDQ3 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5v LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMv ZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoKIyAxICIv dXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51eC9lcnJu by5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzggIi91c3Iv aW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9p ZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1 ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFy ICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1l OwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7 CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMiAzCiMgMzkgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvY21hdGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwoK CgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEg MwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRl Zi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUg ZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDY1ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUz ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBkb3VibGUgYWNvcyAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRh biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNp biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUg Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi bGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91 YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5j b3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBkb3VibGUgZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwg aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUg X194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRv dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhw IChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs b2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91 YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f ZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs b2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhw MiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3NxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgaHlwb3Qg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3Qg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNi cnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jZWlsIChk b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmxv b3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5m IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29w eXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdi KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19u YW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBk b3VibGUgajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0 aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2oxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJs ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi bGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3Vi bGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g ZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRv dWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50 ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRl ciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1h aW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl IHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z Y2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2di IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQg X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcg aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRy dW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3Vi bGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv bmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJp bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpl eHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91 YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg X19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0 aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJs ZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJv dyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRo cm93ICgpOwojIDY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4OCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1MyAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpleHRlcm4gZmxvYXQgYWNvc2YgKGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19j b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Npbmhm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4 dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29z eCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z aW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5o ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRl cm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsK CgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBf X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBwb3cxMGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYg KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoK CgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoK CgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0 IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg X19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9h dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm bG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZp Y2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZmxvYXQgbmFuZiAo X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9h dCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy biBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpu ZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkg dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYg KGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g ZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChm bG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g ZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxv YXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpf X3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50 ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYg KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l eHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gs IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy biBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJv dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9h dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBm bG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVv KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRl cm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91 bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0 IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg X196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQg X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9f bikgdGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEwOSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK IyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpleHRlcm4gbG9uZyBkb3Vi bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lu bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxv bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25n IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk b3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Y29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lu aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Npbmhs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAq X19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZy ZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0 aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGlu dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25n IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi bGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f bG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9n MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAxMGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNx cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0 bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlw b3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m YWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29y bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChs b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBk b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19k cmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4g bG9uZyBkb3VibGUgbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBj aGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpl eHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91Ymxl KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cg KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv dWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFs IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9u ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBk b3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g bG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25n IGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dh bW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdh bW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJv dyAoKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9u ZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWlu ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25nIGRvdWJsZSBf X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25n IGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2dibCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAobG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2Fs YmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxv bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4g bG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5bCAo bG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv dyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf X3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgMTEwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAx MjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE2NiAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRF LAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9Owoj IDI1MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0x LAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9O X1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI3NSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0K IyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDc5ICIvdXNyL2luY2x1ZGUv YysrLzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91Ymxl CiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBp bmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihf X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyBy ZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxv YXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgog IGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFj b3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4o ZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoK CgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyBy ZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihs b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjph dGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJl dHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg YXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJs KF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNl aWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9 CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7 IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNv cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1 c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4g Ojpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRv dWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoK ICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZh YnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9v cihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsg cmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlu bGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4 cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25n IGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9 CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9f eCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBp bmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyBy ZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlu bGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoK CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjps b2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cx MChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194 LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2Rm KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2RmbChf X3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBf X3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkv X19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19u KTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194 LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl dHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3Vi bGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAg aW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19o ZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJs ZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1 c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBf X2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRv dWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNp bmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihf X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gp IHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUg ZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsg fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy biBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9h dAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194 KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0 YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoK Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog ICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9 PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0g c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19m KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNm aW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zp bml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAo X19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09 IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9f ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChf X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBf X2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf X2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6 ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09 IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh cHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs ZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9U cCBfX2YyKQogICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf X3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9u X18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0g KF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChf X3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191 KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNp emVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXpl b2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9 PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAg X19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9f eCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25f XyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAo X195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f dSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3Up IDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6 ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVv ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09 IEZQX05BTjsgfSkpICYmIF9feCA+PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsg cmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBf X3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9m X18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9m IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkg JiYgX194IDwgX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAog ICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1 cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlw ZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhf X3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9f dSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3Up ID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwg KF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19m cGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw Y2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBf X3ggPD0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAg IF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVy biAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBl b2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9f eCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191 KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkg PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAo X191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zw Y2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBj bGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIChf X3ggPCBfX3kgfHwgX195IDwgX194KTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQog ICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX191ID0gKF9f ZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9fdiA9IChfX2YyKTsgKHNpemVvZiAoX191KSA9PSBzaXpl b2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9m IChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0g RlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm IChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo X192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpOyB9Cn0KIyA1ODAgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVy biBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRl KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAg X19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25h bihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwo X1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw dHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg ICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVh dGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJl X2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJl X2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK ICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVy ZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4g X19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7 IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNl IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6 aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6Omlz bmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWdu Yml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNn cmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4 Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcg X19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgu dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAog ICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBf VHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAg ICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQog ICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsK ICAgIH0KfQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDQyICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlt aXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jcHVfbGlt aXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDIgMwojIDg4NyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gZmxv YXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEsCiAgICByb3Vu ZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19uZWFyZXN0ID0gMSwKICAgIHJvdW5kX3Rv d2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogIH07 CgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCiAgewogICAgZGVub3JtX2luZGV0ZXJtaW5hdGUg PSAtMSwKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAogICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgfTsK CgoKCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg PSAwOwogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICBzdGF0 aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50MTAgPSAwOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSBm YWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jh c2UKICAgIHsKICAgICAgc3RhdGljIF9UcCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j YXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0 YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7 IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJy b3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGlj IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQog ICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0 dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWluKCkg dGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICB9OwoKCgogIHRlbXBs YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgYm9vbCBtaW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgYm9vbCBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wg ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJv b2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxp bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9v bCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm YWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZQogICAgICAgICAg ICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l cmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgY2hhciBlcHNpbG9u KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcm91 bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIg ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKIyAxMDcxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBz aWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAg ICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg ICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVp ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4o MCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMg c2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9pbmNsdWRlL2MrKy8z LjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln bmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g dHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo YXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5m aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+ KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIg ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFy X3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg PSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy biAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg d2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAg ICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No YXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjQxICIv dXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAx NTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJy b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm YWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5v cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i b3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjk4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNo b3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5n X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+ KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0 cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp YyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAx KTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCky MTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg c3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAg c3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMi IDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu ICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg dW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk IGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGlu dCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6 ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNp bG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBz dGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgo KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50 OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9u ZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3 TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBs b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxv bmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5 bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAg ICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7 IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNjM0ICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdM TCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs b25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv bmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigw KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1 bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg ICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUt MzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMu NDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhy b3coKQogICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0 IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRp YyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAg c3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYy MzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMg ZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAz MDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg c3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAg ICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7 IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPGxvbmcgZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICBzdGF0 aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1 NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBz aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlM OyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMS4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAt MTYzODE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9CiAg ICAgICAgICAgICAgICBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9CiAgICAgICAgICAgICAgICBmYWxzZTsKCiAg ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g MC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJs ZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZh bHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwojIDE5MjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwp9CiMgNDQgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9jKysvMy4y L3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xh c3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdHlwZWlu Zm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoK CgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8m IG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2lu Zm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6 CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9 CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4g X19uYW1lOyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCiAgICBib29s IGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1l IDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBf X2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBi b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJu ICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lz X3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBj b25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8g Kl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0 KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgogIGNs YXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2Fz dCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsKICB9OwoK CiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg YmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkKCkgdGhy b3coKTsKICB9Owp9Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0 PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBj b25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwog ICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6Omlk KTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAg bG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBz dGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRl X3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAg ICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9f czEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAg ICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsK ICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNl dHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGlj X2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv YykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwog ICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7 CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19m YWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry aW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU PiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2Vf ZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBjaGFyX3R5cGUg X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51 cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90 eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1 cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVn ICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhf X2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lk ZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwog ICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9f ZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICBfX2Zv dW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAg ICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICArK19f cG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfTV9FIC0gX01femVy byArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAgIF9fY3R5cGUud2lk ZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgYm9vbCBfX2Zv dW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFsc2U7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKICAgICAgc3RyaW5n IF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5n cm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUo KTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9 IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAg ICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZp bmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190 eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAr K19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107 CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19j LCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91 bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRp Y19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7 CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Vy ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6 OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAgICAg ICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9fZm91 bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21z W19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193 YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9z KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194 dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2MgPSAq KCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19w bHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAg ICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBf X2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5k X2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihf X3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBf X2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBf X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFj dF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBp bnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+ IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAg IGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAg ICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNl ID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19wb3Mg PSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjb25zdCBjaGFyX3R5cGUg X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51 cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19j LCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAm JiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5u YXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0 eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9 IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUu d2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAgICBi b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6 OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1 ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194 KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkK ICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms IGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2 OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7CiAgICAgICAgICBp ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAg ICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBl OjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3co X19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAg ICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoK ICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVuKF9T X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5k X2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmco KTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAg IGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRo b3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAg ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9t cywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVx KF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRyYyAr PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAg ICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2Vw KSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAo X19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAg IF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcg JiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91bmRf Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICgh X192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMg Kz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9z X2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJjOwog ICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVuc2ln bmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf X3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAm IGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9fdWw7 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog ICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBjaGFyX3Ry YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n ZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5 cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlw ZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2Zh bHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0g X190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBfX2Zh bHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19iZWcgIT0g X19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9 ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNlbgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2Zh bHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBf X3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShf X2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8 IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4pCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz dHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90 b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBf X3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAg ICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90 b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9 IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRy YzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcg X191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBf U19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp dCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4 KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAg ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAg ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf c3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0 CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVn ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh c2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1Nf Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg X194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcs IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJp bmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0 cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2Nv bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikg Y29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIp OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19l cnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0 PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRm bGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAg IGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNl IHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFz ayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcg X194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9f YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZs YWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3Rv X3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiAgICAgICAgX192ID0gcmVpbnRl cnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDYxOCAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU PgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAg X01fY29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m aWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25z dAogICAgICB7CgoKCgoKCgogICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmlj X2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAyOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVj ID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0 cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxz dHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAg ICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMg KiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zs b2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAg ICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVj KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg X19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKCiAgICAgICAgaWYgKF9fbGVu ID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4g KyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxv Y2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgICAgIF9fbGVu ID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz LCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMgNjg2ICIvdXNyL2luY2x1ZGUvYysr LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zs b2F0KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 OgogICAgICBfTV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hh clQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kbCwg X1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAg ICAgICAgX1NfZm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX21vZGwpOwoKCiAgICAg ICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxj aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICBpbnQgX19sZW4gPSBf X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xl biA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVu ICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoKCgoKICAgICAgICByZXR1cm4gX01f d2lkZW5faW50KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVy IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg ICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFp dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsK CgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs bG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVu KF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAg ICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0No YXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywg X19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9f bnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBf X25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9f aW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNp emUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAgICAgICBpbnQgX19k ZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBfX3AyID0gX19hZGRf Z3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4pOwogICAgICAgICAg aW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAoX19wKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVu IC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47 CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4g PSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywg X19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ dGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No YXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0 CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193 czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu LCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0 PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n ID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNl ZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19n cm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2Zm ID0gMDsKICAgICAgICAgIGlmICgoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAm JiBfX2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0 KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAg ICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAo X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAg ICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAg ICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBf X29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dy b3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0g X19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0 dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIg X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAog ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3Ry YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8u d2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0 YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxf Q2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVu LCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAg ICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAg IGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9f cyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p bywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBp b3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxv bmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywg X19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwog ICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51 bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9j KTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAg ICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAg ICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0 KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAg ICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9f cywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAog ICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigp LCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9u ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxs LCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBf TV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7 IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25n IGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19p bywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+ OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10 ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8 IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwg KGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAg ewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1Jywg Y2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1 bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAg ICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19m bGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj b25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5k b19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBj b25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAg ICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikp OwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBj dHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7 CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBl Lm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwog ICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwog ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2lu dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVu Y3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxf Q2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBh cnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNp emVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg IGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xv Yyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlf ZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0 dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBj b25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWdu KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9z aXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwg PyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBjaGFyX3R5cGUg X19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJf dHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBj b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21w Zi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBf X2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rl c3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAg ICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl ZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3Ry YWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9 IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAgIHsKICAgICAg ICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAg ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn cygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAy IHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAoKHN0YXRpY19j YXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAgewoKCgoKCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/ IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo X19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xl biAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg ICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNo b3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3Np Z24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkK ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0g X19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19z aWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ln biA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2ln bi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoK ICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAg ICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAg Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5k ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190 bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rl bXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2Fz ZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAg ICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAg ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkK ICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAg ICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYm IF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYm IF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAg ICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7 CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRl bignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7 CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAg ICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVu KCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5z aXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3Vw aW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAg ICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6 ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAg ICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog ICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxv Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19j c19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls dGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21f dihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3Np emUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAg X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwog ICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFM ZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2Nh bGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAg ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdf dHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50 bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9z X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5 cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190 eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQg cGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRo KCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1 ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7 CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVl PihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9f bW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5k ID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19w OwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53 aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19m b3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8g X19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0K ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19m b3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8g X19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAg KytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBl X2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAg ICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdf dHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2lu dGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGlu dCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChf X2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9f ZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAg ICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsK ICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwog ICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1 ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3Bh ZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90 eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1 ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAg ICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAg ICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAg ICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5n KCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21w dC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAg ICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAg ICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBf X2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0 KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShf X2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAg ICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJv bC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNl OjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9 IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3do aWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3 aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9u ZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9z X2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6 c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAg ICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9f cmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlw YWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9f bGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg X19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAg aWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUo X193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+ IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwg X19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAg ICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f ZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0 aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBf X3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAg ICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9y IChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAg ICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAg ICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFy VCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNl Ojpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh Y3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19m b3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVu Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBj aGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3Qg X19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkK ICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBp ZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1h dFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50 IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAg ICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAg ICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChf X2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwg X190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl ICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAg ICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAn Yic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAg ICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAg ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21v biwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAg ICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01f ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGlt ZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i ZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8l eSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2Nz KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn SCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t PnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f dG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQs IF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAg ICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVt KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5u YXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl ICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAg ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAg ICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsK ICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwog ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv LCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f d2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoK CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAg ICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9f dHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0 X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01f ZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAg X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAg aWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAx OTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoK ICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2Jl ZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1w OwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190 bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0No YXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i ZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJh Y3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAo X19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytf X2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAg dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUm IF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAg ICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAg ICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19p IDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f YykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAw KTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9 CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUg PSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUg JiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAg ICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAg ICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFs aWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2Jl ZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBj b25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg Y2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9 IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4 bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0g MDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90 IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0g X19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19p MTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXpl X3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwg X19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNb X19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9f YmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMg PSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAg ICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAgICAgICBfX21h dGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9 CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAgICBfX25hbWUg PSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBf X3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9f bGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAg ICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAg ICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190 ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNo YXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s IF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAg ICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMs IF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0 eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9f bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190 cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBj aGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5 cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19l bmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJy KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0 aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAg ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2RheV07CiAgICAg ICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAg ICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7 CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAg ICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAg ICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykK ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9 CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3 ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVf Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8s IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5 cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3Rw ID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChf X21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn LCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYg KCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBl OjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9f bW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190 bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAg ICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxl bmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVn ICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn KQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19s ZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1f bW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5 cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGln aXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlz KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9 IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg ICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpCiAg ICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2Rp Z2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShf X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAg ICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh aWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj aGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNv bnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAg ICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAg ICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7 CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0 eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAg ICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19j dHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9 IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5 cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21v ZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0 PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21h eGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxj aGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19tYXhsZW4p KTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5 cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAgICAgICBfX2Zt dFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAg ICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBl KCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwg X190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVu Z3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19p LCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAg IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0No YXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAg eyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAg ICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBz aXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0No YXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAgICAgY29uc3Qg c3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg X190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIo KSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg dHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+ OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o aSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7Cgog ICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9N X3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikK ICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQq PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkpKTsKICAgICAg ICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQq IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9u ZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQogICAgICAgIF9f dmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAgICAgICAoX192 YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2lu LCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291 dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAg ICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpOwojIDE5OTUg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAg IHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg X19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRz LCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6 ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9U cmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19v bGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUg X19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFt c2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxl biA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFy VCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo X0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4s IF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAg ICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVs ZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAg ICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2Jl Z2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAg ICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAg ICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbign LScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsK ICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51 cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwg X19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUu d2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1Ry YWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sx XSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNb MV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsK ICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9f cGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsg X19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1sw XSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAg ICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAg ICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j YXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz ZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAg ICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxf Q2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3Bs ZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAg ICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBf VHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwOTAgIi91c3Iv aW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7CiAg ICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUo KTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAgYm9v bCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24gLSAx KQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9f biAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9 PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4gPyBf X2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3JvdXBp bmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5n KF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy KiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xh c3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX2FkZF9n cm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZ2Jl ZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAgICAg ICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBfX3NlcDsK ICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAgd2hp bGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt b25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVt X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5h bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19i eW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJzdGF0 ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Y29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVj dnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0 PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxu dW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u c3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0cnVl PiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7 CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4mCiAg ICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8 bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Y29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PGNo YXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8 dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj b25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+Jgog ICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hh ciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v bmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8 dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3Qs IGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFs c2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0 cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9i eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0 aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1l PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9i eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdj aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+ OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJz dGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4g Pihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdj aGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9m YWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9n ZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1 ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2Fs ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs c2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+Jgog ICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxt b25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3 Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRp bWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4m CiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxt ZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hh ciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv b2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBs b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1l cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCn0KIyA0NyAiL3Vzci9pbmNs dWRlL2MrKy8zLjIvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9v c3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3Mp CiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChf TV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBl JikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZz KCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10 ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYg aW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01f Zm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9f YiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAg ICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1 dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhp cy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y PDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAg ICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpo ZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19i ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAg ICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs IHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAg aWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWls ZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVj a19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp CiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlw ZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19j KTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190 eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9D aGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1 dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQg IT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkK ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQog ICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlz LT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlv c19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkK ICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVi c2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBw b3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAg ICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2Vy ciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0KTsKCgog ICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7 CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90 eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg ICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh KHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0g X19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlm IChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8 X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywg X19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAg ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUg PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f dHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQp OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f dyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFk KF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAg ICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0 LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBf X3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f b3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy YihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0 aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgo X19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9f b3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9f cyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAg X19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgY2hh cl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAg ICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp OwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwogICAgICAgICAgZm9yIChz aXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ld ID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7 CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f bGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMg PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog X193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf X291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAg X19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAgICAgICAg ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVt cGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBj aGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBf X2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu d2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4o X19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0g c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwoKICAgICAgICAg ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBf X3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAg ICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg X19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg ZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0YSgpOwogICAgICAgICAgc3RyZWFt c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0 aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7 CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19z dHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu ZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsK ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFt c2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAg X19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVy biBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08 Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVy biB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0 cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRv cjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8 PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w ZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0 ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBj aGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRlcm4gdGVt cGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl YW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRv cjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy YXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy YXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0 cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKCn0KIyAyNzYgIi91c3Iv aW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p b3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIgMSAzCiMgNDMg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNp Y19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0 c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz PiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBl PF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUg X01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJl YW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19z Yik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmly dHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6 ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsK CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUm ICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYp KTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg X19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19m KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2Yp OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9p ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAg ICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo aXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGlt KTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5 cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4n KSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0 cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0g MSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlw ZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVh ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBw b3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBz ZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5 cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFs c2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0 ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJU JiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19p biA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p biwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry YWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVh bQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJs aWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0 eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3Ry ZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0 cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVk ZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2QoKSkK ICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50aWUo KS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygpICYg aW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX2lu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBf X2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBpZiAoX19pbi5fTV9jaGVja19mYWNl dChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjpl cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01f ZmN0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAgICAg ICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKHRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4u c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f aXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYo KnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f aW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYg KCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv cGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAg ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYg KG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAg ICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAg ICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0 JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBs b25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19s KTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg ICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wKICAgICAg ICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCiAg ICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu c2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz LCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0 KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxv bmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9 IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihk b3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1i dWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl KTsKICAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAgICAgICAgICB0cnkKICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgICAgICAg ICAgaWYgKF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAg IF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkK ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg ICAgICAgICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0 KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5y ZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50 X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl dChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9 IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRo aXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl cV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlw ZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwg aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90 eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlz LT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7Cgog ICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAg ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRv X2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsK ICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5 cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19z dHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2dj b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp bSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRi dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CiAg ICAgICAgICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f Yyk7CgogICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg X19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo X19jLCBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNf c2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2No YXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUg X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgog ICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l b2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j LCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0g X19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf X2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm ICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBp ZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9f biwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9f YzsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6 ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCiAgICAgICAg ICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jID0gX19zYi0+c2J1 bXBjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9n Y291bnQ7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j LCBfX2RlbGltKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQog ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQogICAg ewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3Vu dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJkYnVm KCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNn ZXRuKF9fcywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01fZ2NvdW50ICE9IF9fbikKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPj0gMCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAg IGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1Zigp LT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g X01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAg ICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tj KF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg ICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRf dHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQg PSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK ICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewogICAg ICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkp CiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpj dXIsIGlvc19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgaWYg KCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRo aXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAg IGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly IF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwo KSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+ cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJy ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19j KTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVh bWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90 eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8 X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoK ICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAg ICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGlt aXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl JiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAg IGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4 dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMo Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAg ICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAg ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAq X19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19l eHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg IHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNp Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5 cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9m YWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBl IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBf X2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg IHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICYm IF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgX19jID0gX19zYi0+ c25leHRjKCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQog ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19p bjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAg ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9f c2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2lu LndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cg PiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoK ICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBl X3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9 IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u cmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg ICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0 czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5p cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f c3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRy YWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgo MCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRz dGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5 cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXpl X3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAg ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAg ICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50 X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAg IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90 eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2Vv ZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9p bnRfdHlwZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0g X19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp CiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg ICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0p OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf X2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg ICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2lu LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9Cgog IHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAg aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwg X19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi YXNpY19pc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFt Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIm KTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciop OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25l ZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYs IHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0 cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0 b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi YXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lz dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0m LCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3Ry ZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIg MiAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAyIDMKCm5hbWVzcGFjZSBz dGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4dGVy biBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCgogIGV4dGVybiB3aXN0cmVh bSB3Y2luOwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7 CiAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lv aW5pdDsKfQojIDMwICJhbGwuaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvbWFu aXAiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb21hbmlwIiAzCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvZnVuY3Rpb25hbCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysv My4yL2Z1bmN0aW9uYWwiIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9tYW5pcCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1Jlc2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6Zm10 ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9SZXNldGlvc2ZsYWdzCiAgcmVzZXRpb3NmbGFn cyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9SZXNldGlvc2ZsYWdzIF9feDsK ICAgIF9feC5fTV9tYXNrID0gX19tYXNrOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs X1RyYWl0cz4mIF9faXMsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRm KGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19pczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQogICAg ewogICAgICBfX29zLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7CiAg ICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRpb3NmbGFncyB7IGlvc19iYXNl OjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1NldGlvc2ZsYWdzCiAgc2V0aW9zZmxh Z3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAgICBfU2V0aW9zZmxhZ3MgX194Owog ICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJl YW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYgX19pcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRmKF9f Zi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4m IF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAgIF9fb3Muc2V0ZihfX2YuX01fbWFz ayk7CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRiYXNlIHsgaW50IF9N X2Jhc2U7IH07CgogIGlubGluZSBfU2V0YmFzZQogIHNldGJhc2UoaW50IF9fYmFzZSkKICB7CiAg ICBfU2V0YmFzZSBfX3g7CiAgICBfX3guX01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBfX3g7 CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp bmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAg IF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAg ICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDoKICAgICAgICAgICAgICBfX2Yu X01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgIGlvc19iYXNlOjpm bXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX2lzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxp bmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAgIF9f b3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAgICAg ICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAgICAgX19m Ll9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAgIGlvc19iYXNl OjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX29zOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9TZXRmaWxsIHsg X0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf U2V0ZmlsbDxfQ2hhclQ+CiAgICBzZXRmaWxsKF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIF9TZXRm aWxsPF9DaGFyVD4gX194OwogICAgICBfX3guX01fYyA9IF9fYzsKICAgICAgcmV0dXJuIF9feDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pcywgX1NldGZpbGw8X0NoYXJUPiBfX2YpCiAg ICB7CiAgICAgIF9faXMuZmlsbChfX2YuX01fYyk7CiAgICAgIHJldHVybiBfX2lzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUg YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsKICAg ICAgX19vcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1 Y3QgX1NldHByZWNpc2lvbiB7IGludCBfTV9uOyB9OwoKICBpbmxpbmUgX1NldHByZWNpc2lvbgog IHNldHByZWNpc2lvbihpbnQgX19uKQogIHsKICAgIF9TZXRwcmVjaXNpb24gX194OwogICAgX194 Ll9NX24gPSBfX247CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19p cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9faXMucHJlY2lzaW9uKF9fZi5fTV9u KTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9T ZXRwcmVjaXNpb24gX19mKQogICAgewogICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7CiAg ICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXR3IHsgaW50IF9NX247IH07Cgog IGlubGluZSBfU2V0dwogIHNldHcoaW50IF9fbikKICB7CiAgICBfU2V0dyBfX3g7CiAgICBfX3gu X01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lz LCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9faXMud2lkdGgoX19mLl9NX24pOwogICAgICByZXR1 cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0 b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldHcgX19mKQogICAg ewogICAgICBfX29zLndpZHRoKF9fZi5fTV9uKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoK CgogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0Zmls bDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs IF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0 cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0 b3I8PChvc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVy YXRvcjw8KG9zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFt JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRl IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRl bXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBl eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGJhc2UpOwog IGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0cHJlY2lz aW9uKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1Nl dHcpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwg X1NldGZpbGw8d2NoYXJfdD4pOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8 PCh3b3N0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBv cGVyYXRvcjw8KHdvc3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3 b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxh dGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRl cm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0dyk7CiAgZXh0 ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGZpbGw8d2No YXJfdD4pOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYs IF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdp c3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3Bl cmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m IG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUg d2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0dyk7Cgp9CiMgMzQgImFsbC5oIiAy CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9jKysvMy4yL3NzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh c3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBh bGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90 eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlw ZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUg b2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh cl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgIHByb3RlY3Rl ZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks IF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3Ry LAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9z dHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2lu aXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAg ICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoK CiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAg ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0g bWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAg ICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4p OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAg ICAgewoKICAgICAgICBfTV9zdHJpbmcuYXNzaWduKF9fcy5kYXRhKCksIF9fcy5zaXplKCkpOwog ICAgICAgIF9NX3N0cmluZ2J1Zl9pbml0KF9NX21vZGUpOwogICAgICB9CgogICAgcHJvdGVjdGVk OgoKICAgICAgdm9pZAogICAgICBfTV9zdHJpbmdidWZfaW5pdChpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlKQogICAgICB7CgoKCgoKICAgICAgICBfTV9idWZfc2l6ZSA9IF9NX3N0cmluZy5zaXpl KCk7CgoKCgoKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSA1MTI7CiAgICAgICAgX01fbW9kZSA9 IF9fbW9kZTsKICAgICAgICBpZiAoX01fbW9kZSAmIChpb3NfYmFzZTo6YXRlIHwgaW9zX2Jhc2U6 OmFwcCkpCiAgICAgICAgICBfTV9yZWFsbHlfc3luYygwLCBfTV9idWZfc2l6ZSk7CiAgICAgICAg ZWxzZQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgMCk7CiAgICAgIH0KCgogICAgICB2aXJ0 dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsKICAgICAgICBpZiAoX01faW5f Y3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlw ZTo6dG9faW50X3R5cGUoKmdwdHIoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRy YWl0c190eXBlOjplb2YoKTsKICAgICAgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBw YmFja2ZhaWwoaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIHZpcnR1 YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVv ZigpKTsKCiAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKICAgICAgc2V0YnVmKGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAgICAgIGlmIChfX3MgJiYgX19u KQogICAgICAgICAgewogICAgICAgICAgICBfTV9zdHJpbmcgPSBfX3N0cmluZ190eXBlKF9fcywg X19uKTsKICAgICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgMCk7CiAgICAgICAgICB9CiAgICAg ICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vl a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv dXQpOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlIF9fc3As CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8 IGlvc19iYXNlOjpvdXQpOwoKCgoKCgoKICAgICAgdmlydHVhbCBpbnQKICAgICAgX01fcmVhbGx5 X3N5bmMoX19zaXplX3R5cGUgX19pLCBfX3NpemVfdHlwZSBfX28pCiAgICAgIHsKICAgICAgICBj aGFyX3R5cGUqIF9fYmFzZSA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX01fc3RyaW5nLmRhdGEo KSk7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAg ICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBfX3Np emVfdHlwZSBfX2xlbiA9IF9NX3N0cmluZy5zaXplKCk7CgogICAgICAgIF9NX2J1ZiA9IF9fYmFz ZTsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICAgIHRoaXMtPnNldGcoX19iYXNlLCBf X2Jhc2UgKyBfX2ksIF9fYmFzZSArIF9fbGVuKTsKICAgICAgICBpZiAoX190ZXN0b3V0KQogICAg ICAgICAgewogICAgICAgICAgICB0aGlzLT5zZXRwKF9fYmFzZSwgX19iYXNlICsgX19sZW4pOwog ICAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g MDsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW0g OiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0 cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf X3N0cmluZ2J1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT4gX19pc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdi dWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAg YmFzaWNfaXN0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6 OmluKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX21vZGUg fCBpb3NfYmFzZTo6aW4pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAg ICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBl JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t b2RlID0gaW9zX2Jhc2U6OmluKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0 cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQo Jl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19pc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9 CgoKICAgICAgX19zdHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJl dHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAg ICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJp bmdidWYuc3RyKCk7IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUm IF9fcykKICAgICAgeyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYg X0FsbG9jIGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpv ZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdi dWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVk ZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX29zdHJlYW1fdHlwZTsK CiAgICBwcml2YXRlOgogICAgICBfX3N0cmluZ2J1Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBw dWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBl KF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX21vZGUgfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHRo aXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29z dHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCiAgICAg IDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX21vZGUgfCBp b3NfYmFzZTo6b3V0KQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAg IH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19zdHJpbmdidWZfdHlw ZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5n YnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdfdHlwZQogICAgICBz dHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KCiAgICAgIHZv aWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgeyBfTV9zdHJpbmdi dWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3Ry ZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh aXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwoK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAg ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90 eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9f c3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tID0gaW9zX2Jh c2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19udWxsKSwg X01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9Cgog ICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdfdHlw ZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t ID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUo X19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX20pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01f c3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX3N0cmluZ3N0cmVhbSgpCiAgICAgIHsgfQoKCiAg ICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4g Y29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIF9f c3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyaW5nYnVm LnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3Mp CiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9Owp9CgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3NzdHJlYW0udGNjIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9z c3RyZWFtIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh aXRzLCBjbGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jKQogICAgewogICAgICBp bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2Yg PSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAg ICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CgoK CiAgICAgIGlmIChfX3Rlc3Rwb3MpCiAgICAgICAgewogICAgICAgICAgaWYgKHRyYWl0c190eXBl OjplcSh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyksIHRoaXMtPmdwdHIoKVstMV0pCiAg ICAgICAgICAgICAgJiYgIV9fdGVzdGVvZikKICAgICAgICAgICAgewogICAgICAgICAgICAgIC0t X01faW5fY3VyOwogICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f TV9pbl9jdXI7CiAgICAgICAgICAgICAgKl9NX2luX2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFy X3R5cGUoX19jKTsKICAgICAgICAgICAgICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f TV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2Mp OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBl CiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIG92ZXJm bG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYywgX19yZXQpOwogICAgICBib29sIF9fdGVzdHdyaXRlID0gX01fb3V0X2N1ciA8IF9NX2J1 ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFz ZTo6b3V0OwoKCgogICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAgIGlmICgh X190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zaXplX3R5cGUgX19sZW4g PSBtYXgoX01fYnVmX3NpemUsIF9NX2J1Zl9zaXplX29wdCk7CiAgICAgICAgICAgICAgX19sZW4g Kj0gMjsKCiAgICAgICAgICAgICAgaWYgKF9fdGVzdHdyaXRlKQogICAgICAgICAgICAgICAgX19y ZXQgPSB0aGlzLT5zcHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAg ICAgICAgIGVsc2UgaWYgKF9fbGVuIDw9IF9NX3N0cmluZy5tYXhfc2l6ZSgpKQogICAgICAgICAg ICAgICAgewoKICAgICAgICAgICAgICAgICAgX01fc3RyaW5nID0gdGhpcy0+c3RyKCk7CiAgICAg ICAgICAgICAgICAgIF9NX3N0cmluZy5yZXNlcnZlKF9fbGVuKTsKICAgICAgICAgICAgICAgICAg X01fYnVmX3NpemUgPSBfX2xlbjsKICAgICAgICAgICAgICAgICAgX01fcmVhbGx5X3N5bmMoX01f aW5fY3VyIC0gX01faW5fYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9v dXRfY3VyIC0gX01fb3V0X2JlZyk7CiAgICAgICAgICAgICAgICAgICpfTV9vdXRfY3VyID0gdHJh aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfTV9vdXRfY3Vy X21vdmUoMSk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRz X3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K CiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgog ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cG9z X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg c2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUo b2ZmX3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiBfTV9t b2RlICYgX19tb2RlKSAhPSAwOwogICAgICBib29sIF9fdGVzdG91dCA9IChpb3NfYmFzZTo6b3V0 ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgYm9vbCBfX3Rlc3Rib3RoID0gX190ZXN0 aW4gJiYgX190ZXN0b3V0ICYmIF9fd2F5ICE9IGlvc19iYXNlOjpjdXI7CiAgICAgIF9fdGVzdGlu ICY9ICEoX19tb2RlICYgaW9zX2Jhc2U6Om91dCk7CiAgICAgIF9fdGVzdG91dCAmPSAhKF9fbW9k ZSAmIGlvc19iYXNlOjppbik7CgogICAgICBpZiAoX01fYnVmX3NpemUgJiYgKF9fdGVzdGluIHx8 IF9fdGVzdG91dCB8fCBfX3Rlc3Rib3RoKSkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUq IF9fYmVnID0gX01fYnVmOwogICAgICAgICAgY2hhcl90eXBlKiBfX2N1cmkgPSBfX251bGw7CiAg ICAgICAgICBjaGFyX3R5cGUqIF9fY3VybyA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSog X19lbmRpID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBlKiBfX2VuZG8gPSBfX251bGw7Cgog ICAgICAgICAgaWYgKF9fdGVzdGluIHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX2N1cmkgPSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICAgICAgX19lbmRpID0gdGhp cy0+ZWdwdHIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91dCB8fCBfX3Rl c3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJvID0gdGhpcy0+cHB0cigp OwogICAgICAgICAgICAgIF9fZW5kbyA9IHRoaXMtPmVwcHRyKCk7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICBvZmZfdHlwZSBfX25ld29mZmkgPSAwOwogICAgICAgICAgb2ZmX3R5cGUgX19uZXdv ZmZvID0gMDsKICAgICAgICAgIGlmIChfX3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX19uZXdvZmZpID0gX19jdXJpIC0gX19iZWc7CiAgICAgICAgICAg ICAgX19uZXdvZmZvID0gX19jdXJvIC0gX19iZWc7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs c2UgaWYgKF9fd2F5ID09IGlvc19iYXNlOjplbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX25ld29mZmkgPSBfX2VuZGkgLSBfX2JlZzsKICAgICAgICAgICAgICBfX25ld29mZm8gPSBf X2VuZG8gLSBfX2JlZzsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmICgoX190ZXN0aW4gfHwg X190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBfX25ld29mZmkgKyBfX29mZiA+PSAwICYmIF9f ZW5kaSAtIF9fYmVnID49IF9fbmV3b2ZmaSArIF9fb2ZmKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgX01faW5fY3VyID0gX19iZWcgKyBfX25ld29mZmkgKyBfX29mZjsKICAgICAgICAgICAg ICBfX3JldCA9IHBvc190eXBlKF9fbmV3b2ZmaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm ICgoX190ZXN0b3V0IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgICAgJiYgX19uZXdvZmZvICsg X19vZmYgPj0gMCAmJiBfX2VuZG8gLSBfX2JlZyA+PSBfX25ld29mZm8gKyBfX29mZikKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX25ld29mZm8gKyBfX29mZiAt IChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAgICAgICBfX3JldCA9IHBvc190eXBlKF9f bmV3b2Zmbyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 cG9zX3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAg ewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CgogICAgICBp ZiAoX01fYnVmX3NpemUpCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUgX19wb3MgPSBfX3Nw OwogICAgICAgICAgY2hhcl90eXBlKiBfX2JlZyA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlw ZSogX19lbmQgPSBfX251bGw7CiAgICAgICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjpp biAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgICAgICBib29sIF9fdGVzdG91dCA9IChp b3NfYmFzZTo6b3V0ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgICAgIGJvb2wgX190 ZXN0Ym90aCA9IF9fdGVzdGluICYmIF9fdGVzdG91dDsKICAgICAgICAgIF9fdGVzdGluICY9ICEo X19tb2RlICYgaW9zX2Jhc2U6Om91dCk7CiAgICAgICAgICBfX3Rlc3RvdXQgJj0gIShfX21vZGUg JiBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBib29sIF9fdGVzdHBvc2kgPSBmYWxzZTsKICAg ICAgICAgIGJvb2wgX190ZXN0cG9zbyA9IGZhbHNlOwogICAgICAgICAgaWYgKF9fdGVzdGluIHx8 IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2JlZyA9IHRoaXMtPmVi YWNrKCk7CiAgICAgICAgICAgICAgX19lbmQgPSB0aGlzLT5lZ3B0cigpOwogICAgICAgICAgICAg IGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAgICAgICAgICAgICAg ICBfX3Rlc3Rwb3NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91 dCB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19iZWcgPSB0aGlz LT5wYmFzZSgpOwogICAgICAgICAgICAgIF9fZW5kID0gX01fYnVmICsgX01fYnVmX3NpemU7CiAg ICAgICAgICAgICAgaWYgKDAgPD0gX19wb3MgJiYgX19wb3MgPD0gX19lbmQgLSBfX2JlZykKICAg ICAgICAgICAgICAgIF9fdGVzdHBvc28gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBp ZiAoX190ZXN0cG9zaSB8fCBfX3Rlc3Rwb3NvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9fdGVzdHBvc2kpCiAgICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfTV9pbl9iZWcgKyBf X3BvczsKICAgICAgICAgICAgICBpZiAoX190ZXN0cG9zbykKICAgICAgICAgICAgICAgIF9NX291 dF9jdXJfbW92ZSgoX19wb3MpIC0gKF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAg IF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoX19wb3MpKTsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfc3RyaW5nYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3Ry aW5nc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry ZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08Y2hh cj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD47Cgp9CiMgMzY5ICIv dXNyL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAyIDMKIyAzOCAiYWxsLmgiIDIKCgoKCiMgMSAi aW5pdGlhbC5oIiAxCiMgMTA0ICJpbml0aWFsLmgiCmNsYXNzIEluaXRUZXJtQmFzZQp7CiAgICAg ICAgSW5pdFRlcm1CYXNlICpuZXh0Owpwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHByaW9yaXR5OwoK cHJpdmF0ZToKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpID0gMDsKCnB1YmxpYzoKICAgICAg ICBJbml0VGVybUJhc2UoSW5pdFRlcm1CYXNlICoqdGFibGUsIGludCBpcCk7CgogICAgICAgIHN0 YXRpYyB2b2lkIFBlcmZvcm1BbGwoSW5pdFRlcm1CYXNlICp0YWJsZSk7Cn07CiMgMTQ0ICJpbml0 aWFsLmgiCmNsYXNzIEluaXRpYWxpemVyIDogcHJpdmF0ZSBJbml0VGVybUJhc2UKewpwcml2YXRl OgogICAgICAgIHN0YXRpYyBJbml0VGVybUJhc2UgKmluaXRhYmxlOwoKICAgICAgICB2aXJ0dWFs IHZvaWQgV29yaygpID0gMDsKCnB1YmxpYzoKICAgICAgICBJbml0aWFsaXplcihpbnQgaXA9MTAw KTsKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIFBlcmZvcm1BbGwoKTsKCn07CiMgMTgyICJpbml0 aWFsLmgiCmNsYXNzIFRlcm1pbmF0b3IgOiBwcml2YXRlIEluaXRUZXJtQmFzZQp7CnByaXZhdGU6 CiAgICAgICAgc3RhdGljIEluaXRUZXJtQmFzZSAqdHJtdGFibGU7CgogICAgICAgIHZpcnR1YWwg dm9pZCBXb3JrKCkgPSAwOwoKcHVibGljOgogICAgICAgIFRlcm1pbmF0b3IoaW50IGlwPTEwMCk7 CgoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBQZXJmb3JtQWxsKCk7Cgp9OwojIDIyMyAiaW5pdGlh bC5oIgpjbGFzcyBJbml0RnVuY3Rpb24gOiBwcml2YXRlIEluaXRpYWxpemVyCnsKICAgICAgICB2 b2lkICgqZnVuYykoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpOwpwdWJsaWM6CiAgICAg ICAgSW5pdEZ1bmN0aW9uKHZvaWQgKCpmKSgpLCBpbnQgaXA9MTAwKTsKCgoKfTsKIyAyNTMgImlu aXRpYWwuaCIKY2xhc3MgVGVybUZ1bmN0aW9uIDogcHJpdmF0ZSBUZXJtaW5hdG9yCnsKICAgICAg ICB2b2lkICgqZnVuYykoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpOwpwdWJsaWM6CiAg ICAgICAgVGVybUZ1bmN0aW9uKHZvaWQgKCpmKSgpLCBpbnQgaXA9MTAwKTsKCgoKfTsKIyA0MyAi YWxsLmgiIDIKIyAxICJvdXRmb3JtLmgiIDEKIyAzNCAib3V0Zm9ybS5oIgpjbGFzcyBvdXRmb3Jt CnsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBzdHJpbmcgKmRhdGE7CgpwdWJsaWM6CiAgICAg ICAgICAgICAgICBvdXRmb3JtKCk7CiAgICAgICAgICAgICAgICBvdXRmb3JtKCBjb25zdCBzdHJp bmcgJnMgKTsKICAgICAgICAgICAgICAgIG91dGZvcm0oIGNvbnN0IGNoYXIgKnMgKTsKCiAgICAg ICAgICAgICAgICBvdXRmb3JtKCBjb25zdCBvdXRmb3JtICZvICk7CgogICAgICAgICAgICAgICAg fm91dGZvcm0oKTsKCiAgICAgICAgb3V0Zm9ybSYgb3BlcmF0b3I9KGNvbnN0IG91dGZvcm0gJik7 CgoKICAgICAgICB2b2lkIFNldFN0cmluZyggY29uc3Qgc3RyaW5nJiBzICk7CgoKICAgICAgICB2 b2lkIEFkZEF0Qm90dG9tKGNvbnN0IG91dGZvcm0gJik7CgogICAgICAgIHZvaWQgQWRkQXRSaWdo dChjb25zdCBvdXRmb3JtICYpOwoKICAgICAgICB2b2lkIEFkZEF0UmlnaHRUb3AoY29uc3Qgb3V0 Zm9ybSAmKTsKCiAgICAgICAgdm9pZCBBZGRBdFJpZ2h0Qm90dG9tKGNvbnN0IG91dGZvcm0gJik7 CgogICAgICAgIHZvaWQgU3Vycm91bmRCeUJyYWNrZXQoY29uc3QgY2hhciAqIGx0LCBjb25zdCBj aGFyICogbG0sIGNvbnN0IGNoYXIgKiBsYiwgY29uc3QgY2hhciAqIGx4LCBjb25zdCBjaGFyICog cnQsIGNvbnN0IGNoYXIgKiBybSwgY29uc3QgY2hhciAqIHJiLCBjb25zdCBjaGFyICogcngpOwoj IDgxICJvdXRmb3JtLmgiCiAgICAgICAgYm9vbCBJc0VtcHR5KCkgeyByZXR1cm4geT09MDsgfQoK CiAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IG91dGZv cm0gJik7Cgp9OwojIDQ0ICJhbGwuaCIgMgojIDEgImxpc3QuaCIgMQojIDM4ICJsaXN0LmgiCnRl bXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBMaXN0RWxlbWVudAp7CnB1YmxpYzoKICAgICAgICBMaXN0 RWxlbWVudDxUPiAqbmV4dDsKCiAgICAgICAgVCBvYmo7CgogICAgICAgIExpc3RFbGVtZW50KCkg eyBuZXh0ID0gX19udWxsOyB9CgogICAgICAgIExpc3RFbGVtZW50KGNvbnN0IFQgJmlvLCBMaXN0 RWxlbWVudDxUPiAqaW4pIDogb2JqKGlvKSB7IG5leHQgPSBpbjsgfQoKfTsKCgoKCnRlbXBsYXRl IDxjbGFzcyBUPiBjbGFzcyBMaXN0SXRlcmF0b3I7CiMgNjcgImxpc3QuaCIKdGVtcGxhdGUgPGNs YXNzIFQ+IGNsYXNzIExpc3QKewogICAgICAgIExpc3RFbGVtZW50PFQ+ICpyb290OwoKCnB1Ymxp YzoKICAgICAgICBMaXN0KCkgeyByb290ID0gX19udWxsOyB9CgogICAgICAgIH5MaXN0KCk7Cgog ICAgICAgIHZvaWQgQWRkKGNvbnN0IFQgJnQpIHsgcm9vdCA9IG5ldyBMaXN0RWxlbWVudDxUPiAo dCwgcm9vdCk7IH0KCiAgICAgICAgYm9vbCBEZXRhY2goY29uc3QgVCAmdCk7CgoKICAgICAgICBm cmllbmQgY2xhc3MgTGlzdEl0ZXJhdG9yPFQ+Owp9OwojIDk4ICJsaXN0LmgiCnRlbXBsYXRlIDxj bGFzcyBUPiBjbGFzcyBMaXN0SXRlcmF0b3IKewogICAgICAgIExpc3RFbGVtZW50PFQ+ICpwdHI7 CgpwdWJsaWM6CiAgICAgICAgTGlzdEl0ZXJhdG9yKExpc3Q8VD4gJmwpIHsgcHRyID0gbC5yb290 OyB9CgogICAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBwdHIgIT0gX19udWxsOyB9Cgog ICAgICAgIFQgJkN1cnJlbnQoKSB7IHJldHVybiBwdHItPm9iajsgfQoKICAgICAgICBUICZvcGVy YXRvcisrKCkgeyBMaXN0RWxlbWVudDxUPiAqIHJldCA9IHB0cjsgcHRyID0gcHRyLT5uZXh0OyBy ZXR1cm4gcmV0LT5vYmo7IH0KCiAgICAgICAgVCAmb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIChw dHIgPSBwdHItPm5leHQpLT5vYmo7IH0KCn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gTGlzdDxU Pjo6fkxpc3QoKQp7CiAgICAgICAgd2hpbGUoIHJvb3QgKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIExpc3RFbGVtZW50PFQ+ICpuID0gcm9vdC0+bmV4dDsKICAgICAgICAgICAgICAgIGRlbGV0 ZSByb290OwogICAgICAgICAgICAgICAgcm9vdCA9IG47CiAgICAgICAgfQp9CgoKCnRlbXBsYXRl IDxjbGFzcyBUPgpib29sIExpc3Q8VD46OkRldGFjaChjb25zdCBUICZ0KQp7CiAgICAgICAgTGlz dEVsZW1lbnQ8VD4gKm4sICpubjsKICAgICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKCByb290LT5vYmogPT0gdCApCiAgICAg ICAgewogICAgICAgICAgICAgICAgbiA9IHJvb3Q7CiAgICAgICAgICAgICAgICByb290ID0gcm9v dC0+bmV4dDsKICAgICAgICAgICAgICAgIGRlbGV0ZSBuOwogICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgfQoKICAgICAgICBuID0gcm9vdDsKICAgICAgICB3aGlsZSggbi0+bmV4 dCAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCBuLT5uZXh0LT5vYmog PT0gdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5uID0gbi0+ bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgbi0+bmV4dCA9IG5uLT5uZXh0OwogICAgICAg ICAgICAgICAgICAgICAgICBkZWxldGUgbm47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbiA9IG4tPm5leHQ7CiAg ICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKfQojIDQ1ICJhbGwuaCIgMgojIDEgInZhbGxv Yy5oIiAxCiMgNDAgInZhbGxvYy5oIgpjbGFzcyBWaXJ0dWFsQWxsb2NhdG9yCnsKcHVibGljOgog IGVudW0gZGlyZWN0aW9uX3QgeyBub3JtYWwsIHJldmVyc2UgfTsKCgpwcm90ZWN0ZWQ6CiAgdm9p ZCAqIHRvcDsKCiAgc2l6ZV90IG1heExlbjsKCiAgc2l6ZV90IGN1ckxlbjsKCiAgc2l6ZV90IGFs bG9jVW5pdDsKCiAgY2hhciAqZGVzY3JpcHRpb247CgogIGRpcmVjdGlvbl90IGRpcmVjdGlvbjsK CgogIHN0YXRpYyBzaXplX3QgcGFnZVNpemU7CgogIHN0YXRpYyBzaXplX3QgYWxsb2NTaXplOwoK CiAgc3RhdGljIExpc3Q8VmlydHVhbEFsbG9jYXRvciAqPiBsaXN0OwojIDc1ICJ2YWxsb2MuaCIK cHVibGljOgoKICAgICAgICBWaXJ0dWFsQWxsb2NhdG9yKHNpemVfdCBpTWF4TGVuLCBzaXplX3Qg aW5pdGlhbExlbiwgY2hhciAqZGVzYyA9IF9fbnVsbCwgZGlyZWN0aW9uX3QgZGlyID0gbm9ybWFs ICk7CgoKICAgICAgICB+VmlydHVhbEFsbG9jYXRvcigpOwoKCiAgICAgICAgY2hhciAqIEdldERl c2NyaXB0aW9uKCkgeyByZXR1cm4gZGVzY3JpcHRpb247IH0KCiAgICAgICAgc2l6ZV90IEdldE1h eExlbigpIHsgcmV0dXJuIG1heExlbjsgfQoKICAgICAgICBzaXplX3QgR2V0Q3VyTGVuKCkgeyBy ZXR1cm4gY3VyTGVuOyB9CgoKICAgICAgICBib29sIEV4cGFuZChzaXplX3QgbmV3TGVuKTsKCiAg ICAgICAgYm9vbCBSZWR1Y2Uoc2l6ZV90IG5ld0xlbik7CgoKICAgICAgICB2b2lkICogR2V0UG9p bnRlcigpIHsgaWYoIGRpcmVjdGlvbiA9PSBub3JtYWwgKSByZXR1cm4gdG9wOyBlbHNlIHJldHVy biAobG9uZyopKChjaGFyICopdG9wICsgbWF4TGVuKSAtIDE7IH0KCiAgICAgICAgdm9pZCAqIEdl dExpbWl0KCkgeyBpZiggZGlyZWN0aW9uID09IG5vcm1hbCApIHJldHVybiAoY2hhciAqKXRvcCAr IG1heExlbjsgZWxzZSByZXR1cm4gdG9wOyB9CgogICAgICAgIHN0YXRpYyB2b2lkIEluaXQoKTsK CiAgICAgICAgc3RhdGljIGJvb2wgUGFnZUZhdWx0SGFuZGxlcih2b2lkICphZGRyKTsKCgoKICAg ICAgICBzdGF0aWMgc2l6ZV90IEdldFBhZ2VTaXplKCkgeyByZXR1cm4gcGFnZVNpemU7IH0KCn07 CiMgNDYgImFsbC5oIiAyCgojIDEgImNlbGwuaCIgMQojIDQ1ICJjZWxsLmgiCiMgMSAicHJvZmls ZS5oIiAxCiMgMTkgInByb2ZpbGUuaCIKIyAxICJlcnJvcnMuaCIgMQojIDU5ICJlcnJvcnMuaCIK dm9pZCBfRmF0YWwoKTsKIyAxMTQgImVycm9ycy5oIgp2b2lkIF9BYm9ydChjb25zdCBzdHJpbmcg JiwgY29uc3QgY2hhciAqLCBpbnQpOwp2b2lkIF9SdW5FcnJvcihjb25zdCBzdHJpbmcgJik7CnZv aWQgX1J1bkVycm9yKGNvbnN0IHN0cmluZyAmLCBjb25zdCBjaGFyICosIGludCk7CnZvaWQgX1J1 bldhcm4oY29uc3Qgc3RyaW5nICYpOwp2b2lkIF9SdW5XYXJuKGNvbnN0IHN0cmluZyAmLCBjb25z dCBjaGFyICosIGludCk7CnZvaWQgX0luRXJyb3IoY29uc3Qgc3RyaW5nICYpOwp2b2lkIF9JbkVy cm9yKGNvbnN0IHN0cmluZyAmLCBjb25zdCBjaGFyICosIGludCk7CnZvaWQgX0luV2Fybihjb25z dCBzdHJpbmcgJik7CnZvaWQgX0luV2Fybihjb25zdCBzdHJpbmcgJiwgY29uc3QgY2hhciAqLCBp bnQpOwojIDE5MyAiZXJyb3JzLmgiCmV4dGVybiBpbnQgZGVidWdmbGFnOwojIDIwICJwcm9maWxl LmgiIDIKIyA2OCAicHJvZmlsZS5oIgpzdHJ1Y3QgdGltZWJhc2UKewogICAgICAgIGRvdWJsZSB1 c2VydGltZTsKCiAgICAgICAgZG91YmxlIHN5c3RpbWU7CgoKICAgICAgICB0aW1lYmFzZSgpIHsg fQogICAgICAgIHRpbWViYXNlKGRvdWJsZSB1LCBkb3VibGUgcz0wLjApIHsgdXNlcnRpbWUgPSB1 OyBzeXN0aW1lID0gczsgfQogICAgICAgIGZyaWVuZCB0aW1lYmFzZSBvcGVyYXRvcisodGltZWJh c2UgeCwgdGltZWJhc2UgYSkgeyByZXR1cm4gdGltZWJhc2UoeC51c2VydGltZSthLnVzZXJ0aW1l LCB4LnN5c3RpbWUrYS5zeXN0aW1lKTsgfQoKICAgICAgICBmcmllbmQgdGltZWJhc2Ugb3BlcmF0 b3ItKHRpbWViYXNlIHgsIHRpbWViYXNlIGEpIHsgcmV0dXJuIHRpbWViYXNlKHgudXNlcnRpbWUt YS51c2VydGltZSwgeC5zeXN0aW1lLWEuc3lzdGltZSk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWVi YXNlIG9wZXJhdG9yLSh0aW1lYmFzZSBhKSB7IHJldHVybiB0aW1lYmFzZSgtYS51c2VydGltZSwg LWEuc3lzdGltZSk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWViYXNlIG9wZXJhdG9yKih0aW1lYmFz ZSB4LCBkb3VibGUgdmFsKSB7IHJldHVybiB0aW1lYmFzZSh4LnVzZXJ0aW1lKnZhbCwgeC5zeXN0 aW1lKnZhbCk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWViYXNlIG9wZXJhdG9yLyh0aW1lYmFzZSB4 LCBkb3VibGUgdmFsKSB7IHJldHVybiB0aW1lYmFzZSh4LnVzZXJ0aW1lL3ZhbCwgeC5zeXN0aW1l L3ZhbCk7IH0KCiAgICAgICAgZnJpZW5kIGludCBvcGVyYXRvcj4odGltZWJhc2UgeCwgZG91Ymxl IHZhbCkgeyByZXR1cm4gKHgudXNlcnRpbWUgPiB2YWwgfHwgeC5zeXN0aW1lID4gdmFsKTsgfQoK ICAgICAgICBmcmllbmQgaW50IG9wZXJhdG9yPCh0aW1lYmFzZSB4LCBkb3VibGUgdmFsKSB7IHJl dHVybiAoeC51c2VydGltZSA8IHZhbCB8fCB4LnN5c3RpbWUgPCB2YWwpOyB9CgogICAgICAgIHRp bWViYXNlJiBvcGVyYXRvcis9KHRpbWViYXNlICZhKSB7IHVzZXJ0aW1lKz1hLnVzZXJ0aW1lOyBz eXN0aW1lKz1hLnN5c3RpbWU7IHJldHVybiAqdGhpczsgfQoKICAgICAgICB0aW1lYmFzZSYgb3Bl cmF0b3ItPSh0aW1lYmFzZSAmYSkgeyB1c2VydGltZS09YS51c2VydGltZTsgc3lzdGltZS09YS5z eXN0aW1lOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgICAgZG91YmxlIHdhbGx0aW1lKHZvaWQpIHsg cmV0dXJuIHVzZXJ0aW1lICsgc3lzdGltZTsgfQoKCiAgICAgICAgb3N0cmVhbSYgb3V0cHV0KG9z dHJlYW0mIG9zKTsKCn07CiMgMTE1ICJwcm9maWxlLmgiCmNsYXNzIHByb2ZiYXNlCnsKICAgICAg ICBjb25zdCBjaGFyICpuYW1lOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHBhc3NjbnQ7CgogICAg ICAgIHRpbWViYXNlIGFsbHRpbWU7CgogICAgICAgIHRpbWViYXNlIGV4Y3RpbWU7CgoKICAgICAg ICBpbnQgcmVlbnRyYW50Y250OwoKCgpwdWJsaWM6CiAgICAgICAgcHJvZmJhc2UoY29uc3QgY2hh ciAqbikgOiBwYXNzY250KDEpLGFsbHRpbWUoMCksZXhjdGltZSgwKSB7CiAgICAgICAgICBjaGFy KiBubiA9IG5ldyBjaGFyW3N0cmxlbihuKSsxXTsgc3RyY3B5KG5uLG4pOyBuYW1lPW5uOwoKICAg ICAgICAgIHJlZW50cmFudGNudD0xOwoKICAgICAgICB9CgogICAgICAgIH5wcm9mYmFzZSgpIHsg ZGVsZXRlW10gbmFtZTsgfQoKICAgICAgICBjb25zdCBjaGFyICpHZXRLZXkoKSB7IHJldHVybiBu YW1lOyB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9Cgog ICAgICAgIHZvaWQgQWRkVGltZSh0aW1lYmFzZSB0KSB7IGFsbHRpbWUgKz0gdDsgfQoKICAgICAg ICB2b2lkIEV4Y1RpbWUodGltZWJhc2UgdCkgeyBleGN0aW1lICs9IHQ7IH0KCiAgICAgICAgdm9p ZCBJbmNDb3VudCgpIHsgcGFzc2NudCsrOyB9CgoKCiAgICAgICAgdm9pZCBFbnRlcigpIHsgcGFz c2NudCsrOyByZWVudHJhbnRjbnQrKzsgfQoKICAgICAgICBpbnQgTGVhdmUoKSB7IHJldHVybiAt LXJlZW50cmFudGNudDsgfQoKCgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBHZXRQYXNzQ291bnQo KSB7IHJldHVybiBwYXNzY250OyB9CgogICAgICAgIHRpbWViYXNlIEdldEFsbFRpbWUoKSB7IHJl dHVybiBhbGx0aW1lOyB9CgogICAgICAgIHRpbWViYXNlIEdldEV4Y1RpbWUoKSB7IHJldHVybiBl eGN0aW1lOyB9CgoKICAgICAgICBvc3RyZWFtJiBvdXRwdXQob3N0cmVhbSYgb3MpOwoKICAgICAg ICBzdGF0aWMgaW50IHBiY29tcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKCn07CiMg MTg0ICJwcm9maWxlLmgiCmNsYXNzIHByb2YKewogICAgICAgIHRpbWViYXNlIHN0YXJ0X3RpY2s7 CgogICAgICAgIHByb2YgKnBhcmVudDsKCiAgICAgICAgcHJvZmJhc2UgKm15X2Jhc2U7CgogICAg ICAgIHN0YXRpYyBwcm9mICpjdXJyZW50OwoKcHVibGljOgogICAgICAgIHByb2YoY2hhciAqbik7 CgogICAgICAgIH5wcm9mKCk7CgoKICAgICAgICBzdGF0aWMgdGltZWJhc2UgR2V0VGljaygpOwoK ICAgICAgICB2b2lkIEFkZFRpbWUodGltZWJhc2UgdCkgeyBzdGFydF90aWNrICs9IHQ7fQoKCiAg ICAgICAgZnJpZW5kIGNsYXNzIHByb2ZpbGVyOwoKCn07CiMgMjIyICJwcm9maWxlLmgiCmNsYXNz IHByb2Z1c2VyCnsKICAgICAgICB0aW1lYmFzZSBzdGFydF90aWNrOwoKICAgICAgICBwcm9mYmFz ZSAqbXlfYmFzZTsKCiAgICAgICAgcHJvZnVzZXIgKm5leHQ7CgogICAgICAgIHN0YXRpYyBwcm9m dXNlciAqcm9vdDsKCgogICAgICAgIHByb2Z1c2VyICpzZWFyY2hfaW50ZXJuYWwoY29uc3QgY2hh ciAqbmFtZSk7CgoKcHVibGljOgogICAgICAgIHByb2Z1c2VyKGNvbnN0IGNoYXIgKm4pOwoKICAg ICAgICB+cHJvZnVzZXIoKTsKCiAgICAgICAgY29uc3QgY2hhciAqR2V0TmFtZSgpIHsgcmV0dXJu IG15X2Jhc2UtPkdldE5hbWUoKTsgfQoKICAgICAgICBzdGF0aWMgdGltZWJhc2UgR2V0VGljaygp IHsgcmV0dXJuIHByb2Y6OkdldFRpY2soKTsgfQoKICAgICAgICB2b2lkIEFkZFRpbWUodGltZWJh c2UgdCkgeyBzdGFydF90aWNrICs9IHQ7fQoKICAgICAgICB0aW1lYmFzZSBHZXRUaW1lKCkgeyBy ZXR1cm4gc3RhcnRfdGljazsgfQoKCiAgICAgICAgc3RhdGljIHByb2Z1c2VyICpTZWFyY2goY29u c3QgY2hhciAqbmFtZSkgeyBpZiggcm9vdCA9PSBfX251bGwgKSByZXR1cm4gX19udWxsOyBlbHNl IHJldHVybiByb290LT5zZWFyY2hfaW50ZXJuYWwobmFtZSk7IH0KCgogICAgICAgIHN0YXRpYyBw cm9mdXNlciAqR2V0Um9vdCgpIHsgcmV0dXJuIHJvb3Q7fQogICAgICAgIHByb2Z1c2VyICpHZXRO ZXh0KCkgeyByZXR1cm4gbmV4dDsgfQoKICAgICAgICBmcmllbmQgY2xhc3MgcHJvZmlsZXI7Cn07 CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk ZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0 LmgiIDEgMwojIDEwMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKZXh0ZXJuIGludCBf X3NpZ2lzbWVtYmVyIChfX2NvbnN0IF9fc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBfX3Np Z2FkZHNldCAoX19zaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IF9fc2lnZGVsc2V0IChfX3Np Z3NldF90ICosIGludCk7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCgoKCgp0 eXBlZGVmIF9fc2lnX2F0b21pY190IHNpZ19hdG9taWNfdDsKCiMgNTggIi91c3IvaW5jbHVkZS9z aWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ251bS5oIiAxIDMKIyA1OSAiL3Vz ci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA3MyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5 cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KSAoaW50KTsKCgoKCmV4dGVybiBfX3NpZ2hhbmRs ZXJfdCBfX3N5c3Zfc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbCAoaW50IF9f c2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gX19zaWdoYW5kbGVyX3Qgc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFu ZGxlcikgdGhyb3cgKCk7CiMgMTAyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKCgoKCgpleHRl cm4gX19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBf X2hhbmRsZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGtpbGwgKF9fcGlkX3QgX19waWQs IGludCBfX3NpZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9f cGdycCwgaW50IF9fc2lnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFpc2UgKGludCBfX3Np ZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc3NpZ25hbCAoaW50IF9fc2ln LCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpIHRocm93ICgpOwpleHRlcm4gaW50IGdzaWduYWwg KGludCBfX3NpZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwc2lnbmFsIChpbnQgX19zaWcs IF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zaWduYWwu aCIgMwpleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBpbnQgX19pc19z aWcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzaWdwYXVzZSAoaW50IF9fbWFzaykgdGhyb3cg KCk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIGludCBzaWdibG9jayAo aW50IF9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdzZXRtYXNrIChpbnQgX19tYXNr KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2dldG1hc2sgKHZvaWQpIHRocm93ICgpOwojIDE4 OSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnaGFu ZGxlcl90OwoKCgoKdHlwZWRlZiBfX3NpZ2hhbmRsZXJfdCBzaWdfdDsKIyAyMDUgIi91c3IvaW5j bHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMSAzCiMg MjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3dvcmRzaXplLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDIgMwoK CgoKCgoKdHlwZWRlZiB1bmlvbiBzaWd2YWwKICB7CiAgICBpbnQgc2l2YWxfaW50OwogICAgdm9p ZCAqc2l2YWxfcHRyOwogIH0gc2lndmFsX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2lu Zm8uaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdpbmZvCiAgewogICAgaW50IHNpX3NpZ25vOwogICAg aW50IHNpX2Vycm5vOwoKICAgIGludCBzaV9jb2RlOwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAg ICBpbnQgX3BhZFsoKDEyOCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgoKICAgICAgICBzdHJ1Y3QK ICAgICAgICAgIHsKICAgICAgICAgICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlk X3Qgc2lfdWlkOwogICAgICAgICAgfSBfa2lsbDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAg ewogICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3RpbWVyMTsKICAgICAgICAgICAgdW5zaWduZWQg aW50IF90aW1lcjI7CiAgICAgICAgICB9IF90aW1lcjsKCgogICAgICAgIHN0cnVjdAogICAgICAg ICAgewogICAgICAgICAgICBfX3BpZF90IHNpX3BpZDsKICAgICAgICAgICAgX191aWRfdCBzaV91 aWQ7CiAgICAgICAgICAgIHNpZ3ZhbF90IHNpX3NpZ3ZhbDsKICAgICAgICAgIH0gX3J0OwoKCiAg ICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAg ICAgICAgICBfX3VpZF90IHNpX3VpZDsKICAgICAgICAgICAgaW50IHNpX3N0YXR1czsKICAgICAg ICAgICAgX19jbG9ja190IHNpX3V0aW1lOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfc3RpbWU7 CiAgICAgICAgICB9IF9zaWdjaGxkOwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAg ICAgICAgIHZvaWQgKnNpX2FkZHI7CiAgICAgICAgICB9IF9zaWdmYXVsdDsKCgogICAgICAgIHN0 cnVjdAogICAgICAgICAgewogICAgICAgICAgICBsb25nIGludCBzaV9iYW5kOwogICAgICAgICAg ICBpbnQgc2lfZmQ7CiAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZpZWxkczsKICB9 IHNpZ2luZm9fdDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsK ICBTSV9BU1lOQ05MID0gLTYsCgogIFNJX1NJR0lPLAoKICBTSV9BU1lOQ0lPLAoKICBTSV9NRVNH USwKCiAgU0lfVElNRVIsCgogIFNJX1FVRVVFLAoKICBTSV9VU0VSLAoKICBTSV9LRVJORUwgPSAw eDgwCgp9OwoKCgplbnVtCnsKICBJTExfSUxMT1BDID0gMSwKCiAgSUxMX0lMTE9QTiwKCiAgSUxM X0lMTEFEUiwKCiAgSUxMX0lMTFRSUCwKCiAgSUxMX1BSVk9QQywKCiAgSUxMX1BSVlJFRywKCiAg SUxMX0NPUFJPQywKCiAgSUxMX0JBRFNUSwoKfTsKCgplbnVtCnsKICBGUEVfSU5URElWID0gMSwK CiAgRlBFX0lOVE9WRiwKCiAgRlBFX0ZMVERJViwKCiAgRlBFX0ZMVE9WRiwKCiAgRlBFX0ZMVFVO RCwKCiAgRlBFX0ZMVFJFUywKCiAgRlBFX0ZMVElOViwKCiAgRlBFX0ZMVFNVQgoKfTsKCgplbnVt CnsKICBTRUdWX01BUEVSUiA9IDEsCgogIFNFR1ZfQUNDRVJSCgp9OwoKCmVudW0KewogIEJVU19B RFJBTE4gPSAxLAoKICBCVVNfQURSRVJSLAoKICBCVVNfT0JKRVJSCgp9OwoKCmVudW0KewogIFRS QVBfQlJLUFQgPSAxLAoKICBUUkFQX1RSQUNFCgp9OwoKCmVudW0KewogIENMRF9FWElURUQgPSAx LAoKICBDTERfS0lMTEVELAoKICBDTERfRFVNUEVELAoKICBDTERfVFJBUFBFRCwKCiAgQ0xEX1NU T1BQRUQsCgogIENMRF9DT05USU5VRUQKCn07CgoKZW51bQp7CiAgUE9MTF9JTiA9IDEsCgogIFBP TExfT1VULAoKICBQT0xMX01TRywKCiAgUE9MTF9FUlIsCgogIFBPTExfUFJJLAoKICBQT0xMX0hV UAoKfTsKIyAyNzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhy ZWFkX2F0dHJfczsKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2ln ZXZfdmFsdWU7CiAgICBpbnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAg IHVuaW9uCiAgICAgIHsKICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMp XTsKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rp b24pIChzaWd2YWxfdCk7CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0 cmlidXRlOwogICAgICAgICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9 IHNpZ2V2ZW50X3Q7CgoKCgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05P TkUsCgogIFNJR0VWX1RIUkVBRAoKfTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAz CgoKCmV4dGVybiBpbnQgc2lnZW1wdHlzZXQgKHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzaWdmaWxsc2V0IChzaWdzZXRfdCAqX19zZXQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2lnYWRkc2V0IChzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHNpZ2RlbHNldCAoc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWdubykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBzaWdpc21lbWJlciAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQs IGludCBfX3NpZ25vKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWdpc2VtcHR5c2V0IChfX2Nv bnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNp Z3NldF90ICpfX3NldCwgX19jb25zdCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBzaWdzZXRfdCAqX19yaWdodCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz aWdvcnNldCAoc2lnc2V0X3QgKl9fc2V0LCBfX2NvbnN0IHNpZ3NldF90ICpfX2xlZnQsCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc2lnc2V0X3QgKl9fcmlnaHQpIHRocm93ICgpOwoKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdhY3Rpb24uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVk ZS9iaXRzL3NpZ2FjdGlvbi5oIiAzCnN0cnVjdCBzaWdhY3Rpb24KICB7CgoKICAgIHVuaW9uCiAg ICAgIHsKCiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKCiAgICAgICAgdm9pZCAo KnNhX3NpZ2FjdGlvbikgKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7CiAgICAgIH0KICAgIF9f c2lnYWN0aW9uX2hhbmRsZXI7CgoKCgoKCgogICAgX19zaWdzZXRfdCBzYV9tYXNrOwoKCiAgICBp bnQgc2FfZmxhZ3M7CgoKICAgIHZvaWQgKCpzYV9yZXN0b3JlcikgKHZvaWQpOwogIH07CiMgMjM5 ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncHJvY21hc2sgKGlu dCBfX2hvdywgX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAg ICAgICAgICAgICAgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vc2V0KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBzaWdzdXNwZW5kIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzaWdhY3Rpb24gKGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lnYWN0aW9u ICpfX3Jlc3RyaWN0IF9fYWN0LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlv biAqX19yZXN0cmljdCBfX29hY3QpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lncGVuZGluZyAo c2lnc2V0X3QgKl9fc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0 IHNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lnd2FpdGluZm8gKF9fY29uc3Qgc2lnc2V0X3QgKl9f cmVzdHJpY3QgX19zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0 cmljdCBfX2luZm8pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNpZ3RpbWVkd2FpdCAoX19jb25z dCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNp Z2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgc2lncXVldWUgKF9fcGlkX3QgX19waWQsIGludCBfX3NpZywgX19jb25z dCB1bmlvbiBzaWd2YWwgX192YWwpCiAgICAgdGhyb3cgKCk7CiMgMjg0ICIvdXNyL2luY2x1ZGUv c2lnbmFsLmgiIDMKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRd OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qg c2lndmVjCiAgewogICAgX19zaWdoYW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNr OwoKICAgIGludCBzdl9mbGFnczsKCiAgfTsKIyAzMDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIg MwpleHRlcm4gaW50IHNpZ3ZlYyAoaW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWd2ZWMgKl9f dmVjLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ3ZlYyAqX19vdmVjKSB0aHJvdyAoKTsK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWdjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRl eHQuaCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBf ZnByZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGV4cG9uZW50Owp9OwoKc3RydWN0IF9mcHhyZWcgewogICAgICAgIHVuc2ln bmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50 OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZGRpbmdbM107Cn07CgpzdHJ1Y3QgX3htbXJlZyB7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50WzRdOwp9OwoKc3RydWN0IF9mcHN0YXRlIHsK CiAgICAgICAgdW5zaWduZWQgbG9uZyBjdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgdGFnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXBvZmY7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBjc3NlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBkYXRhc2VsOwogICAgICAgIHN0cnVjdCBfZnByZWcgX3N0Wzhd OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBt YWdpYzsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgX2Z4c3JfZW52WzZdOwogICAgICAgIHVuc2ln bmVkIGxvbmcgbXhjc3I7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICAgICAgICBz dHJ1Y3QgX2ZweHJlZyBfZnhzcl9zdFs4XTsKICAgICAgICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhd OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFkZGluZ1s1Nl07Cn07CgoKCnN0cnVjdCBzaWdjb250 ZXh0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBlc2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYng7CiAgICAgICAg dW5zaWduZWQgbG9uZyBlZHg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlY3g7CiAgICAgICAgdW5z aWduZWQgbG9uZyBlYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgICAgICAgdW5z aWduZWQgbG9uZyBlcnI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgY3MsIF9fY3NoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZXNwX2F0X3NpZ25hbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywg X19zc2g7CiAgICAgICAgc3RydWN0IF9mcHN0YXRlICogZnBzdGF0ZTsKICAgICAgICB1bnNpZ25l ZCBsb25nIG9sZG1hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcjI7Cn07CiMgMjkgIi91c3Iv aW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUvc2lnbmFs LmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3Ap IHRocm93ICgpOwojIDMyNiAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2ln aW50ZXJydXB0IChpbnQgX19zaWcsIGludCBfX2ludGVycnVwdCkgdGhyb3cgKCk7CgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9z aWdzdGFjay5oIiAzCnN0cnVjdCBzaWdzdGFjawogIHsKICAgIHZvaWQgKnNzX3NwOwogICAgaW50 IHNzX29uc3RhY2s7CiAgfTsKCgoKZW51bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FC TEUKCn07CiMgNTAgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDMKdHlwZWRlZiBzdHJ1 Y3Qgc2lnYWx0c3RhY2sKICB7CiAgICB2b2lkICpzc19zcDsKICAgIGludCBzc19mbGFnczsKICAg IHNpemVfdCBzc19zaXplOwogIH0gc3RhY2tfdDsKIyAzMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS91Y29udGV4dC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs dWRlL3Vjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDIg MwoKCgp0eXBlZGVmIGludCBncmVnX3Q7CgoKCgoKdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90WzE5 XTsKCgoKZW51bQp7CiAgUkVHX0dTID0gMCwKCiAgUkVHX0ZTLAoKICBSRUdfRVMsCgogIFJFR19E UywKCiAgUkVHX0VESSwKCiAgUkVHX0VTSSwKCiAgUkVHX0VCUCwKCiAgUkVHX0VTUCwKCiAgUkVH X0VCWCwKCiAgUkVHX0VEWCwKCiAgUkVHX0VDWCwKCiAgUkVHX0VBWCwKCiAgUkVHX1RSQVBOTywK CiAgUkVHX0VSUiwKCiAgUkVHX0VJUCwKCiAgUkVHX0NTLAoKICBSRUdfRUZMLAoKICBSRUdfVUVT UCwKCiAgUkVHX1NTCgp9OwoKCgpzdHJ1Y3QgX2xpYmNfZnByZWcKewogIHVuc2lnbmVkIHNob3J0 IGludCBzaWduaWZpY2FuZFs0XTsKICB1bnNpZ25lZCBzaG9ydCBpbnQgZXhwb25lbnQ7Cn07Cgpz dHJ1Y3QgX2xpYmNfZnBzdGF0ZQp7CiAgdW5zaWduZWQgbG9uZyBpbnQgY3c7CiAgdW5zaWduZWQg bG9uZyBpbnQgc3c7CiAgdW5zaWduZWQgbG9uZyBpbnQgdGFnOwogIHVuc2lnbmVkIGxvbmcgaW50 IGlwb2ZmOwogIHVuc2lnbmVkIGxvbmcgaW50IGNzc2VsOwogIHVuc2lnbmVkIGxvbmcgaW50IGRh dGFvZmY7CiAgdW5zaWduZWQgbG9uZyBpbnQgZGF0YXNlbDsKICBzdHJ1Y3QgX2xpYmNfZnByZWcg X3N0WzhdOwogIHVuc2lnbmVkIGxvbmcgaW50IHN0YXR1czsKfTsKCgp0eXBlZGVmIHN0cnVjdCBf bGliY19mcHN0YXRlICpmcHJlZ3NldF90OwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgZ3JlZ3Nl dF90IGdyZWdzOwoKCiAgICBmcHJlZ3NldF90IGZwcmVnczsKICAgIHVuc2lnbmVkIGxvbmcgaW50 IG9sZG1hc2s7CiAgICB1bnNpZ25lZCBsb25nIGludCBjcjI7CiAgfSBtY29udGV4dF90OwoKCnR5 cGVkZWYgc3RydWN0IHVjb250ZXh0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgdWNfZmxhZ3M7 CiAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjX2xpbms7CiAgICBzdGFja190IHVjX3N0YWNrOwogICAg bWNvbnRleHRfdCB1Y19tY29udGV4dDsKICAgIF9fc2lnc2V0X3QgdWNfc2lnbWFzazsKICAgIHN0 cnVjdCBfbGliY19mcHN0YXRlIF9fZnByZWdzX21lbTsKICB9IHVjb250ZXh0X3Q7CiMgMjggIi91 c3IvaW5jbHVkZS91Y29udGV4dC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgZ2V0 Y29udGV4dCAodWNvbnRleHRfdCAqX191Y3ApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2V0Y29u dGV4dCAoX19jb25zdCB1Y29udGV4dF90ICpfX3VjcCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg c3dhcGNvbnRleHQgKHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX19vdWNwLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX191Y3ApIHRocm93ICgp OwoKCgoKCgoKZXh0ZXJuIHZvaWQgbWFrZWNvbnRleHQgKHVjb250ZXh0X3QgKl9fdWNwLCB2b2lk ICgqX19mdW5jKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hcmdjLCAu Li4pIHRocm93ICgpOwoKfQojIDMzMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgoKCgpl eHRlcm4gaW50IHNpZ3N0YWNrIChzdHJ1Y3Qgc2lnc3RhY2sgKl9fc3MsIHN0cnVjdCBzaWdzdGFj ayAqX19vc3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrIChfX2NvbnN0IHN0 cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0cmljdCBfX3NzLAogICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9fcmVzdHJpY3QgX19vc3MpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBzaWdob2xkIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2ln cmVsc2UgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdpZ25vcmUgKGludCBf X3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHNpZ3NldCAoaW50IF9fc2ln LCBfX3NpZ2hhbmRsZXJfdCBfX2Rpc3ApIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDM2NSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAy IDMKCgoKCgoKCmV4dGVybiBpbnQgX19saWJjX2N1cnJlbnRfc2lncnRtaW4gKHZvaWQpIHRocm93 ICgpOwoKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCAodm9pZCkgdGhyb3cgKCk7 CgoKCn0KIyAyNjYgInByb2ZpbGUuaCIgMgojIDI3OCAicHJvZmlsZS5oIgpjbGFzcyBwcm9maWxl cgp7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkIFNJR0FMUk1fSGFuZGxlcihpbnQpOwogICAgICAg IHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZGFjdF9TSUdBTFJNOwogICAgICAgIHN0YXRpYyBj b25zdCB0aW1lYmFzZSB0aWNrdW5pdDsKCiAgICAgICAgc3RhdGljIGludCBwcm9maWxlX2Jsb2Nr X2NvdW50OwoKICAgICAgICBwcm9mICpwOwoKcHVibGljOgogICAgICAgIHByb2ZpbGVyKCk7Cgog ICAgICAgIH5wcm9maWxlcigpOwoKCgogICAgICAgIHN0YXRpYyB2b2lkIERpc2FibGVQcm9maWxp bmcoKSB7IHByb2ZpbGVfYmxvY2tfY291bnQgKys7IH0KCiAgICAgICAgc3RhdGljIHZvaWQgRW5h YmxlUHJvZmlsaW5nKCkgeyBpZiggcHJvZmlsZV9ibG9ja19jb3VudCA8PSAwICkgX0Fib3J0KCgi QmFkIFByb2ZpbGluZyIpLCAicHJvZmlsZS5oIiwgMzAxKTsgcHJvZmlsZV9ibG9ja19jb3VudC0t OyB9CgogICAgICAgIHN0YXRpYyBib29sIElzUHJvZmlsaW5nKCkgeyByZXR1cm4gcHJvZmlsZV9i bG9ja19jb3VudCA9PSAwOyB9CgoKCgoKCn07CiMgNDYgImNlbGwuaCIgMgojIDEgImhhc2guaCIg MQojIDc2ICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUS2V5PiB1aW50IEhhc2hGdW5jdGlvbihj b25zdCBUS2V5ICYpOwp0ZW1wbGF0ZSA8Y2xhc3MgVEtleT4gYm9vbCBIYXNoS2V5RXF1YWwoY29u c3QgVEtleSAmLCBjb25zdCBUS2V5ICYpOwoKaW5saW5lIHVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0 IHVsb25nICZwKQp7CgoKCiAgICAgICAgcmV0dXJuIChwKjB4YTQyMyk+PjE1OwoKfQoKCmlubGlu ZSBib29sIEhhc2hLZXlFcXVhbChjb25zdCB1bG9uZyAmcCwgY29uc3QgdWxvbmcgJnEpCnsKICAg ICAgICByZXR1cm4gcCA9PSBxOwp9CgoKdWludCBIYXNoRnVuY3Rpb24xKGNoYXIgY29uc3QgKik7 CmlubGluZSB1aW50IEhhc2hGdW5jdGlvbihjaGFyIGNvbnN0ICogY29uc3QgJnApIHsgcmV0dXJu IEhhc2hGdW5jdGlvbjEocCk7IH0KaW5saW5lIGJvb2wgSGFzaEtleUVxdWFsKGNoYXIgY29uc3Qg KiBjb25zdCAmcCwgY2hhciBjb25zdCAqIGNvbnN0ICZxKQp7CiAgICAgICAgcmV0dXJuICEgc3Ry Y21wKHAsIHEpOwp9CiMgMTMwICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBU b2JqLCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgSGFzaAp7CnB1Ymxp YzoKICAgICAgICB0eXBlZGVmIFRrZXkgaGFzaGtleV90OwogICAgICAgIHR5cGVkZWYgVG9iaiBv YmpfdDsKICAgICAgICB0eXBlZGVmIEFsbG9jIGFsbG9jYXRvcl90OwoKcHJpdmF0ZToKCiAgICAg ICAgVG9iaiAqKnRhYmxlOwoKICAgICAgICB1bnNpZ25lZCB0YWJsZXNpemU7CgogICAgICAgIHVu c2lnbmVkIG5kYXRhOwoKICAgICAgICBhbGxvY2F0b3JfdCBhbGxvYzsKCgpwdWJsaWM6CiAgICAg ICAgICAgICAgICBIYXNoKHVuc2lnbmVkIGluaXNpemUgPSAxMDI0KTsKCiAgICAgICAgICAgICAg ICBIYXNoKHVuc2lnbmVkIGluaXNpemUsIGFsbG9jYXRvcl90IGlhbGxvYyk7CgogICAgICAgICAg ICAgICAgSGFzaChjb25zdCBIYXNoPFRrZXksIFRvYmo+ICZ0KTsKCiAgICAgICAgICAgICAgICB+ SGFzaCgpOwoKCiAgICAgICAgdW5zaWduZWQgR2V0TkRhdGEoKSBjb25zdCB7IHJldHVybiBuZGF0 YTsgfQoKICAgICAgICB1bnNpZ25lZCBHZXRUYWJsZVNpemUoKSBjb25zdCB7IHJldHVybiB0YWJs ZXNpemU7IH0KCgogICAgICAgIFRvYmogKkFkZChUb2JqICpkYXRhKTsKCgoKCiAgICAgICAgVG9i aiAqQWRkT3JSZXBsYWNlKFRvYmogKmRhdGEpOwoKCgoKICAgICAgICBUb2JqICpEZWxldGUoVG9i aiAqZGF0YSk7CgogICAgICAgIFRvYmogKkZpbmQoVGtleSBLZXkpIGNvbnN0OwoKCgoKICAgICAg ICBUb2JqICpQaWNrKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdGFibGVbaW5kZXhdOyB9CgoK ICAgICAgICB2b2lkIENsZWFyVGFibGUoKSB7IG5kYXRhID0gMDsgbWVtc2V0KHRhYmxlLCAwLCB0 YWJsZXNpemUqc2l6ZW9mKFRvYmogKikpOyB9CgogICAgICAgIHZvaWQgRGVsZXRlQWxsRGF0YSgp OwoKCiAgICAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7IHJldHVybiA6Om9w ZXJhdG9yIG5ldyhzaXplKTsgfQogICAgICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6 ZSwgYWxsb2NhdG9yX3QmIGFsbG9jKSB7IHJldHVybiBhbGxvYy5hbGxvY2F0ZV9ieXRlcyhzaXpl KTsgfQoKcHJvdGVjdGVkOgogICAgICAgIHN0YXRpYyB1aW50IGhhc2goVGtleSBrZXkpIHsgcmV0 dXJuIEhhc2hGdW5jdGlvbihrZXkpOyB9CgogICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFRrZXkg azEsIFRrZXkgazIpIHsgcmV0dXJuIEhhc2hLZXlFcXVhbChrMSwgazIpOyB9CgogICAgICAgIHZv aWQgRXhwYW5kVGFibGUoKTsKCn07CiMgMjEzICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUb2Jq LCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgU3RyaW5nSGFzaCA6IHB1 YmxpYyBIYXNoPGNvbnN0IGNoYXIgKiwgVG9iaiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhh c2g8Y29uc3QgY2hhciAqLCBUb2JqLCBBbGxvYz4gaGFzaF90OwogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaGFzaF90OjphbGxvY2F0b3JfdCBhbGxvY2F0b3JfdDsKICAgICAgICB0eXBlZGVmIHR5 cGVuYW1lIGhhc2hfdDo6aGFzaGtleV90IGhhc2hrZXlfdDsKcHVibGljOgogICAgICAgICAgICAg ICAgU3RyaW5nSGFzaCgpIDogSGFzaDxoYXNoa2V5X3QsIFRvYmosIEFsbG9jPigpIHsgfQogICAg ICAgICAgICAgICAgU3RyaW5nSGFzaCh1bnNpZ25lZCBpLCBhbGxvY2F0b3JfdCBpYWxsb2MgPSBh bGxvY2F0b3JfdCgpKSA6IEhhc2g8aGFzaGtleV90LCBUb2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7 IH0KICAgICAgICAgICAgICAgIFN0cmluZ0hhc2goY29uc3QgSGFzaDxoYXNoa2V5X3QsIFRvYmo+ ICZoKSA6IEhhc2g8aGFzaGtleV90LCBUb2JqLCBBbGxvYz4oaCkgeyB9CiAgICAgICAgICAgICAg ICBTdHJpbmdIYXNoKGNvbnN0IFN0cmluZ0hhc2g8VG9iaj4gJmgpIDogSGFzaDxoYXNoa2V5X3Qs IFRvYmosIEFsbG9jPihoKSB7IH0KCiAgICAgICAgICAgICAgICBUb2JqICpGaW5kKGNvbnN0IHN0 cmluZyAmS2V5KSBjb25zdCB7IHJldHVybiBGaW5kKEtleS5jX3N0cigpKTsgfQp9OwojIDI0MCAi aGFzaC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVG9iaiwgY2xhc3MgQWxsb2MgPSBhbGxvY2F0b3I8VG9i aiAqPiA+CmNsYXNzIEludGVnZXJIYXNoIDogcHVibGljIEhhc2g8dW5zaWduZWQgbG9uZywgVG9i aiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhhc2g8dW5zaWduZWQgbG9uZywgVG9iaiwgQWxs b2M+IGhhc2hfdDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2hfdDo6YWxsb2NhdG9yX3Qg YWxsb2NhdG9yX3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoX3Q6Omhhc2hrZXlfdCBo YXNoa2V5X3Q7CnB1YmxpYzoKICAgICAgICAgICAgICAgIEludGVnZXJIYXNoKCkgOiBIYXNoPGhh c2hrZXlfdCwgVG9iaiwgQWxsb2M+KCkgeyB9CiAgICAgICAgICAgICAgICBJbnRlZ2VySGFzaCh1 bnNpZ25lZCBpLCBhbGxvY2F0b3JfdCBpYWxsb2MgPSBhbGxvY2F0b3JfdCgpKSA6IEhhc2g8aGFz aGtleV90LCBUb2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7IH0KICAgICAgICAgICAgICAgIEludGVn ZXJIYXNoKGNvbnN0IEhhc2g8aGFzaGtleV90LCBUb2JqPiAmaCkgOiBIYXNoPGhhc2hrZXlfdCwg VG9iaiwgQWxsb2M+KGgpIHsgfQogICAgICAgICAgICAgICAgSW50ZWdlckhhc2goY29uc3QgSW50 ZWdlckhhc2g8VG9iaj4gJmgpIDogSGFzaDxoYXNoa2V5X3QsIFRvYmosIEFsbG9jPihoKSB7IH0K fTsKIyAyNjYgImhhc2guaCIKdGVtcGxhdGUgPGNsYXNzIFRvYmo+CmNsYXNzIEhhc2hFbnRyeQp7 CiAgICAgICAgVG9iaiB0OwoKcHVibGljOgogICAgICAgIEhhc2hFbnRyeShjb25zdCBUb2JqICZf dCkgOiB0KF90KSB7IH0KICAgICAgICB+SGFzaEVudHJ5KCkgeyB9CgogICAgICAgIGNvbnN0IFRv YmomIEdldEtleSgpIHsgcmV0dXJuIHQ7IH0KCiAgICAgICAgb3BlcmF0b3IgVG9iaiAmKCkgeyBy ZXR1cm4gdDt9Cgp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVGtleSwgY2xhc3MgVG9iaiwgY2xhc3Mg QWxsb2M+Ckhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpIYXNoKHVuc2lnbmVkIGluaXNpemUpIDog YWxsb2MoKQp7CgoKICAgICAgICBpZiggaW5pc2l6ZSA9PSAwIHx8IChpbmlzaXplICYgKGluaXNp emUtMSkpICE9IDAgKQogICAgICAgICAgICAgICAgaW5pc2l6ZSA9IDEwMjQ7CiAgICAgICAgdGFi bGVzaXplID0gaW5pc2l6ZTsKICAgICAgICBuZGF0YSA9IDA7CiAgICAgICAgdGFibGUgPSBhbGxv Yy5hbGxvY2F0ZShpbmlzaXplKTsKICAgICAgICB3aGlsZSggaW5pc2l6ZSApCiAgICAgICAgICAg ICAgICB0YWJsZVstLWluaXNpemVdID0gX19udWxsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVGtleSwg Y2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+Ckhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpIYXNoKHVu c2lnbmVkIGluaXNpemUsIGFsbG9jYXRvcl90IGlhbGxvYykgOiBhbGxvYyhpYWxsb2MpCnsKCgog ICAgICAgIGlmKCBpbmlzaXplID09IDAgfHwgKGluaXNpemUgJiAoaW5pc2l6ZS0xKSkgIT0gMCAp CiAgICAgICAgICAgICAgICBpbmlzaXplID0gMTAyNDsKICAgICAgICB0YWJsZXNpemUgPSBpbmlz aXplOwogICAgICAgIG5kYXRhID0gMDsKICAgICAgICB0YWJsZSA9IGFsbG9jLmFsbG9jYXRlKGlu aXNpemUpOwogICAgICAgIHdoaWxlKCBpbmlzaXplICkKICAgICAgICAgICAgICAgIHRhYmxlWy0t aW5pc2l6ZV0gPSBfX251bGw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBj bGFzcyBBbGxvYz4KSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46Okhhc2goY29uc3QgSGFzaDxUa2V5 LCBUb2JqPiAmdCkKewogICAgICAgIHRhYmxlc2l6ZSA9IHQudGFibGVzaXplOwogICAgICAgIG5k YXRhID0gdC5uZGF0YTsKICAgICAgICBhbGxvYyA9IHQuYWxsb2M7CiAgICAgICAgdGFibGUgPSBh bGxvYy5hbGxvY2F0ZSh0YWJsZXNpemUpOwogICAgICAgIGZvciggdWludCBpPTA7IGk8dGFibGVz aXplOyBpKysgKQogICAgICAgICAgICAgICAgdGFibGVbaV0gPSB0LnRhYmxlW2ldOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgVGtleSwgY2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+Ckhhc2g8VGtleSwgVG9i aiwgQWxsb2M+Ojp+SGFzaCgpCnsKICAgICAgICA7CgogICAgICAgIGFsbG9jLmRlYWxsb2NhdGUo dGFibGUsIHRhYmxlc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBj bGFzcyBBbGxvYz4KVG9iaiAqSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46OkFkZChUb2JqICp0KQp7 CgoKCiAgICAgICAgVG9iaiAqKnA7CiAgICAgICAgOwogICAgICAgIDsKCiAgICAgICAgVGtleSBr ZXkgPSAoVGtleSkodC0+R2V0S2V5KCkpOwogICAgICAgIGludCBoID0gaGFzaChrZXkpOwoKICAg ICAgICBpZiggbmRhdGEgKiA4ID4gdGFibGVzaXplICkKICAgICAgICAgICAgICAgIEV4cGFuZFRh YmxlKCk7CgogICAgICAgIHdoaWxlKCAqKHA9JnRhYmxlW2ggJiAodGFibGVzaXplLTEpXSkgIT0g X19udWxsICkKICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICBpZiggZXF1YWwoKFRrZXkpKCgq cCktPkdldEtleSgpKSwga2V5KSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpwOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgaCsrOwogICAgICAgIH0KICAgICAgICBuZGF0YSsrOwogICAg ICAgICpwID0gdDsKICAgICAgICByZXR1cm4gX19udWxsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVGtl eSwgY2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+ClRvYmogKkhhc2g8VGtleSwgVG9iaiwgQWxsb2M+ OjpBZGRPclJlcGxhY2UoVG9iaiAqdCkKewoKCgogICAgICAgIFRvYmogKipwOwogICAgICAgIDsK ICAgICAgICA7CgogICAgICAgIFRrZXkga2V5ID0gKFRrZXkpKHQtPkdldEtleSgpKTsKICAgICAg ICBpbnQgaCA9IGhhc2goa2V5KTsKCiAgICAgICAgaWYoIG5kYXRhICogOCA+IHRhYmxlc2l6ZSAp CiAgICAgICAgICAgICAgICBFeHBhbmRUYWJsZSgpOwoKICAgICAgICB3aGlsZSggKihwPSZ0YWJs ZVtoICYgKHRhYmxlc2l6ZS0xKV0pICE9IF9fbnVsbCApCiAgICAgICAgewoKCgogICAgICAgICAg ICAgICAgaWYoIGVxdWFsKChUa2V5KSgoKnApLT5HZXRLZXkoKSksIGtleSkgKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUb2JqKiBvbGRwID0gKnA7CiAgICAgICAg ICAgICAgICAgICAgICAgICpwID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9s ZHA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoKys7CiAgICAgICAgfQogICAg ICAgIG5kYXRhKys7CiAgICAgICAgKnAgPSB0OwogICAgICAgIHJldHVybiBfX251bGw7Cn0KCnRl bXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBjbGFzcyBBbGxvYz4KVG9iaiAqSGFzaDxU a2V5LCBUb2JqLCBBbGxvYz46OkRlbGV0ZShUb2JqICp0KQp7CgoKCiAgICAgICAgVG9iaiAqcDsK ICAgICAgICA7CiAgICAgICAgOwoKICAgICAgICBUa2V5IGtleSA9IChUa2V5KSh0LT5HZXRLZXko KSk7CiAgICAgICAgaW50IGggPSBoYXNoKGtleSk7CgogICAgICAgIHdoaWxlKCAocCA9IHRhYmxl W2ggJiAodGFibGVzaXplLTEpXSkgIT0gX19udWxsICkgewogICAgICAgICAgICAgICAgaWYoIGVx dWFsKChUa2V5KXAtPkdldEtleSgpLCBrZXkpICkgYnJlYWs7CiAgICAgICAgICAgICAgICBoKys7 CiAgICAgICAgfQogICAgICAgIGlmICh0YWJsZVtoICYgKHRhYmxlc2l6ZS0xKV0gPT0gX19udWxs KSB7CiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICByZXR1cm4gX19udWxsOwogICAg ICAgIH0KICAgICAgICBpbnQgaF9vcmlnID0gaDsKICAgICAgICB3aGlsZSggdGFibGVbaCAmICh0 YWJsZXNpemUtMSldICE9IF9fbnVsbCApIHsKICAgICAgICAgICAgICAgIGgrKzsKICAgICAgICB9 CiAgICAgICAgc2l6ZV90IGFsbG9jc2l6ZT0gaCAtIGhfb3JpZzsKICAgICAgICBUb2JqKiogaGFz aF9idWYgPSBhbGxvYy5hbGxvY2F0ZShhbGxvY3NpemUpOwogICAgICAgIGggPSAwOwogICAgICAg IHdoaWxlKCB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6ZS0xKV0gIT0gX19udWxsICkgewog ICAgICAgICAgICAgICAgaGFzaF9idWZbaF0gPSB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6 ZS0xKV07CiAgICAgICAgICAgICAgICB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6ZS0xKV0g PSBfX251bGw7CiAgICAgICAgICAgICAgICBoKys7CiAgICAgICAgfQogICAgICAgIGgtLTsKICAg ICAgICBmb3IgKDsgaD4wOyBoLS0pCiAgICAgICAgICAgICAgICBBZGQoaGFzaF9idWZbaF0pOwog ICAgICAgIFRvYmoqIHJldF9vYmogPSBoYXNoX2J1ZlswXTsKICAgICAgICBhbGxvYy5kZWFsbG9j YXRlKGhhc2hfYnVmLCBhbGxvY3NpemUpOwogICAgICAgIG5kYXRhLS07CiAgICAgICAgcmV0dXJu IHJldF9vYmo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBjbGFzcyBBbGxv Yz4KVG9iaiAqSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46OkZpbmQoVGtleSBrZXkpIGNvbnN0CnsK ICAgICAgICBUb2JqICoqcDsKICAgICAgICA7CgogICAgICAgIGludCBoID0gaGFzaChrZXkpOwoK ICAgICAgICB3aGlsZSggKihwPSZ0YWJsZVtoICYgKHRhYmxlc2l6ZS0xKV0pICE9IF9fbnVsbCAp CiAgICAgICAgewogICAgICAgICAgICAgICAgVGtleSBwa2V5ID0gKFRrZXkpKCpwKS0+R2V0S2V5 KCk7CiAgICAgICAgICAgICAgICBpZiggZXF1YWwocGtleSwga2V5KSApCiAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAqcDsKICAgICAgICAgICAgICAgIGgrKzsKICAgICAgICB9CiAgICAg ICAgcmV0dXJuIF9fbnVsbDsKfQoKdGVtcGxhdGUgPGNsYXNzIFRrZXksIGNsYXNzIFRvYmosIGNs YXNzIEFsbG9jPgp2b2lkIEhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpFeHBhbmRUYWJsZSgpCnsK ICAgICAgICBwcm9mIHByb2ZfX19MSU5FX18oIkhhc2g6OkV4cGFuZFRhYmxlKCkiKTsKICAgICAg ICA7CiAgICAgICAgOwogICAgICAgIDsKCiAgICAgICAgVG9iaiAqKm9sZHRhYmxlID0gdGFibGU7 CiAgICAgICAgaW50IG9sZHRhYmxlc2l6ZSA9IHRhYmxlc2l6ZTsKCiAgICAgICAgdGFibGVzaXpl ID0gdGFibGVzaXplIDw8IDE7CiAgICAgICAgdGFibGUgPSBhbGxvYy5hbGxvY2F0ZSh0YWJsZXNp emUpOwogICAgICAgIG5kYXRhID0gMDsKCiAgICAgICAgaW50IGluaXNpemUgPSB0YWJsZXNpemU7 CiAgICAgICAgd2hpbGUoIGluaXNpemUgKQogICAgICAgICAgICAgICAgdGFibGVbLS1pbmlzaXpl XSA9IF9fbnVsbDsKCiAgICAgICAgZm9yKCBpbnQgaT0wOyBpPG9sZHRhYmxlc2l6ZTsgaSsrICkK ICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggb2xkdGFibGVbaV0gIT0gX19udWxsICkKICAg ICAgICAgICAgICAgICAgICAgICAgQWRkKG9sZHRhYmxlW2ldKTsKICAgICAgICB9CiAgICAgICAg YWxsb2MuZGVhbGxvY2F0ZShvbGR0YWJsZSwgb2xkdGFibGVzaXplKTsKfQoKdGVtcGxhdGUgPGNs YXNzIFRrZXksIGNsYXNzIFRvYmosIGNsYXNzIEFsbG9jPgp2b2lkIEhhc2g8VGtleSwgVG9iaiwg QWxsb2M+OjpEZWxldGVBbGxEYXRhKCkKewogICAgICAgIDsKICAgICAgICA7CiAgICAgICAgOwoK ICAgICAgICBmb3IoIHVpbnQgaT0wOyBpPHRhYmxlc2l6ZTsgaSsrICkKICAgICAgICAgICAgICAg IGlmKCB0YWJsZVtpXSAhPSBfX251bGwgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICBkZWxldGUgdGFibGVbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl W2ldID0gX19udWxsOwogICAgICAgICAgICAgICAgfQp9CiMgNTE5ICJoYXNoLmgiCnRlbXBsYXRl IDxjbGFzcyBUPgpjbGFzcyBWYXJBcnJheQp7CiAgICAgICAgVCAqKmFycnM7CgogICAgICAgIFQg Km5leHRwOwoKICAgICAgICBpbnQgc2l6ZTsKCiAgICAgICAgc3RhdGljIGludCBncm93c3RlcDsK CiAgICAgICAgc3RhdGljIGludCBncm93Yml0czsKICAgICAgICBzdGF0aWMgaW50IGdyb3dtYXNr OwoKCnB1YmxpYzoKICAgICAgICBWYXJBcnJheSgpOwoKICAgICAgICBWYXJBcnJheShWYXJBcnJh eTxUPiAmdik7CgogICAgICAgIH5WYXJBcnJheSgpOwoKICAgICAgICBpbnQgR2V0U2l6ZSgpIGNv bnN0IHsgcmV0dXJuIHNpemU7IH0KCiAgICAgICAgVCAmb3BlcmF0b3JbXShpbnQgaSkgeyA7IHJl dHVybiBhcnJzW2k+Pmdyb3diaXRzXVtpJmdyb3dtYXNrXTsgfQogICAgICAgIGNvbnN0IFQgJm9w ZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgOyByZXR1cm4gYXJyc1tpPj5ncm93Yml0c11baSZncm93 bWFza107IH0KCiAgICAgICAgVCAmTmV4dCgpIHsgaWYoIChzaXplICYgKGdyb3dzdGVwLTEpKSA9 PSAwICkgUmVzaXplKHNpemUpOyBzaXplKys7IHJldHVybiAqKG5leHRwKyspOyB9CgogICAgICAg IGludCBHZXRMaW1pdChpbnQgaSkgeyByZXR1cm4gKGl8Z3Jvd21hc2spKzE7IH0KCiAgICAgICAg dm9pZCBSZXNpemUoaW50IGkpOwoKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpWYXJBcnJheTxUPjo6 VmFyQXJyYXkoKSB7IGFycnMgPSBfX251bGw7IG5leHRwID0gX19udWxsOyBzaXplID0gMDsgfQoK dGVtcGxhdGUgPGNsYXNzIFQ+ClZhckFycmF5PFQ+OjpWYXJBcnJheShWYXJBcnJheTxUPiAmdikK ewogICAgICAgIGlmKCB2LmFycnMgPT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgICAgICAg ICBhcnJzID0gX19udWxsOwogICAgICAgICAgICAgICAgbmV4dHAgPSBfX251bGw7CiAgICAgICAg ICAgICAgICBzaXplID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg ICBzaXplID0gdi5zaXplOwoKCgoKCgoKICAgICAgICAgICAgICAgIGludCBhcnJzc2l6ZSA9ICgo KHNpemUrZ3Jvd21hc2spPj5ncm93Yml0cykrMTI4IC0xKSZ+KDEyOCAtMSk7CiAgICAgICAgICAg ICAgICBhcnJzID0gbmV3IFQgKlthcnJzc2l6ZV07CiAgICAgICAgICAgICAgICBmb3IoIGludCBp PTA7IGk8KChzaXplK2dyb3dtYXNrKT4+Z3Jvd2JpdHMpOyBpKysgKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICBhcnJzW2ldID0gbmV3IFRbZ3Jvd3N0ZXBdOwogICAg ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYXJyc1tpXSwgdi5hcnJzW2ldLCBzaXplb2YoVCkq Z3Jvd3N0ZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbmV4dHAgPSBhcnJz Wygoc2l6ZStncm93bWFzayk+Pmdyb3diaXRzKS0xXSArIChzaXplJmdyb3dtYXNrKTsKICAgICAg ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpWYXJBcnJheTxUPjo6flZhckFycmF5KCkKewogICAg ICAgIDsKCiAgICAgICAgZm9yKCBpbnQgaj0wOyBqPCgoc2l6ZStncm93bWFzayk+Pmdyb3diaXRz KTsgaisrKQogICAgICAgICAgICAgICAgZGVsZXRlW10gYXJyc1tqXTsKICAgICAgICBkZWxldGVb XSBhcnJzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBWYXJBcnJheTxUPjo6UmVzaXplKGlu dCBpKQp7CiAgICAgICAgaW50IGlpID0gaSA+PiBncm93Yml0czsKICAgICAgICBpZiggKGlpICYg KDEyOCAtIDEpKSA9PSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBUICoqbmV3YXJycyA9 IG5ldyBUICpbaWkrMTI4XTsKICAgICAgICAgICAgICAgIGlmKCBhcnJzICE9IF9fbnVsbCApCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShuZXdhcnJzLCBh cnJzLCAoc2l6ZSA+PiBncm93Yml0cykgKiBzaXplb2YoVCAqKSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGRlbGV0ZVtdIGFycnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBh cnJzID0gbmV3YXJyczsKICAgICAgICB9CiAgICAgICAgYXJyc1tpaV0gPSBuZXh0cCA9IG5ldyBU W2dyb3dzdGVwXTsKfQojIDYyOSAiaGFzaC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgVmFy QXJyYXlJdGVyYXRvcgp7CiAgICAgICAgVmFyQXJyYXk8VD4gJmFycjsKCiAgICAgICAgVCAqcDsK CiAgICAgICAgVCAqbGltaXQ7CgogICAgICAgIGludCBsaW1pdHB0cjsKCnB1YmxpYzoKICAgICAg ICBWYXJBcnJheUl0ZXJhdG9yKFZhckFycmF5PFQ+ICZpYXJyKSA6IGFycihpYXJyKSB7IEp1bXAo MCk7IH0KICAgICAgICBWYXJBcnJheUl0ZXJhdG9yKFZhckFycmF5PFQ+ICZpYXJyLCBpbnQgaWR4 KSA6IGFycihpYXJyKSB7IEp1bXAoaWR4KTsgfQoKICAgICAgICB+VmFyQXJyYXlJdGVyYXRvcigp IHsgfQoKICAgICAgICBvcGVyYXRvciBUICooKSB7IHJldHVybiBwOyB9CiAgICAgICAgVCAqb3Bl cmF0b3IgLT4oKSB7IHJldHVybiBwOyB9CgogICAgICAgIFQgKm9wZXJhdG9yKysoKSB7IGlmKCAr K3AgPj0gbGltaXQgKSBKdW1wKGxpbWl0cHRyKTsgcmV0dXJuIHA7IH0KICAgICAgICBUICpvcGVy YXRvcisrKGludCkgeyBUICpyZXQgPSBwOyBpZiggKytwID49IGxpbWl0ICkgSnVtcChsaW1pdHB0 cik7IHJldHVybiByZXQ7IH0KCiAgICAgICAgVmFyQXJyYXlJdGVyYXRvcjxUPiYgb3BlcmF0b3Ir PShpbnQgaSkgeyBwKz1pOyBpZiggcCA+PSBsaW1pdCApIEp1bXAobGltaXRwdHIgKyAocC1saW1p dCkpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgICBUICZvcGVyYXRvcltdKGludCBpKSB7IGlmKCBw K2kgPCBsaW1pdCApIHJldHVybiBwW2ldOyBlbHNlIHJldHVybiBhcnJbbGltaXRwdHIgKyAoKHAr aSktbGltaXQpXTsgfQoKCiAgICAgICAgdm9pZCBKdW1wKGludCBhZGRyKTsKCiAgICAgICAgaW50 IEdldEluZGV4KCkgeyByZXR1cm4gbGltaXRwdHIgLSAobGltaXQtcCk7IH0KCn07CgoKdGVtcGxh dGUgPGNsYXNzIFQ+CnZvaWQgVmFyQXJyYXlJdGVyYXRvcjxUPjo6SnVtcChpbnQgYWRkcikKewog ICAgICAgIHAgPSAmKGFyclthZGRyXSk7CiAgICAgICAgbGltaXRwdHIgPSBhcnIuR2V0TGltaXQo YWRkcik7CiAgICAgICAgbGltaXQgPSBwICsgKGxpbWl0cHRyIC0gYWRkcik7Cn0KIyA2ODggImhh c2guaCIKY2xhc3MgQml0bWFwCnsKICAgICAgICB1bnNpZ25lZCBzaXplOwoKICAgICAgICBpbnQz MiAqYXI7CgoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwKHVuc2lnbmVk IGlzKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAoY29uc3QgQml0bWFwICZwKTsK CiAgICAgICAgICAgICAgICAgICAgICAgIH5CaXRtYXAoKSB7IGRlbGV0ZVtdIGFyOyB9CgoKICAg ICAgICB2b2lkIFNldCh1bnNpZ25lZCBiKSB7IDsgYXJbYi8zMl0gfD0gKGludDMyKTE8PChiJTMy KTsgfQoKICAgICAgICB2b2lkIFJlc2V0KHVuc2lnbmVkIGIpIHsgOyBhcltiLzMyXSAmPSB+KChp bnQzMikxPDwoYiUzMikpOyB9CgogICAgICAgIGJvb2wgVGVzdCh1bnNpZ25lZCBiKSBjb25zdCB7 IDsgcmV0dXJuIGFyW2IvMzJdICYgKChpbnQzMikxPDwoYiUzMikpID8gdHJ1ZSA6IGZhbHNlOyB9 CgoKICAgICAgICBib29sIElzQWxsWmVybygpIGNvbnN0OwoKCiAgICAgICAgYm9vbCBJZGVudChj b25zdCBCaXRtYXAgJmIpIGNvbnN0OwoKCgogICAgICAgIHZvaWQgT3V0cHV0KG9zdHJlYW0gJm8p IGNvbnN0OwoKCiAgICAgICAgZnJpZW5kIHVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0IEJpdG1hcCAm cCk7Cgp9OwoKCnVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0IEJpdG1hcCAmcCk7CmlubGluZSBib29s IEhhc2hLZXlFcXVhbChjb25zdCBCaXRtYXAgJnAsIGNvbnN0IEJpdG1hcCAmcSkKewogICAgICAg IHJldHVybiBwLklkZW50KHEpOwp9CiMgNzQ5ICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBSRVQs IGNsYXNzIFQ+CmNsYXNzIFRTaW1wbGVBcnJheSB7CiAgICAgICAgUkVUKiByb290OwoKICAgICAg ICBpbnQgc2l6ZTsKCiAgICAgICAgUkVUIGRlZl92YWx1ZTsKCnB1YmxpYzoKICAgICAgICBSRVQg Jm9wZXJhdG9yW10gKFQgYXJnKSB7CgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RbYXJn XTsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIFRTaW1wbGVBcnJheShjb25zdCBUU2ltcGxl QXJyYXk8UkVULFQ+ICYpIHsgfQpwdWJsaWM6CiAgICAgICAgVFNpbXBsZUFycmF5KGNvbnN0IFJF VCAmZGVmX3YpIDogZGVmX3ZhbHVlKGRlZl92KSB7IHJvb3QgPSBfX251bGw7IHNpemUgPSAwOyB9 CgogICAgICAgIFRTaW1wbGVBcnJheSgpIDogZGVmX3ZhbHVlKF9fbnVsbCkgeyByb290ID0gX19u dWxsOyBzaXplID0gMDsgfTsKCiAgICAgICAgflRTaW1wbGVBcnJheSgpOwoKCgoKCgogICAgICAg IHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsKCiAgICAgICAgdm9pZCBTZXQoVCBhcmcgLCBSRVQg dmFsdWUpOwoKfTsKIyA3OTggImhhc2guaCIKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4K Y2xhc3MgVEFycmF5IHsKICAgICAgICBSRVQqKiByb290OwoKICAgICAgICBzdHJ1Y3QgaW5mbyB7 CiAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKCiAgICAgICAgICAgICAgICBSRVQqIGRlZl9hcnJh eTsKCiAgICAgICAgICAgICAgICBSRVQgZGVmX3ZhbHVlOwoKICAgICAgICAgICAgICAgIGJvb2wg c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXk7CgogICAgICAgIH0gKnB0cjsKCnB1YmxpYzoKICAgICAg ICBSRVQgJm9wZXJhdG9yW10gKFQgYXJnKSB7CgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIHJv b3RbYXJnLzMyXVthcmclMzJdOwogICAgICAgIH0KCnByaXZhdGU6CnB1YmxpYzoKICAgICAgICBU QXJyYXkoaW50IF9zaXplICwgUkVUKiBfZGVmX2FycmF5KTsKCiAgICAgICAgVEFycmF5KFJFVCBk ZWZfdik7CgogICAgICAgIFRBcnJheSgpIHsgcm9vdCA9IF9fbnVsbDsgcHRyID0gX19udWxsOyB9 CgogICAgICAgIFRBcnJheShjb25zdCBUQXJyYXk8UkVULFQ+ICZzcmMpOwoKICAgICAgICB+VEFy cmF5KCk7CgoKICAgICAgICBUQXJyYXk8UkVULFQ+ICYgb3BlcmF0b3IgPShjb25zdCBUQXJyYXk8 UkVULFQ+ICZzcmMpOwoKICAgICAgICBUQXJyYXk8UkVULFQ+ICYgTW92ZShUQXJyYXk8UkVULFQ+ ICZzcmMpOwojIDg0NiAiaGFzaC5oIgogICAgICAgIHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsK CiAgICAgICAgdm9pZCBTZXQoVCBhcmcgLCBSRVQgdmFsdWUpOwoKfTsKIyA4NjQgImhhc2guaCIK dGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBUQXJyYXkyIHsK ICAgICAgICBUQXJyYXkgPFJFVCwgVDI+KiByb290OwoKICAgICAgICBUQXJyYXkgPFJFVCwgVDI+ IGRlZjsKCiAgICAgICAgUkVUKiBkZWZfYXJyYXk7CgogICAgICAgIGludCBzaXplOwoKcHVibGlj OgogICAgICAgIFRBcnJheSA8UkVULCBUMj4mIG9wZXJhdG9yW10gKFQxIGFyZzEpIHsKCgoKCiAg ICAgICAgICAgICAgICByZXR1cm4gcm9vdFthcmcxXTsKICAgICAgICB9CgogICAgICAgIFRBcnJh eTIoaW50IF9zaXplICwgUkVUIGRlZl92YWx1ZSk7CgoKICAgICAgICBUQXJyYXkyKCkgOwogICAg ICAgIH5UQXJyYXkyKCk7CgoKICAgICAgICB2b2lkIEV4cGFuZChpbnQgbmV3c2l6ZSk7CgogICAg ICAgIHZvaWQgU2V0KFQxIGFyZzEgLCBUMiBhcmcyICwgUkVUIHZhbHVlKTsKCn07CiMgOTA5ICJo YXNoLmgiCmNsYXNzIFRBcnJheUYgewogICAgICAgIHRzZXJpYWwqKiByb290OwoKICAgICAgICBp bnQqIG5mZWF0dXJlOwoKICAgICAgICBzdGF0aWMgdHNlcmlhbCBkZWZbMV07CgogICAgICAgIGlu dCBzaXplOwoKcHVibGljOgogICAgICAgIHRzZXJpYWwqIG9wZXJhdG9yW10gKHRzZXJpYWwgYXJn MSkgewoKCgoKICAgICAgICAgICAgICAgIHJldHVybiByb290W2FyZzFdOwogICAgICAgIH0KCiAg ICAgICAgaW50IEdldE5GKCB0c2VyaWFsIGFyZzEgKSB7IHJldHVybiBuZmVhdHVyZVthcmcxXTsg fQoKICAgICAgICBUQXJyYXlGKGludCBfc2l6ZSk7CgogICAgICAgIH5UQXJyYXlGKCk7CgogICAg ICAgIHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsKCiAgICAgICAgdm9pZCBTZXQodHNlcmlhbCBh cmcxICwgdHNlcmlhbCogdmFsdWUpOwoKICAgICAgICBpbnQgRXF1YWwoaW50IG51bTEsIGludCBu dW0yKSB7CiAgICAgICAgICAgICAgICB0c2VyaWFsKiBmMSA9IHJvb3RbbnVtMV07CiAgICAgICAg ICAgICAgICB0c2VyaWFsKiBmMiA9IHJvb3RbbnVtMl07CiAgICAgICAgICAgICAgICBpZiAoZjEg PT0gZjIpIHJldHVybiAxOwogICAgICAgICAgICAgICAgd2hpbGUoKmYxICE9IFRTX0lOVkFMSUQp CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqZjErKyAhPSAqZjIrKykgcmV0dXJuIDA7CiAg ICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9Cgp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg UkVULCBjbGFzcyBUMSwgY2xhc3MgVDI+ClRBcnJheTI8UkVULFQxLFQyPjo6VEFycmF5MihpbnQg X3NpemUgLCBSRVQgZGVmX3ZhbHVlKSB7CiAgICAgICAgc2l6ZSA9IChfc2l6ZS8zMiArMSkgKiAz MjsKICAgICAgICByb290ID0gbmV3IFRBcnJheTxSRVQsIFQyPiBbc2l6ZV07CiAgICAgICAgZGVm X2FycmF5ID0gbmV3IFJFVFszMl07CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yIChpPTA7aTwz MjtpKyspIGRlZl9hcnJheVtpXSA9IGRlZl92YWx1ZTsKICAgICAgICBkZWYgPSBUQXJyYXk8UkVU LCBUMj4oc2l6ZSxkZWZfYXJyYXkpOwogICAgICAgIGZvciAoaT0wO2k8c2l6ZTtpKyspCiAgICAg ICAgICAgICAgICByb290W2ldID0gZGVmOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBU MSwgY2xhc3MgVDI+ClRBcnJheTI8UkVULFQxLFQyPjo6VEFycmF5MigpIHsKICBpbnQgX3NpemUg PSAwOwogIFJFVCBkZWZfdmFsdWUgPSBfX251bGw7CgogICAgICAgIHNpemUgPSAoX3NpemUvMzIg KzEpICogMzI7CiAgICAgICAgcm9vdCA9IG5ldyBUQXJyYXk8UkVULCBUMj4gW3NpemVdOwogICAg ICAgIGRlZl9hcnJheSA9IG5ldyBSRVRbMzJdOwogICAgICAgIGludCBpOwogICAgICAgIGZvciAo aT0wO2k8MzI7aSsrKSBkZWZfYXJyYXlbaV0gPSBkZWZfdmFsdWU7CiAgICAgICAgZGVmID0gVEFy cmF5PFJFVCwgVDI+KHNpemUsZGVmX2FycmF5KTsKICAgICAgICBmb3IgKGk9MDtpPHNpemU7aSsr KQogICAgICAgICAgICAgICAgcm9vdFtpXSA9IGRlZjsKfQoKdGVtcGxhdGUgPGNsYXNzIFJFVCwg Y2xhc3MgVDEsIGNsYXNzIFQyPgpUQXJyYXkyPFJFVCxUMSxUMj46On5UQXJyYXkyKCkKewogICAg ICAgIGRlbGV0ZVtdIHJvb3Q7CiAgICAgICAgZGVsZXRlW10gZGVmX2FycmF5Owp9CiMgOTk2ICJo YXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQxLCBjbGFzcyBUMj4Kdm9pZCBUQXJy YXkyPFJFVCxUMSxUMj46OkV4cGFuZChpbnQgbmV3c2l6ZSkgewogICAgICAgIGlmIChuZXdzaXpl IDwgc2l6ZSkgcmV0dXJuOwogICAgICAgIFRBcnJheSA8UkVULCBUMj4qIG9sZF9yb290ID0gcm9v dDsKICAgICAgICBpbnQgb2xkX3NpemUgPSBzaXplOwogICAgICAgIHNpemUgPSAobmV3c2l6ZS8z MiArMSkgKiAzMjsKICAgICAgICByb290ID0gbmV3IFRBcnJheTxSRVQsIFQyPiBbc2l6ZV07CiAg ICAgICAgaW50IGk7Zm9yIChpPTA7aTxvbGRfc2l6ZTtpKyspIHsKICAgICAgICAgICAgICAgIHJv b3RbaV0uTW92ZShvbGRfcm9vdFtpXSk7CiAgICAgICAgICAgICAgICByb290W2ldLkV4cGFuZChu ZXdzaXplKTsKICAgICAgICB9CiAgICAgICAgZGVmLkV4cGFuZChuZXdzaXplKTsKICAgICAgICBm b3IgKDtpPHNpemU7aSsrKQogICAgICAgICAgICAgICAgcm9vdFtpXSA9IGRlZjsKICAgICAgICBk ZWxldGVbXSBvbGRfcm9vdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUMSwgY2xhc3Mg VDI+CnZvaWQgVEFycmF5MjxSRVQsVDEsVDI+OjpTZXQoVDEgYXJnMSAsIFQyIGFyZzIgLCBSRVQg dmFsdWUpIHsKICAgICAgICBFeHBhbmQoYXJnMSk7CiAgICAgICAgcm9vdFthcmcxXS5TZXQoYXJn Mix2YWx1ZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUPgpUQXJyYXk8UkVULCBU Pjo6VEFycmF5KFJFVCBkZWZfdikKewogICAgICAgIHJvb3QgPSAwOwogICAgICAgIHB0ciA9IG5l dyBpbmZvOwogICAgICAgIHB0ci0+ZGVmX3ZhbHVlID0gZGVmX3Y7CiAgICAgICAgcHRyLT5kZWZf YXJyYXkgPSBuZXcgUkVUWzMyXTsKICAgICAgICBmb3IgKGludCBpPTA7aTwzMjtpKyspCiAgICAg ICAgICAgICAgICBwdHItPmRlZl9hcnJheVtpXSA9IHB0ci0+ZGVmX3ZhbHVlOwogICAgICAgIHB0 ci0+c2l6ZSA9IDA7CiAgICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHRydWU7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+ClRBcnJheTxSRVQsIFQ+OjpUQXJyYXko aW50IF9zaXplICwgUkVUKiBfZGVmX2FycmF5KSB7CiAgICAgICAgcHRyID0gbmV3IGluZm87CiAg ICAgICAgaW50IGk7CiAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBfZGVmX2FycmF5OwogICAgICAg IHB0ci0+ZGVmX3ZhbHVlID0gX2RlZl9hcnJheVswXTsKICAgICAgICBwdHItPnNpemUgPSAoX3Np emUvMzIgKzEpICogMzI7CiAgICAgICAgcm9vdCA9IG5ldyBSRVQqW3B0ci0+c2l6ZS8zMl07CiAg ICAgICAgZm9yIChpPTA7aTxwdHItPnNpemUvMzI7aSsrKQogICAgICAgICAgICAgICAgcm9vdFtp XSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgIHB0ci0+c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXkg PSBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFycmF5PFJFVCwgVD46 OlRBcnJheShjb25zdCBUQXJyYXk8UkVULFQ+ICZzcmMpCnsKICAgICAgICBwdHIgPSBuZXcgaW5m bzsKICAgICAgICBwdHItPmRlZl92YWx1ZSA9IHNyYy5wdHItPmRlZl92YWx1ZTsKICAgICAgICBw dHItPnNpemUgPSBzcmMucHRyLT5zaXplOwogICAgICAgIHB0ci0+ZGVmX2FycmF5ID0gbmV3IFJF VFszMl07CiAgICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHNyYy5wdHItPnNo b3VsZF9kZWxldGVfZGVmX2FycmF5OwogICAgICAgIGlmKCBwdHItPnNob3VsZF9kZWxldGVfZGVm X2FycmF5ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdHItPmRlZl9hcnJheSA9IG5ldyBS RVRbMzJdOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MzI7aSsrKQogICAgICAgICAg ICAgICAgICAgICAgICBwdHItPmRlZl9hcnJheVtpXSA9IHNyYy5wdHItPmRlZl9hcnJheVtpXTsK ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBz cmMucHRyLT5kZWZfYXJyYXk7CgogICAgICAgIGludCBuc2l6ZSA9IHB0ci0+c2l6ZSAvIDMyOwog ICAgICAgIGZvciAoaW50IGk9MDtpPG5zaXplO2krKykKICAgICAgICB7CiAgICAgICAgICAgICAg ICBpZiggc3JjLnJvb3RbaV0gPT0gc3JjLnB0ci0+ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAg ICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByb290W2ldID0gbmV3IFJF VFszMl07CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPDMyOyBqKysgKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RbaV0gPSBzcmMucm9vdFtpXTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+ ClRBcnJheTxSRVQsVD4gJiBUQXJyYXk8UkVULCBUPjo6b3BlcmF0b3IgPShjb25zdCBUQXJyYXk8 UkVULFQ+ICZzcmMpCnsKICAgICAgICBpZiggcHRyID09IF9fbnVsbCApCiAgICAgICAgICAgICAg ICBwdHIgPSBuZXcgaW5mbzsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAg aW50IG5zaXplID0gcHRyLT5zaXplIC8gMzI7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7 aTxuc2l6ZTtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCByb290W2ldICE9IHB0ci0+ ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVbXSByb290 W2ldOwogICAgICAgICAgICAgICAgZGVsZXRlW10gcm9vdDsKICAgICAgICAgICAgICAgIGlmKCBw dHItPnNob3VsZF9kZWxldGVfZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgZGVs ZXRlW10gcHRyLT5kZWZfYXJyYXk7CiAgICAgICAgfQogICAgICAgIHB0ci0+ZGVmX3ZhbHVlID0g c3JjLnB0ci0+ZGVmX3ZhbHVlOwogICAgICAgIHB0ci0+c2l6ZSA9IHNyYy5wdHItPnNpemU7CiAg ICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHNyYy5wdHItPnNob3VsZF9kZWxl dGVfZGVmX2FycmF5OwogICAgICAgIHJvb3QgPSBuZXcgUkVUKltwdHItPnNpemUvMzJdOwogICAg ICAgIGlmKCBwdHItPnNob3VsZF9kZWxldGVfZGVmX2FycmF5ICkKICAgICAgICB7CiAgICAgICAg ICAgICAgICBwdHItPmRlZl9hcnJheSA9IG5ldyBSRVRbMzJdOwogICAgICAgICAgICAgICAgZm9y IChpbnQgaT0wO2k8MzI7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICBwdHItPmRlZl9hcnJh eVtpXSA9IHNyYy5wdHItPmRlZl9hcnJheVtpXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBzcmMucHRyLT5kZWZfYXJyYXk7CgogICAgICAg IGludCBuc2l6ZSA9IHB0ci0+c2l6ZSAvIDMyOwogICAgICAgIGZvciAoaW50IGk9MDtpPG5zaXpl O2krKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggc3JjLnJvb3RbaV0gPT0gc3JjLnB0 ci0+ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVm X2FycmF5OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICByb290W2ldID0gbmV3IFJFVFszMl07CiAgICAgICAgICAgICAgICAgICAg ICAgIGZvcihpbnQgaj0wOyBqPDMyOyBqKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJvb3RbaV0gPSBzcmMucm9vdFtpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgICAgcmV0dXJuICp0aGlzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFy cmF5PFJFVCxUPiAmIFRBcnJheTxSRVQsIFQ+OjpNb3ZlKFRBcnJheTxSRVQsVD4gJnNyYykKewog ICAgICAgIGlmKCBwdHIgIT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQg bnNpemUgPSBwdHItPnNpemUgLyAzMjsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG5z aXplO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJvb3RbaV0gIT0gcHRyLT5kZWZf YXJyYXkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIHJvb3RbaV07 CiAgICAgICAgICAgICAgICBkZWxldGVbXSByb290OwogICAgICAgICAgICAgICAgaWYoIHB0ci0+ c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXkgKQogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVb XSBwdHItPmRlZl9hcnJheTsKICAgICAgICB9CgogICAgICAgIHB0ciA9IHNyYy5wdHI7CiAgICAg ICAgc3JjLnB0ciA9IF9fbnVsbDsKICAgICAgICByb290ID0gc3JjLnJvb3Q7CiAgICAgICAgc3Jj LnJvb3QgPSBfX251bGw7CiAgICAgICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg UkVULCBjbGFzcyBUPgp2b2lkIFRBcnJheTxSRVQsIFQ+OjpFeHBhbmQoaW50IG5ld3NpemUpIHsK ICAgICAgICBpZiAocHRyLT5zaXplID4gbmV3c2l6ZSkgcmV0dXJuOwogICAgICAgIFJFVCoqIG9s ZF9yb290ID0gcm9vdDsKICAgICAgICBpbnQgbnNpemUgPSBwdHItPnNpemUgLyAzMjsKICAgICAg ICBpbnQgbm5zaXplID0gKG5ld3NpemUgKyAzMikgLyAzMjsKICAgICAgICByb290ID0gbmV3IFJF VCpbbm5zaXplXTsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgaWYgKG9sZF9yb290ICE9IDAp IHsKICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8bnNpemU7aSsrKQogICAgICAgICAgICAgICAg ICAgICAgICByb290W2ldID0gb2xkX3Jvb3RbaV07CiAgICAgICAgICAgICAgICBkZWxldGVbXSBv bGRfcm9vdDsKICAgICAgICB9CiAgICAgICAgZm9yKCA7IGk8bm5zaXplOyBpKysgKQogICAgICAg ICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgIHB0ci0+c2l6ZSA9IG5u c2l6ZSAqIDMyOwp9CnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVEFycmF5PFJF VCwgVD46OlNldChUIGFyZyAsIFJFVCB2YWx1ZSkgewogICAgICAgIEV4cGFuZChhcmcpOwogICAg ICAgIGludCB4ID0gYXJnLzMyOwogICAgICAgIGlmIChyb290W3hdID09IHB0ci0+ZGVmX2FycmF5 KSB7CiAgICAgICAgICAgICAgICBSRVQqIHIgPSByb290W3hdID0gbmV3IFJFVFszMl07CiAgICAg ICAgICAgICAgICBpbnQgeTtmb3IgKHk9MDt5PDMyO3krKykgclt5XSA9IHB0ci0+ZGVmX3ZhbHVl OwogICAgICAgIH0KICAgICAgICByb290W3hdW2FyZyUzMl0gPSB2YWx1ZTsKfQoKdGVtcGxhdGUg PGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFycmF5PFJFVCwgVD46On5UQXJyYXkoKSB7CiAgICAgICAg aWYoIHB0ciAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBuc2l6ZSA9 IHB0ci0+c2l6ZSAvIDMyOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bnNpemU7aSsr KQogICAgICAgICAgICAgICAgICAgICAgICBpZiggcm9vdFtpXSAhPSBwdHItPmRlZl9hcnJheSAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gcm9vdFtpXTsKICAgICAg ICAgICAgICAgIGRlbGV0ZVtdIHJvb3Q7CiAgICAgICAgICAgICAgICBpZiggcHRyLT5zaG91bGRf ZGVsZXRlX2RlZl9hcnJheSApCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIHB0ci0+ ZGVmX2FycmF5OwogICAgICAgICAgICAgICAgZGVsZXRlIHB0cjsKICAgICAgICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVFNpbXBsZUFycmF5PFJFVCwgVD46OkV4cGFu ZChpbnQgbm4pIHsKICAgICAgICBpZiAoc2l6ZSA+IG5uKSByZXR1cm47CiAgICAgICAgaW50IG5l d3NpemUgPSBzaXplICsgMzI7CiAgICAgICAgd2hpbGUoIG5ld3NpemUgPD0gbm4gKQogICAgICAg ICAgICAgICAgbmV3c2l6ZSArPSAzMjsKICAgICAgICBSRVQqIG9sZF9yb290ID0gcm9vdDsKICAg ICAgICByb290ID0gbmV3IFJFVFtuZXdzaXplXTsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAg Zm9yKCA7IGk8c2l6ZTsgaSsrICkKICAgICAgICAgICAgICAgIHJvb3RbaV0gPSBvbGRfcm9vdFtp XTsKICAgICAgICBpZiAob2xkX3Jvb3QgIT0gMCkKICAgICAgICAgICAgICAgIGRlbGV0ZVtdIG9s ZF9yb290OwogICAgICAgIGZvciggOyBpPG5ld3NpemU7IGkrKyApCiAgICAgICAgICAgICAgICBy b290W2ldID0gZGVmX3ZhbHVlOwogICAgICAgIHNpemUgPSBuZXdzaXplOwp9CnRlbXBsYXRlIDxj bGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVFNpbXBsZUFycmF5PFJFVCwgVD46OlNldChUIGFyZyAs IFJFVCB2YWx1ZSkgewogICAgICAgIEV4cGFuZChhcmcpOwogICAgICAgIHJvb3RbYXJnXSA9IHZh bHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUPgpUU2ltcGxlQXJyYXk8UkVULCBU Pjo6flRTaW1wbGVBcnJheSgpIHsKICAgICAgICBkZWxldGVbXSByb290Owp9CiMgNDcgImNlbGwu aCIgMgoKIyAxICJmdHlwZS5oIiAxCiMgMzUgImZ0eXBlLmgiCiMgMSAiaGFzaC5oIiAxCiMgMzYg ImZ0eXBlLmgiIDIKCgoKCgoKY2xhc3MgdHlwZTsKIyA1NCAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0 IHR5cGUgKmJvdDsKIyA2NyAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKmxpc3Q7CiMgODAg ImZ0eXBlLmgiCmV4dGVybiBjb25zdCB0eXBlICpjb25zOwojIDkzICJmdHlwZS5oIgpleHRlcm4g Y29uc3QgdHlwZSAqbmlsOwojIDEwNiAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKmhkOwoj IDExOSAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKnRsOwojIDEzMCAiZnR5cGUuaCIKY2xh c3MgTGluZWFyRlNQOwojIDE0MiAiZnR5cGUuaCIKY2xhc3MgdHlwZSB7CiAgICAgICAgc3RkOjpz dHJpbmcgbmFtZTsKCiAgICAgICAgc3RkOjpzdHJpbmcgcHJvcGVybmFtZTsKCiAgICAgICAgY2xh c3MgbW9kdWxlKiBtb2Q7CgogICAgICAgIGludCBuZmVhdHVyZXM7CgogICAgICAgIHRzZXJpYWwg c2VyaWFsbm87CgogICAgICAgIGJvb2wgZXhwb3J0ZWQ7CgogICAgICAgIGJvb2wgc3RyZWFtZWQ7 CgoKICAgICAgICBzdGF0aWMgU3RyaW5nSGFzaDx0eXBlPiBoYXNoOwoKICAgICAgICBzdGF0aWMg VmFyQXJyYXk8Y29uc3QgdHlwZSAqPiBzZXJpYWx0YWJsZTsKCgoKICAgICAgICB2b2lkIHR5cGVf Y29uc3RydWN0b3IoY29uc3QgY2hhciAqLCB0c2VyaWFsLCBtb2R1bGUgKiwgYm9vbCk7CnB1Ymxp YzoKICAgICAgICAgICAgICAgIHR5cGUoY29uc3QgY2hhciAqaW4sIHRzZXJpYWwgc2VyaWFsbm8s IG1vZHVsZSAqaW1vZCwgYm9vbCBpZXhwb3J0ZWQpOwogICAgICAgICAgICAgICAgdHlwZShjb25z dCBjaGFyICppbiwgdHNlcmlhbCBzZXJpYWxubywgbW9kdWxlICppbW9kKTsKICAgICAgICAgICAg ICAgIHR5cGUoY29uc3QgY2hhciAqaW4sIHRzZXJpYWwgc2VyaWFsbm8pOwoKCgoKCiAgICAgICAg ICAgICAgICB2b2lkIFJlSW5pdCh2b2lkKTsKCiAgICAgICAgICAgICAgICB2b2lkIERlbGV0ZSh2 b2lkKSB7IG5mZWF0dXJlcyA9IDA7fQoKICAgICAgICAgICAgICAgIH50eXBlKCk7CgoKICAgICAg ICBjb25zdCBjaGFyICpHZXRQcmludE5hbWUoKSBjb25zdDsKCiAgICAgICAgY29uc3QgY2hhciAq R2V0UHJpbnRGZWF0dXJlTmFtZSgpIGNvbnN0OwoKICAgICAgICBjb25zdCBjaGFyICpHZXRTaW1w bGVOYW1lKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUuY19zdHIoKTsKICAg ICAgICB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldFByb3Blck5hbWUoKSBjb25zdCB7CiAgICAg ICAgICAgICAgICByZXR1cm4gcHJvcGVybmFtZS5jX3N0cigpOwogICAgICAgIH0KCiAgICAgICAg Y29uc3QgY2hhciAqR2V0S2V5KCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUu Y19zdHIoKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldE5hbWUoKSBjb25zdCB7 CiAgICAgICAgICAgICAgICByZXR1cm4gR2V0UHJvcGVyTmFtZSgpOwogICAgICAgIH0KCiAgICAg ICAgdHNlcmlhbCBHZXRTZXJpYWxObygpIGNvbnN0IHsKICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgIGlmICh0aGlzID09IDApIHJldHVybiBUU19JTlZBTElEOwogICAgICAgICAgICAg ICAgcmV0dXJuIHNlcmlhbG5vOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgdHlwZSAqRmVhdHVy ZShpbnQgbikgY29uc3Q7CgogICAgICAgIGNvbnN0IHR5cGUgKkRlZlR5cGVPZk50aEZlYXR1cmUo aW50IG4pIGNvbnN0OwoKICAgICAgICBpbnQgR2V0TkZlYXR1cmVzKCkgY29uc3QgewogICAgICAg ICAgICAgICAgcmV0dXJuIG5mZWF0dXJlczsKICAgICAgICB9CgogICAgICAgIGludCBHZXRJbmRl eChjb25zdCB0eXBlICpmKSBjb25zdDsKCgogICAgICAgIGludCBHZXRJbmRleCh0c2VyaWFsIGZT TikgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIEdldEluZGV4KHR5cGU6OlNlcmlhbChm U04pKTsKICAgICAgICB9CiMgMjMwICJmdHlwZS5oIgogICAgICAgIGNvbnN0IHR5cGUgKkRlZlR5 cGVPZkZlYXR1cmUoY29uc3QgdHlwZSogZikgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJu IERlZlR5cGVPZk50aEZlYXR1cmUoR2V0SW5kZXgoZikpOwogICAgICAgIH0KICAgICAgICBjb25z dCB0eXBlICpEZWZUeXBlT2ZGZWF0dXJlKHRzZXJpYWwgZikgY29uc3QgewogICAgICAgICAgICAg ICAgcmV0dXJuIERlZlR5cGVPZkZlYXR1cmUodHlwZTo6U2VyaWFsKGYpKTsKICAgICAgICB9CgoK ICAgICAgICBjb25zdCB0eXBlICpUeXBlVW5pZnkoY29uc3QgdHlwZSAqdCkgY29uc3Q7CgoKCgoK ICAgICAgICBib29sIElzU3ViVHlwZShjb25zdCB0eXBlICp0KSBjb25zdCB7CiAgICAgICAgICAg ICAgICByZXR1cm4gVHlwZVVuaWZ5KHQpID09IHRoaXM7CiAgICAgICAgfQoKICAgICAgICBib29s IElzU3VwZXJUeXBlKGNvbnN0IHR5cGUgKnQpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVy biB0LT5UeXBlVW5pZnkodGhpcykgPT0gdDsKICAgICAgICB9CgogICAgICAgIGJvb2wgSXNFeHBv cnRlZCh2b2lkKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0ZWQ7CiAgICAg ICAgfQoKICAgICAgICBjbGFzcyBtb2R1bGUqIEdldE1vZHVsZSh2b2lkKSBjb25zdHsKICAgICAg ICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgICAgfQoKICAgICAgICBjb25zdCB0eXBlKiBHZXRQ YXJlbnRPZkZlYXR1cmUodm9pZCkgY29uc3Q7CgogICAgICAgIGludCBHZXRQcmlvcml0eU9mRmVh dHVyZSh2b2lkKSBjb25zdDsKCgoKCiAgICAgICAgc3RhdGljIGNvbnN0IHR5cGUqIFNlcmlhbCh0 c2VyaWFsIHNlcikgeyBpZiggc2VyID09IFRTX0lOVkFMSUQgKSByZXR1cm4gX19udWxsOyBlbHNl IHsgOyByZXR1cm4gc2VyaWFsdGFibGVbc2VyXTsgfSB9CgogICAgICAgIHN0YXRpYyB0c2VyaWFs IEdldFNlcmlhbENvdW50KCkgeyByZXR1cm4gKHRzZXJpYWwpc2VyaWFsdGFibGUuR2V0U2l6ZSgp OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCB0eXBlKiBTZWFyY2goY29uc3QgY2hhciAqc3RyKSB7 IHJldHVybiBoYXNoLkZpbmQoc3RyKTsgfQogICAgICAgIHN0YXRpYyBjb25zdCB0eXBlKiBTZWFy Y2goc3RkOjpzdHJpbmcgJnN0cikgeyByZXR1cm4gaGFzaC5GaW5kKHN0cik7IH0KCgogICAgICAg IHN0YXRpYyB2b2lkIHRlcm1pbmF0ZSgpOwoKCiAgICAgICAgYm9vbCBJc0NvbXBpbGVkVHlwZSgp IGNvbnN0OwoKICAgICAgICBib29sIElzQ29uc3RyYWluZWQoKSBjb25zdDsKCgogICAgICAgIHZv aWQgU2V0Q29tcFRhYmxlKCk7CgoKICAgICAgICBib29sIFNldEF0dHJpYnV0ZShjb25zdCBMaW5l YXJGU1AgJmFyZyk7CgogICAgICAgIGNvbnN0IExpbmVhckZTUCAmR2V0QXR0cmlidXRlKCkgY29u c3Q7CgoKICAgICAgICBjb25zdCBMaW5lYXJGU1AgJkdldEFkZGVkQ29uc3RyYWludChjb25zdCB0 eXBlICp0KSBjb25zdDsKCiAgICAgICAgY29uc3QgTGluZWFyRlNQICZHZXRVbmlmaWVkQ29uc3Ry YWludChjb25zdCB0eXBlICp0KSBjb25zdDsKCiAgICAgICAgY29uc3QgTGluZWFyRlNQICZHZXRB bGxDb25zdHJhaW50KCkgY29uc3Q7CgoKICAgICAgICB2b2lkIFNldFN0cmVhbWVkRmxhZyhvc3Ry ZWFtICYpIHsgc3RyZWFtZWQgPSB0cnVlOyB9CgogICAgICAgIHZvaWQgQ2xlYXJTdHJlYW1lZEZs YWcob3N0cmVhbSAmKSB7IHN0cmVhbWVkID0gZmFsc2U7IH0KCiAgICAgICAgYm9vbCBHZXRTdHJl YW1lZEZsYWcob3N0cmVhbSYgb3MpIHsgcmV0dXJuIHN0cmVhbWVkOyB9CgoKICAgICAgICBzdGF0 aWMgdHlwZSAqQ3JlYXRlTmV3VHlwZShzdHJpbmcgbmFtZSk7Cgp9OwojIDQ5ICJjZWxsLmgiIDIK IyAxICJsc3RyaW5nLmgiIDEKIyA1NiAibHN0cmluZy5oIgpjbGFzcyBsc3RyaW5nCnsKICAgICAg ICBjaGFyICpzdHI7CgoKcHVibGljOgogICAgICAgIGxzdHJpbmcoKSB7IHN0ciA9IF9fbnVsbDsg fQoKICAgICAgICBsc3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogICAgICAgIGxzdHJpbmcoY29uc3Qg bHN0cmluZyAmcyk7CgogICAgICAgIGV4cGxpY2l0IGxzdHJpbmcoY2hhciBjLCBpbnQgcmVwZWF0 ID0gMSk7CiAgICAgICAgfmxzdHJpbmcoKSB7IGRlbGV0ZVtdIHN0cjsgfQoKCiAgICAgICAgYm9v bCBJc051bGwoKSBjb25zdCB7IHJldHVybiBzdHIgPT0gX19udWxsOyB9CgogICAgICAgIGNvbnN0 IGNoYXIgKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHN0cjsgfQoKICAgICAgICBvcGVyYXRvciBz dGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZyhzdHIpOyB9CiAgICAgICAgdm9pZCBm b3JjZV9pbml0KHZvaWQpIHsgc3RyID0gX19udWxsOyB9CgogICAgICAgIHZvaWQgaW5pdCh2b2lk KSB7IGlmIChzdHIgIT0gX19udWxsKSBkZWxldGVbXSBzdHI7c3RyID0gX19udWxsO30KCgogICAg ICAgIGxzdHJpbmcgJm9wZXJhdG9yID0oY29uc3QgbHN0cmluZyAmbCk7CgogICAgICAgIGxzdHJp bmcgJm9wZXJhdG9yID0oY29uc3QgY2hhciAqcyk7CgoKICAgICAgICBjaGFyICZvcGVyYXRvcltd KGludCBpKSB7IHJldHVybiBzdHJbaV07IH0KCgogICAgICAgIGZyaWVuZCBsc3RyaW5nIG9wZXJh dG9yKyhjb25zdCBsc3RyaW5nICZhLCBjb25zdCBsc3RyaW5nICZiKTsKICAgICAgICBmcmllbmQg bHN0cmluZyBvcGVyYXRvcisoY29uc3QgY2hhciAqYSwgY29uc3QgbHN0cmluZyAmYik7CiAgICAg ICAgZnJpZW5kIGxzdHJpbmcgb3BlcmF0b3IrKGNvbnN0IGxzdHJpbmcgJmEsIGNvbnN0IGNoYXIg KmIpOwoKCiAgICAgICAgY2hhciAqR2V0S2V5KCkgeyByZXR1cm4gc3RyOyB9CgoKCiAgICAgICAg ZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IGxzdHJpbmcgJmwp IHsgcmV0dXJuIG9zIDw8IChsLmNfc3RyKCkpOyB9CgoKfTsKIyAxMTkgImxzdHJpbmcuaCIKaW5s aW5lIGludCBzdHJsZW4oY29uc3QgbHN0cmluZyAmYSkgeyByZXR1cm4gc3RybGVuKGEuY19zdHIo KSk7IH0KIyAxMzUgImxzdHJpbmcuaCIKaW5saW5lIGNoYXIgKnN0cmNweShjaGFyICpzLCBjb25z dCBsc3RyaW5nICZhKSB7IHJldHVybiBzdHJjcHkocywgYS5jX3N0cigpKTsgfQojIDE1MSAibHN0 cmluZy5oIgppbmxpbmUgaW50IHN0cmNtcChjb25zdCBsc3RyaW5nICZhLCBjb25zdCBsc3RyaW5n ICZiKQp7IHJldHVybiBzdHJjbXAoYS5jX3N0cigpLCBiLmNfc3RyKCkpOyB9CmlubGluZSBpbnQg c3RyY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGxzdHJpbmcgJmIpCnsgcmV0dXJuIHN0cmNtcChh LCBiLmNfc3RyKCkpOyB9CmlubGluZSBpbnQgc3RyY21wKGNvbnN0IGxzdHJpbmcgJmEsIGNvbnN0 IGNoYXIgKmIpCnsgcmV0dXJuIHN0cmNtcChhLmNfc3RyKCksIGIpOyB9CiMgMTczICJsc3RyaW5n LmgiCmxzdHJpbmcgaW50MmxzdHIoaW50IGkpOwojIDUwICJjZWxsLmgiIDIKIyAxMDAgImNlbGwu aCIKZW51bSBjZWxsIHsgX19fXzEgPSAweDdmZmZmZmZmICwgQ0VMTF9JTlZBTElEID0gMCwgX19f XzIgPSAtMHg3ZmZmZmZmZiB9Owp0eXBlZGVmIHVpbnQzMiBjZWxsX2ludDsKdHlwZWRlZiBzaW50 MzIgc2lnbmVkX2NlbGxfaW50OwojIDE1OCAiY2VsbC5oIgplbnVtIHRhZ190IHsKICAgICAgICBU X1BUUiA9IDAsCiAgICAgICAgVF9QVFIxPSA4LAogICAgICAgIFRfUFRSMj0gNCwKICAgICAgICBU X1BUUjM9MTIsCiAgICAgICAgVF9TVFIgPSAyLAogICAgICAgIFRfQ1NUUj0xMCwKICAgICAgICBU X1ZBUiA9IDYsCiAgICAgICAgVF9DVkFSPTE0LAogICAgICAgIFRfSU5UID0gMSwKICAgICAgICBU X0ZMTyA9IDksCiAgICAgICAgVF9DSFIgPSA1LAogICAgICAgIFRfU1RHID0xMywKICAgICAgICBU X0RBVCA9IDMKfTsKIyAzMDAgImNlbGwuaCIKdHlwZWRlZiB1aW50MTYgbWNoYXI7CnR5cGVkZWYg aW50MzIgbWludDsKdHlwZWRlZiBkb3VibGUgbWZsb2F0OwojIDUwMCAiY2VsbC5oIgp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IGNoYXJfaW50OwojIDUxNyAiY2VsbC5oIgp0eXBlZGVmIGNlbGwgKiBj ZWxsX3B0cjsKIyA4MTYgImNlbGwuaCIKaW5saW5lIGNlbGwgUFRSMmMoY2VsbF9wdHIgcCkgeyBy ZXR1cm4gKChjZWxsKSgocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KChwKSkpKSk7IH0KCmlubGlu ZSBjZWxsIFNUUjJjKGNvbnN0IHR5cGUgKnApIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxfaW50KShw LT5HZXRTZXJpYWxObygpIDw8IDQpIHwgKFRfU1RSIDw8IDApKSk7IH0KCmlubGluZSBjZWxsIFNU UjJjKHRzZXJpYWwgc2VyaWFsKSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCkoIHNlcmlhbCA8 PCA0KSB8IChUX1NUUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBWQVIyYyhjb25zdCB0eXBlICpw KSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCkocC0+R2V0U2VyaWFsTm8oKSA8PCA0KSB8IChU X1ZBUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBWQVIyYyh0c2VyaWFsIHNlcmlhbCkgeyByZXR1 cm4gKChjZWxsKSgoY2VsbF9pbnQpKCBzZXJpYWwgPDwgNCkgfCAoVF9WQVIgPDwgMCkpKTsgfQoK aW5saW5lIGNlbGwgQ1NUUjJjKGNvbnN0IHR5cGUgKnApIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxf aW50KShwLT5HZXRTZXJpYWxObygpIDw8IDQpIHwgKFRfQ1NUUiA8PCAwKSkpOyB9CgppbmxpbmUg Y2VsbCBDU1RSMmModHNlcmlhbCBzZXJpYWwpIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxfaW50KSgg c2VyaWFsIDw8IDQpIHwgKFRfQ1NUUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBDVkFSMmMoY29u c3QgdHlwZSAqcCkgeyByZXR1cm4gKChjZWxsKSgoY2VsbF9pbnQpKHAtPkdldFNlcmlhbE5vKCkg PDwgNCkgfCAoVF9DVkFSIDw8IDApKSk7IH0KCmlubGluZSBjZWxsIENWQVIyYyh0c2VyaWFsIHNl cmlhbCkgeyByZXR1cm4gKChjZWxsKSgoY2VsbF9pbnQpKCBzZXJpYWwgPDwgNCkgfCAoVF9DVkFS IDw8IDApKSk7IH0KCmlubGluZSBjZWxsIElOVDJjKG1pbnQgdmFsKSB7IHJldHVybiAoKGNlbGwp KCgoY2VsbF9pbnQpKHZhbCkgPDwgNCkgfCAoVF9JTlQgPDwgMCkpKTsgfQoKCgppbmxpbmUgY2Vs bCBGTE8yYyhtZmxvYXQgdmFsKSB7IHJldHVybiAoKChjZWxsKSgoVF9GTE8gPDwgMCkpKSk7IH0K aW5saW5lIGNlbGwgQ0hSMmMobWNoYXIgdmFsKSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCl2 YWwgfCAoVF9DSFIgPDwgMCkpKTsgfQppbmxpbmUgY2VsbCBTVEcyYyhpbnQgcykgeyByZXR1cm4g KCgoY2VsbCkoKChjZWxsX2ludCkocyk8PDQpIHwgKFRfU1RHIDw8IDApKSkpOyB9CgppbmxpbmUg Y2VsbF9wdHIgYzJQVFIoY2VsbCBjKSB7IDsgcmV0dXJuIChjZWxsX3B0cikoKChjZWxsX2ludCko YykpKTsgfQppbmxpbmUgdHNlcmlhbCBjMlNUUlMoY2VsbCBjKSB7IDsgcmV0dXJuICgodHNlcmlh bCkoKCgoY2VsbF9pbnQpKGMpKSAmICgweGZmZmZmZmYwKSkgPj4gNCkpOyB9CgppbmxpbmUgY29u c3QgdHlwZSAqYzJTVFIoY2VsbCBjKSB7IHJldHVybiB0eXBlOjpTZXJpYWwoYzJTVFJTKGMpKTsg fQoKaW5saW5lIHRzZXJpYWwgYzJWQVJTKGNlbGwgYykgeyA7IHJldHVybiAoKHRzZXJpYWwpKCgo KGNlbGxfaW50KShjKSkgJiAoMHhmZmZmZmZmMCkpID4+IDQpKTsgfQoKaW5saW5lIGNvbnN0IHR5 cGUgKmMyVkFSKGNlbGwgYykgeyByZXR1cm4gdHlwZTo6U2VyaWFsKGMyVkFSUyhjKSk7IH0KCmlu bGluZSB0c2VyaWFsIGMyU1RSU29yVkFSUyhjZWxsIGMpIHsgOyByZXR1cm4gKCh0c2VyaWFsKSgo KChjZWxsX2ludCkoYykpICYgKDB4ZmZmZmZmZjApKSA+PiA0KSk7IH0KCmlubGluZSBjb25zdCB0 eXBlICpjMlNUUm9yVkFSKGNlbGwgYyl7IHJldHVybiB0eXBlOjpTZXJpYWwoYzJTVFJTb3JWQVJT KGMpKTsgfQoKCmlubGluZSBtaW50IGMySU5UKGNlbGwgYykgeyA7IHJldHVybiAobWludCkoKChj ZWxsX2ludCkoYykpICkgPj4gNDsgfQoKCgppbmxpbmUgbWNoYXIgYzJDSFIoY2VsbCBjKSB7IDsg cmV0dXJuIChjaGFyX2ludCkoKGNlbGxfaW50KShjKSk7IH0KaW5saW5lIGludCBjMlNURyhjZWxs IGMpIHsgOyByZXR1cm4gKChpbnQpKCgoKGNlbGxfaW50KShjKSkgJiAoMHhmZmZmZmZmMCkpID4+ IDQpKTsgfQoKCgoKCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNlbGwgYyk7CiMg ODgzICJjZWxsLmgiCmNvbnN0IHRzZXJpYWwgVFlQRV9ib3QgPSAwOwojIDg5OCAiY2VsbC5oIgpj b25zdCB0c2VyaWFsIFRZUEVfaW50ZWdlciA9IDE7CiMgOTEzICJjZWxsLmgiCmNvbnN0IHRzZXJp YWwgVFlQRV9zdHJpbmcgPSAyOwojIDkyOCAiY2VsbC5oIgpjb25zdCB0c2VyaWFsIFRZUEVfZmxv YXQgPSAzOwojIDk0MyAiY2VsbC5oIgpjb25zdCB0c2VyaWFsIFRZUEVfZmVhdHVyZSA9IDQ7CiMg MTAxOCAiY2VsbC5oIgpleHRlcm4gIkMiIHZvaWQgZGVidWdfc3RyKGNvbnN0IGNoYXIgKnMpOwoj IDEwMzIgImNlbGwuaCIKZXh0ZXJuICJDIiB2b2lkIGRlYnVnX25vZGUoY2VsbCk7CiMgMTA0NyAi Y2VsbC5oIgpleHRlcm4gIkMiIHZvaWQgZGVidWdfdHlwZShpbnQgaSk7CiMgMTA2MSAiY2VsbC5o IgpleHRlcm4gIkMiIHZvaWQgZGVidWdfaW50KGludCBpKTsKIyA0OCAiYWxsLmgiIDIKCgojIDEg Imhhc2guaCIgMQojIDUxICJhbGwuaCIgMgojIDEgImxpbGZlcy5oIiAxCiMgNjQ2ICJsaWxmZXMu aCIKZXh0ZXJuICJDIiB7CgogICAgICAgIGV4dGVybiBjZWxsX3B0ciBIZWFwQV9Cb3R0b207CiAg ICAgICAgZXh0ZXJuIGNlbGxfcHRyIEhlYXBCX0JvdHRvbTsKICAgICAgICBleHRlcm4gY2VsbF9w dHIgQ2hvaWNlQm90dG9tOwogICAgICAgIGV4dGVybiBjZWxsX3B0ciBTdGFja0JvdHRvbTsKICAg ICAgICBleHRlcm4gY2VsbF9wdHIgVHJhaWxCb3R0b207CgogICAgICAgIGV4dGVybiBjZWxsIEhl YXBBX1BvaW50ZXI7CiAgICAgICAgZXh0ZXJuIGNlbGwgSGVhcEFfTGltaXQ7CiAgICAgICAgZXh0 ZXJuIGNlbGwgSGVhcEJfUG9pbnRlcjsKICAgICAgICBleHRlcm4gY2VsbCBIZWFwQl9MaW1pdDsK ICAgICAgICBleHRlcm4gY2VsbCBIZWFwQV9UcmFpbExpbWl0OwogICAgICAgIGV4dGVybiBjZWxs IEhlYXBCX1RyYWlsTGltaXQ7CiAgICAgICAgZXh0ZXJuIGNlbGwgQ2hvaWNlUG9pbnRlcjsKICAg ICAgICBleHRlcm4gY2VsbCBTdGFja1BvaW50ZXI7CiAgICAgICAgZXh0ZXJuIGNlbGwgRnJhbWVQ b2ludGVyOwogICAgICAgIGV4dGVybiBjZWxsIFRyYWlsUG9pbnRlcjsKICAgICAgICBleHRlcm4g Y2VsbCBVbmlmeVBvaW50ZXIxOwogICAgICAgIGV4dGVybiBjZWxsIFVuaWZ5UG9pbnRlcjI7CiAg ICAgICAgZXh0ZXJuIGNlbGwgVW5pZnlDZWxsMTsKICAgICAgICBleHRlcm4gY2VsbCBVbmlmeUNl bGwyOwogICAgICAgIGV4dGVybiBjZWxsIFB1c2hEb3duTGlzdFBvaW50ZXI7CiAgICAgICAgZXh0 ZXJuIGNlbGwgQ29tcENvbnN0OwoKICAgICAgICBleHRlcm4gY29kZXB0ciBQcm9ncmFtQ291bnRl cjsKICAgICAgICBleHRlcm4gY29kZXB0ciBDb250aW51YXRpb25Qb2ludGVyOwogICAgICAgIGV4 dGVybiBjb2RlcHRyIFNpbXBsZUNhbGxDb250aW51YXRpb25Qb2ludGVyOwogICAgICAgIGV4dGVy biBjZWxsX2ludCBIZWFwQV9Ob1RyYWlsU2l6ZTsKCiAgICAgICAgZXh0ZXJuIGNlbGxfcHRyIFN5 bWJvbDsKICAgICAgICBleHRlcm4gY2VsbF9wdHIgQXNzZXJ0OwoKfQojIDUyICJhbGwuaCIgMgoj IDEgIm1hY2hpbmUuaCIgMQojIDkgIm1hY2hpbmUuaCIKZXh0ZXJuICJDIiB7Cgp2b2lkIExvb3BJ bml0KCk7Cgp2b2lkIExvb3BUZXJtKCk7Cgp2b2lkIExvb3BUZXJtX0NsZWFyKCk7CgoKdm9pZCBU cmFpbE92ZXJ3cml0ZTIoY2VsbCk7CnZvaWQgRmFpbCgpOwoKCgp2b2lkIFN3aXRjaEhlYXAoKTsK CmNlbGwgU2V0VHJhaWxQb2ludDIoY29kZXB0ciByZXRwKTsKdm9pZCBUcmFpbEFnYWluMihjZWxs IGNwLCBjb2RlcHRyIHJldHApOwp2b2lkIFRyYWlsQmFjazIoY2VsbCBjcCk7CnZvaWQgV3JpdGVI ZWFwMihjZWxsIGNwLCBjZWxsIGMpOwp2b2lkIFB1dEhlYXAoY2VsbCBjKTsKCn0KaW5saW5lIHZv aWQgVHJhaWxPdmVyd3JpdGUoY2VsbF9wdHIgY3ApIHsgVHJhaWxPdmVyd3JpdGUyKFBUUjJjKGNw KSk7IH0KaW5saW5lIHZvaWQgVHJhaWxPdmVyd3JpdGUoY2VsbCBjKSB7IFRyYWlsT3ZlcndyaXRl MihjKTsgfQoKaW5saW5lIHZvaWQgV3JpdGVIZWFwKGNlbGxfcHRyIGNwLGNlbGwgYyl7V3JpdGVI ZWFwMihQVFIyYyhjcCksYyk7fQoKaW5saW5lIGNlbGxfcHRyIFNldFRyYWlsUG9pbnQoY29kZXB0 ciByKXtyZXR1cm4gYzJQVFIoU2V0VHJhaWxQb2ludDIocikpO30KCmlubGluZSB2b2lkIFRyYWls QWdhaW4oY2VsbF9wdHIgY3AsY29kZXB0ciByKXtUcmFpbEFnYWluMihQVFIyYyhjcCkscik7fQoK aW5saW5lIHZvaWQgVHJhaWxCYWNrKGNlbGxfcHRyIGNwKXtUcmFpbEJhY2syKFBUUjJjKGNwKSk7 fQojIDUzICJhbGwuaCIgMgojIDEgImZzcC5oIiAxCiMgMzggImZzcC5oIgojIDEgInNzcF9tYWNy by5oIiAxCiMgMTQgInNzcF9tYWNyby5oIgppbmxpbmUgY2VsbF9wdHIgUEEoY2VsbF9wdHIgYSxp bnQgYikgewogICAgICAgIHJldHVybiBjMlBUUiggKCBQVFIyYyhjMlBUUihQVFIyYyhhKSkgKyAo aW50KSgoYikpKSApICk7Cn0KIyAzOSAiZnNwLmgiIDIKIyAxICJtZW1hbGxvYy5oIiAxCiMgMzUg Im1lbWFsbG9jLmgiCnR5cGVkZWYgY29uc3Qgdm9pZCAqIGNvbnN0X3ZvaWRfcDsKIyA0OCAibWVt YWxsb2MuaCIKY2xhc3MgbGlsZmVzX2FsbG9jYXRvcl9pbnN0YW5jZQp7CnByaXZhdGU6CiAgICAg ICAgc3RydWN0IGxpbmtsaXN0CiAgICAgICAgewogICAgICAgICAgICAgICAgbGlua2xpc3QgKm5l eHQ7CiAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICAgICB9OwoKCiAgICAgICAgc3Ry dWN0IG1hbGxvY2xpc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBtYWxsb2NsaXN0ICpuZXh0 OwogICAgICAgIH07CgoKICAgICAgICBsaW5rbGlzdCAqZnJlZWxpbms7CgogICAgICAgIG1hbGxv Y2xpc3QgKnJvb3Q7CgogICAgICAgIGludCBuZnJlZTsKCiAgICAgICAgaW50IGZyZWVsaW1pdDsK CiAgICAgICAgaW50IG5yZWY7CgoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGFsbG9jdW5pdCA9 IDY1NTM2IC0gc2l6ZW9mKG1hbGxvY2xpc3QpOwoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGlu aWZyZWVsaW1pdCA9IDI1NjsKCgpwdWJsaWM6CiAgICAgICAgbGlsZmVzX2FsbG9jYXRvcl9pbnN0 YW5jZSgpIHRocm93KCkgeyBmcmVlbGluayA9IF9fbnVsbDsgcm9vdCA9IF9fbnVsbDsgbmZyZWUg PSAwOyBmcmVlbGltaXQgPSBpbmlmcmVlbGltaXQ7IG5yZWYgPSAxO30KCiAgICAgICAgfmxpbGZl c19hbGxvY2F0b3JfaW5zdGFuY2UoKSB0aHJvdygpOwoKICAgICAgICB2b2lkIGdhcmJhZ2VfY29s bGVjdGlvbigpIHRocm93KGJhZF9hbGxvYyk7CgoKICAgICAgICBpbnQgSW5jUmVmKCkgeyByZXR1 cm4gKytucmVmOyB9CgogICAgICAgIGludCBEZWNSZWYoKSB7IHJldHVybiAtLW5yZWY7IH0KCgog ICAgICAgIHZvaWQgKmFsbG9jYXRlKHNpemVfdCBuKSB0aHJvdyhiYWRfYWxsb2MpOwoKICAgICAg ICB2b2lkIGRlYWxsb2NhdGUodm9pZCAqcCwgc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYyk7Cgog ICAgICAgIHZvaWQgdW5saW5rX21hbGxvY2xpc3QobWFsbG9jbGlzdCAqeCkgdGhyb3coYmFkX2Fs bG9jKTsKCgpwcml2YXRlOgogICAgICAgIHZvaWQgKnJlc2VydmVfbmV3X2FyZWEoc2l6ZV90IG4p IHRocm93KGJhZF9hbGxvYyk7CgogICAgICAgIHZvaWQgZnJlZV9hcmVhKHZvaWQgKnApIHRocm93 KCk7Cgp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIGxpbGZlc19hbGxvY2F0b3IK ewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgICAgIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKCiAgICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwoKCiAgICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwoKICAgICAgICB0eXBlZGVmIGNvbnN0 IFQqIGNvbnN0X3BvaW50ZXI7CgogICAgICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwoKICAgICAg ICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKCiAgICAgICAgdGVtcGxhdGUgPGNs YXNzIFU+IHN0cnVjdCByZWJpbmQgeyB0eXBlZGVmIGxpbGZlc19hbGxvY2F0b3I8VT4gb3RoZXI7 IH07Cgpwcml2YXRlOgoKICAgICAgICBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlICppbnN0OwoK CnB1YmxpYzoKICAgICAgICBsaWxmZXNfYWxsb2NhdG9yKCkgdGhyb3coKSB7IGluc3QgPSBuZXcg bGlsZmVzX2FsbG9jYXRvcl9pbnN0YW5jZTsgfQoKICAgICAgICB+bGlsZmVzX2FsbG9jYXRvcigp IHRocm93KCkgeyBpZiggaW5zdCAmJiBpbnN0LT5EZWNSZWYoKSA9PSAwICkgZGVsZXRlIGluc3Q7 IH0KCiAgICAgICAgbGlsZmVzX2FsbG9jYXRvcihjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZ0 KSB0aHJvdygpIHsgaW5zdCA9IHQuaW5zdDsgaW5zdC0+SW5jUmVmKCk7IH0KCgogICAgICAgIHZv aWQgZGVzdHJveV9hbGxvY2F0b3IoKSB0aHJvdygpIHsgZGVsZXRlIGluc3Q7IGluc3QgPSBfX251 bGw7IH0KCgogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8VD4mIG9wZXJhdG9yPShjb25zdCBsaWxm ZXNfYWxsb2NhdG9yPFQ+ICZ0KSB0aHJvdygpIHsgaW5zdC0+RGVjUmVmKCk7IGluc3QgPSB0Lmlu c3Q7IGluc3QtPkluY1JlZigpOyByZXR1cm4gKnRoaXM7IH0KCgogICAgICAgIHRlbXBsYXRlIDxj bGFzcyBVPiBsaWxmZXNfYWxsb2NhdG9yKGNvbnN0IGxpbGZlc19hbGxvY2F0b3I8VT4gJnQpIHRo cm93KCkgeyBpbnN0ID0gdC5HZXRJbnN0YW5jZSgpOyBpbnN0LT5JbmNSZWYoKTsgfQoKICAgICAg ICBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlICpHZXRJbnN0YW5jZSgpIGNvbnN0IHRocm93KCkg eyByZXR1cm4gaW5zdDsgfQoKCiAgICAgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikg dGhyb3coYmFkX2FsbG9jKSB7IHJldHVybiAocG9pbnRlcikgaW5zdC0+YWxsb2NhdGUobiAqIHNp emVvZihUKSk7IH0KCiAgICAgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Rf dm9pZF9wIGhpbnQpIHRocm93KGJhZF9hbGxvYykgeyByZXR1cm4gYWxsb2NhdGUobik7IH0KCiAg ICAgICAgdm9pZCAqYWxsb2NhdGVfYnl0ZXMoc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykgeyBy ZXR1cm4gaW5zdC0+YWxsb2NhdGUobik7IH0KCgogICAgICAgIHZvaWQgZGVhbGxvY2F0ZShwb2lu dGVyIHAsIHNpemVfdHlwZSBuKSB0aHJvdyhiYWRfYWxsb2MpIHsgaW5zdC0+ZGVhbGxvY2F0ZShw LCBuICogc2l6ZW9mKFQpKTsgfQoKICAgICAgICB2b2lkIGRlYWxsb2NhdGVfYnl0ZXModm9pZCAq cCwgc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykgeyByZXR1cm4gaW5zdC0+ZGVhbGxvY2F0ZShw LCBuKTsgfQoKCiAgICAgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJl dHVybiAweDdmZmZmZmZjIC8gc2l6ZW9mKFQpOyB9CgoKICAgICAgICB2b2lkIGNvbnN0cnVjdChw b2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcocCkgVCh2YWwpOyB9CgogICAgICAgIHZvaWQg ZGVzdHJveShwb2ludGVyIHApIHsgcC0+flQoKTsgfQoKCiAgICAgICAgcG9pbnRlciBhZGRyZXNz KHJlZmVyZW5jZSByKSBjb25zdCB7IHJldHVybiAmcjsgfQoKICAgICAgICBjb25zdF9wb2ludGVy IGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHIpIGNvbnN0IHsgcmV0dXJuICZyOyB9CgoKICAgICAg ICB2b2lkIGdjKCkgeyBpbnN0LT5nYXJiYWdlX2NvbGxlY3Rpb24oKTsgfQoKCiAgICAgICAgZnJp ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZhLCBjb25zdCBs aWxmZXNfYWxsb2NhdG9yPFQ+ICZiKSB0aHJvdygpIHsgcmV0dXJuIGEuaW5zdCA9PSBiLmluc3Q7 IH0KCiAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBsaWxmZXNfYWxsb2NhdG9y PFQ+ICZhLCBjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZiKSB0aHJvdygpIHsgcmV0dXJuIGEu aW5zdCAhPSBiLmluc3Q7IH0KCgogICAgICAgIGZyaWVuZCBjbGFzcyBsaWxmZXNfYWxsb2NhdG9y X2luc3RhbmNlOwp9OwojIDIwNCAibWVtYWxsb2MuaCIKaW5saW5lIHZvaWQgKmxpbGZlc19hbGxv Y2F0b3JfaW5zdGFuY2U6OnJlc2VydmVfbmV3X2FyZWEoc2l6ZV90IHN6KSB0aHJvdyhiYWRfYWxs b2MpCnsKCiAgICAgICAgdm9pZCAqeCA9IG1hbGxvYyhzeik7CiAgICAgICAgaWYoIHggPT0gX19u dWxsICkKICAgICAgICAgICAgICAgIHRocm93IGJhZF9hbGxvYygpOwogICAgICAgIHJldHVybiB4 Owp9CgppbmxpbmUgdm9pZCBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlOjpmcmVlX2FyZWEodm9p ZCAqcCkgdGhyb3coKQp7CgogICAgICAgIGZyZWUocCk7Cn0KIyA0MCAiZnNwLmgiIDIKCgoKCgoK Y2xhc3MgU2hhcmVMaXN0OwoKY2xhc3MgbWFjaGluZTsKIyA2MCAiZnNwLmgiCmNsYXNzIEZTUAp7 CnByb3RlY3RlZDoKICAgICAgICBjZWxsIGM7CgoKICAgICAgICBlbnVtIG5vaW5pdF9UIHtub2lu aXR9OwogICAgICAgIEZTUChub2luaXRfVCkgeyB9CgpwdWJsaWM6CiAgICAgICAgZW51bSBJTlZB TElEX1Qge0NFTExfSU5WQUxJRF99OwoKICAgICAgICBGU1AoSU5WQUxJRF9UKSB7IGMgPSBDRUxM X0lOVkFMSUQ7IH0KCiAgICAgICAgRlNQKGNvbnN0IEZTUCAmZikgeyBjID0gZi5jOyB9CgogICAg ICAgIEZTUCAmIG9wZXJhdG9yPShjb25zdCBGU1AgJmYpIHsgYyA9IGYuYzsgcmV0dXJuICp0aGlz OyB9CgogICAgICAgIEZTUCh2b2lkKSB7IGNvbnN0cnVjdG9yKCk7IH0KICAgICAgICBleHBsaWNp dCBGU1AobWFjaGluZSAqKSB7IGNvbnN0cnVjdG9yKCk7IH0KICAgICAgICBleHBsaWNpdCBGU1Ao bWFjaGluZSAmKSB7IGNvbnN0cnVjdG9yKCk7IH0KCiAgICAgICAgZXhwbGljaXQgRlNQKGNlbGxf cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQogICAgICAgIEZTUChtYWNoaW5lICosIGNlbGxf cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQogICAgICAgIEZTUChtYWNoaW5lICYsIGNlbGxf cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQoKCgoKICAgICAgICBleHBsaWNpdCBGU1AobWlu dCBpKSB7IGNvbnN0cnVjdG9yKGkpOyB9CiAgICAgICAgRlNQKG1hY2hpbmUgKiwgbWludCBpKSB7 IGNvbnN0cnVjdG9yKGkpOyB9CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgbWludCBpKSB7IGNvbnN0 cnVjdG9yKGkpOyB9CgogICAgICAgIGV4cGxpY2l0IEZTUChtZmxvYXQgZCkgeyBjb25zdHJ1Y3Rv cihkKTsgfQogICAgICAgIEZTUChtYWNoaW5lICosIG1mbG9hdCBkKSB7IGNvbnN0cnVjdG9yKGQp OyB9CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgbWZsb2F0IGQpIHsgY29uc3RydWN0b3IoZCk7IH0K CiAgICAgICAgZXhwbGljaXQgRlNQKGNvbnN0IGNoYXIgKnMpIHsgY29uc3RydWN0b3Iocyk7IH0K ICAgICAgICBGU1AobWFjaGluZSAqLCBjb25zdCBjaGFyICpzKSB7IGNvbnN0cnVjdG9yKHMpOyB9 CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgY29uc3QgY2hhciAqcykgeyBjb25zdHJ1Y3RvcihzKTsg fQoKICAgICAgICBleHBsaWNpdCBGU1AoY29uc3Qgc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMu Y19zdHIoKSk7IH0KICAgICAgICBGU1AobWFjaGluZSAqLCBjb25zdCBzdHJpbmcgJnMpIHsgY29u c3RydWN0b3Iocy5jX3N0cigpKTsgfQogICAgICAgIEZTUChtYWNoaW5lICYsIGNvbnN0IHN0cmlu ZyAmcykgeyBjb25zdHJ1Y3RvcihzLmNfc3RyKCkpOyB9CgogICAgICAgIGV4cGxpY2l0IEZTUChj b25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMuY19zdHIoKSk7IH0KICAgICAgICBGU1Ao bWFjaGluZSAqLCBjb25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMuY19zdHIoKSk7IH0K ICAgICAgICBGU1AobWFjaGluZSAmLCBjb25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMu Y19zdHIoKSk7IH0KCiAgICAgICAgRlNQKGNlbGwgaWMpIHsgY29uc3RydWN0b3IoaWMpOyB9CiAg ICAgICAgRlNQKG1hY2hpbmUgKiwgY2VsbCBpYykgeyBjb25zdHJ1Y3RvcihpYyk7IH0KICAgICAg ICBGU1AobWFjaGluZSAmLCBjZWxsIGljKSB7IGNvbnN0cnVjdG9yKGljKTsgfQoKCiAgICAgICAg dm9pZCBjb25zdHJ1Y3Rvcih2b2lkKSB7IGNvbnN0cnVjdG9yKFZBUjJjKFRZUEVfYm90KSk7IH0K CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihtaW50IGkpIHsgYyA9IElOVDJjKGkpOyB9CgogICAg ICAgIHZvaWQgY29uc3RydWN0b3IobWZsb2F0IGQpOwoKCiAgICAgICAgdm9pZCBjb25zdHJ1Y3Rv cihjb25zdCBjaGFyICpzKTsKCiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihjZWxsIGljKSB7IGlm KCAoKCgoY2VsbF9pbnQpKGljKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2lu dClUX1BUUiA8PCAwKSkgfHwgKCgoKGNlbGxfaW50KShpYykpICYgKChjZWxsX2ludCkweGYgPDwg MCkpID09ICgoY2VsbF9pbnQpVF9JTlQgPDwgMCkpICkgYyA9IGljOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IGMg PSBIZWFwQV9Qb2ludGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoSGVhcEFf UG9pbnRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEhlYXBBX1BvaW50ZXIgPSAoIFBUUjJjKGMyUFRSKEhl YXBBX1BvaW50ZXIpICsgKGludCkoMSkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gaWM7IH0gfQoK ICAgICAgICB2b2lkIGNvbnN0cnVjdG9yKGNlbGxfcHRyIGlwKSB7IGMgPSBQVFIyYyhpcCk7IH0K CgoKICAgICAgICBtYWNoaW5lICpHZXRNYWNoaW5lKCkgY29uc3QgeyByZXR1cm4gX19udWxsOyB9 CgogICAgICAgIGNlbGxfcHRyIEdldEFkZHJlc3MoKSBjb25zdCB7IDsgcmV0dXJuIGMyUFRSKGMp OyB9CgogICAgICAgIGNlbGxfcHRyIEdldEFkZHIoKSBjb25zdCB7IHJldHVybiBHZXRBZGRyZXNz KCk7IH0KCgogICAgICAgIEZTUCBEZXJlZigpOwoKICAgICAgICBGU1AgRGVyZWYoKSBjb25zdDsK CiAgICAgICAgRlNQIEZvbGxvd050aChpbnQgaSkgY29uc3Q7CgogICAgICAgIGNlbGwgR2V0Q2Vs bCgpIGNvbnN0IHsgcmV0dXJuIGM7IH0KCiAgICAgICAgY2VsbCBSZWFkQ2VsbCgpOwoKICAgICAg ICBjZWxsIFJlYWRDZWxsKCkgY29uc3Q7CgoKICAgICAgICBib29sIF9Jc1ZhbGlkKCkgY29uc3Qg eyByZXR1cm4gYyAhPSBDRUxMX0lOVkFMSUQ7IH0KCiAgICAgICAgYm9vbCBJc1ZhbGlkKCkgY29u c3QgewogICAgICAgICAgICAgICAgYm9vbCByZXQgPSAoIFJlYWRDZWxsKCkgIT0gQ0VMTF9JTlZB TElEICk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KCiAgICAgICAgYm9v bCBJc0ludmFsaWQoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBib29sIHJldCA9ICggUmVhZENl bGwoKSA9PSBDRUxMX0lOVkFMSUQgKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAg ICAgfQoKCgogICAgICAgIGNvbnN0IHR5cGUgKkdldFR5cGUoKSBjb25zdCA7CgoKCiAgICAgICAg Ym9vbCBJc0xlYWYoKSB7IHJldHVybiAhKCgoKGNlbGxfaW50KShSZWFkQ2VsbCgpKSkgJiAoKGNl bGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1NUUiA8PCAwKSk7IH0KCgogICAgICAg IGJvb2wgSXNOb2RlKCkgY29uc3QgeyByZXR1cm4gKCgoKGNlbGxfaW50KShSZWFkQ2VsbCgpKSkg JiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1NUUiA8PCAwKSk7IH0KCgog ICAgICAgIGJvb2wgSXNTdHIoKSBjb25zdCB7IHJldHVybiAoKCgoY2VsbF9pbnQpKFJlYWRDZWxs KCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxfaW50KVRfU1RSIDw8IDApKTsg fQoKICAgICAgICBib29sIElzVmFyKCkgY29uc3QgeyByZXR1cm4gKCgoKGNlbGxfaW50KShSZWFk Q2VsbCgpKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1ZBUiA8PCAw KSk7IH0KCiAgICAgICAgYm9vbCBJc0ludGVnZXIoKSBjb25zdCB7IHJldHVybiAoKCgoY2VsbF9p bnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxfaW50KVRf SU5UIDw8IDApKTsgfQoKICAgICAgICBib29sIElzRmxvYXQoKSBjb25zdCB7IHJldHVybiAoKCgo Y2VsbF9pbnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxf aW50KVRfRkxPIDw8IDApKTsgfQoKICAgICAgICBib29sIElzQ2hhcigpIGNvbnN0IHsgcmV0dXJu ICgoKChjZWxsX2ludCkoUmVhZENlbGwoKSkpICYgKChjZWxsX2ludCkweGYgPDwgMCkpID09ICgo Y2VsbF9pbnQpVF9DSFIgPDwgMCkpOyB9CgogICAgICAgIGJvb2wgSXNTdHJpbmcoKSBjb25zdCB7 IHJldHVybiAoKCgoY2VsbF9pbnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDAp KSA9PSAoKGNlbGxfaW50KVRfU1RHIDw8IDApKTsgfQoKCiAgICAgICAgbWludCBSZWFkSW50ZWdl cigpIGNvbnN0IHsgcmV0dXJuIGMySU5UKFJlYWRDZWxsKCkpOyB9CgogICAgICAgIG1mbG9hdCBS ZWFkRmxvYXQoKSBjb25zdDsKCgogICAgICAgIGxzdHJpbmcgUmVhZFN0cmluZygpIGNvbnN0OwoK CgogICAgICAgIGJvb2wgQ2hlY2tGZWF0dXJlKGNvbnN0IHR5cGUgKmYpIGNvbnN0IHsgcmV0dXJu IEdldFR5cGUoKS0+R2V0SW5kZXgoZikgIT0gLTE7IH0KCgpwdWJsaWM6CgogICAgICAgIGJvb2wg Q29lcmNlKGNvbnN0IHR5cGUgKnQpIHsgcmV0dXJuIENvZXJjZSh0LT5HZXRTZXJpYWxObygpKTsg fQoKICAgICAgICBib29sIENvZXJjZSh0c2VyaWFsIHRzKTsKCgogICAgICAgIGJvb2wgQ29lcmNl T3JGYWlsKGNvbnN0IHR5cGUgKnQpIHsgcmV0dXJuIENvZXJjZU9yRmFpbCh0LT5HZXRTZXJpYWxO bygpKTsgfQoKICAgICAgICBib29sIENvZXJjZU9yRmFpbCh0c2VyaWFsIHRzKTsKCgoKCiAgICAg ICAgRlNQIEZvbGxvdyhjb25zdCB0eXBlKiB0KSB7IHJldHVybiBGb2xsb3codC0+R2V0U2VyaWFs Tm8oKSk7IH0KCiAgICAgICAgRlNQIEZvbGxvdyh0c2VyaWFsIGZzKTsKCgoKICAgICAgICBGU1Ag Rm9sbG93SWZFeGlzdChjb25zdCB0eXBlKiB0KSB7cmV0dXJuIEZvbGxvd0lmRXhpc3QodC0+R2V0 U2VyaWFsTm8oKSk7IH0KCiAgICAgICAgRlNQIEZvbGxvd0lmRXhpc3QodHNlcmlhbCBmcyk7CgoK CiAgICAgICAgYm9vbCBVbmlmeShGU1AgZik7CgoKCiAgICAgICAgYm9vbCBVbmlmeU9yRmFpbChG U1ApOwoKCgogICAgICAgIEZTUCBDb3B5KHZvaWQpIGNvbnN0OwoKICAgICAgICBGU1AgUmVDb3B5 KGludCBzaXplKSBjb25zdDsKCiAgICAgICAgRlNQIFJlQ29weShjZWxsX3B0ciBwdHIsIGludCBz aXplKSBjb25zdDsKCiAgICAgICAgYm9vbCBFcXVpdihjZWxsIGRlc3QpIGNvbnN0OwoKCiAgICAg ICAgRlNQIERpZmYoY29uc3QgRlNQICZmKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICAgICAgc3Rh dGljIGNlbGxfcHRyIENvcHlJbnRlcm5hbChjZWxsX3B0ciwgY2VsbF9wdHIsIGNlbGxfcHRyKTsK ICAgICAgICBzdGF0aWMgYm9vbCBFcXVpdkludGVybmFsKGNlbGwsY2VsbCxpbnQmKTsKcHVibGlj OgoKCgoKCgogICAgICAgIG91dGZvcm0gRGlzcGxheUFWTSgpIGNvbnN0OwoKICAgICAgICBvdXRm b3JtIERpc3BsYXlBVk0oU2hhcmVMaXN0ICZzbCkgY29uc3Q7CgogICAgICAgIG91dGZvcm0gRGlz cGxheUFWTU1pbmltdW0oKSBjb25zdDsKCiAgICAgICAgb3V0Zm9ybSBEaXNwbGF5QVZNTWluaW11 bShTaGFyZUxpc3QgJiwgY29uc3QgdHlwZSogdCkgY29uc3Q7CiAgICAgICAgb3V0Zm9ybSBEaXNw bGF5TGlMRmVTKCkgY29uc3Q7CgogICAgICAgIG91dGZvcm0gRGlzcGxheUxpTEZlUyhTaGFyZUxp c3QgJiwgY29uc3QgdHlwZSAqdCA9IGJvdCkgY29uc3Q7CgogICAgICAgIHN0YXRpYyBjb25zdCBG U1AgaW52YWxpZDsKfTsKIyAyODUgImZzcC5oIgpjbGFzcyBTaGFyZUxpc3QKewpwdWJsaWM6CiAg ICAgICAgc3RydWN0IEFkZHJSZWZQYWlyCiAgICAgICAgewogICAgICAgICAgICAgICAgY2VsbF9w dHIgYWRkcjsKCiAgICAgICAgICAgICAgICBpbnQgcmVmOwoKCiAgICAgICAgICAgICAgICBzdGF0 aWMgaW50IGNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKCiAgICAgICAgfTsKCnBy b3RlY3RlZDoKICAgICAgICBtYWNoaW5lICptYWNoOwoKICAgICAgICBWYXJBcnJheTxBZGRyUmVm UGFpcj4gbWFyazsKCiAgICAgICAgVmFyQXJyYXk8QWRkclJlZlBhaXI+IHNoYXJlOwoKCnB1Ymxp YzoKICAgICAgICBTaGFyZUxpc3QoKSB7IG1hY2ggPSBfX251bGw7IH0KCgogICAgICAgIGNvbnN0 IFZhckFycmF5PEFkZHJSZWZQYWlyPiAmTWFya0FycmF5KCkgeyByZXR1cm4gbWFyazsgfQoKICAg ICAgICBjb25zdCBWYXJBcnJheTxBZGRyUmVmUGFpcj4gJlNoYXJlQXJyYXkoKSB7IHJldHVybiBz aGFyZTsgfQoKCiAgICAgICAgdm9pZCBBZGRNYXJrKEZTUCBmKTsKCiAgICAgICAgdm9pZCBNYWtl U2hhcmUoKTsKCiAgICAgICAgaW50IFNlYXJjaFNoYXJlKEZTUCBmKTsKCiAgICAgICAgaW50IEdl dFNoYXJlQ291bnQoaW50IGlkeCkgeyByZXR1cm4gKytzaGFyZVtpZHhdLnJlZjsgfQoKfTsKIyAz MzkgImZzcC5oIgpjbGFzcyBMaW5lYXJGU1AKewpwcm90ZWN0ZWQ6CiAgICAgICAgY2VsbCBjOwoK ICAgICAgICB2b2lkIENvbnN0cnVjdG9yKEZTUCBmKTsKCiAgICAgICAgdm9pZCBDb25zdHJ1Y3Rv cihjb25zdCBMaW5lYXJGU1AgJmYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBj ID0gZi5jOyBpZiggKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0g KChjZWxsX2ludClUX1BUUiA8PCAwKSkgJiYgSXNWYWxpZCgpICkgewoKCgogICAgICAgICAgICAg ICAgICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoYyk7ICoocC0xKSA9IElOVDJjKGMySU5UKCoo cC0xKSkrMSk7IH0gfQoKICAgICAgICB2b2lkIENvbnN0cnVjdG9yKEZTUCBmLCBsaWxmZXNfYWxs b2NhdG9yPGNlbGw+IGFsbG9jKTsKCiAgICAgICAgdm9pZCBDb25zdHJ1Y3Rvcihjb25zdCBMaW5l YXJGU1AgJmYsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2MpOwoKICAgICAgICB2b2lkIERl c3RydWN0b3IoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZigg KCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2ludClU X1BUUiA8PCAwKSkgJiYgSXNWYWxpZCgpICkgewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNlbGxfcHRyIHAgPSBjMlBUUihjKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqKHAtMSkgPSBJTlQyYyhjMklOVCgqKHAtMSkpLTEpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmKCBjMklOVCgqKHAtMSkpID09IDAgKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gKHAtMik7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIH0KCgpwdWJsaWM6CiAgICAgICAgTGluZWFyRlNQKCkgeyBj ID0gQ0VMTF9JTlZBTElEOyB9CgogICAgICAgIExpbmVhckZTUChGU1AgZikgeyBDb25zdHJ1Y3Rv cihmKTsgfQogICAgICAgIExpbmVhckZTUChjb25zdCBMaW5lYXJGU1AgJmYpIHsgQ29uc3RydWN0 b3IoZik7IH0KCiAgICAgICAgTGluZWFyRlNQKEZTUCBmLCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ IGFsbG9jKSB7IENvbnN0cnVjdG9yKGYsIGFsbG9jKTsgfQogICAgICAgIExpbmVhckZTUChjb25z dCBMaW5lYXJGU1AgJmYsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2MpIHsgQ29uc3RydWN0 b3IoZiwgYWxsb2MpOyB9CgoKICAgICAgICB+TGluZWFyRlNQKCkgeyBEZXN0cnVjdG9yKCk7IH0K CgogICAgICAgIHNpemVfdCBHZXRTaXplKCkgY29uc3QgeyBpZiggKCgoKGNlbGxfaW50KShjKSkg JiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2ludClUX1BUUiA8PCAwKSkgKSByZXR1 cm4gYzJJTlQoYzJQVFIoYylbLTJdKTsgZWxzZSByZXR1cm4gMDsgfQoKCiAgICAgICAgb3BlcmF0 b3IgY29uc3QgRlNQICYoKSBjb25zdCB7IHJldHVybiAqKGNvbnN0IEZTUCAqKSh2b2lkICopdGhp czsgfQoKCiAgICAgICAgTGluZWFyRlNQICYgb3BlcmF0b3I9KEZTUCBmKSB7IERlc3RydWN0b3Io KTsgQ29uc3RydWN0b3IoZik7IHJldHVybiAqdGhpczsgfQogICAgICAgIExpbmVhckZTUCAmIG9w ZXJhdG9yPShjb25zdCBMaW5lYXJGU1AgJmYpIHsgRGVzdHJ1Y3RvcigpOyBDb25zdHJ1Y3Rvcihm KTsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgICB2b2lkIERlYWxsb2MobGlsZmVzX2FsbG9jYXRv cjxjZWxsPiBhbGxvYyk7CgoKICAgICAgICBGU1AgQ29weSgpIGNvbnN0OwoKICAgICAgICBjZWxs IEdldENlbGwoKSBjb25zdCB7IHJldHVybiBjOyB9CgoKICAgICAgICBjb25zdCB0eXBlICpHZXRU eXBlKCkgY29uc3QgeyBGU1AgZihjMlBUUihjKSk7IHJldHVybiBmLkdldFR5cGUoKTsgfQoKCiAg ICAgICAgYm9vbCBJc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gYyAhPSBDRUxMX0lOVkFMSUQ7IH0K CiAgICAgICAgYm9vbCBJc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBjID09IENFTExfSU5WQUxJ RDsgfQoKCiAgICAgICAgYm9vbCBFcXVpdihjb25zdCBMaW5lYXJGU1AgJmYpIGNvbnN0OwoKICAg ICAgICBib29sIExlc3NUaGFuKGNvbnN0IExpbmVhckZTUCAmZikgY29uc3Q7CgogICAgICAgIGZy aWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyRlNQICZhLCBjb25zdCBMaW5lYXJGU1Ag JmIpIHsgcmV0dXJuIGEuYyA9PSBiLmM7IH0KCgoKICAgICAgICBvdXRmb3JtIERpc3BsYXlBVk0o KSBjb25zdCB7IHJldHVybiBvcGVyYXRvciBjb25zdCBGU1AgJigpLkRpc3BsYXlBVk0oKTsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgTGluZWFyRlNQIGludmFsaWQ7CgogICAgICAgIGZyaWVuZCB1 aW50IEhhc2hGdW5jdGlvbihjb25zdCBMaW5lYXJGU1AgJnApOwoKICAgICAgICBmcmllbmQgY2xh c3MgaXNlcmlhbGl6ZXI7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUb2JqLCBjbGFzcyBBbGxvYyA9 IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgTGluZWFyRlNQSGFzaCA6IHB1YmxpYyBIYXNoPExp bmVhckZTUCwgVG9iaiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhhc2g8TGluZWFyRlNQLCBU b2JqLCBBbGxvYz4gaGFzaF90OwpwdWJsaWM6CiAgICAgICAgICAgICAgICBMaW5lYXJGU1BIYXNo KCkgOiBIYXNoPExpbmVhckZTUCwgVG9iaiwgQWxsb2M+KCkgeyB9CiAgICAgICAgICAgICAgICBM aW5lYXJGU1BIYXNoKHVuc2lnbmVkIGksIHR5cGVuYW1lIGhhc2hfdDo6YWxsb2NhdG9yX3QgaWFs bG9jID0gdHlwZW5hbWUgaGFzaF90OjphbGxvY2F0b3JfdCgpKSA6IEhhc2g8TGluZWFyRlNQLCBU b2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7IH0KICAgICAgICAgICAgICAgIExpbmVhckZTUEhhc2go Y29uc3QgSGFzaDxMaW5lYXJGU1AsIFRvYmosIEFsbG9jPiAmaCkgOiBIYXNoPExpbmVhckZTUCwg VG9iaiwgQWxsb2M+KGgpIHsgfQogICAgICAgICAgICAgICAgTGluZWFyRlNQSGFzaChjb25zdCBJ bnRlZ2VySGFzaDxUb2JqPiAmaCkgOiBIYXNoPExpbmVhckZTUCwgVG9iaiwgQWxsb2M+KGgpIHsg fQp9OwoKdWludCBIYXNoRnVuY3Rpb24oY29uc3QgTGluZWFyRlNQICZwKTsKCgppbmxpbmUgYm9v bCBIYXNoS2V5RXF1YWwoY29uc3QgTGluZWFyRlNQICZwLCBjb25zdCBMaW5lYXJGU1AgJnEpCnsK ICAgICAgICByZXR1cm4gcC5FcXVpdihxKTsKfQoKCgpleHRlcm4gIkMiIHZvaWQgYXNtX3JlY29w eShjZWxsIGZyb20sIGludCBzaXplKTsKZXh0ZXJuICJDIiB2b2lkIGFzbV9yZWNvcHlfdG9fbGlu ZWFyKGNlbGwgdG8sIGNlbGwgZnJvbSwgaW50IHNpemUpOwpleHRlcm4gIkMiIHZvaWQgYXNtX3Jl Y29weV9mcm9tX2xpbmVhcihjZWxsIGMpOwoKIyAxICJzc3BleHQuaCIgMQojIDM1ICJzc3BleHQu aCIKIyAxICJoYXNoLmgiIDEKIyAzNiAic3NwZXh0LmgiIDIKCgojIDEgImZzcC5oIiAxCiMgMzkg InNzcGV4dC5oIiAyCiMgNjQgInNzcGV4dC5oIgpleHRlcm4gIkMiIGJvb2wgTWFpbkxvb3AoY29k ZXB0cik7CmV4dGVybiAiQyIgYm9vbCBVbmlmeUxvb3AoY29kZXB0cixjZWxsLGNlbGwpOwojIDc3 ICJzc3BleHQuaCIKY2xhc3MgTGluZWFyRlNQOwoKc3RydWN0IEpFQ0luZm8gewogICAgICAgIExp bmVhckZTUCBmc3A7CiAgICAgICAgaW50IG5mZWF0dXJlczsKCiAgICAgICAgSkVDSW5mbyhpbnQg bmYgPSAwKSB7IG5mZWF0dXJlcyA9IG5mOyB9CiAgICAgICAgSkVDSW5mbyhjb25zdCBMaW5lYXJG U1AgJmRlZiwgaW50IG5mPTAgKTogZnNwKGRlZikgeyBuZmVhdHVyZXMgPSBuZjsgfQp9OwoKZXh0 ZXJuIFRBcnJheTIgPGNvZGVwdHIsIHRzZXJpYWwgLCB0c2VyaWFsPiBDVGFibGU7CmV4dGVybiBU QXJyYXkgPGNvZGVwdHIsIHRzZXJpYWw+IENUYWJsZV9ib3Q7CmV4dGVybiBUQXJyYXkyIDxjb2Rl cHRyLCB0c2VyaWFsICwgdHNlcmlhbD4gVVRhYmxlOwpleHRlcm4gVEFycmF5MiA8dHNlcmlhbCwg dHNlcmlhbCAsIHRzZXJpYWw+IFRUYWJsZTsKZXh0ZXJuIFRBcnJheTIgPHVpbnQsIHRzZXJpYWwg LCB0c2VyaWFsPiBPVGFibGU7CmV4dGVybiBUQXJyYXkyPGNsYXNzIENvZXJjZUluZm8qLHRzZXJp YWwsdHNlcmlhbD4gQ0lUYWJsZTsKZXh0ZXJuIFRBcnJheTI8Y2xhc3MgVW5pZnlJbmZvKix0c2Vy aWFsLHRzZXJpYWw+IFVJVGFibGU7CmV4dGVybiBUQXJyYXlGIEZUYWJsZTsKZXh0ZXJuIFRTaW1w bGVBcnJheSA8Y2xhc3MgRmVhdHVyZUluZm8qICwgdHNlcmlhbD4gQlRhYmxlOwpleHRlcm4gVFNp bXBsZUFycmF5IDxKRUNJbmZvICwgdHNlcmlhbD4gRVRhYmxlOwpleHRlcm4gVEFycmF5IDxMaW5l YXJGU1AsIHRzZXJpYWw+IEF0dHJUYWJsZTsKZXh0ZXJuIFRBcnJheSA8TGluZWFyRlNQLCB0c2Vy aWFsPiBDb21wVGFibGU7CmV4dGVybiBUQXJyYXkyIDxMaW5lYXJGU1AsIHRzZXJpYWwsIHRzZXJp YWw+IENvbXBBVGFibGU7CmV4dGVybiBUQXJyYXkyIDxMaW5lYXJGU1AsIHRzZXJpYWwsIHRzZXJp YWw+IENvbXBVVGFibGU7CmV4dGVybiBjaGFyICoqVE5hbWVzOwpleHRlcm4gaW50IFROYW1lRGVh bDsKCmV4dGVybiBpbnQgTlR5cGVzOwpleHRlcm4gaW50IE5UeXBlc19vcmlnOwoKZXh0ZXJuIGNv ZGVwdHIgc3RhcnRfcG9pbnQ7CmV4dGVybiBjb2RlcHRyIHN0YXJ0X3BvaW50X2luaXQ7CiMgMTIw ICJzc3BleHQuaCIKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2ZhaWw7CmV4dGVybiAiQyIgY29kZSBs YWJlbF9pbnZhbGlkOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fbm90aGluZzsKZXh0ZXJuICJD IiBjb2RlIGxhYmVsX21ha2VfY29lcmNlY29kZTsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX21ha2Vf dW5pZnljb2RlOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfbWFrZV9jb2VyY2Vjb2RlX2NvbXBsZXg7 CmV4dGVybiAiQyIgY29kZSBsYWJlbF9tYWtlX3VuaWZ5Y29kZV9jb21wbGV4OwpleHRlcm4gIkMi IGNvZGUgbGFiZWxfZHluYW1pYzsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2JlZ2ludW5pZnk7CmV4 dGVybiAiQyIgY29kZSBsYWJlbF9leGl0bG9vcF9mYWlsOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxf ZXhpdGxvb3Bfc3VjY2VzczsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2dldF9jb21wX2E7CmV4dGVy biAiQyIgY29kZSBsYWJlbF9nZXRfY29tcF91OwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fY2hn c3RyOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fY2hnc3RyMjsKZXh0ZXJuICJDIiBjb2RlIGxh YmVsX2RvX2NvZXJjZTsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2RvX2NvZXJjZTI7CmV4dGVybiAi QyIgY29kZSBsYWJlbF9kb191bmlmeTE7CmV4dGVybiAiQyIgY29kZSBsYWJlbF9kb191bmlmeTFf eGNoZzsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2RvX3VuaWZ5MjsKZXh0ZXJuICJDIiBjb2RlIGxh YmVsX2RvX3VuaWZ5Ml94Y2hnOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fdW5pZnkzOwpleHRl cm4gIkMiIGNvZGUgbGFiZWxfZG9fdW5pZnkzX3hjaGc7CmV4dGVybiAiQyIgY29kZSBsYWJlbF9t YW51YWxfY2hvaWNlcG9pbnQ7CiMgMTU1ICJzc3BleHQuaCIKaW5saW5lIGNlbGwgTG93ZXJDZWxs KGNlbGwgYSwgY2VsbCBiKSB7CiAgICAgICAgY2VsbF9wdHIgcGEgPSBjMlBUUihhKTsKICAgICAg ICBjZWxsX3B0ciBwYiA9IGMyUFRSKGIpOwogICAgICAgIGlmIChwYSA8IHBiKSByZXR1cm4gUFRS MmMocGEpOwogICAgICAgIGVsc2UgcmV0dXJuIFBUUjJjKHBiKTsKfQppbmxpbmUgY2VsbCBVcHBl ckNlbGwoY2VsbCBhLCBjZWxsIGIpIHsKICAgICAgICBjZWxsX3B0ciBwYSA9IGMyUFRSKGEpOwog ICAgICAgIGNlbGxfcHRyIHBiID0gYzJQVFIoYik7CiAgICAgICAgaWYgKHBhID4gcGIpIHJldHVy biBQVFIyYyhwYSk7CiAgICAgICAgZWxzZSByZXR1cm4gUFRSMmMocGIpOwp9CmlubGluZSBpbnQg Q0RJRkYoY2VsbCBhLCBjZWxsIGIpIHsKICAgICAgICByZXR1cm4gYzJQVFIoYikgLSBjMlBUUihh KTsKfQppbmxpbmUgaW50IElubmVyKGNlbGwgYywgY2VsbF9wdHIgbWluLCBjZWxsX3B0ciBtYXgp IHsKICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoYyk7CiAgICAgICAgcmV0dXJuIChtaW4gPD0g cCAmJiBwIDwgbWF4KTsKfQojIDE5MyAic3NwZXh0LmgiCnN0cnVjdCBQZW50cnl7CiAgdHNlcmlh bCBwbm87CiAgY29kZXB0ciBhZGRyOwp9OwojIDIwNSAic3NwZXh0LmgiCnN0cnVjdCBIQVNIX0lU RU0gewogICAgICAgIGNlbGwgaW5zdGFuY2U7CiAgICAgICAgY29kZXB0ciBsYWJlbDsKfTsKc3Ry dWN0IEhBU0hfSVRFTV9UWVBFIHsKICAgICAgICB0c2VyaWFsIHR5cGU7CiAgICAgICAgaW50KiBs aXN0Owp9OwpzdHJ1Y3QgSEFTSF9JVEVNX0xBQkVMIHsKICAgICAgICBjaGFyKiBsYWJlbF9zdHI7 CiAgICAgICAgY29kZXB0ciBsYWJlbDsKICAgICAgICBjaGFyKiBHZXRLZXkodm9pZCkgeyByZXR1 cm4gbGFiZWxfc3RyOyB9Cn07CnN0cnVjdCBIQVNIX0lORk8gewogICAgICAgIGludCBpbnRfbGVu OwogICAgICAgIEhBU0hfSVRFTSogaW50X2luZm87CiAgICAgICAgaW50IHN0Z19sZW47CiAgICAg ICAgSEFTSF9JVEVNKiBzdGdfaW5mbzsKICAgICAgICBpbnQgdHlwZV9sZW47CiAgICAgICAgSEFT SF9JVEVNX1RZUEUqIHR5cGVfaW5mbzsKICAgICAgICBpbnQgbGFiZWxfbGVuOwogICAgICAgIEhB U0hfSVRFTV9MQUJFTCogbGFiZWxfaW5mbzsKICAgICAgICBpbnQgbmZlYXR1cmU7Cn07CnN0cnVj dCBIQVNIX0NMQVVTRUlORk8gewogICAgICAgIGNvZGVwdHIqIGRpc2pfbGFiZWxzOwogICAgICAg IGludCBuZmVhdHVyZTsKICAgICAgICBpbnQqIGNsYXVzZTsKICAgICAgICBjaGFyKiBrZXk7CiAg ICAgICAgY2hhciogR2V0S2V5KHZvaWQpIHsgcmV0dXJuIGtleTsgfQp9OwoKc3RydWN0IEhBU0gg ewpwcml2YXRlOgogICAgICAgIGludCBkZWFsOwogICAgICAgIGludCBtYXNrOwogICAgICAgIEhB U0hfSVRFTSogaGFzaGVzOwogICAgICAgIGludCBudW1iZXI7CiAgICAgICAgaW50IGlzX2RldGVy bWluZWQ7CiAgICAgICAgU3RyaW5nSGFzaDxIQVNIX0lURU1fTEFCRUw+IGxhYmVsX2hhc2g7CiAg ICAgICAgY29kZXB0ciogZGlzal9sYWJlbHM7CiAgICAgICAgSEFTSF9JTkZPKiBpbmZvOwogICAg ICAgIGludCogYnVpbHRpbl90eXBlX2luZm9bMl07CiAgICAgICAgY2hhciogYm90X3N0cmluZzsK ICAgICAgICBpbnQgbmZlYXR1cmU7CiAgICAgICAgdm9pZCBFeHBhbmQodm9pZCk7CiAgICAgICAg aW50IENhbGNIYXNoKGNlbGwpOwogICAgICAgIGludCBDYWxjSGFzaChjZWxsLGNlbGwpOwogICAg ICAgIEhBU0hfSVRFTSYgX0dldEhhc2goY2VsbCxjZWxsKTsKICAgICAgICBjb2RlcHRyIERldGVy bWluaXNtKHRzZXJpYWwpOwogICAgICAgIGNvZGVwdHIgTWFrZUNob2ljZUxhYmVsKGNoYXIqLCB0 c2VyaWFsKTsKcHVibGljOgogICAgICAgIGludCBjbGF1c2VsaXN0X2xlbjsKICAgICAgICBIQVNI KEhBU0hfSU5GTyopOwogICAgICAgIH5IQVNIKCk7CiAgICAgICAgSEFTSF9DTEFVU0VJTkZPKiBH ZXRDbGF1c2VJbmZvKHRzZXJpYWwpOwogICAgICAgIHZvaWQgU2V0U2VlZChIQVNIX0lURU0pOwog ICAgICAgIEhBU0hfSVRFTSBHZXRIYXNoKGNlbGwgYSxjZWxsIGIpIHsKICAgICAgICAgICAgICAg IHJldHVybiBfR2V0SGFzaChhLGIpOwogICAgICAgIH0KICAgICAgICB2b2lkIFNldEFsbFR5cGUo dHNlcmlhbCoqLCBjaGFyKiwgY2hhcioqKTsKICAgICAgICB2b2lkIEFwcGVuZFR5cGUodHNlcmlh bCk7Cn07CgpleHRlcm4gc3RydWN0IEhBU0gqIGFsbF9oYXNoW107CmV4dGVybiBzdHJ1Y3QgSEFT SF9JTkZPKiBhbGxfaGFzaF9pbmZvW107CmV4dGVybiBpbnQgYWxsX2hhc2hfZGVhbDsKCmV4dGVy biBjb2RlcHRyKiBfZGlzal9sYWJlbDsKZXh0ZXJuIGludCBfbmZlYXR1cmU7CmV4dGVybiBpbnQg SW5pdGlhbGl6ZU1vZGU7CgpjbGFzcyBUeXBlSW5mbyB7CiAgICAgICAgVHlwZUluZm8oKSB7fTsK cHVibGljOgogICAgICAgIGxzdHJpbmcgZm5hbWU7CiAgICAgICAgdHNlcmlhbCBmOwogICAgICAg IGxzdHJpbmcgY25hbWU7CiAgICAgICAgdHNlcmlhbCBjOwogICAgICAgIGludCBwcmlvcml0eTsK ICAgICAgICBzdGF0aWMgVHlwZUluZm8qIF9uZXcoaW50IHNpemUpIHsKICAgICAgICAgICAgICAg IFR5cGVJbmZvKiBhciA9IG5ldyBUeXBlSW5mb1tzaXplXTsKICAgICAgICAgICAgICAgIGludCBp O2ZvciAoaT0wO2k8c2l6ZTtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJbaV0uZm5h bWUuZm9yY2VfaW5pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBhcltpXS5jbmFtZS5mb3Jj ZV9pbml0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyW2ldLmYgPSBUU19JTlZBTElEOwog ICAgICAgICAgICAgICAgICAgICAgICBhcltpXS5jID0gVFNfSU5WQUxJRDsKICAgICAgICAgICAg ICAgICAgICAgICAgYXJbaV0ucHJpb3JpdHkgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgcmV0dXJuIGFyOwogICAgICAgIH0KfTsKCmNsYXNzIEZlYXR1cmVJbmZvIHsKcHVi bGljOgogICAgICAgIHRzZXJpYWwgZmVhdHVyZTsKICAgICAgICB0c2VyaWFsIHBhcmVudDsKICAg ICAgICB0c2VyaWFsIGNoaWxkOwogICAgICAgIHNob3J0IGZsYWc7CiAgICAgICAgaW50IHByaW9y aXR5OwogICAgICAgIGludCBGZWF0dXJlTmV3KHZvaWQpIHsgcmV0dXJuIGZsYWcgJiAxOyB9CiAg ICAgICAgaW50IENoaWxkTmV3KHZvaWQpIHsgcmV0dXJuIGZsYWcgJiAyOyB9CiAgICAgICAgaW50 IExhc3Qodm9pZCkgeyByZXR1cm4gZmxhZyAmIDQ7IH0KICAgICAgICB2b2lkIFNldEZlYXR1cmVO ZXcodm9pZCkgeyBmbGFnIHw9IDE7fQogICAgICAgIHZvaWQgU2V0Q2hpbGROZXcodm9pZCkge2Zs YWcgfD0gMjt9CiAgICAgICAgZnJpZW5kIGludCBvcGVyYXRvcj4oY2xhc3MgRmVhdHVyZUluZm8m LCBjbGFzcyBGZWF0dXJlSW5mbyYpOwp9OwoKY2xhc3MgQ29lcmNlSW5mbyB7CiAgICAgICAgcHVi bGljOgogICAgICAgICAgICAgICAgY2VsbCBjb2VyY2VfaGVhZDsKCiAgICAgICAgdm9pZCAqIG9w ZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiYgYWxsb2MpIHsg cmV0dXJuIGFsbG9jLmFsbG9jYXRlX2J5dGVzKHNpemUpOyB9Cn07CmNsYXNzIENvZXJjZUluZm8x IDogcHVibGljIENvZXJjZUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlu dCBxdWV1ZV9udW07CiAgICAgICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHM7CiAgICAgICAgICAg ICAgICBjZWxsX2ludCogcXVldWVfY2VsbHM7Cn07CmNsYXNzIENvZXJjZUluZm8yIDogcHVibGlj IENvZXJjZUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCBlcXVhbF9u dW07CiAgICAgICAgICAgICAgICBpbnQqIGVxdWFsX2FkZHM7CiAgICAgICAgICAgICAgICBpbnQg Y2VsbF9udW07CiAgICAgICAgICAgICAgICBpbnQqIGNlbGxfYWRkczsKICAgICAgICAgICAgICAg IGNlbGxfaW50KiBjZWxsczsKfTsKY2xhc3MgQ29lcmNlSW5mbzMgOiBwdWJsaWMgQ29lcmNlSW5m bzIgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCBxdWV1ZV9udW07CiAgICAg ICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHM7CiAgICAgICAgICAgICAgICBjZWxsX2ludCogcXVl dWVfY2VsbHM7Cn07CgpjbGFzcyBVbmlmeUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAg ICAgICAgIGNlbGwgdW5pZnlfaGVhZDsKCiAgICAgICAgdm9pZCAqIG9wZXJhdG9yIG5ldyhzaXpl X3Qgc2l6ZSwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiYgYWxsb2MpIHsgcmV0dXJuIGFsbG9jLmFs bG9jYXRlX2J5dGVzKHNpemUpOyB9Cn07CmNsYXNzIFVuaWZ5SW5mbzEgOiBwdWJsaWMgVW5pZnlJ bmZvIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAg ICAgIGludCogYWRkczsKICAgICAgICAgICAgICAgIGludCB2cV9uOyBpbnQqIHZxX2FkZHM7IGNl bGxfaW50KiB2cV9jZWxsczsKfTsKY2xhc3MgVW5pZnlJbmZvMyA6IHB1YmxpYyBVbmlmeUluZm8g ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCogYWRkczEsKiBhZGRzMjsKICAg ICAgICAgICAgICAgIGludCBuMSxuMixuMzsKICAgICAgICAgICAgICAgIGludCBxdWV1ZXM7CiAg ICAgICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHMxLCogcXVldWVfYWRkczI7CiAgICAgICAgICAg ICAgICBjZWxsX2ludCogY2VsbHM7CiAgICAgICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAg ICAgIGludCB2cV9uOyBpbnQqIHZxX2FkZHM7IGNlbGxfaW50KiB2cV9jZWxsczsKfTsKCmV4dGVy biAiQyIgdm9pZCBkZWJ1Z19wcmludChpbnQgbGV2ZWwsY2hhciogZm9ybWF0LC4uLik7CmV4dGVy biAiQyIgdm9pZCBNYWtlQ29lcmNlQ29kZShjZWxsIGMxLCBjZWxsIGMyKTsKZXh0ZXJuICJDIiB2 b2lkIE1ha2VVbmlmeUNvZGUoY2VsbCBjMSwgY2VsbCBjMik7CmV4dGVybiAiQyIgdm9pZCBNYWtl Q29lcmNlQ29kZUNvbXBsZXgoY2VsbCBjMSwgY2VsbCBjMik7CmV4dGVybiAiQyIgdm9pZCBNYWtl VW5pZnlDb2RlQ29tcGxleChjZWxsIGMxLCBjZWxsIGMyKTsKIyA0NTYgImZzcC5oIiAyCgppbmxp bmUgRlNQIExpbmVhckZTUDo6Q29weSgpIGNvbnN0CnsKICAgICAgICA7CgoKCiAgICAgICAgaWYo ICEgKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2lu dClUX1BUUiA8PCAwKSkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCEgKCgoKGNlbGxf aW50KShjKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX0lOVCA8PCAw KSkgKQogICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJJbnRlcm5hbCBlcnJvcjogQ29w eSBFcnJvciEgYyA9ICIgPDwgYyA8PCBlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIEZTUChj KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIEZTUCBy ZXQoSGVhcEFfUG9pbnRlcik7CgoKCgoKCiAgICAgICAgICAgICAgICBhc21fcmVjb3B5X2Zyb21f bGluZWFyKGMpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9Cn0KCmlubGlu ZSBGU1AgRlNQOjpSZUNvcHkoaW50IHNpemUpIGNvbnN0CnsKICAgICAgICBjZWxsIHRtcCA9IEhl YXBBX1BvaW50ZXI7CiAgICAgICAgYXNtX3JlY29weShjLCBzaXplKTsKCiAgICAgICAgcmV0dXJu IEZTUCh0bXApOwp9CiMgNTQgImFsbC5oIiAyCgojIDEgImJ1aWx0aW4yLmgiIDEKCgoKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3NldGptcC5o IiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZXRqbXAuaCIgMSAzCiMg MzYgIi91c3IvaW5jbHVkZS9iaXRzL3NldGptcC5oIiAzCnR5cGVkZWYgaW50IF9fam1wX2J1Zls2 XTsKIyAzMSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zaWdzZXQuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zZXRqbXAuaCIgMiAzCgoKCgp0eXBl ZGVmIHN0cnVjdCBfX2ptcF9idWZfdGFnCiAgewoKCgoKICAgIF9fam1wX2J1ZiBfX2ptcGJ1ZjsK ICAgIGludCBfX21hc2tfd2FzX3NhdmVkOwogICAgX19zaWdzZXRfdCBfX3NhdmVkX21hc2s7CiAg fSBqbXBfYnVmWzFdOwoKCgoKZXh0ZXJuIGludCBzZXRqbXAgKGptcF9idWYgX19lbnYpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3NpZ3NldGptcCAoc3RydWN0IF9fam1wX2J1Zl90YWcg X19lbnZbMV0sIGludCBfX3NhdmVtYXNrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX3NldGpt cCAoc3RydWN0IF9fam1wX2J1Zl90YWcgX19lbnZbMV0pIHRocm93ICgpOwojIDc2ICIvdXNyL2lu Y2x1ZGUvc2V0am1wLmgiIDMKCgoKCmV4dGVybiB2b2lkIGxvbmdqbXAgKHN0cnVjdCBfX2ptcF9i dWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX2xvbmdqbXAgKHN0cnVjdCBfX2pt cF9idWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZyBz aWdqbXBfYnVmWzFdOwojIDEwOCAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAzCmV4dGVybiB2b2lk IHNpZ2xvbmdqbXAgKHNpZ2ptcF9idWYgX19lbnYsIGludCBfX3ZhbCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDkgImJ1aWx0aW4yLmgiIDIKCgoK ZXh0ZXJuIGNvbnN0IHR5cGUgKiBsaXN0LCAqIGNvbnMsICogbmlsOwpleHRlcm4gY29uc3QgdHlw ZSAqIGhkLCAqIHRsOwoKZXh0ZXJuIGNvbnN0IHR5cGUgKiBwcmVkOwpleHRlcm4gY29uc3QgdHlw ZSAqIHRfcHJlZFszMl07CmV4dGVybiBjb25zdCB0eXBlICogcHJlZDA7CmV4dGVybiB0c2VyaWFs IGZfYXJnWzMyXTsKCmV4dGVybiBjb25zdCB0eXBlICogdF9pbnQ7CmV4dGVybiBjb25zdCB0eXBl ICogdF9jaHI7CgpleHRlcm4gY29uc3QgdHlwZSAqIHRfZmVhdHVyZTsKZXh0ZXJuIGNvbnN0IHR5 cGUgKiB0X2VxdWFsOwpleHRlcm4gdHNlcmlhbCBuZXdfZmVhdHVyZV90eXBlOwpleHRlcm4gdHNl cmlhbCBmZWF0bmFtZV9zZXJpYWwsIGFwcHR5cGVfc2VyaWFsLCBwcmlvcml0eV9zZXJpYWw7CmV4 dGVybiB0c2VyaWFsIGZlYXRtb2Rfc2VyaWFsLCBhcHBtb2Rfc2VyaWFsOwoKCmV4dGVybiBjb25z dCB0eXBlICogdF9uZXd0eXBlOwpleHRlcm4gaW50IG1heGFyZzsKCmV4dGVybiBqbXBfYnVmIGhh bHRfYnVmOwpleHRlcm4gaW50IGV4aXRjb2RlOwoKZXh0ZXJuIGNvbnN0IHR5cGUqIG5ld3R5cGVf ZmVhdHVyZShsc3RyaW5nKTsKIyA1NiAiYWxsLmgiIDIKIyAxICJtb2R1bGUuaCIgMQojIDI3ICJt b2R1bGUuaCIKY2xhc3MgdHlwZTsKY2xhc3MgbWFjaGluZTsKCgojIDEgImhhc2guaCIgMQojIDMy ICJtb2R1bGUuaCIgMgoKCmV4dGVybiAiQyIgY2xhc3MgbW9kdWxlKiBsYWJlbF9jdXJyZW50X21v ZHVsZTsKIyA5MSAibW9kdWxlLmgiCmNsYXNzIG1vZHVsZQp7CnB1YmxpYzoKICAgICAgICBlbnVt IG5ld19tb2R1bGVfdHlwZQoKICAgICAgICB7CiAgICAgICAgICAgICAgICBOTVRfTk9ORSA9IDAs CiAgICAgICAgICAgICAgICBOTVRfSU5DTFVERSA9IDEsCiAgICAgICAgICAgICAgICBOTVRfRU5T VVJFID0gMiwKICAgICAgICAgICAgICAgIE5NVF9FTlNVUkVfSU5fUFJPRyA9IDMsCiAgICAgICAg ICAgICAgICBOTVRfQ09OU1VMVCA9IDQsCiAgICAgICAgICAgICAgICBOTVRfSU5JVElBTElaRSA9 IDgsCiAgICAgICAgICAgICAgICBOTVRfQlVJTFRJTiA9IDksCiAgICAgICAgICAgICAgICBOTVRf RU5TVVJFX1dJVEhPVVRfQlVJTFRJTiA9IDEwLAogICAgICAgICAgICAgICAgTk1UX0VOU1VSRV9X SVRIT1VUX0JVSUxUSU5fSU5fUFJPRyA9IDExCiAgICAgICAgfTsKCnByb3RlY3RlZDoKICAgICAg ICBzdGQ6OnN0cmluZyBuYW1lOwoKICAgICAgICBzdGQ6OnN0cmluZyBkZWZuYW1lOwoKICAgICAg ICBTdHJpbmdIYXNoPHR5cGU+IGhhc2g7CgogICAgICAgIFZhckFycmF5PG1vZHVsZSAqPiByZWV4 cG9ydGxpc3Q7CgoKICAgICAgICBWYXJBcnJheTxtb2R1bGUgKj4gbm9leHBvcnRsaXN0OwoKCiAg ICAgICAgbW9kdWxlICpwcmV2X21vZHVsZTsKCiAgICAgICAgYm9vbCBJbnRlcmZhY2VNb2RlOwoK ICAgICAgICBuZXdfbW9kdWxlX3R5cGUgbm10OwoKCiAgICAgICAgc3RhdGljIFN0cmluZ0hhc2g8 bW9kdWxlPiBtb2R1bGVsaXN0X2hhc2g7CgogICAgICAgIHN0YXRpYyBWYXJBcnJheTxtb2R1bGUq PiBtb2R1bGVfc3RhY2s7CgogICAgICAgIHN0YXRpYyBpbnQgbW9kdWxlX3N0YWNrX3BvaW50OwoK CiAgICAgICAgc3RhdGljIG1vZHVsZSAqbV91c2VyOwoKICAgICAgICBzdGF0aWMgbW9kdWxlICpt X2NvcmU7CgogICAgICAgIHN0YXRpYyBtb2R1bGUgKm1fYnVpbHRpbjsKCgogICAgICAgIHN0YXRp YyBtb2R1bGUgKipvcmlnaW5hbF9tb2R1bGVzOwoKICAgICAgICBzdGF0aWMgaW50IG9yaWdpbmFs X2xlbjsKCgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBtb2R1bGVfcHJlZml4OwoKCnByaXZh dGU6CiAgICAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwoKICAgICAgICBzdGF0aWMgdm9pZCB0ZXJt KCk7CgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQyKCk7CgogICAgICAgIHN0YXRpYyBJbml0RnVu Y3Rpb24gSUY7CiAgICAgICAgc3RhdGljIEluaXRGdW5jdGlvbiBJRjI7CiAgICAgICAgc3RhdGlj IFRlcm1GdW5jdGlvbiBURjsKCgpwdWJsaWM6CiAgICAgICAgbW9kdWxlKGNvbnN0IGNoYXIgKmlu YW1lLCBuZXdfbW9kdWxlX3R5cGUgaW5tdCA9IE5NVF9OT05FKTsKICAgICAgICB+bW9kdWxlKCkg eyB9CgoKCgogICAgICAgIGJvb2wgSXNSZWdpc3RlcmVkKCkgeyByZXR1cm4gbmFtZSAhPSAiIjsg fQoKCiAgICAgICAgdm9pZCBSZWdpc3Rlcihjb25zdCBzdHJpbmcgJnN0cikgeyBpZiggSXNSZWdp c3RlcmVkKCkgKSBfQWJvcnQoKCJEdXBsaWNhdGVkIG1vZHVsZSBuYW1lIHJlZ2lzdGVyIiksICJt b2R1bGUuaCIsIDE3Mik7IHN0cmluZyBzdHIyID0gc3RyOyBpZiggc3RyID09ICIiICkgc3RyMiA9 IGRlZm5hbWU7IG5hbWUgPSBtb2R1bGVfcHJlZml4ICsgc3RyMjsgbW9kdWxlbGlzdF9oYXNoLkFk ZE9yUmVwbGFjZSh0aGlzKTsgfQoKICAgICAgICB2b2lkIFJlZ2lzdGVyKCkgeyBSZWdpc3Rlcigi Iik7IH0KCgogICAgICAgIGNvbnN0IGNoYXIgKkdldEtleSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUu Y19zdHIoKTsgfQoKICAgICAgICBjb25zdCBzdHJpbmcgJkdldE5hbWUoKSBjb25zdCB7IHJldHVy biBuYW1lOyB9CgogICAgICAgIGNvbnN0IHN0cmluZyAmR2V0RGVmTmFtZSgpIGNvbnN0IHsgcmV0 dXJuIGRlZm5hbWU7IH0KCgogICAgICAgIHZvaWQgQWRkKHR5cGUgKnQpIHtpZiggISBJc1JlZ2lz dGVyZWQoKSApIFJlZ2lzdGVyKCk7IGhhc2guQWRkT3JSZXBsYWNlKHQpOyB9CgogICAgICAgIHR5 cGUgKlNlYXJjaChjb25zdCBjaGFyICpzdHIpIGNvbnN0IHsgcmV0dXJuIGhhc2guRmluZChzdHIp OyB9CiAgICAgICAgdHlwZSAqU2VhcmNoKHN0cmluZyBzKSBjb25zdCB7IHJldHVybiBoYXNoLkZp bmQocy5jX3N0cigpKTsgfQoKCiAgICAgICAgYm9vbCBJc0V4cG9ydGluZyhjb25zdCB0eXBlICp0 KSBjb25zdDsKCiAgICAgICAgYm9vbCBJc1VzYWJsZShjb25zdCB0eXBlICp0KSBjb25zdDsKCgog ICAgICAgIHZvaWQgU2V0SW50ZXJmYWNlTW9kZShib29sIGZsYWcpIHsgSW50ZXJmYWNlTW9kZSA9 IGZsYWc7IH0KCiAgICAgICAgYm9vbCBHZXRJbnRlcmZhY2VNb2RlKHZvaWQpIGNvbnN0IHsgcmV0 dXJuIEludGVyZmFjZU1vZGU7IH0KCiAgICAgICAgbmV3X21vZHVsZV90eXBlIEdldE1vZHVsZVR5 cGUoKSBjb25zdHsgcmV0dXJuIG5tdDsgfQoKCiAgICAgICAgdm9pZCBTZXRQcmV2TW9kdWxlKG1v ZHVsZSAqbW9kKSB7IHByZXZfbW9kdWxlID0gbW9kOyB9CgogICAgICAgIG1vZHVsZSAqIEdldFBy ZXZNb2R1bGUoKSB7IHJldHVybiBwcmV2X21vZHVsZTsgfQoKCiAgICAgICAgc3RhdGljIHZvaWQg U2V0TW9kdWxlUHJlZml4KHN0ZDo6c3RyaW5nIHByZWZpeG5hbWUpIHsgbW9kdWxlX3ByZWZpeCA9 IHByZWZpeG5hbWU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nICYgR2V0TW9k dWxlUHJlZml4KHZvaWQpIHtyZXR1cm4gbW9kdWxlX3ByZWZpeDt9CgoKICAgICAgICB2b2lkIElt cG9ydChtb2R1bGUgKm1vZCwgYm9vbCByZWV4cG9ydCk7CgogICAgICAgIHZvaWQgSW1wb3J0KG1v ZHVsZSAqbW9kKSB7IEltcG9ydChtb2QsIEdldEludGVyZmFjZU1vZGUoKSk7IH0KCgogICAgICAg IHN0YXRpYyB2b2lkIFNldEN1cnJlbnRNb2R1bGUobW9kdWxlICptb2QpIHsgbGFiZWxfY3VycmVu dF9tb2R1bGUgPSBtb2Q7Cn0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqU2VhcmNoTW9kdWxlKGNv bnN0IGNoYXIgKm5hbWUpIHsgaWYoICpuYW1lID09ICdcMCcpIHJldHVybiBDdXJyZW50TW9kdWxl KCk7IGVsc2UgeyBtb2R1bGUgKm0gPSBtb2R1bGVsaXN0X2hhc2guRmluZChtb2R1bGVfcHJlZml4 ICsgbmFtZSk7IHJldHVybiBtID8gbSA6IG1vZHVsZWxpc3RfaGFzaC5GaW5kKG5hbWUpOyB9fQog ICAgICAgIHN0YXRpYyBtb2R1bGUgKlNlYXJjaE1vZHVsZShzdHJpbmcgcykgeyByZXR1cm4gU2Vh cmNoTW9kdWxlKHMuY19zdHIoKSk7Cn0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqQ29yZU1vZHVs ZSgpIHsgcmV0dXJuIG1fY29yZTsgfQoKICAgICAgICBzdGF0aWMgbW9kdWxlICpCdWlsdGluTW9k dWxlKCkgeyByZXR1cm4gbV9idWlsdGluOyB9CgogICAgICAgIHN0YXRpYyBtb2R1bGUgKlVzZXJN b2R1bGUoKSB7IHJldHVybiBtX3VzZXI7IH0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqQ3VycmVu dE1vZHVsZSgpIHsgcmV0dXJuIGxhYmVsX2N1cnJlbnRfbW9kdWxlOyB9CgogICAgICAgIHN0YXRp YyBtb2R1bGUgKk9yaWdpbmFsTW9kdWxlKGludCBuKSB7IGlmIChuIDwgb3JpZ2luYWxfbGVuKSBy ZXR1cm4gb3JpZ2luYWxfbW9kdWxlc1tuXTsgcmV0dXJuIF9fbnVsbDsgfQoKICAgICAgICBzdGF0 aWMgdm9pZCBQdXNoTW9kdWxlKG1vZHVsZSogbW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9k dWxlX3N0YWNrX3BvaW50IDwgbW9kdWxlX3N0YWNrLkdldFNpemUoKSkKICAgICAgICAgICAgICAg ICAgICAgICAgbW9kdWxlX3N0YWNrW21vZHVsZV9zdGFja19wb2ludF0gPSBtb2Q7CiAgICAgICAg ICAgICAgICBlbHNlCgogICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfc3RhY2suTmV4dCgp ID0gbW9kOwogICAgICAgICAgICAgICAgbW9kdWxlX3N0YWNrX3BvaW50Kys7CiAgICAgICAgfQoK ICAgICAgICBzdGF0aWMgbW9kdWxlICpQb3BNb2R1bGUodm9pZCkgewogICAgICAgICAgICAgICAg aWYgKG1vZHVsZV9zdGFja19wb2ludCA9PSAwKSByZXR1cm4gMDsKICAgICAgICAgICAgICAgIGVs c2UgcmV0dXJuIG1vZHVsZV9zdGFja1stLW1vZHVsZV9zdGFja19wb2ludF07CiAgICAgICAgfQoK CgoKICAgICAgICBzdGF0aWMgdm9pZCBMaXN0TW9kdWxlcygpOwoKICAgICAgICB2b2lkIFNob3dM aXN0KHZvaWQpOwoKfTsKIyA1NyAiYWxsLmgiIDIKIyAyMiAiYXJyYXkuY3BwIiAyCgojIDEgImJ1 aWx0aW4uaCIgMQojIDEwICJidWlsdGluLmgiCiMgMSAiYnVpbHRpbnRhYmxlLmgiIDEKIyAxOSAi YnVpbHRpbnRhYmxlLmgiCmVudW0gQnVpbHRpblR5cGUgewogIEJVSUxUSU5fUFJFRCwKICBCVUlM VElOX0RJUkVDVElWRSwKICBCVUlMVElOX1BSRURfV0lUSF9NT0RVTEUsCiAgQlVJTFRJTl9QUkVE X09WRVJMT0FELAogIEJVSUxUSU5fUFJFRF9XSVRIX05BTUUsCiAgQlVJTFRJTl9BUklUSCwKICBC VUlMVElOX0FSSVRIX1VOQVJZLAogIEJVSUxUSU5fVFlQRV9GMiwKICBCVUlMVElOX1RZUEVfRiwK ICBCVUlMVElOX1RZUEUsCn07CgoKY2xhc3MgYnVpbHRpbl90YWJsZXsKCiAgYnVpbHRpbl90YWJs ZSAqbmV4dDsKCiAgYnVpbHRpbl90YWJsZSAqcHJldmlvdXM7CgogIHN0YXRpYyBidWlsdGluX3Rh YmxlICpsYXN0OwoKICBzdGF0aWMgaW50IGNvdW50ZXI7Cgpwcm90ZWN0ZWQ6CiAgc3RyaW5nIG5h bWU7CgogIHN0cmluZyBmaWxlbmFtZTsKCiAgQnVpbHRpblR5cGUgYnVpbHRpbnR5cGU7CgoKcHVi bGljOgogIGJ1aWx0aW5fdGFibGUoc3RyaW5nIGlfbmFtZSAsc3RyaW5nIGlfZmlsZW5hbWUgLCBC dWlsdGluVHlwZSBpX2J1aWx0aW50eXBlKTsKCiAgfmJ1aWx0aW5fdGFibGUoKTsKCiAgdmlydHVh bCB2b2lkIFNob3coKXtjb3V0IDw8ICJidWlsdGluX3RhYmxlIFNob3coKS4uLiI8PCBlbmRsO30K ICBzdHJpbmcgY29uc3QgR2V0TmFtZSgpeyByZXR1cm4gbmFtZTt9CiAgdmlydHVhbCBpbnQgY29u c3QgR2V0QXJpdHkoKSB7IHJldHVybiAtMTsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldElk TmFtZSgpIHsgcmV0dXJuICIiOyB9CiAgdmlydHVhbCBzdHJpbmcgY29uc3QgR2V0UE5hbWUoKSB7 IHJldHVybiAiIjsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldEZlYXR1cmUoKSB7IHJldHVy biAiIjsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldFR5cGVOYW1lKCkgeyByZXR1cm4gIiI7 IH0KICBidWlsdGluX3RhYmxlKiBHZXROZXh0KCl7cmV0dXJuIG5leHQ7fQogIGJ1aWx0aW5fdGFi bGUqIEdldFByZXZpb3VzKCl7cmV0dXJuIHByZXZpb3VzO30KICB2b2lkIFNldE5leHQoYnVpbHRp bl90YWJsZSAqaXQpeyBuZXh0ID0gaXQ7IH0KICBzdHJpbmcgY29uc3QgR2V0RmlsZW5hbWUoKXsg cmV0dXJuIGZpbGVuYW1lO30KICBCdWlsdGluVHlwZSBjb25zdCBHZXRCdWlsdGluVHlwZSgpeyBy ZXR1cm4gYnVpbHRpbnR5cGU7fQogIHN0YXRpYyBidWlsdGluX3RhYmxlKiBTZWFyY2goY29uc3Qg c3RyaW5nIG5hbWUpewogICAgYnVpbHRpbl90YWJsZSAqaXQgPSBidWlsdGluX3RhYmxlOjpHZXRG aXJzdCgpOwogICAgd2hpbGUoaXQgIT0gX19udWxsKXsKICAgICAgaWYobmFtZSA9PSBpdC0+R2V0 TmFtZSgpKQogICAgICAgIHJldHVybiBpdDsKICAgICAgZWxzZQogICAgICAgIGl0ID0gaXQtPkdl dE5leHQoKTsKICAgIH0KICAgIHJldHVybiBfX251bGw7CiAgfQogIHN0YXRpYyBidWlsdGluX3Rh YmxlKiBHZXRGaXJzdCgpewoKICAgIGJ1aWx0aW5fdGFibGUgKml0ID0gYnVpbHRpbl90YWJsZTo6 R2V0TGFzdCgpOwoKICAgIHdoaWxlKGl0ICE9IF9fbnVsbCl7CgogICAgICBpZihpdC0+R2V0UHJl dmlvdXMoKSA9PSBfX251bGwpCiAgICAgICAgcmV0dXJuIGl0OwogICAgICBlbHNlCiAgICAgICAg aXQgPSBpdC0+R2V0UHJldmlvdXMoKTsKICAgIH0KCiAgICByZXR1cm4gaXQ7CiAgfQogIHN0YXRp YyBidWlsdGluX3RhYmxlKiBHZXRMYXN0KCl7cmV0dXJuIGxhc3Q7fQogIHN0YXRpYyBzdHJpbmcg Y2Fub25pY2FsKHN0cmluZyBzdHIpOwogIHN0YXRpYyB2b2lkIFNob3dBbGwoKTsKfTsKCgpjbGFz cyBidWlsdGluX3ByZWRfdGFibGU6IHB1YmxpYyBidWlsdGluX3RhYmxlewogIHN0cmluZyBpZG5h bWU7CgogIHN0cmluZyBwbmFtZTsKCiAgaW50IGFyaXR5OwoKCnB1YmxpYzoKICBidWlsdGluX3By ZWRfdGFibGUoc3RyaW5nIGlfbmFtZSwgc3RyaW5nIGlfaWRuYW1lLCBzdHJpbmcgaV9wbmFtZSwg aW50IGlfYXJpdHksc3RyaW5nIGlfZmlsZW5hbWUsIEJ1aWx0aW5UeXBlIGlfYnVpbHRpbnR5cGUp OwoKICB+YnVpbHRpbl9wcmVkX3RhYmxlKCk7CgogIHZvaWQgU2hvdygpOwogIHN0cmluZyBjb25z dCBHZXRJZE5hbWUoKXsgcmV0dXJuIGlkbmFtZTt9CiAgc3RyaW5nIGNvbnN0IEdldFBOYW1lKCl7 IHJldHVybiBwbmFtZTt9CiAgaW50IGNvbnN0IEdldEFyaXR5KCl7IHJldHVybiBhcml0eTt9Cgp9 OwoKCmNsYXNzIGJ1aWx0aW5fdHlwZV90YWJsZTogcHVibGljIGJ1aWx0aW5fdGFibGV7CiAgc3Ry aW5nIGlkbmFtZTsKCiAgc3RyaW5nIGZlYXQ7CgoKcHVibGljOgogIGJ1aWx0aW5fdHlwZV90YWJs ZShzdHJpbmcgaV90bmFtZSAsIHN0cmluZyBpX2lkbmFtZSwgc3RyaW5nIGlfZmVhdCwgc3RyaW5n IGlfZmlsZW5hbWUsQnVpbHRpblR5cGUgaV9idWlsdGludHlwZSk7CgogIH5idWlsdGluX3R5cGVf dGFibGUoKTsKCiAgdm9pZCBTaG93KCk7CiAgc3RyaW5nIGNvbnN0IEdldElkTmFtZSgpeyByZXR1 cm4gaWRuYW1lO30KICBzdHJpbmcgY29uc3QgR2V0VHlwZU5hbWUoKXsgcmV0dXJuIG5hbWU7fQog IHN0cmluZyBjb25zdCBHZXRGZWF0dXJlKCl7IHJldHVybiBmZWF0O30KfTsKIyAxMSAiYnVpbHRp bi5oIiAyCiMgMjg0ICJidWlsdGluLmgiCmNsYXNzIG1hY2hpbmUgewogICAgICAgIGJvb2wgcmV0 OwpwdWJsaWM6CiAgICAgICAgbWFjaGluZSh2b2lkKSB7IHJldCA9IHRydWU7fQogICAgICAgIGJv b2wgcmV0Y29kZSh2b2lkKSB7IHJldHVybiByZXQ7fQogICAgICAgIHZvaWQgRmFpbCh2b2lkKSB7 IHJldCA9IGZhbHNlO30KfTsKIyAyNCAiYXJyYXkuY3BwIiAyCgojIDEgInNlcmlhbGl6ZS5oIiAx CiMgMjggInNlcmlhbGl6ZS5oIgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMSAzCiMg NjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBfUmJfdHJlZV9jb2xvciB7IF9NX3Jl ZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsKCiAgc3RydWN0IF9SYl90cmVlX25vZGVfYmFz ZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CgogICAgX1Ji X3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFzZV9wdHIgX01fcGFyZW50OwogICAgX0Jhc2Vf cHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogICAgc3RhdGljIF9CYXNlX3B0 cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQogICAgewogICAgICB3aGlsZSAoX194LT5f TV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0K CiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7 CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAg ICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAg IHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQogICAgewog ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CiAgICAgIF9WYWwg X01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgog IHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jhc2VfcHRyOwog ICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICBfQmFzZV9wdHIgX01f bm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9k ZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+ X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAg ICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAg ICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195LT5fTV9wYXJl bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kp CiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQKICAg IF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfTV9y ZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUp CiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICBlbHNlIGlmIChfTV9u b2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9N X25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAg ICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgX01fbm9kZSA9IF9feTsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01f bm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0 KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICAgICAg ICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgX01fbm9kZSA9 IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlw ZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6 IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX1ZhbCB2 YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9Q dHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg X1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNv bnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVk ZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4gX1NlbGY7CiAgICAgIHR5cGVk ZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKCiAgICAgIF9SYl90cmVlX2l0ZXJh dG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k ZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkg eyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0 b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7 IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl cmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg ICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAg IF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAg PSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAg ICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsg cmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGludCkKICAgICAg ewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fZGVjcmVtZW50KCk7CiAg ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh bCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAg ICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBf X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Ji X3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAg ICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBf X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Ji X3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBj b25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBf X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwg X1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwg X1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1Zh bCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9W YWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAg ICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBj b25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl OyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgICBfX3gtPl9NX3JpZ2h0ID0gX195LT5f TV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICAgIF9feS0+X01fbGVmdC0+X01f cGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBp ZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09 IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9 IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAg X195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxp bmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwg X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSog X195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICAg IGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgIF9feS0+X01fcmlnaHQtPl9NX3BhcmVudCA9 IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9 PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9N X3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsK ICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBfX3ktPl9N X3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9p ZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVf bm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9feC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICB3 aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAgICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xv ciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5f TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgIHsKICAgICAgICAgICAgX1Ji X3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdo dDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9i bGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg ICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAg ICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAg ICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAo X194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAg IF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg ICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsK ICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01f cGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5f TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3kt Pl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gt Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01f Y29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl bnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJl bnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0 KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9w YXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19y b290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQt Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01f cGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0 ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAg fQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jvb3QtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg fQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgogIF9SYl90cmVlX3JlYmFsYW5jZV9mb3Jf ZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCiAgewogICAg X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f eCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogICAgaWYgKF9f eS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgZWxzZQogICAg ICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAg ICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAg ICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX2xl ZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgIH0KICAgIGlmIChfX3kg IT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195Owog ICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgICAgICBpZiAoX195ICE9IF9f ei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9N X3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3Bh cmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAg ICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICAgICAgICBfX3otPl9NX3Jp Z2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAg X194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9f cm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBf X3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgICAgICBlbHNl CiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICAgICAgX195LT5f TV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgICAgICBzdGQ6OnN3YXAoX195LT5fTV9jb2xv ciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195ID0gX196OwoKICAgICAgfQogICAgZWxzZQog ICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgIGlmIChf X3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgIGlm IChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX194OwogICAgICAgIGVsc2UKICAg ICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgICAgIF9f ei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf X3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICAgICAgaWYgKF9fbGVmdG1vc3QgPT0g X196KQogICAgICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICAgICAgX19sZWZ0 bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19sZWZ0 bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgICAgIGlmIChf X3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9sZWZ0ID09IDApCiAgICAg ICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAg ICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gp OwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xvciAhPSBfTV9yZWQpCiAgICAgIHsKICAgICAg ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBf TV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJl bnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2Js YWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsK ICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAg ICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAg ICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5f TV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3gg PSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+ X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMAogICAgICAg ICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVm dCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICAg ICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVl X3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBf X3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAg ICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgaWYg KF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29s b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194 X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAg ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAg ICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfUmJf dHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAg X193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9y aWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAgICAgIChfX3ctPl9N X2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9 PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01f Y29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAg ICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9 PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBp ZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAg ICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAg ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAg ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwog ICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAg ICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01f bGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90 YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYgKF9feCkgX194LT5fTV9j b2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195OwogIH0KCgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNz PgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAgcHVibGljOgogICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9SYl90cmVlX2Fs bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTV9ub2RlX2FsbG9j YXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw ZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPiogX01f aGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsg cmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAg IF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgICB7IF9NX25vZGVfYWxs b2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAs IF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwog ICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh dG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf dHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICBfUmJfdHJlZV9u b2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0 czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAgICAgIF9BbGxvY190 eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0 dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRf bm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf X3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8 X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJh aXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgICB0eXBlZGVmIF9S Yl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0FsbG9jX3RyYWl0czxfVHAs IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgX1JiX3RyZWVfYmFz ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFk ZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9k ZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h bWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh cmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJl ZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlw ZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgog ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVm IF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVfbm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAg IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90 eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsK ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5 cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6 ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAg ICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpn ZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9n ZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFz ZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25z dCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01f Z2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9N X3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg ICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAg ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2Ns b25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9fdG1w ID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9N X2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAg ICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAg ICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogICAgICB7CiAgICAg ICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9f cCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFy ZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25z dCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9CgogICAgICBf TGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBl JikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yaWdo dG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7 IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194 KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBf TGlua190eXBlJgogICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5r X3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAg IF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N X3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtf dHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZh bHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAg ICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAg ICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0 dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5 cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJiko X194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19wYXJl bnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7 IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkg eyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0 aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlP ZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90 cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtf dHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9T X21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJf dHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5 cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5r X3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgogICAgcHVibGlj OgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwg cG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVf dHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25zdF9pdGVyYXRv cjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9N X2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBf X3YpOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu a190eXBlIF9fcCk7CgogICAgICB2b2lkCiAgICAgIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsK CiAgICBwdWJsaWM6CgogICAgICBfUmJfdHJlZSgpCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3Jf dHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoKQogICAgICB7IF9NX2Vt cHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29t cCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBf TV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9Cgog ICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hKQogICAgICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv bXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1Ji X3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4mIF9feCkKICAgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLCBfTV9ub2RlX2Nv dW50KDApLAogICAgICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFy ZSkKICAgICAgewogICAgICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgICAgICBfTV9l bXB0eV9pbml0aWFsaXplKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBf U19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwogICAgICAgICAgICBfTV9yb290KCkgPSBfTV9j b3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkg PSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1Nf bWF4aW11bShfTV9yb290KCkpOwogICAgICAgICAgfQogICAgICAgIF9NX25vZGVfY291bnQgPSBf X3guX01fbm9kZV9jb3VudDsKICAgICAgfQoKICAgICAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9 CgogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYK ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3gpOwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgX01fZW1wdHlfaW5p dGlhbGl6ZSgpCiAgICAgIHsKICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwoK ICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7 CiAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIH0KCiAgICBwdWJsaWM6 CgogICAgICBfQ29tcGFyZQogICAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9j b21wYXJlOyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRt b3N0KCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QgeyByZXR1 cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkgeyByZXR1cm4g X01faGVhZGVyOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIHsgcmV0 dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IKICAgICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9u b2RlX2NvdW50ID09IDA7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyBy ZXR1cm4gX01fbm9kZV9jb3VudDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICAgICAgdm9pZAogICAgICBzd2FwKF9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpCiAgICAg IHsKICAgICAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgICAgICBz dGQ6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQpOwogICAgICAgIHN0ZDo6 c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICAgICAgfQoKCiAgICAg IHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgICAgaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBl JiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5 cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9f cG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBp bnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAg IGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lk CiAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsK CiAgICAgIHNpemVfdHlwZQogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg IHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAg ICAgIHZvaWQKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90 eXBlKiBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsKICAgICAgICBp ZiAoX01fbm9kZV9jb3VudCAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBfTV9lcmFzZShf TV9yb290KCkpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAg ICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRl cjsKICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICB9CiAgICAgIH0KCgog ICAgICBpdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgY29u c3RfaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg IHNpemVfdHlwZQogICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg IGl0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAg Y29uc3RfaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u c3Q7CgogICAgICBpdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194 KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0OwoKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAgICAgZXF1YWxf cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBj b25zdF9pdGVyYXRvcj4KICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u c3Q7CgoKICAgICAgYm9vbAogICAgICBfX3JiX3ZlcmlmeSgpIGNvbnN0OwogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJl dHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICBlcXVhbChfX3guYmVnaW4o KSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNh bF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9 PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXks X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29u c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkK ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3ggPCBf X3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICAgIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIG9wZXJhdG9y PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICAgIHsKCiAgICAgICAgICBj bGVhcigpOwogICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICBfTV9rZXlfY29t cGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgICAgICAgIGlmIChfX3guX01fcm9vdCgpID09 IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAg ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0 KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh ZGVyKTsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkp OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwog ICAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9p bnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsJiBfX3YpCiAg ICB7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgICAgIF9MaW5r X3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgICAgIF9MaW5rX3R5cGUgX196OwoKICAg ICAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgICAgIF9NX2tleV9j b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKQogICAgICAgIHsKICAgICAg ICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBfU19sZWZ0KF9feSkgPSBf X3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBf X3o7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgp KQogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBf U19yaWdodChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkp CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgX1NfcGFy ZW50KF9feikgPSBfX3k7CiAgICAgIF9TX2xlZnQoX196KSA9IDA7CiAgICAgIF9TX3JpZ2h0KF9f eikgPSAwOwogICAgICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXItPl9NX3BhcmVu dCk7CiAgICAgICsrX01fbm9kZV9jb3VudDsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feik7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAg IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jv b3QoKTsKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9f eDsKICAgICAgICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf a2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAg ICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBwYWly PHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ OjppdGVyYXRvciwKICAgIGJvb2w+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWwmIF9fdikKICAg IHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194 ID0gX01fcm9vdCgpOwogICAgICBib29sIF9fY29tcCA9IHRydWU7CiAgICAgIHdoaWxlIChfX3gg IT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX2NvbXAgPSBf TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsKICAgICAgICAg IF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQog ICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICBpZiAoX19jb21wKQogICAg ICAgIGlmIChfX2ogPT0gYmVnaW4oKSkKICAgICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJv b2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgICAgZWxzZQogICAgICAg ICAgLS1fX2o7CiAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBf S2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9N X2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9y LGJvb2w+KF9faiwgZmFsc2UpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWws IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5p cXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgaWYg KF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoKICAg ICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tl eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgICAgICAg IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs IF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShf X3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09 IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl eShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHJldHVy biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBl bHNlCiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwog ICAgICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXko X19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAgICAgICAmJiBf TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k ZSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N X25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3Jl Ll9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJu IF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsK CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91 bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVh bChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChf X3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAg ICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgICFfTV9rZXlfY29tcGFyZShfU19r ZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAg cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg X192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192 KTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk ZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo KShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgICAgICAgcmV0dXJuIF9NX2lu c2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19i ZWZvcmU7CiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICAgICAgICYmICFfTV9rZXlfY29tcGFy ZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm IChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJu IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bv c2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJ PgogICAgICB2b2lkCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6 CiAgICAgIGluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAgICAgewogICAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2Vy dF9lcXVhbCgqX19maXJzdCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAgICB2b2lkCiAgICBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShfSUkgX19m aXJzdCwgX0lJIF9fbGFzdCkKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgIGluc2VydF91bmlxdWUoKl9fZmlyc3QpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9 CiAgICAgICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3Np dGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsK ICAgICAgZGVzdHJveV9ub2RlKF9feSk7CiAgICAgIC0tX01fbm9kZV9jb3VudDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpz aXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCiAgICB7CiAgICAgIHBhaXI8aXRlcmF0b3IsaXRl cmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0 YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5z ZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBf S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFs LF9Lb1YsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu a190eXBlIF9fcCkKICAgIHsKCiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2Rl KF9feCk7CiAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkKICAgICAgICB7 CiAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3AtPl9NX3JpZ2h0 ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3AgPSBfX3RvcDsK ICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAoX194ICE9IDAp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25v ZGUoX194KTsKICAgICAgICAgICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgICAgICAg X195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAg ICAgICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kp OwogICAgICAgICAgICAgIF9fcCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9f eCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAg ICAgICAgICBfTV9lcmFzZShfX3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKICAgIHsKCiAg ICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfU19yaWdo dChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgICAg ICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAgICAgfQogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewog ICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgICAgICBj bGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFz ZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBf VmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29u c3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAg ICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f aykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5 cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICgh X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9f eCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChf X3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgcmV0dXJuIChf X2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkg PwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0 IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7 CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGlsZSAoX194ICE9IDAp CiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykp CiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgIGVsc2UK ICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAgIGNvbnN0X2l0ZXJh dG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChfX2ogPT0gZW5kKCkg fHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgICAgZW5k KCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0 CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBl cXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0 LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1Ji X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJf Ym91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hl YWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194 ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg ICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAg ICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAog ICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7 CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBw ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9N X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAo X194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQog ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0 CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBl IF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoX01f a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9 IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gp OwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUKICAgIHBh aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3RyZWU8X0tleSxfVmFs LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFuZ2UoY29uc3QgX0tl eSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5k KF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXks IF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25z dF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j PgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsKICAgIHJldHVybiBw YWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9f aykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNl KiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAgIGlmIChfX25vZGUg PT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAgZG8KICAgICAgewog ICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAgICAgKytfX3N1 bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJyZWFrOwogICAgICAg IF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGlsZSAoMSk7CiAgICBy ZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw ZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsKICAgIGlmIChfTV9u b2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0dXJuIF9NX25vZGVf Y291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01faGVhZGVyLT5fTV9s ZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAg ICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAg ICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19f aXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9N X25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICAgICAgX0xp bmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194LT5fTV9jb2xvciA9 PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9NX3JlZCkK ICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01fcmVkKSkKICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9T X2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg aWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQogICAg ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tf Y291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t aW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfTV9yaWdodG1v c3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgICAg cmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KIyA2NyAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAu aCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCm5hbWVz cGFjZSBzdGQKewojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tl eT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBf VHA+ID4gPgpjbGFzcyBtYXAKewoKIAogIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90 eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsK ICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv bXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs YXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAgICBfQ29t cGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9 CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29u c3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwg X195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90 eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5 cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5 cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs b2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK ICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3Qu aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90 Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBf Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoK CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBjb25z dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAg aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJh dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogIHJldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoK CgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoK CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5y ZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0K CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKICBzaXpl X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAyMjEg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltd KGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9f ayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0 KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICBy ZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQgIi91c3IvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNl cnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVl KF9feCk7IH0KIyAyNjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gp CiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KCgoKCgoK CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01f dC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfbWFwLmgiIDMKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1 cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9tYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2b2lkIGNsZWFy KCkgeyBfTV90LmNsZWFyKCk7IH0KIyAzMzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBf TV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFw LmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg cmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgMzU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dCB7CiAgICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0K IyAzNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3Ig bG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5k KF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiMgMzkzICIvdXNyL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtl eV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiMgNDAzICIvdXNy L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVy X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVy X2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFw LmgiIDMKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlw ZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyA0NDMgIi91 c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRv cixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl cmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNs YXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBv cGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0 dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBt YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OCAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1h cC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIg MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAg ICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2Mg PSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X195KTsKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBr ZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5 cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVm IF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs YXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAg X0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19j KSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gs IGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmly c3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxr ZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90 eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90Owpw dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRv cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXpl X3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNl X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFy ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29t cGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxv Y2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9 CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0Nv bXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs b2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVh bChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJl dHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVy biBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7 IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlw ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0K CgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAg Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoK CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9p dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJz ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigp OyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7 IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBf TV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHko KTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoK CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9 CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsg X01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gp IHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAyNTkgIi91c3IvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNl cnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiMgMjcwICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiMgMjg0 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBlcmFz ZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KIyAyOTcg Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBzaXplX3R5cGUg ZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMg MzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBl cmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2Uo X19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsg fQojIDMzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0 ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7 IH0KIyAzNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBj b25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZmluZChfX3gpOyB9CgoKCgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBf X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQojIDM2NSAiL3Vzci9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNv bnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4 ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgY29uc3RfaXRl cmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CgoKCgoKCiAgaXRlcmF0b3IgdXBwZXJfYm91bmQo Y29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KCgoK CgoKCiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u c3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiMgNDEzICIvdXNyL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixpdGVy YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu ZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDMxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1 YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1 YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xh c3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGlt YXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNs YXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChj b25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5f TV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXks X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kg PCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f eSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAh KF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OSAiL3Vz ci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAyOSAic2VyaWFsaXplLmgiIDIKIyAxICIvdXNy L2luY2x1ZGUvYysrLzMuMi9zZXQiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zZXQi IDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3NldC5oIiAxIDMKIyA2NiAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfc2V0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAg ICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4gPgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xh c3Mgc2V0CnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBl ZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5 cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVl PGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICBfSWRlbnRpdHk8dmFsdWVf dHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIHBvaW50 ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9p bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIHJlZmVy ZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0 X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3Ig aXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNv bnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAg c2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQg c2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7 fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBh bGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0 KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29t cCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAg ICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFz dCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90 KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIG9wZXJhdG9yPShjb25z dCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9N X3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29u c3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21w KCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0 X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0 ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3Ig ZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJl Z2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig cmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1 cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBf TV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg X194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5z ZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6 Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsKICAgIHJldHVy biBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIH0KICBpdGVy YXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsK ICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24s IF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy dChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9N X3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJh dG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRv ciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlv bik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1 cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0 ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9y IF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX2ZpcnN0LCAo X1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigp OyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQoKCgogIGl0 ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7 IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5 cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgY29uc3Rf aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0 dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29u c3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9 CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgcGFpcjxpdGVyYXRvcixp dGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9N X3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVy YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjIwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9zZXQuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xhc3Mg X0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mLCBj b25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0Mx LCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBzZXQ8X0sxLF9DMSxf QTE+JiwgY29uc3Qgc2V0PF9LMSxfQzEsX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXks IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u c3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f dCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkg ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHNldDxf S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNl dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBzZXQ8 X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICAgIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7 Cn0KCn0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc2V0IiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aXNldC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfbXVsdGlzZXQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNz IF9BbGxvYyA9IGFsbG9jYXRvcjxfS2V5PiA+CmNsYXNzIG11bHRpc2V0OwoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh dG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0FsbG9jPgpjbGFzcyBtdWx0aXNldAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYg X0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21w YXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0 ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAg ICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGlzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh dG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtdWx0aXNldChjb25zdCBfQ29tcGFyZSYgX19jb21w LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0 b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkp CiAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21w LAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9f bGFzdCk7IH0KCiAgbXVsdGlzZXQoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxs b2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f eCkgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlf Y29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZh bHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsg fQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90Lmdl dF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu YmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0K ICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7 IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsg fQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5 cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9z aXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRp c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0K CgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBf TV90Lmluc2VydF9lcXVhbChfX3gpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19w b3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF9l cXVhbCgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlvbiwgX194KTsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3Qs IF9fbGFzdCk7CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90 LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uKTsKICB9CiAgc2l6ZV90eXBlIGVyYXNl KGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVyYXNlKF9feCk7CiAgfQog IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3Qu ZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOwog IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBzaXplX3R5cGUgY291bnQo Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CgoK CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQo X194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBr ZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBj b25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3Vu ZChjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gp OwogIH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj b25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICBwYWlyPGl0ZXJh dG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1 cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0 X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX211bHRpc2V0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBf QzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aXNldDxf SzEsX0MxLF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9L MSxfQzEsX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xhc3MgX0Ex PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+JiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYpOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcjwoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m IF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21w YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195 KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGlzZXQ8X0tleSxf Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGlzZXQ8X0tleSxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjkgIi91c3IvaW5j bHVkZS9jKysvMy4yL3NldCIgMiAzCiMgMzAgInNlcmlhbGl6ZS5oIiAyCiMgNDggInNlcmlhbGl6 ZS5oIgpjbGFzcyBvc2VyaWFsaXplcgp7CiAgICAgICAgb3N0cmVhbSYgb3M7CgogICAgICAgIHNl dDx0c2VyaWFsPiBzZXJpYWxpemVkOwoKICAgICAgICB2b2lkIG91dHB1dCggdWludDMyX3QgbCAp OwoKICAgICAgICB2b2lkIGNoZWNrX3BhcmVudF9zZXJpYWxpemVkKHRzZXJpYWwgcyk7CgoKcHVi bGljOgogICAgICAgIG9zZXJpYWxpemVyKG9zdHJlYW0mIGlvcyk7CgogICAgICAgIH5vc2VyaWFs aXplcigpOwoKCiAgICAgICAgb3NlcmlhbGl6ZXImIG9wZXJhdG9yIDw8KGNlbGwgYyk7CgogICAg ICAgIG9zZXJpYWxpemVyJiBvcGVyYXRvciA8PChMaW5lYXJGU1AgZik7Cgp9OwojIDgzICJzZXJp YWxpemUuaCIKY2xhc3MgaXNlcmlhbGl6ZXIKewogICAgICAgIGlzdHJlYW0mIGlzOwoKICAgICAg ICBtYXA8dHNlcmlhbCx0c2VyaWFsPiBzZXJpYWxtYXA7CgoKICAgICAgICB1aW50MzJfdCBpbnB1 dCgpOwoKCnB1YmxpYzoKICAgICAgICBpc2VyaWFsaXplcihpc3RyZWFtJiBpaXMpOwoKICAgICAg ICB+aXNlcmlhbGl6ZXIoKSB7IH0KCgogICAgICAgIGlzZXJpYWxpemVyJiBvcGVyYXRvciA+Pihj ZWxsICZjKTsKCiAgICAgICAgaXNlcmlhbGl6ZXImIG9wZXJhdG9yID4+KExpbmVhckZTUCAmZik7 Cgp9OwojIDI2ICJhcnJheS5jcHAiIDIKCiMgMSAiYXJyYXkuaCIgMQojIDEzICJhcnJheS5oIgpl bnVtIER1bW15S2V5CnsKICAgICAgICBkdW1teXZhbAp9OwoKCnRlbXBsYXRlIDxjbGFzcyBUb2Jq LCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgUHNldWRvSGFzaAp7CnB1 YmxpYzoKICAgICAgICB0eXBlZGVmIEFsbG9jIGFsbG9jYXRvcl90OwogICAgICAgIHR5cGVkZWYg VG9iaiBvYmpfdDsKCnByaXZhdGU6CiAgICAgICAgVG9iaiAqKnRhYmxlOwogICAgICAgIGludCBi YXNlOwogICAgICAgIGludCBzaXplOwogICAgICAgIGFsbG9jYXRvcl90IGFsbG9jOwoKcHVibGlj OgogICAgICAgIFBzZXVkb0hhc2goaW50IGluaXNpemUsIHVuc2lnbmVkIGluaWJhc2UsIGFsbG9j YXRvcl90IGlhbGxvYyA9IGFsbG9jYXRvcl90KCkpIHsKICAgICAgICAgICAgICAgIGJhc2UgPSBp bmliYXNlOwogICAgICAgICAgICAgICAgc2l6ZSA9IGluaXNpemU7CiAgICAgICAgICAgICAgICBh bGxvYyA9IGlhbGxvYzsKICAgICAgICAgICAgICAgIHRhYmxlID0gbmV3IFRvYmoqW3NpemVdOwog ICAgICAgICAgICAgICAgaW50IGk7Zm9yIChpPTA7aTxzaXplO2krKykgewogICAgICAgICAgICAg ICAgICAgICAgICB0YWJsZVtpXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICAgIHZvaWQgRXhwYW5kKHZvaWQpIHsKICAgICAgICAgICAgICAgIFRvYmoqKiBuZXdfdGFibGUg PSBhbGxvYy5hbGxvY2F0ZShzaXplKjIpOwogICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAg ICAgICAgICBmb3IgKGk9MDtpPHNpemU7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5l d190YWJsZVtpXSA9IHRhYmxlW2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg Zm9yICg7aTxzaXplKjI7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld190YWJsZVtp XSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRl KHRhYmxlLCBzaXplKTsKICAgICAgICAgICAgICAgIHNpemUgKj0gMjsKICAgICAgICAgICAgICAg IHRhYmxlID0gbmV3X3RhYmxlOwogICAgICAgIH0KICAgICAgICB+UHNldWRvSGFzaCgpIHsKCiAg ICAgICAgfQogICAgICAgIFRvYmogKkFkZChUb2JqICpkYXRhKSB7CiAgICAgICAgICAgICAgICBp bnQga2V5ID0gKGludCkoZGF0YS0+R2V0S2V5KCkpOwogICAgICAgICAgICAgICAgd2hpbGUoc2l6 ZSA8PSBrZXkpIEV4cGFuZCgpOwogICAgICAgICAgICAgICAgVG9iaiogcmV0ID0gdGFibGVba2V5 LWJhc2VdOwogICAgICAgICAgICAgICAgdGFibGVba2V5LWJhc2VdID0gZGF0YTsKICAgICAgICAg ICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQogICAgICAgIFRvYmogKkFkZE9yUmVwbGFjZShU b2JqICpkYXRhKSB7CiAgICAgICAgICAgICAgICBpbnQga2V5ID0gKGludCkoZGF0YS0+R2V0S2V5 KCkpOwogICAgICAgICAgICAgICAgd2hpbGUoc2l6ZSA8PSBrZXkpIEV4cGFuZCgpOwogICAgICAg ICAgICAgICAgVG9iaiogcmV0ID0gdGFibGVba2V5LWJhc2VdOwogICAgICAgICAgICAgICAgdGFi bGVba2V5LWJhc2VdID0gZGF0YTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAg fQogICAgICAgIFRvYmogKkZpbmQodWxvbmcga2V5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4g dGFibGVba2V5LWJhc2VdOwogICAgICAgIH0KCiAgICAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNp emVfdCBzaXplKSB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhzaXplKTsgfQogICAgICAgIHZvaWQg Km9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgYWxsb2NhdG9yX3QmIGFsbG9jKSB7IHJldHVybiBh bGxvYy5hbGxvY2F0ZV9ieXRlcyhzaXplKTsgfQp9OwoKCgoKCmNsYXNzIEFycmF5RW50cnlCYXNl OwoKY2xhc3MgQXJyYXlNYWtlcgp7CiAgICAgICAgQXJyYXlNYWtlciAqbmV4dDsKcHJvdGVjdGVk OgogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2M7CnB1YmxpYzoKICAgICAgICBB cnJheU1ha2VyKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxs b2MpIDogbmV4dChfbmV4dCksIGFsbG9jKGlhbGxvYykgeyB9CiAgICAgICAgdmlydHVhbCB+QXJy YXlNYWtlcigpIHsgZGVsZXRlIG5leHQ7IH0KCiAgICAgICAgQXJyYXlNYWtlciAqTmV4dCgpIHsg cmV0dXJuIG5leHQ7IH0KICAgICAgICBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+JiBHZXRBbGxvYygp IHsgcmV0dXJuIGFsbG9jOyB9CiAgICAgICAgdm9pZCBTZXRBbGxvYyhjb25zdCBsaWxmZXNfYWxs b2NhdG9yPGNlbGw+JiBuZXdhbGxvYykgeyBhbGxvYyA9IG5ld2FsbG9jOyBpZiggbmV4dCAhPSBf X251bGwgKSBuZXh0LT5TZXRBbGxvYyhuZXdhbGxvYyk7IH0KCiAgICAgICAgdmlydHVhbCBpbnQg U2l6ZSgpIHsgcmV0dXJuIC0xOyB9CiAgICAgICAgdmlydHVhbCBpbnQgQmFzZSgpIHsgcmV0dXJu IC0xOyB9CgogICAgICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpID0gMDsK ICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICpNYWtlRW50cnkodW5zaWduZWQgbG9uZyBr KSB7IE1ha2VFbnRyeSgpOyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVh bCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KGNvbnN0IGNoYXIgKmspIHsgTWFrZUVudHJ5KCk7 IGFib3J0KCk7IHJldHVybiBfX251bGw7fQogICAgICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2Ug Kk1ha2VFbnRyeShMaW5lYXJGU1AgaykgeyBNYWtlRW50cnkoKTsgYWJvcnQoKTsgcmV0dXJuIF9f bnVsbDsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveUVudHJ5KEFycmF5RW50cnlCYXNl ICopID0gMDsKfTsKCmNsYXNzIEFycmF5TWFrZXJTZW50aW5lbCA6IHB1YmxpYyBBcnJheU1ha2Vy CnsKcHVibGljOgogICAgICAgIEFycmF5TWFrZXJTZW50aW5lbChsaWxmZXNfYWxsb2NhdG9yPGNl bGw+ICZpYWxsb2MpIDogQXJyYXlNYWtlcihfX251bGwsIGlhbGxvYykge30KCiAgICAgICAgdmly dHVhbCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KCkgeyBfQWJvcnQoKCJJbnRlcm5hbCBFcnJv cjogQXJyYXlNYWtlclNlbnRpbmVsOjpNYWtlRW50cnkiKSwgImFycmF5LmgiLCAxMTUpOyByZXR1 cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVhbCB2b2lkIERlc3Ryb3lFbnRyeShBcnJheUVudHJ5 QmFzZSAqKSB7IF9BYm9ydCgoIkludGVybmFsIEVycm9yOiBBcnJheU1ha2VyU2VudGluZWw6OkRl c3Ryb3lFbnRyeSIpLCAiYXJyYXkuaCIsIDExNik7IH0KfTsKCmNsYXNzIEFyZ0J1ZjsKCnRlbXBs YXRlIDxjbGFzcyBBUlJBWUJBU0U+CmNsYXNzIEFycmF5TWFrZXJUZW1wbGF0ZSA6IHB1YmxpYyBB cnJheU1ha2VyCnsKICAgICAgICBpbnQgc2l6ZTsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgQVJSQVlCQVNFOjp2YWx1ZV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlclRl bXBsYXRlKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxsb2Ms IGludCBfc2l6ZSA9IDApIDogQXJyYXlNYWtlcihfbmV4dCwgaWFsbG9jKSB7IHNpemUgPSBfc2l6 ZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4gc2l6ZTsgfQogICAgICAg IHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50cnkoKTsKICAgICAgICB2aXJ0dWFsIEFycmF5RW50 cnlCYXNlICpNYWtlRW50cnkodW5zaWduZWQgbG9uZykgeyBhYm9ydCgpOyByZXR1cm4gX19udWxs OyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KGNvbnN0IGNoYXIg KikgeyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5 QmFzZSAqTWFrZUVudHJ5KExpbmVhckZTUCkgeyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9Cgog ICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2UgKik7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0UgKkFycmF5TWFrZXJUZW1wbGF0ZTxB UlJBWUJBU0U+OjpNYWtlRW50cnkoKQp7CiAgICAgICAgQVJSQVlCQVNFKiByZXQgPSBuZXcgKGxp bGZlc19hbGxvY2F0b3I8QVJSQVlCQVNFPihhbGxvYykuYWxsb2NhdGUoMSkpIEFSUkFZQkFTRShk dW1teXZhbCwgdGhpcyk7CiAgICAgICAgcmV0dXJuIHJldDsKfQoKdGVtcGxhdGUgPGNsYXNzIEFS UkFZQkFTRT4Kdm9pZCBBcnJheU1ha2VyVGVtcGxhdGU8QVJSQVlCQVNFPjo6RGVzdHJveUVudHJ5 KEFycmF5RW50cnlCYXNlICpwYikKewogICAgICAgIEFSUkFZQkFTRSAqcCA9IGR5bmFtaWNfY2Fz dDxBUlJBWUJBU0UgKj4ocGIpOwogICAgICAgIHAtPkRlc3Ryb3kodGhpcyk7CiAgICAgICAgcC0+ fkFSUkFZQkFTRSgpOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8QVJSQVlCQVNFPihhbGxvYyku ZGVhbGxvY2F0ZShwLDEpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBBUlJBWUJBU0U+CmNsYXNzIEFy cmF5TWFrZXJJbnRUZW1wbGF0ZSA6IHB1YmxpYyBBcnJheU1ha2VyCnsKICAgICAgICBpbnQgc2l6 ZTsKICAgICAgICBpbnQgYmFzZTsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQVJS QVlCQVNFOjp2YWx1ZV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlckludFRlbXBsYXRl KEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxsb2MsIGludCBf c2l6ZSwgaW50IF9iYXNlKSA6IEFycmF5TWFrZXIoX25leHQsIGlhbGxvYykgeyBzaXplID0gX3Np emU7IGJhc2UgPSBfYmFzZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4g c2l6ZTsgfQogICAgICAgIHZpcnR1YWwgaW50IEJhc2UoKSB7IHJldHVybiBiYXNlOyB9CiAgICAg ICAgdmlydHVhbCBBUlJBWUJBU0UgKk1ha2VFbnRyeSgpOwogICAgICAgIHZpcnR1YWwgQXJyYXlF bnRyeUJhc2UgKk1ha2VFbnRyeSh1bnNpZ25lZCBsb25nIGspIHsgYWJvcnQoKTsgfQogICAgICAg IHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeShjb25zdCBjaGFyICprKSB7IGFib3J0 KCk7IH0KICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICpNYWtlRW50cnkoTGluZWFyRlNQ IGspIHsgYWJvcnQoKTsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveUVudHJ5KEFycmF5 RW50cnlCYXNlICopOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEFSUkFZQkFTRT4KQVJSQVlCQVNFICpB cnJheU1ha2VySW50VGVtcGxhdGU8QVJSQVlCQVNFPjo6TWFrZUVudHJ5KCkKewogICAgICAgIEFS UkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZQkFTRT4oYWxsb2MpLmFs bG9jYXRlKDEpKSBBUlJBWUJBU0UoZHVtbXl2YWwsIHRoaXMpOwogICAgICAgIHJldHVybiByZXQ7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUlJBWUJBU0U+CnZvaWQgQXJyYXlNYWtlckludFRlbXBsYXRl PEFSUkFZQkFTRT46OkRlc3Ryb3lFbnRyeShBcnJheUVudHJ5QmFzZSAqcGIpCnsKICAgICAgICBB UlJBWUJBU0UgKnAgPSBkeW5hbWljX2Nhc3Q8QVJSQVlCQVNFICo+KHBiKTsKICAgICAgICBwLT5E ZXN0cm95KHRoaXMpOwogICAgICAgIHAtPn5BUlJBWUJBU0UoKTsKICAgICAgICBsaWxmZXNfYWxs b2NhdG9yPEFSUkFZQkFTRT4oYWxsb2MpLmRlYWxsb2NhdGUocCwxKTsKfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgQVJSQVlCQVNFPgpjbGFzcyBBcnJheU1ha2VyS2V5VGVtcGxhdGUgOiBwdWJsaWMgQXJy YXlNYWtlcgp7CiAgICAgICAgaW50IHNpemU7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIEFSUkFZQkFTRTo6aGFzaGtleV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlcktl eVRlbXBsYXRlKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxs b2MsIGludCBfc2l6ZSA9IDApIDogQXJyYXlNYWtlcihfbmV4dCwgaWFsbG9jKSB7IHNpemUgPSBf c2l6ZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4gc2l6ZTsgfQogICAg ICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpIHsgX0Fib3J0KCgiSW50ZXJu YWwgRXJyb3I6IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTo6TWFrZUVudHJ5IiksICJhcnJheS5oIiwg MjA1KTsgcmV0dXJuIF9fbnVsbDsgfQogICAgICAgIHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50 cnkoaGFzaGtleV90IGtleSk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJy YXlFbnRyeUJhc2UgKik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0Ug KkFycmF5TWFrZXJLZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpNYWtlRW50cnkoaGFzaGtleV90IGtl eSkKewogICAgICAgIEFSUkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZ QkFTRT4oYWxsb2MpLmFsbG9jYXRlKDEpKSBBUlJBWUJBU0Uoa2V5LCB0aGlzKTsKICAgICAgICBy ZXR1cm4gcmV0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgp2b2lkIEFycmF5TWFrZXJL ZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2UgKnBiKQp7 CiAgICAgICAgQVJSQVlCQVNFICpwID0gZHluYW1pY19jYXN0PEFSUkFZQkFTRSAqPihwYik7CiAg ICAgICAgcC0+RGVzdHJveSh0aGlzKTsKICAgICAgICBwLT5+QVJSQVlCQVNFKCk7CiAgICAgICAg bGlsZmVzX2FsbG9jYXRvcjxBUlJBWUJBU0U+KGFsbG9jKS5kZWFsbG9jYXRlKHAsMSk7Cn0KCgoK dGVtcGxhdGUgPGNsYXNzIEFSUkFZQkFTRT4KY2xhc3MgQXJyYXlNYWtlckludEtleVRlbXBsYXRl IDogcHVibGljIEFycmF5TWFrZXIKewogICAgICAgIGludCBzaXplOwogICAgICAgIGludCBiYXNl OwpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBUlJBWUJBU0U6Omhhc2hrZXlfdCBo YXNoa2V5X3Q7CgogICAgICAgIEFycmF5TWFrZXJJbnRLZXlUZW1wbGF0ZShBcnJheU1ha2VyICpf bmV4dCwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiAmaWFsbG9jLCBpbnQgX3NpemUsIGludCBfYmFz ZSkgOiBBcnJheU1ha2VyKF9uZXh0LCBpYWxsb2MpIHsgc2l6ZSA9IF9zaXplOyBiYXNlID0gX2Jh c2U7IH0KCiAgICAgICAgdmlydHVhbCBpbnQgU2l6ZSgpIHsgcmV0dXJuIHNpemU7IH0KICAgICAg ICB2aXJ0dWFsIGludCBCYXNlKCkgeyByZXR1cm4gYmFzZTsgfQogICAgICAgIHZpcnR1YWwgQXJy YXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpIHsgX0Fib3J0KCgiSW50ZXJuYWwgRXJyb3I6IEFycmF5 TWFrZXJJbnRLZXlUZW1wbGF0ZTo6TWFrZUVudHJ5IiksICJhcnJheS5oIiwgMjQxKTsgcmV0dXJu IF9fbnVsbDsgfQogICAgICAgIHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50cnkoaGFzaGtleV90 IGtleSk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2Ug Kik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0UgKkFycmF5TWFrZXJJ bnRLZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpNYWtlRW50cnkoaGFzaGtleV90IGtleSkKewogICAg ICAgIEFSUkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZQkFTRT4oYWxs b2MpLmFsbG9jYXRlKDEpKSBBUlJBWUJBU0Uoa2V5LCB0aGlzKTsKfQoKdGVtcGxhdGUgPGNsYXNz IEFSUkFZQkFTRT4Kdm9pZCBBcnJheU1ha2VySW50S2V5VGVtcGxhdGU8QVJSQVlCQVNFPjo6RGVz dHJveUVudHJ5KEFycmF5RW50cnlCYXNlICpwYikKewogICAgICAgIEFSUkFZQkFTRSAqcCA9IGR5 bmFtaWNfY2FzdDxBUlJBWUJBU0UgKj4ocGIpOwogICAgICAgIHAtPkRlc3Ryb3kodGhpcyk7CiAg ICAgICAgcC0+fkFSUkFZQkFTRSgpOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8QVJSQVlCQVNF PihhbGxvYykuZGVhbGxvY2F0ZShwLDEpOwp9CiMgMzAyICJhcnJheS5oIgplbnVtIEZMIHsgS0lO VCwgS1NUUixLRlMgLCBLRVksCiAgICAgICAgICAgICAgICBWRlMsIFZJTlQsIFZTVFIgLAogICAg ICAgICAgICAgICAgSU5WQUxJRCAsIElOVkFMSURfVFlQRSAsIElOVkFMSURfRlN9OwoKCmNsYXNz IEFyZ0J1ZiB7CiAgICAgICAgaW50IHBvczsKICAgICAgICBpbnQgZmxhZzsKICAgICAgICBpbnQg c2l6ZTsKICAgICAgICBpbnQgYmFzZTsKcHVibGljOgogICAgICAgIEFyZ0J1ZigpIHsgfQogICAg ICAgIH5BcmdCdWYoKSB7IH0KCiAgICAgICAgdm9pZCBTZXRGbGFnKEZMIF9mbGFnICwgaW50IG51 bSkgewogICAgICAgICAgICAgICAgZmxhZyA9IChpbnQoX2ZsYWcpIDw8IDE2KSArIG51bTsKICAg ICAgICB9CiAgICAgICAgdm9pZCBTZXRLZXkoaW50IF9zaXplICwgaW50IF9iYXNlKSB7CiAgICAg ICAgICAgICAgICBiYXNlID0gX2Jhc2U7CiAgICAgICAgICAgICAgICBzaXplID0gX3NpemU7CiAg ICAgICAgfQpwdWJsaWM6CiAgICAgICAgRkwgRmxhZyh2b2lkKSB7IHJldHVybiBGTChmbGFnID4+ IDE2KTsgfQogICAgICAgIGludCBOdW1iZXIodm9pZCkgeyByZXR1cm4gZmxhZyAmIDB4ZmZmOyB9 CiAgICAgICAgaW50IFNpemUodm9pZCkgeyByZXR1cm4gc2l6ZTsgfQogICAgICAgIGludCBCYXNl KHZvaWQpIHsgcmV0dXJuIGJhc2U7IH0KICAgICAgICB2b2lkIEluaXQodm9pZCkgeyBmbGFnID0g c2l6ZSA9IGJhc2UgPSAwOyB9CiAgICAgICAgdm9pZCBTaG93KHZvaWQpIHsgY291dCA8PCAiZmxh ZzogIiA8PCBoZXggPDwgZmxhZyA8PCAiICBzaXplOiAiIDw8IHNpemUgPDwgIiAgYmFzZTogIiA8 PCBiYXNlIDw8IGRlYyA8PCBlbmRsOyB9CiAgICAgICAgdm9pZCBTZXRWYWx1ZSh0c2VyaWFsLGlu dCk7CiAgICAgICAgdm9pZCBTZXRLZXkoRlNQJixpbnQpOwogICAgICAgIHZvaWQgU2V0UmVzdWx0 RmxhZyh2b2lkKSB7CiAgICAgICAgICAgICAgICBmbGFnIHw9IDB4ODAwMDsKICAgICAgICB9CiAg ICAgICAgaW50IFJlc3VsdEZsYWcodm9pZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZsYWcg JiAweDgwMDA7CiAgICAgICAgfQoKICAgICAgICBBcnJheU1ha2VyICpNYWtlQXJyYXlNYWtlcihB cmdCdWYgKnByZXYsIEFycmF5TWFrZXIgKm5leHQsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gJmFs bG9jKTsKfTsKIyAzNjYgImFycmF5LmgiCmNsYXNzIEludEZpbCB7CnB1YmxpYzoKICAgICAgICB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaGFzaGtleV90OwogICAgICAgIHN0YXRpYyBoYXNoa2V5X3Qg R2VuS2V5IChGU1AgZiwgQXJyYXlNYWtlciAqKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gR2Vu S2V5KGYpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaGFzaGtleV90IEdlbktleSAoRlNQIGYp IHsKICAgICAgICAgICAgICAgIGNlbGwgYyA9IGYuUmVhZENlbGwoKTsKICAgICAgICAgICAgICAg IGlmICgoKCgoY2VsbF9pbnQpKGMpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxf aW50KVRfSU5UIDw8IDApKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYzJJTlQo Yyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb3V0 IDw8ICJOb24taW50ZWdlciBjYW5ub3QgdXNlIGFzIGEga2V5IG9mIGFuIGludGVnZXIgYXJyYXlc biI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAx KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgRGVzdHJv eUtleSAoaGFzaGtleV90LCBBcnJheU1ha2VyICopIHsgfQogICAgICAgIHN0YXRpYyB2b2lkIERl c3Ryb3lLZXkgKGhhc2hrZXlfdCkgeyB9CiAgICAgICAgc3RhdGljIEZTUCBHZW5GU1AoaGFzaGtl eV90IGgpCiAgICAgICAgewoKICAgICAgICAgICAgICAgIHJldHVybiBGU1AoSU5UMmMoaCkpOwog ICAgICAgIH0KICAgICAgICBzdGF0aWMgYm9vbCBFcXVpdihoYXNoa2V5X3QgaDEsIGhhc2hrZXlf dCBoMikKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gaDEgPT0gaDI7CiAgICAgICAg fQogICAgICAgIHN0YXRpYyB2b2lkIFNlcmlhbGl6ZVRvU3RyZWFtKGhhc2hrZXlfdCBmLCBvc2Vy aWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIG9zIDw8IElOVDJjKGYpOwogICAgICAgIH0K ICAgICAgICBzdGF0aWMgdm9pZCBUZXJtaW5hdGVTdHJlYW0ob3NlcmlhbGl6ZXIgJm9zKSB7CiAg ICAgICAgICAgICAgICBvcyA8PCBDRUxMX0lOVkFMSUQ7CiAgICAgICAgfQogICAgICAgIHN0YXRp YyBib29sIFJlYWRGcm9tU3RyZWFtKGhhc2hrZXlfdCAmZiwgaXNlcmlhbGl6ZXIgJmlzKSB7CiAg ICAgICAgICAgICAgICBjZWxsIGM7CiAgICAgICAgICAgICAgICBpcyA+PiBjOwogICAgICAgICAg ICAgICAgaWYoIGMgPT0gQ0VMTF9JTlZBTElEICkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgZiA9IGMySU5UKGMpOwogICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKCmNsYXNzIENlbGxGaWwgewpwdWJsaWM6CiAgICAg ICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGhhc2hrZXlfdDsKICAgICAgICBzdGF0aWMgaGFzaGtl eV90IEdlbktleSAoRlNQIGYsIEFycmF5TWFrZXIgKikgewogICAgICAgICAgICAgICAgcmV0dXJu IEdlbktleShmKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGhhc2hrZXlfdCBHZW5LZXkgKEZT UCBmKSB7CiAgICAgICAgICAgICAgICBjZWxsIGMgPSBmLlJlYWRDZWxsKCk7CiAgICAgICAgICAg ICAgICBpZiAoKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChj ZWxsX2ludClUX1NUUiA8PCAwKSkgfHwgKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4 MyA8PCAwKSkgPT0gKChjZWxsX2ludClUX1BUUiA8PCAwKSkpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgY291dCA8PCAiU3RydWN0dXJlIG9yIHZhcmlhYmxlIGNhbm5vdCB1c2UgYXMgYSBrZXkg b2YgYSBzdHJpbmcgaGFzaFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChj ZWxsX2ludCkoYykpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMg dm9pZCBEZXN0cm95S2V5IChoYXNoa2V5X3QsIEFycmF5TWFrZXIgKikgeyB9CiAgICAgICAgc3Rh dGljIHZvaWQgRGVzdHJveUtleSAoaGFzaGtleV90KSB7IH0KICAgICAgICBzdGF0aWMgRlNQIEdl bkZTUChoYXNoa2V5X3QgaCkKICAgICAgICB7CgogICAgICAgICAgICAgICAgcmV0dXJuIEZTUCgo KGNlbGwpKGgpKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBib29sIEVxdWl2KGhhc2hrZXlf dCBoMSwgaGFzaGtleV90IGgyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBoMSA9 PSBoMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgU2VyaWFsaXplVG9TdHJlYW0oaGFz aGtleV90IGYsIG9zZXJpYWxpemVyICZvcykgewogICAgICAgICAgICAgICAgb3MgPDwgKChjZWxs KShmKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB2b2lkIFRlcm1pbmF0ZVN0cmVhbShvc2Vy aWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIG9zIDw8IENFTExfSU5WQUxJRDsKICAgICAg ICB9CiAgICAgICAgc3RhdGljIGJvb2wgUmVhZEZyb21TdHJlYW0oaGFzaGtleV90ICZmLCBpc2Vy aWFsaXplciAmaXMpIHsKICAgICAgICAgICAgICAgIGNlbGwgYzsKICAgICAgICAgICAgICAgIGlz ID4+IGM7CiAgICAgICAgICAgICAgICBpZiggYyA9PSBDRUxMX0lOVkFMSUQgKQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICBmID0gKChjZWxsX2lu dCkoYykpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKCmNsYXNz IEZTRmlsIHsKcHVibGljOgogICAgICAgIHN0YXRpYyBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+IGRl ZmFsbG9jOwogICAgICAgIHR5cGVkZWYgTGluZWFyRlNQIGhhc2hrZXlfdDsKICAgICAgICBzdGF0 aWMgaGFzaGtleV90IEdlbktleSAoRlNQIGYsIEFycmF5TWFrZXIgKm0pIHsKICAgICAgICAgICAg ICAgIHJldHVybiBMaW5lYXJGU1AoZiwgbS0+R2V0QWxsb2MoKSk7CiAgICAgICAgfQogICAgICAg IHN0YXRpYyBoYXNoa2V5X3QgR2VuS2V5IChGU1AgZikgewogICAgICAgICAgICAgICAgcmV0dXJu IExpbmVhckZTUChmKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgRGVzdHJveUtleSAo aGFzaGtleV90ICZmLCBBcnJheU1ha2VyICptKSB7CiAgICAgICAgICAgICAgICBmLkRlYWxsb2Mo bS0+R2V0QWxsb2MoKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB2b2lkIERlc3Ryb3lLZXkg KGhhc2hrZXlfdCAmZikgewogICAgICAgIH0KICAgICAgICBzdGF0aWMgRlNQIEdlbkZTUChoYXNo a2V5X3QgaCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1AgZiA9IGguQ29weSgpOwoKICAg ICAgICAgICAgICAgIHJldHVybiBmOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgYm9vbCBFcXVp dihoYXNoa2V5X3QgaDEsIGhhc2hrZXlfdCBoMikKICAgICAgICB7CiAgICAgICAgICAgICAgICBy ZXR1cm4gaDEuRXF1aXYoaDIpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgdm9pZCBTZXJpYWxp emVUb1N0cmVhbShoYXNoa2V5X3QgZiwgb3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAgICAg ICBvcyA8PCBmOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgdm9pZCBUZXJtaW5hdGVTdHJlYW0o b3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAgICAgICBvcyA8PCBMaW5lYXJGU1A6OmludmFs aWQ7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBib29sIFJlYWRGcm9tU3RyZWFtKGhhc2hrZXlf dCAmZiwgaXNlcmlhbGl6ZXIgJmlzKSB7CiAgICAgICAgICAgICAgICBpcyA+PiBmOwogICAgICAg ICAgICAgICAgcmV0dXJuIGYuSXNWYWxpZCgpOwogICAgICAgIH0KfTsKCgoKCgpjbGFzcyBBcnJh eUVudHJ5QmFzZQp7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgQXJyYXlFbnRyeUJhc2UgKmVycm9y OwogICAgICAgIHN0YXRpYyBBcnJheUVudHJ5QmFzZSAqZ29vZF9maW5pc2g7CiAgICAgICAgc3Rh dGljIEFycmF5RW50cnlCYXNlICpyZW1vdmVfbWU7CgogICAgICAgIEFycmF5RW50cnlCYXNlKCkg eyB9CiAgICAgICAgdmlydHVhbCB+QXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICB2aXJ0dWFs IEFycmF5RW50cnlCYXNlICogR2V0KEZTUCBrZXkpIHsgcmV0dXJuIGVycm9yOyB9CiAgICAgICAg dmlydHVhbCBBcnJheUVudHJ5QmFzZSAqIEVxdWl2KEFycmF5RW50cnlCYXNlICopIHsgcmV0dXJu IGVycm9yOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5QmFzZSAqIFNldChGU1Aga2V5LCBB cnJheU1ha2VyICopIHsgcmV0dXJuIGVycm9yOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5 QmFzZSAqIFJlbW92ZShGU1Aga2V5LCBBcnJheU1ha2VyICopIHsgcmV0dXJuIGVycm9yOyB9CiAg ICAgICAgdmlydHVhbCB2b2lkIFNlcmlhbGl6ZVRvU3RyZWFtKG9zZXJpYWxpemVyICYpIHsgfQog ICAgICAgIHZpcnR1YWwgYm9vbCBSZWFkRnJvbVN0cmVhbShpc2VyaWFsaXplciAmLCBBcnJheU1h a2VyICopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgdmlydHVhbCBib29sIEtleUxpc3QoRlNQ IHJldCkgeyB9CiAgICAgICAgdmlydHVhbCB2b2lkIERlc3Ryb3koQXJyYXlNYWtlciAqKSB7IH0K fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgS0VZPgpjbGFzcyBBcnJheUVudHJ5IDogcHVibGljIEFycmF5 RW50cnlCYXNlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgS0VZIGhhc2hrZXlfdDsKCnByaXZh dGU6CiAgICAgICAgaGFzaGtleV90IGtleTsKCnB1YmxpYzoKICAgICAgICBBcnJheUVudHJ5KGhh c2hrZXlfdCBfa2V5KSA6IEFycmF5RW50cnlCYXNlKCksIGtleShfa2V5KSB7IH0KICAgICAgICBB cnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICopIDogQXJyYXlFbnRyeUJhc2Uo KSwga2V5KF9rZXkpIHsgfQoKICAgICAgICBjb25zdCBoYXNoa2V5X3QgJkdldEtleSgpIHsgcmV0 dXJuIGtleTsgfQp9OwoKdGVtcGxhdGUgPD4KY2xhc3MgQXJyYXlFbnRyeTxMaW5lYXJGU1A+IDog cHVibGljIEFycmF5RW50cnlCYXNlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgTGluZWFyRlNQ IGhhc2hrZXlfdDsKCnByaXZhdGU6CiAgICAgICAgaGFzaGtleV90IGtleTsKCnB1YmxpYzoKICAg ICAgICBBcnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5KSA6IEFycmF5RW50cnlCYXNlKCksIGtleShf a2V5KSB7IH0KICAgICAgICBBcnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICop IDogQXJyYXlFbnRyeUJhc2UoKSwga2V5KF9rZXkpIHsgfQoKICAgICAgICBjb25zdCBoYXNoa2V5 X3QgJkdldEtleSgpIHsgcmV0dXJuIGtleTsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJv eShBcnJheU1ha2VyICptKSB7IGtleS5EZWFsbG9jKG0tPkdldEFsbG9jKCkpOyB9Cn07CgoKdGVt cGxhdGUgPD4KY2xhc3MgQXJyYXlFbnRyeTxEdW1teUtleT4gOiBwdWJsaWMgQXJyYXlFbnRyeUJh c2UKewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBEdW1teUtleSBoYXNoa2V5X3Q7CgpwdWJsaWM6 CiAgICAgICAgQXJyYXlFbnRyeSgpIDogQXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICBBcnJh eUVudHJ5KEFycmF5TWFrZXIgKikgOiBBcnJheUVudHJ5QmFzZSgpIHsgfQogICAgICAgIEFycmF5 RW50cnkoaGFzaGtleV90IF9rZXkpIDogQXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICBBcnJh eUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICopIDogQXJyYXlFbnRyeUJhc2UoKSB7 IH0KCiAgICAgICAgY29uc3QgaGFzaGtleV90IEdldEtleSgpIHsgcmV0dXJuIGR1bW15dmFsOyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtFWSwgY2xhc3MgRklMVEVSPgpjbGFzcyBBcnJheVJlc3Vs dEVudHJ5IDogcHVibGljIEFycmF5RW50cnk8S0VZPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIEFycmF5RW50cnk8S0VZPjo6aGFzaGtleV90IGhhc2hrZXlfdDsKICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIEZJTFRFUjo6aGFzaGtleV90IHZhbHVlX3Q7CiAgICAgICAgdHlwZWRl ZiBGSUxURVIgZmlsdGVyX3Q7CgogICAgICAgIHZhbHVlX3QgdmFsOwoKICAgICAgICBBcnJheVJl c3VsdEVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICpfYW0pIDogQXJyYXlFbnRyeTxL RVk+KF9rZXkpIHsgfQoKICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlKiBTZXQoRlNQIGtl eSwgQXJyYXlNYWtlciAqbSkgewogICAgICAgICAgICAgICAgZmlsdGVyX3Q6OkRlc3Ryb3lLZXko dmFsLCBtKTsKICAgICAgICAgICAgICAgIHZhbCA9IGZpbHRlcl90OjpHZW5LZXkoa2V5LCBtKTsK ICAgICAgICAgICAgICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwg QXJyYXlFbnRyeUJhc2UqIEdldChGU1Aga2V5KSB7CiAgICAgICAgICAgICAgICBpZigga2V5LlVu aWZ5KCBmaWx0ZXJfdDo6R2VuRlNQKHZhbCkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBBcnJheUVudHJ5QmFzZTo6Z29vZF9maW5pc2g7CiAgICAgICAgICAgICAgICBlbHNlIHJl dHVybiBBcnJheUVudHJ5QmFzZTo6ZXJyb3I7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgQXJy YXlFbnRyeUJhc2UqIEVxdWl2KEFycmF5UmVzdWx0RW50cnk8S0VZLCBGSUxURVI+ICpyKSB7CiAg ICAgICAgICAgICAgICBpZiggZmlsdGVyX3Q6OkVxdWl2KCAoKEFycmF5UmVzdWx0RW50cnk8S0VZ LCBGSUxURVI+ICopciktPnZhbCwgdmFsICkgKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAg ICAgZWxzZSByZXR1cm4gQXJyYXlFbnRyeUJhc2U6OmVycm9yOwogICAgICAgIH0KICAgICAgICB2 aXJ0dWFsIEFycmF5RW50cnlCYXNlICogUmVtb3ZlKEZTUCAsIEFycmF5TWFrZXIgKmFtKSB7CiAg ICAgICAgICAgICAgICBmaWx0ZXJfdDo6RGVzdHJveUtleSh2YWwsIGFtKTsKICAgICAgICAgICAg ICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgdm9pZCBTZXJpYWxp emVUb1N0cmVhbShvc2VyaWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIGZpbHRlcl90OjpT ZXJpYWxpemVUb1N0cmVhbSh2YWwsIG9zKTsKICAgICAgICB9CiAgICAgICAgdmlydHVhbCBib29s IFJlYWRGcm9tU3RyZWFtKGlzZXJpYWxpemVyICZpcykgewogICAgICAgICAgICAgICAgcmV0dXJu IGZpbHRlcl90OjpSZWFkRnJvbVN0cmVhbSh2YWwsIGlzKTsKICAgICAgICB9CiAgICAgICAgdmly dHVhbCBib29sIEtleUxpc3QoRlNQIHJldCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1Ag ZiA9IGZpbHRlcl90OjpHZW5GU1AodmFsKTsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJlc3Vs dCEgIiA8PCBlbmRsIDw8IGYuRGlzcGxheUFWTSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAgICBp ZiggISAoIHJldC5Db2VyY2UoY29ucykgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dC5Gb2xsb3coaGQpLlVuaWZ5KGYpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQu Rm9sbG93KHRsKS5Db2VyY2UobmlsKSApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfTsKIyA2 NDIgImFycmF5LmgiCnRlbXBsYXRlIDxjbGFzcyBLRVksIGNsYXNzIEhBU0gsIGNsYXNzIEZJTFRF Uj4KY2xhc3MgQXJyYXlIYXNoRW50cnk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgS0VZLCBjbGFzcyBFTlRS WSwgY2xhc3MgQUxMT0MsIGNsYXNzIEZJTFRFUj4KY2xhc3MgQXJyYXlIYXNoRW50cnk8S0VZLCBQ c2V1ZG9IYXNoPEVOVFJZLCBBTExPQz4sIEZJTFRFUj46IHB1YmxpYyBBcnJheUVudHJ5PEtFWT4K ewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheUVudHJ5PEtFWT46Omhhc2hr ZXlfdCBoYXNoa2V5X3Q7CiAgICAgICAgdHlwZWRlZiBQc2V1ZG9IYXNoPEVOVFJZLCBBTExPQz4g aGFzaF90OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRklMVEVSOjpoYXNoa2V5X3QgdmFsdWVf dDsKICAgICAgICB0eXBlZGVmIEZJTFRFUiBmaWx0ZXJfdDsKICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGhhc2hfdDo6b2JqX3QgZW50cnlfdDsKCnByaXZhdGU6CiAgICAgICAgaGFzaF90IGhhc2g7 CgpwdWJsaWM6CiAgICAgICAgQXJyYXlIYXNoRW50cnkoaGFzaGtleV90IF9rZXksIEFycmF5TWFr ZXIqIF9hbSkgOiBBcnJheUVudHJ5PEtFWT4oX2tleSksIGhhc2goX2FtLT5TaXplKCksIF9hbS0+ QmFzZSgpLCBsaWxmZXNfYWxsb2NhdG9yPGVudHJ5X3QgKj4oX2FtLT5HZXRBbGxvYygpKSkgeyB9 CgogICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIFNldChGU1AgZWxlbWVudF9rZXksIEFycmF5 TWFrZXIgKmFtKSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5L ZXkoZWxlbWVudF9rZXksIGFtKTsKICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4q IHZhbHVlID0gaGFzaC5GaW5kKGtleSk7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gX19u dWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKEFycmF5RW50cnk8dmFsdWVf dD4gKikoYW0tPk1ha2VFbnRyeShrZXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICBoYXNoLkFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0 cm95S2V5KGtleSwgYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0K ICAgICAgICBBcnJheUVudHJ5PHZhbHVlX3Q+KiBHZXQoRlNQIGVsZW1lbnRfa2V5KSB7CiAgICAg ICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwog ICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5 KTsKICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAg ICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEtFWSwgY2xh c3MgSEFTSCwgY2xhc3MgRklMVEVSPgpjbGFzcyBBcnJheUhhc2hFbnRyeSA6IHB1YmxpYyBBcnJh eUVudHJ5PEtFWT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheUVudHJ5 PEtFWT46Omhhc2hrZXlfdCBoYXNoa2V5X3Q7CiAgICAgICAgdHlwZWRlZiBIQVNIIGhhc2hfdDsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEZJTFRFUjo6aGFzaGtleV90IHZhbHVlX3Q7CiAgICAg ICAgdHlwZWRlZiBGSUxURVIgZmlsdGVyX3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNo X3Q6Om9ial90IGVudHJ5X3Q7Cgpwcml2YXRlOgogICAgICAgIGhhc2hfdCBoYXNoOwoKcHVibGlj OgogICAgICAgIEFycmF5SGFzaEVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyKiBfYW0p IDogQXJyYXlFbnRyeTxLRVk+KF9rZXkpLCBoYXNoKF9hbS0+U2l6ZSgpLCBsaWxmZXNfYWxsb2Nh dG9yPGVudHJ5X3QgKj4oX2FtLT5HZXRBbGxvYygpKSkgeyB9CgogICAgICAgIEFycmF5RW50cnk8 dmFsdWVfdD4qIFNldChGU1AgZWxlbWVudF9rZXksIEFycmF5TWFrZXIgKmFtKSB7CiAgICAgICAg ICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXksIGFtKTsK ICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHZhbHVlID0gaGFzaC5GaW5kKGtl eSk7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gX19udWxsKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlID0gKEFycmF5RW50cnk8dmFsdWVfdD4gKikoYW0tPk1ha2VFbnRyeShr ZXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBo YXNoLkFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0cm95S2V5KGtleSwgYW0pOwogICAg ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgICBBcnJheUVudHJ5PHZh bHVlX3Q+KiBHZXQoRlNQIGVsZW1lbnRfa2V5KSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtl eSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwogICAgICAgICAgICAgICAgQXJyYXlF bnRyeTx2YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5KTsKICAgICAgICAgICAgICAgIGZp bHRlcl90OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAg ICAgICAgfQoKICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICogUmVtb3ZlKEZTUCBlbGVt ZW50X2tleSwgQXJyYXlNYWtlciAqKSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZp bHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwogICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2 YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5KTsKICAgICAgICAgICAgICAgIGZpbHRlcl90 OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAgICAgICBpZiggdmFsdWUgPT0gX19udWxsICkK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdvb2RfZmluaXNoOwogICAgICAgICAgICAg ICAgaWYoIHZhbHVlID09IEFycmF5RW50cnlCYXNlOjpyZW1vdmVfbWUgKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICBoYXNoLkRlbGV0ZSh2YWx1ZSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBnb29kX2ZpbmlzaDsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2aXJ0 dWFsIHZvaWQgU2VyaWFsaXplVG9TdHJlYW0ob3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAg ICAgICBmb3IoIGludCBpPTA7IGk8aGFzaC5HZXRUYWJsZVNpemUoKTsgaSsrICkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2YWx1ZV90PiogcCA9 IGhhc2guUGljayhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHAgIT0gX19udWxsICkK ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZpbHRlcl90OjpTZXJpYWxpemVUb1N0cmVhbShwLT5HZXRLZXkoKSwgb3MpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPlNlcmlhbGl6ZVRvU3RyZWFtKG9zKTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmlsdGVy X3Q6OlRlcm1pbmF0ZVN0cmVhbShvcyk7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgYm9vbCBS ZWFkRnJvbVN0cmVhbShpc2VyaWFsaXplciAmaXMsIEFycmF5TWFrZXIgKmFtKQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHZhbHVlX3Qga2V5OwogICAgICAgICAgICAgICAgd2hpbGUoIGZpbHRl cl90OjpSZWFkRnJvbVN0cmVhbShrZXksIGlzKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHZhbHVlID0gaGFzaC5GaW5kKGtl eSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBfX251bGwpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChBcnJheUVudHJ5PHZhbHVlX3Q+ICop KGFtLT5NYWtlRW50cnkoa2V5KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2guQWRkKHZhbHVlKTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+UmVhZEZyb21T dHJlYW0oIGlzLCBhbS0+TmV4dCgpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmlydHVhbCBib29sIEtleUxpc3QoRlNQ IHJldCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1AgZ2VuKHJldCk7CgogICAgICAgICAg ICAgICAgZm9yKCBpbnQgaT0wOyBpPGhhc2guR2V0VGFibGVTaXplKCk7IGkrKyApCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHAg PSBoYXNoLlBpY2soaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBwICE9IF9fbnVsbCAp CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGU1AgZiA9IGZpbHRlcl90OjpHZW5GU1AocC0+R2V0S2V5KCkpOwoKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmKCAhICggZ2VuLkNvZXJjZShjb25zKSAmJgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5Gb2xsb3coaGQpLlVuaWZ5KGYp ICkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2VuID0gZ2VuLkZvbGxvdyh0bCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiggISBnZW4uQ29l cmNlKG5pbCkgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVl OwogICAgICAgIH0KfTsKIyA4MTIgImFycmF5LmgiCmNsYXNzIEFycmF5IHsKICAgICAgICBBcnJh eU1ha2VyKiBtYWtlcjsKICAgICAgICBBcnJheUVudHJ5QmFzZSogcm9vdDsKICAgICAgICBpbnQg a2V5cyx2YWx1ZXM7CiAgICAgICAgaW50IGFyaXR5OwogICAgICAgIGludCBpbnZhbGlkX2ZsYWc7 CiAgICAgICAgdHNlcmlhbCBzZXJpYWxfbnVtYmVyOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8 Y2VsbD4gKmFsbG9jcDsKCnB1YmxpYzoKICAgICAgICBBcnJheShGU1AgcHJlZCk7CiAgICAgICAg fkFycmF5KCkgewogICAgICAgICAgICAgICAgZGVsZXRlIG1ha2VyOwogICAgICAgICAgICAgICAg YWxsb2NwLT5kZXN0cm95X2FsbG9jYXRvcigpOwogICAgICAgICAgICAgICAgZGVsZXRlIGFsbG9j cDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIEFycmF5JiBTZWFyY2goY2VsbCBwcmVkKTsKICAg ICAgICBpbnQgSW52YWxpZCh2b2lkKSB7IHJldHVybiBpbnZhbGlkX2ZsYWcgPT0gMTsgfQogICAg ICAgIHVsb25nIEdldEtleSh2b2lkKSB7IHJldHVybiBzZXJpYWxfbnVtYmVyOyB9CgogICAgICAg IGJvb2wgU2V0KGNlbGwgcHJlZCk7CiAgICAgICAgYm9vbCBHZXQoY2VsbCBwcmVkKTsKICAgICAg ICBib29sIFJlbW92ZShjZWxsIHByZWQpOwogICAgICAgIHZvaWQgQ2xlYXJBbGwoKTsKICAgICAg ICB2b2lkIERlc3Ryb3koKTsKICAgICAgICBib29sIEVxdWl2KGNlbGwgZWxlbTEsIGNlbGwgZWxl bTIpOwoKICAgICAgICBib29sIFNlcmlhbGl6ZShjZWxsIHByZWQsIHN0cmluZyBmbmFtZSk7CiAg ICAgICAgYm9vbCBEZXNlcmlhbGl6ZShjZWxsIHAxLCBzdHJpbmcgZm5hbWUpOwoKICAgICAgICBi b29sIEtleUxpc3QoY2VsbCBwcmVkLCBGU1AgcmV0KTsKfTsKCnRlbXBsYXRlIGNsYXNzIEludGVn ZXJIYXNoPGNsYXNzIEFycmF5PjsKIyAyOCAiYXJyYXkuY3BwIiAyCgoKIyAxICIvdXNyL2luY2x1 ZGUvYysrLzMuMi9mc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVh bSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYmFzaWNf ZmlsZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2Jh c2ljX2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIF9f YmFzaWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAgICAg Ym9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxlKF9f Y19sb2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlvc19i YXNlOjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAogICAg ICAgICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAg ICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50 IF9fcHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3BlbihfX2Nf ZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgog ICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9vbCBf X2RlbCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBzeXNf dW5nZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAgICBi b29sCiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAgICAg fl9fYmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hh ciogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihj aGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2Zm KHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAg aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp OwoKICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAg ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz ZTo6b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3IvaW5j bHVkZS9jKysvMy4yL2ZzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWYg OiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1Ymxp YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw ZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUg cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9m Zl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRz X3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFy X3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBfX2Jhc2lj X2ZpbGU8Y2hhcj4gX19maWxlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5 cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90 eXBlLCBjaGFyLCBfX3N0YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fY29kZWN2dF90eXBlOjpyZXN1bHQgX19yZXNfdHlwZTsKICAgICAgdHlwZWRlZiBj dHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFz ZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2sgX01fbG9jazsKCgogICAgICBfX2Zp bGVfdHlwZSBfTV9maWxlOwoKCiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7CiAgICAg IF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9iZWc7CgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVk OwoKCiAgICAgIGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOwoKCgogICAgICBjaGFyX3R5cGUqIF9N X2ZpbGVwb3M7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfZmlsZWJ1ZigpOwoKICAgICAgdmly dHVhbAogICAgICB+YmFzaWNfZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5jbG9zZSgp OwogICAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgYm9v bAogICAgICBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX01fZmlsZS5pc19vcGVuKCk7IH0KCiAg ICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6 Om9wZW5tb2RlIF9fbW9kZSk7CgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgY2xvc2UoKTsK CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQKICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVm ZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CgoK ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpOwojIDE0MCAiL3Vzci9p bmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV91bmRlcmZs b3dfY29tbW9uKGJvb2wgX19idW1wKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5k ZXJmbG93KCkgeyByZXR1cm4gX01fdW5kZXJmbG93X2NvbW1vbihmYWxzZSk7IH0KCiAgICAgIHZp cnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKSB7IHJldHVybiBfTV91bmRlcmZsb3dfY29tbW9u KHRydWUpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlw ZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CiMgMTYwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9mc3Ry ZWFtIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19j ID0gX1RyYWl0czo6ZW9mKCkpOwojIDE3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIg MwogICAgICBpbnRfdHlwZQogICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jID0g X1RyYWl0czo6ZW9mKCkpOwoKCgogICAgICB2b2lkCiAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJu YWwoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSwgc3RyZWFtc2l6ZSYsIHN0cmVhbXNpemUmKTsKCiAg ICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKICAgICAgc2V0YnVmKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYo b2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlv c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsK CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywKICAg ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z X2Jhc2U6Om91dCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkKICAgICAgewogICAg ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu ZDsKCgoKICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgewoKICAgICAgICAgICAgb2Zm X3R5cGUgX19vZmYgPSBfTV9vdXRfY3VyIC0gX01fb3V0X2VuZDsKICAgICAgICAgICAgX01fcmVh bGx5X292ZXJmbG93KCk7CiAgICAgICAgICAgIGlmIChfX29mZikKICAgICAgICAgICAgICBfTV9m aWxlLnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIpOwogICAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9NX2ZpbGUuc3luYygpOwogICAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9 IGZhbHNlOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAg ICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUK ICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAg ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwoKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAg ICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKF9fcmV0IDwgX19uICYmIF9NX2luX2N1ciA8IF9N X2luX2VuZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1 cjsKICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICArK19fczsKICAgICAg ICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgX01fcGJh Y2tfZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAg ICAgIF9fcmV0ICs9IF9fc3RyZWFtYnVmX3R5cGU6OnhzZ2V0bihfX3MsIF9fbiAtIF9fcmV0KTsK ICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog ICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7 CiAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwogICAgICAgIHJldHVybiBfX3N0cmVhbWJ1Zl90 eXBlOjp4c3B1dG4oX19zLCBfX24pOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX291dHB1 dF91bnNoaWZ0KCk7CiMgMjUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAgICAg IHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGlm IChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9N X2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAg ICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBfTV9maWxlcG9zID0gX01f YnVmOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShvZmZfdHlw ZSBfX29mZikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jh c2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7 CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1 ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB0aGlz LT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIF9NX2ZpbGVwb3MgPSBfTV9i dWYgKyBfX29mZjsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWluYXRl KHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlmIChf TV9idWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Omlu KQogICAgICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9j dXIgPT0gX01faW5fZW5kOwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQp CiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01fb3V0 X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg ICAgfQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGJhc2ljX2ZpbGVidWY8Y2hhcj46OmludF90 eXBlCiAgICBiYXNpY19maWxlYnVmPGNoYXI+OjpfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19i dW1wKTsKCgogIHRlbXBsYXRlPD4KICAgIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD46OmludF90eXBl CiAgICBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OjpfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19i dW1wKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg dHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmls ZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoK ICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7CgogICAgcHVibGlj OgoKCiAgICAgIGJhc2ljX2lmc3RyZWFtKCkKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwp LCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDMzNyAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBiYXNp Y19pZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1Zigp CiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5v cGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAg eyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAg ICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9 CgogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVm Lm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pKQogICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBjbG9zZSgp CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19v ZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPgogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Omlu dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3Nf dHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5 cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJh aXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hh cl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAg X19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfb2Zz dHJlYW0oKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAg ICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMgNDE0ICIvdXNyL2luY2x1ZGUvYysrLzMu Mi9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNvbnN0IGNo YXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9 IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9f bnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1 Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNp Y19vZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAg cmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4o Jl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4g X01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA0NTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2ZzdHJl YW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICBp b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjp0cnVu YykKICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9z X2Jhc2U6Om91dCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGNsb3NlKCkKICAgICAgewogICAgICAgIGlmICgh X01fZmlsZWJ1Zi5jbG9zZSgpKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICB9CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNf aW9zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAg dHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lv c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+IF9faW9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBfX2ZpbGVidWZfdHlwZSBf TV9maWxlYnVmOwoKICAgIHB1YmxpYzoKCgogICAgICBiYXNpY19mc3RyZWFtKCkKICAgICAgOiBf X2lvc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhpcy0+aW5pdCgm X01fZmlsZWJ1Zik7IH0KIyA1MDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0iIDMKICAg ICAgZXhwbGljaXQKICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv c19iYXNlOjpvdXQpCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYo KQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+ b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19mc3RyZWFtKCkKICAgICAg eyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCgoK CgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4o KTsgfQojIDU0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICB2b2lkCiAg ICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7CiAgICAgICAgaWYg KCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUpKQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsK ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKfQoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9mc3RyZWFtLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp dHMvZnN0cmVhbS50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAg ICBpZiAoIV9NX2J1ZiAmJiBfTV9idWZfc2l6ZV9vcHQpCiAgICAgICAgewogICAgICAgICAgX01f YnVmX3NpemUgPSBfTV9idWZfc2l6ZV9vcHQ7CgoKICAgICAgICAgIF9NX2J1ZiA9IG5ldyBjaGFy X3R5cGVbX01fYnVmX3NpemVdOwogICAgICAgICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiAg ICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9N X2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0 ZWQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsKICAgICAgICAgIF9NX2J1 ZiA9IF9fbnVsbDsKICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBmYWxzZTsKICAgICAgICAg IHRoaXMtPnNldGcoX19udWxsLCBfX251bGwsIF9fbnVsbCk7CiAgICAgICAgICB0aGlzLT5zZXRw KF9fbnVsbCwgX19udWxsKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBiYXNpY19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9N X2xvY2spLAogICAgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9f c3RhdGVfdHlwZSgpKSwKICAgIF9NX2J1Zl9hbGxvY2F0ZWQoZmFsc2UpLCBfTV9sYXN0X292ZXJm bG93ZWQoZmFsc2UpCiAgICB7IF9NX2J1Zl91bmlmaWVkID0gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Bl bm1vZGUgX19tb2RlKQogICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7 CiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX2ZpbGUu b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAg ICAgICAgICAgX01fbW9kZSA9IF9fbW9kZTsKICAgICAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1p bmF0ZSgpOwoKICAgICAgICAgICAgICBpZiAoKF9fbW9kZSAmIGlvc19iYXNlOjphdGUpCiAgICAg ICAgICAgICAgICAgICYmIHRoaXMtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmVuZCwgX19tb2RlKSA8 IDApCiAgICAgICAgICAgICAgICB0aGlzLT5jbG9zZSgpOwogICAgICAgICAgICAgIF9fcmV0ID0g dGhpczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt ZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFz aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGNsb3NlKCkKICAgIHsKICAgICAgX19m aWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQog ICAgICAgIHsKICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcg PCBfTV9vdXRfZW5kOwogICAgICAgICAgaWYgKF9fdGVzdHB1dAogICAgICAgICAgICAgICYmIHRy YWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9yZWFsbHlfb3ZlcmZsb3coX19lb2YpLCBfX2VvZikp CiAgICAgICAgICAgIHJldHVybiBfX3JldDsKCgogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl OjpvcGVubW9kZSgwKTsKICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CiAg ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i aXRzL2ZzdHJlYW0udGNjIiAzCiAgICAgICAgICBpZiAoX01fZmlsZS5jbG9zZSgpKQogICAgICAg ICAgICBfX3JldCA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g ZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNob3dtYW55YygpCiAgICB7CiAgICAgIHN0cmVhbXNpemUg X19yZXQgPSAtMTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47 CgogICAgICBpZiAoX190ZXN0aW4gJiYgdGhpcy0+aXNfb3BlbigpKQogICAgICAgIF9fcmV0ID0g X01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsK ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGJh Y2tmYWlsKGludF90eXBlIF9faSkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6Omlu OwoKICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX190ZXN0cGIg PSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdHJhaXRz X3R5cGU6OnRvX2NoYXJfdHlwZShfX2kpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICAgICAgICAgaWYgKF9fdGVzdHBi KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYg aW9zX2Jhc2U6Om91dDsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVxID0gdHJhaXRzX3R5cGU6 OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CgoKCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rl b2YgJiYgX190ZXN0ZXEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01f aW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAg ICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAgICAgaWYg KF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAgICAgICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVz dG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAgICAgICAgICAgICAg IF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAqX01faW5fY3VyID0gX19jOwog ICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgICAgICB0aGlzLT51bmRlcmZsb3co KTsKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX19jLCAqX01faW5fY3VyKSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19jcmVhdGUoKTsK ICAgICAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3Rf ZW9mKF9faSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dl ZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0 ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg JiYgX01fb3V0X2N1ciA8IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVzdG91 dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAg ICB7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg Kl9NX291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg ICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBf X3JldCA9IHRoaXMtPl9NX3JlYWxseV9vdmVyZmxvdyhfX2MpOwogICAgICAgIH0KCiAgICAgIF9N X2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJh c2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFs KF9DaGFyVCogX19pYnVmLCBzdHJlYW1zaXplIF9faWxlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RyZWFtc2l6ZSYgX19lbGVuLCBzdHJlYW1zaXplJiBfX3BsZW4pCiAgICB7CiAgICAg IGNvbnN0IGxvY2FsZSBfX2xvYyA9IHRoaXMtPmdldGxvYygpOwogICAgICBjb25zdCBfX2NvZGVj dnRfdHlwZSYgX19jdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KF9fbG9jKTsKCiAgICAg IGlmIChfX2N2dC5hbHdheXNfbm9jb252KCkgJiYgX19pbGVuKQogICAgICAgIHsKICAgICAgICAg IF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihyZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYp LCBfX2lsZW4pOwogICAgICAgICAgX19wbGVuICs9IF9faWxlbjsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CgogICAgICAgICAgaW50IF9fZXh0X211bHRpcGxpZXIgPSBfX2N2dC5lbmNv ZGluZygpOwogICAgICAgICAgaWYgKF9fZXh0X211bHRpcGxpZXIgPT0gLTEgfHwgX19leHRfbXVs dGlwbGllciA9PSAwKQogICAgICAgICAgICBfX2V4dF9tdWx0aXBsaWVyID0gc2l6ZW9mKGNoYXJf dHlwZSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fYmxlbiA9IF9faWxlbiAqIF9fZXh0X211bHRp cGxpZXI7CiAgICAgICAgICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0 aW5fYWxsb2NhKF9fYmxlbikpOwogICAgICAgICAgY2hhciogX19iZW5kOwogICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX2llbmQ7CiAgICAgICAgICBfX3Jlc190eXBlIF9fciA9IF9fY3Z0Lm91 dChfTV9zdGF0ZV9jdXIsIF9faWJ1ZiwgX19pYnVmICsgX19pbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19pZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVu ZCk7CgogICAgICAgICAgaWYgKF9fciAhPSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQogICAgICAgICAg ICBfX2JsZW4gPSBfX2JlbmQgLSBfX2J1ZjsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f YmxlbiA9IDA7CgogICAgICAgICAgaWYgKF9fYmxlbikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihfX2J1ZiwgX19ibGVuKTsKICAgICAgICAgICAg ICBfX3BsZW4gKz0gX19ibGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX3IgPT0g Y29kZWN2dF9iYXNlOjpwYXJ0aWFsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2lyZXN1bWUgPSBfX2llbmQ7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3JsZW4gPSBfTV9vdXRfZW5kIC0gX19pZW5kOwogICAgICAgICAgICAgIF9fciA9IF9fY3Z0Lm91 dChfTV9zdGF0ZV9jdXIsIF9faXJlc3VtZSwgX19pcmVzdW1lICsgX19ybGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2llbmQsIF9fYnVmLCBfX2J1ZiArIF9fYmxlbiwgX19iZW5k KTsKICAgICAgICAgICAgICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCiAgICAgICAg ICAgICAgICBfX3JsZW4gPSBfX2JlbmQgLSBfX2J1ZjsKICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBfX3JsZW4gPSAwOwogICAgICAgICAgICAgIGlmIChfX3JsZW4pCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihfX2J1 ZiwgX19ybGVuKTsKICAgICAgICAgICAgICAgICAgX19wbGVuICs9IF9fcmxlbjsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9 IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CiAgICAgIGJvb2wgX190ZXN0 dW5idWZmZXJlZCA9IF9NX2ZpbGUuaXNfb3BlbigpICYmICFfTV9idWZfc2l6ZV9vcHQ7CgogICAg ICBpZiAoX190ZXN0cHV0IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgewoKICAgICAgICAg IHN0cmVhbXNpemUgX19lbGVuID0gMDsKICAgICAgICAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsK CgoKCiAgICAgICAgICBpZiAoX01fZmlsZXBvcyAmJiBfTV9maWxlcG9zICE9IF9NX291dF9iZWcp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9iZWcg LSBfTV9maWxlcG9zOwogICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jh c2U6OmN1cik7CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmICghX190ZXN0dW5idWZmZXJl ZCkKICAgICAgICAgICAgX01fY29udmVydF90b19leHRlcm5hbChfTV9vdXRfYmVnLCBfTV9vdXRf ZW5kIC0gX01fb3V0X2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vs ZW4sIF9fcGxlbik7CgoKCiAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy X3R5cGUgX19wZW5kaW5nID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg ICAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoJl9fcGVuZGluZywgMSwgX19lbGVuLCBfX3Bs ZW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZWxlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoIV9NX2ZpbGUuc3luYygpKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAg ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90 eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1ZihjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+aXNfb3Bl bigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7 CiAgICAgIGVsc2UgaWYgKF9fcyAmJiBfX24pCiAgICAgICAgewoKCgoKCiAgICAgICAgICBfTV9k ZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKCiAgICAgICAgICBfTV9idWYgPSBfX3M7CiAgICAg ICAgICBfTV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsKICAgICAgICAgIF9NX3Nl dF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBm YWxzZTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf VHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jh c2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlw ZShvZmZfdHlwZSgtMSkpOwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9N X21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpv dXQgJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwoKCiAgICAgIGludCBfX3dpZHRoID0gdXNlX2Zh Y2V0PF9fY29kZWN2dF90eXBlPihfTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAo X193aWR0aCA8IDApCiAgICAgICAgX193aWR0aCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZmFpbCA9 IF9fb2ZmICE9IDAgJiYgX193aWR0aCA8PSAwOwoKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSAm JiAhX190ZXN0ZmFpbCAmJiAoX190ZXN0aW4gfHwgX190ZXN0b3V0KSkKICAgICAgICB7CgogICAg ICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwoKICAgICAgICAgIGlmIChfX3dheSAhPSBpb3NfYmFz ZTo6Y3VyIHx8IF9fb2ZmICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlw ZSBfX2NvbXB1dGVkX29mZiA9IF9fd2lkdGggKiBfX29mZjsKCiAgICAgICAgICAgICAgYm9vbCBf X3Rlc3RnZXQgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fZW5kOwogICAgICAgICAg ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu ZDsKCgogICAgICAgICAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxvd2VkKQog ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgdGhpcy0+c3luYygpOwoKICAgICAg ICAgICAgICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAg ICAgICAgICAgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9maWxlcG9zOwoK ICAgICAgICAgICAgICBfX3JldCA9IF9NX2ZpbGUuc2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193 YXksIF9fbW9kZSk7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAg ICAgICAgfQoKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3Jl dCA9IF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwgX19tb2RlKTsKICAgICAg ICAgICAgICBfX3JldCArPSBtYXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2ZpbGVwb3M7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNl OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh aXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewoK CiAgICAgIHJldHVybiB0aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jhc2U6OmJl ZywgX19tb2RlKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGJvb2wg X190ZXN0YmVnID0gZ3B0cigpID09IGViYWNrKCkgJiYgcHB0cigpID09IHBiYXNlKCk7CgogICAg ICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgewogICAg ICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0 ID0gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7 CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgYmFzaWNfb2ZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGJhc2ljX2ZzdHJlYW08Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmls ZWJ1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW08d2No YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+OwoKfQojIDU2NSAi L3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMiAzCiMgMzEgImFycmF5LmNwcCIgMgojIDQ1 ICJhcnJheS5jcHAiCmxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gRlNGaWw6OmRlZmFsbG9jOwoKZXh0 ZXJuIGludCBkZWJ1Z19sZXZlbDsKCgoKCnN0YXRpYyB0c2VyaWFsIGFycmF5X2Jhc2Vfc2VyaWFs OwpzdGF0aWMgdHNlcmlhbCBhcnJheV9zaXplX3NlcmlhbDsKc3RhdGljIHRzZXJpYWwgYXJndW1l bnRfc2VyaWFsWzIwXTsKCmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfZnNfdHlw ZV9mKCAia2V5X2ZzIiAsICJrZXlfZnMiICwgIltib3RdICsgW0FSUkFZX1NJWkVcXF0uIiAsICJh cnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90 eXBlX2tleV9mc19zZXJpYWw7CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfaW50 ZWdlcl90eXBlX2YoICJrZXlfaW50ZWdlciIgLCAia2V5X2ludGVnZXIiICwgIlsna2V5X2ZzJ10g KyBbQVJSQVlfQkFTRVxcXS4iICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1RZUEVfRik7IGV4dGVy biAiQyIgdHNlcmlhbCBidWlsdGluX3R5cGVfa2V5X2ludGVnZXJfc2VyaWFsOwpidWlsdGluX3R5 cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X2ludGhhc2hfdHlwZV9mKCAia2V5X2ludGhhc2giICwg ImtleV9pbnRoYXNoIiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5fVFlQ RV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfaW50aGFzaF9zZXJpYWw7 CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfc3RyaW5nX3R5cGVfZiggImtleV9z dHJpbmciICwgImtleV9zdHJpbmciICwgIlsna2V5X2ZzJ10uIiAsICJhcnJheS5jcHAiICwgQlVJ TFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90eXBlX2tleV9zdHJpbmdf c2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X2Zsb2F0X3R5cGVfZigg ImtleV9mbG9hdCIgLCAia2V5X2Zsb2F0IiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAs IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfZmxv YXRfc2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X3R5cGVfdHlwZV9m KCAia2V5X3R5cGUiICwgImtleV90eXBlIiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAs IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfdHlw ZV9zZXJpYWw7CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19hcnJheV92YWx1ZV90eXBl XzEoICJhcnJheV92YWx1ZSIgLCAiYXJyYXlfdmFsdWUiICwgIiIgLCAiYXJyYXkuY3BwIiAsIEJV SUxUSU5fVFlQRSk7IGV4dGVybiAiQyIgdHNlcmlhbCBidWlsdGluX3R5cGVfYXJyYXlfdmFsdWVf c2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfdmFsdWVfaW50ZWdl cl90eXBlX2YoICJhcnJheV92YWx1ZV9pbnRlZ2VyIiAsICJhcnJheV92YWx1ZV9pbnRlZ2VyIiAs ICJbJ2FycmF5X3ZhbHVlJ10uIiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRl cm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2ludGVnZXJfc2VyaWFsOwpi dWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfdmFsdWVfZmxvYXRfdHlwZV9mKCAi YXJyYXlfdmFsdWVfZmxvYXQiICwgImFycmF5X3ZhbHVlX2Zsb2F0IiAsICJbJ2FycmF5X3ZhbHVl J10uIiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwg YnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2Zsb2F0X3NlcmlhbDsKYnVpbHRpbl90eXBlX3RhYmxl IGJ1aWx0aW5pbmZvX2FycmF5X3ZhbHVlX3R5cGVfdHlwZV9mKCAiYXJyYXlfdmFsdWVfdHlwZSIg LCAiYXJyYXlfdmFsdWVfdHlwZSIgLCAiWydhcnJheV92YWx1ZSddLiIgLCAiYXJyYXkuY3BwIiAs IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9hcnJheV92 YWx1ZV90eXBlX3NlcmlhbDsKYnVpbHRpbl90eXBlX3RhYmxlIGJ1aWx0aW5pbmZvX2FycmF5X3Zh bHVlX3N0cmluZ190eXBlX2YoICJhcnJheV92YWx1ZV9zdHJpbmciICwgImFycmF5X3ZhbHVlX3N0 cmluZyIgLCAiWydhcnJheV92YWx1ZSddLiIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5fVFlQRV9G KTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9hcnJheV92YWx1ZV9zdHJpbmdfc2Vy aWFsOwoKYnVpbHRpbl90eXBlX3RhYmxlIGJ1aWx0aW5pbmZvX3Vuc3BlY2lmaWVkX2tleV90eXBl XzEoICJ1bnNwZWNpZmllZF9rZXkiICwgInVuc3BlY2lmaWVkX2tleSIgLCAiIiAsICJhcnJheS5j cHAiICwgQlVJTFRJTl9UWVBFKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV91bnNw ZWNpZmllZF9rZXlfc2VyaWFsOwoKdHNlcmlhbCBwcmVkX3R5cGU7CgoKdHNlcmlhbCB0c2V0c2V0 KGNvbnN0IGNoYXIqIHRuYW1lKSB7CiAgY291dCA8PCAidHNldCgpIGluIGFycmF5LmNwcCB0bmFt ZSA9ICAiIDw8IHRuYW1lIDw8IGVuZGw7CiAgICAgICAgY29uc3QgdHlwZSogdCA9IG1vZHVsZTo6 QnVpbHRpbk1vZHVsZSgpLT5TZWFyY2godG5hbWUpOwogICAgICAgIGlmICh0ID09IF9fbnVsbCkg dCA9IG1vZHVsZTo6Q29yZU1vZHVsZSgpLT5TZWFyY2godG5hbWUpOwogICAgICAgIGlmICh0ID09 IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICIgRVJST1IhIE5PVCBG T1VORCAiIDw8IHRuYW1lIDw8IGVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm4gVFNfSU5WQUxJ RDsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gdC0+R2V0U2VyaWFsTm8oKTsKfQoKCnN0 YXRpYyB2b2lkIGluaXQodm9pZCkKewoKICAgICAgICBwcmVkX3R5cGUgPSB0c2V0c2V0KCJwcmVk Iik7CgogICAgICAgIGFycmF5X2Jhc2Vfc2VyaWFsID0gdHNldHNldCgiQVJSQVlfQkFTRVxcIik7 CiAgICAgICAgYXJyYXlfc2l6ZV9zZXJpYWwgPSB0c2V0c2V0KCJBUlJBWV9TSVpFXFwiKTsKCgoK ICAgICAgICBmb3IgKGludCBpPTA7aTwxNTtpKyspIHsKICAgICAgICAgICAgICAgIG9zdHJpbmdz dHJlYW0gb3NzOwogICAgICAgICAgICAgICAgb3NzIDw8ICJhcmciIDw8IGkrMSA8PCAiXFwiOwog ICAgICAgICAgICAgICAgYXJndW1lbnRfc2VyaWFsW2ldID0gdHNldHNldChvc3Muc3RyKCkuY19z dHIoKSk7CiAgICAgICAgfQp9CgpzdGF0aWMgSW5pdEZ1bmN0aW9uIElGKGluaXQsMjApOwojIDEx MiAiYXJyYXkuY3BwIgp2b2lkIEFyZ0J1Zjo6U2V0VmFsdWUodHNlcmlhbCB0cyxpbnQgbnVtKQp7 CgogICAgICAgIGlmICh0cyA9PSBidWlsdGluX3R5cGVfYXJyYXlfdmFsdWVfc2VyaWFsKSBTZXRG bGFnKFZGUyxudW0pOwogICAgICAgIGVsc2UgaWYgKHRzID09IGJ1aWx0aW5fdHlwZV9hcnJheV92 YWx1ZV9mbG9hdF9zZXJpYWwpIFNldEZsYWcoVkZTLG51bSk7CiAgICAgICAgZWxzZSBpZiAodHMg PT0gYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX3N0cmluZ19zZXJpYWwpIFNldEZsYWcoVkZTLG51 bSk7CiAgICAgICAgZWxzZSBpZiAodHMgPT0gYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2ludGVn ZXJfc2VyaWFsKSBTZXRGbGFnKFZJTlQsbnVtKTsKICAgICAgICBlbHNlIGlmICh0cyA9PSBidWls dGluX3R5cGVfYXJyYXlfdmFsdWVfdHlwZV9zZXJpYWwpIFNldEZsYWcoVlNUUixudW0pOwogICAg ICAgIGVsc2UgU2V0RmxhZyhJTlZBTElEX1RZUEUsbnVtKTsKfTsKCmlubGluZSBpbnQgTWFrZUJv dW5kVmFsdWUoaW50IHNpemUpCnsKCgoKCiAgICAgICAgaW50IHMgPSAxOwogICAgICAgIHdoaWxl KDEpIHsKICAgICAgICAgICAgICAgIGlmIChzID49IHNpemUpIHJldHVybiBzOwogICAgICAgICAg ICAgICAgcyAqPSAyOwogICAgICAgIH0KfQoKdm9pZCBBcmdCdWY6OlNldEtleShGU1AmIGFyZyxp bnQgbnVtKQp7CgogICAgICAgIGlmIChjMlNUUlNvclZBUlMoYXJnLlJlYWRDZWxsKCkpID09IGJ1 aWx0aW5fdHlwZV9rZXlfdHlwZV9zZXJpYWwgfHwKICAgICAgICAgICBjMlNUUlNvclZBUlMoYXJn LlJlYWRDZWxsKCkpID09IGJ1aWx0aW5fdHlwZV9rZXlfaW50aGFzaF9zZXJpYWwgKSB7CiAgICAg ICAgICAgICAgICBpbnQgc2l6ZSA9IDB4MjA7CgogICAgICAgICAgICAgICAgaWYgKGFyZy5Jc05v ZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBGU1AgZiA9IGFyZy5Gb2xsb3dJZkV4aXN0 KGFycmF5X3NpemVfc2VyaWFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuSXNWYWxp ZCgpICYmIGYuSXNJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZSA9IGMySU5UKGYuUmVhZENlbGwoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICBTZXRLZXkoTWFrZUJvdW5kVmFsdWUoc2l6ZSksLTEpO1NldEZsYWcoS1NUUixudW0pOwogICAg ICAgIH0gZWxzZSBpZiAoYzJTVFJTb3JWQVJTKGFyZy5SZWFkQ2VsbCgpKSA9PSBidWlsdGluX3R5 cGVfa2V5X2ZzX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgYzJTVFJTb3JWQVJTKGFyZy5S ZWFkQ2VsbCgpKSA9PSBidWlsdGluX3R5cGVfa2V5X3N0cmluZ19zZXJpYWwgfHwKICAgICAgICAg ICAgICAgICAgIGMyU1RSU29yVkFSUyhhcmcuUmVhZENlbGwoKSkgPT0gYnVpbHRpbl90eXBlX2tl eV9mbG9hdF9zZXJpYWwpIHsKICAgICAgICAgICAgICAgIGludCBzaXplID0gMHgyMDsKCiAgICAg ICAgICAgICAgICBpZiAoYXJnLklzTm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZT UCBmID0gYXJnLkZvbGxvd0lmRXhpc3QoYXJyYXlfc2l6ZV9zZXJpYWwpOwogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoZi5Jc1ZhbGlkKCkgJiYgZi5Jc0ludGVnZXIoKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplID0gYzJJTlQoZi5SZWFkQ2VsbCgpKTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIFNldEtleShNYWtlQm91bmRWYWx1ZShzaXplKSwtMSk7 U2V0RmxhZyhLRlMsbnVtKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW50IHNp emUgPSAtMTsKICAgICAgICAgICAgICAgIGludCBiYXNlID0gLTE7CgoKICAgICAgICAgICAgICAg IGlmIChhcmcuSXNOb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRlNQIGYxID0gYXJn LkZvbGxvd0lmRXhpc3QoYXJyYXlfc2l6ZV9zZXJpYWwpOwogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZjEuSXNWYWxpZCgpICYmIGYxLklzSW50ZWdlcigpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemUgPSBjMklOVChmMS5SZWFkQ2VsbCgpKTsKICAgICAgICAgICAgICAg ICAgICAgICAgRlNQIGYyID0gYXJnLkZvbGxvd0lmRXhpc3QoYXJyYXlfYmFzZV9zZXJpYWwpOwog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZjIuSXNWYWxpZCgpICYmIGYyLklzSW50ZWdlcigp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjMklOVChmMi5SZWFkQ2Vs bCgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSAtMSAm JiBiYXNlICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNldEtleShzaXplLGJhc2Up O1NldEZsYWcoS0lOVCxudW0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvdXQgPDwgImtleV9pbnRlZ2VyIG11c3QgYmUgc3BlY2lmaWVzIEFSUkFZ X1NJWkUgYW5kIEFSUkFZX0JBU0VcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIFNldEZsYWco SU5WQUxJRF9GUyxudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1 cm47Cn0KIyAyMzIgImFycmF5LmNwcCIKc3RhdGljIEFycmF5RW50cnlCYXNlIGFycmF5X2VudHJ5 X2Jhc2VfZXJyb3I7CkFycmF5RW50cnlCYXNlICpBcnJheUVudHJ5QmFzZTo6ZXJyb3IgPSAmIGFy cmF5X2VudHJ5X2Jhc2VfZXJyb3I7CnN0YXRpYyBBcnJheUVudHJ5QmFzZSBhcnJheV9lbnRyeV9i YXNlX2dvb2RfZmluaXNoOwpBcnJheUVudHJ5QmFzZSAqQXJyYXlFbnRyeUJhc2U6Omdvb2RfZmlu aXNoID0gJiBhcnJheV9lbnRyeV9iYXNlX2dvb2RfZmluaXNoOwpzdGF0aWMgQXJyYXlFbnRyeUJh c2UgYXJyYXlfZW50cnlfYmFzZV9yZW1vdmVfbWU7CkFycmF5RW50cnlCYXNlICpBcnJheUVudHJ5 QmFzZTo6cmVtb3ZlX21lID0gJiBhcnJheV9lbnRyeV9iYXNlX3JlbW92ZV9tZTsKCkFycmF5TWFr ZXIgKkFyZ0J1Zjo6TWFrZUFycmF5TWFrZXIoQXJnQnVmICpwcmV2LCBBcnJheU1ha2VyICpuZXh0 LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZhbGxvYykKewogICAgICAgIEFycmF5TWFrZXIgKnJl dDsKICAgICAgICBzd2l0Y2goIEZsYWcoKSApCiAgICAgICAgewogICAgICAgIGNhc2UgVklOVDoK ICAgICAgICAgICAgICAgIGlmIChwcmV2ID09IF9fbnVsbCkKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gbmV3IEFycmF5TWFrZXJUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRyeTxEdW1teUtl eSwgSW50RmlsPiA+KG5leHQsIGFsbG9jKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHByZXYtPkZsYWcoKSA9PSBLRlMg KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5 VGVtcGxhdGU8IEFycmF5UmVzdWx0RW50cnk8TGluZWFyRlNQLCBJbnRGaWw+ID4obmV4dCwgYWxs b2MpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRy eTx1bG9uZyAsIEludEZpbD4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBWU1RSOgogICAgICAgICAgICAgICAgaWYg KHByZXYgPT0gX19udWxsKQogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlN YWtlclRlbXBsYXRlPCBBcnJheVJlc3VsdEVudHJ5PER1bW15S2V5LCBDZWxsRmlsPiA+KG5leHQs IGFsbG9jKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYoIHByZXYtPkZsYWcoKSA9PSBLRlMgKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5UmVz dWx0RW50cnk8IExpbmVhckZTUCwgQ2VsbEZpbCA+ID4obmV4dCwgYWxsb2MpOwogICAgICAgICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g bmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRyeTwgdWxvbmcgLCBDZWxs RmlsID4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgY2FzZSBWRlM6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251 bGwpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8 IEFycmF5UmVzdWx0RW50cnk8RHVtbXlLZXksIEZTRmlsPiA+KG5leHQsIGFsbG9jKTsKICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYoIHByZXYtPkZsYWcoKSA9PSBLRlMgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5UmVzdWx0RW50cnk8TGluZWFy RlNQLCBGU0ZpbD4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRl bXBsYXRlPCBBcnJheVJlc3VsdEVudHJ5PHVsb25nICwgRlNGaWw+ID4obmV4dCwgYWxsb2MpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgS0lO VDoKICAgICAgICAgICAgICAgIGlmIChwcmV2ID09IF9fbnVsbCkKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJJbnRUZW1wbGF0ZTwgQXJyYXlIYXNoRW50cnk8RHVt bXlLZXksIFBzZXVkb0hhc2g8IEFycmF5RW50cnk8dWxvbmc+LCBsaWxmZXNfYWxsb2NhdG9yPCBB cnJheUVudHJ5PHVsb25nPiogPiA+LCBJbnRGaWw+ID4obmV4dCwgYWxsb2MsIHNpemUsIGJhc2Up OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBpZiggcHJldi0+RmxhZygpID09IEtGUyApCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJJbnRLZXlUZW1wbGF0ZTwgQXJyYXlIYXNoRW50 cnk8IExpbmVhckZTUCwgUHNldWRvSGFzaDwgQXJyYXlFbnRyeTx1bG9uZz4sIGxpbGZlc19hbGxv Y2F0b3I8IEFycmF5RW50cnk8dWxvbmc+KiA+ID4sIEludEZpbD4gPihuZXh0LCBhbGxvYywgc2l6 ZSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlckludEtleVRlbXBsYXRlPCBBcnJheUhh c2hFbnRyeTwgdWxvbmcgLCBQc2V1ZG9IYXNoPCBBcnJheUVudHJ5PHVsb25nPiwgbGlsZmVzX2Fs bG9jYXRvcjwgQXJyYXlFbnRyeTx1bG9uZz4qID4gPiwgSW50RmlsPiA+KG5leHQsIGFsbG9jLCBz aXplLCBiYXNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICBjYXNlIEtTVFI6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251bGwpCiAgICAg ICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8IEFycmF5SGFz aEVudHJ5PER1bW15S2V5LCBJbnRlZ2VySGFzaDwgQXJyYXlFbnRyeTx1bG9uZz4sIGxpbGZlc19h bGxvY2F0b3I8IEFycmF5RW50cnk8dWxvbmc+KiA+ID4sIENlbGxGaWw+ID4obmV4dCwgYWxsb2Ms IHNpemUpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICBpZiggcHJldi0+RmxhZygpID09IEtGUyApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlIYXNo RW50cnk8IExpbmVhckZTUCwgSW50ZWdlckhhc2g8IEFycmF5RW50cnk8dWxvbmc+LCBsaWxmZXNf YWxsb2NhdG9yPCBBcnJheUVudHJ5PHVsb25nPiogPiA+LCBDZWxsRmlsPiA+KG5leHQsIGFsbG9j LCBzaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5SGFzaEVu dHJ5PCB1bG9uZyAsIEludGVnZXJIYXNoPCBBcnJheUVudHJ5PHVsb25nPiwgbGlsZmVzX2FsbG9j YXRvcjwgQXJyYXlFbnRyeTx1bG9uZz4qID4gPiwgQ2VsbEZpbD4gPihuZXh0LCBhbGxvYywgc2l6 ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSBLRlM6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251bGwpCiAgICAgICAgICAgICAg ICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8IEFycmF5SGFzaEVudHJ5PER1 bW15S2V5LCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4sIGxpbGZlc19hbGxv Y2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihuZXh0LCBhbGxvYywg c2l6ZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGlmKCBwcmV2LT5GbGFnKCkgPT0gS0ZTICkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRlbXBsYXRlPCBBcnJheUhhc2hF bnRyeTwgTGluZWFyRlNQLCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4sIGxp bGZlc19hbGxvY2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihuZXh0 LCBhbGxvYywgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRlbXBsYXRlPCBBcnJh eUhhc2hFbnRyeTwgdWxvbmcgLCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4s IGxpbGZlc19hbGxvY2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihu ZXh0LCBhbGxvYywgc2l6ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVh azsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlVua25vd24hISIg PDwgZW5kbDsKICAgICAgICAgICAgICAgIHJldCA9IF9fbnVsbDsKCiAgICAgICAgfQogICAgICAg IHJldHVybiByZXQ7Cn0KIyAzNDUgImFycmF5LmNwcCIKc3RhdGljIEludGVnZXJIYXNoPEFycmF5 PiBhcnJheV9oYXNoOwoKQXJyYXk6OkFycmF5KEZTUCBwcmVkX2ZzKQp7CiAgICAgICAgYWxsb2Nw ID0gbmV3IGxpbGZlc19hbGxvY2F0b3I8Y2VsbD47CgoKCgoKCgogICAgICAgIHNlcmlhbF9udW1i ZXIgPSBjMlNUUlMocHJlZF9mcy5SZWFkQ2VsbCgpKTsKICAgICAgICBpbnQgTiA9IHR5cGU6OlNl cmlhbChzZXJpYWxfbnVtYmVyKS0+R2V0TkZlYXR1cmVzKCk7CiAgICAgICAgYXJpdHk9TjsKCgoK ICAgICAgICBBcmdCdWYgKiBhcmdfYnVmID0gbmV3IEFyZ0J1ZltOXTsKICAgICAgICA7CiAgICAg ICAgaW50IGk7CiAgICAgICAgaW52YWxpZF9mbGFnID0gMDsKICAgICAgICBmb3IoIGk9MDsgaTxO OyBpKysgKQogICAgICAgICAgICAgICAgYXJnX2J1ZltpXS5Jbml0KCk7CiAgICAgICAgQXJnQnVm KiBrZXkgPSBhcmdfYnVmOwogICAgICAgIEFyZ0J1ZiogdmFsdWUgPSAmYXJnX2J1ZltOLTFdOwog ICAgICAgIGtleXMgPSAwO3ZhbHVlcyA9IDA7CiAgICAgICAgZm9yIChpPTA7aTxOO2krKykgewoK ICAgICAgICAgICAgICAgIEZTUCBhcmdfTiA9IHByZWRfZnMuRm9sbG93KGFyZ3VtZW50X3Nlcmlh bFtpXSk7CgogICAgICAgICAgICAgICAgaWYgKCAhIChhcmdfTi5Jc1ZhcigpIHx8IGFyZ19OLklz U3RyKCkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9mbGFnID0gMTsKICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB0c2VyaWFsIGFyZ19zID0gYzJTVFJTb3JWQVJTKGFyZ19OLlJlYWRDZWxsKCkpOwog ICAgICAgICAgICAgICAgaWYgKGFyZ19zID09IGJ1aWx0aW5fdHlwZV9rZXlfaW50ZWdlcl9zZXJp YWwgfHwKICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3MgPT0gYnVpbHRpbl90eXBlX2tleV90 eXBlX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgICAgICBhcmdfcyA9PSBidWlsdGluX3R5 cGVfa2V5X2ludGhhc2hfc2VyaWFsIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zID09 IGJ1aWx0aW5fdHlwZV9rZXlfc3RyaW5nX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgICAg ICBhcmdfcyA9PSBidWlsdGluX3R5cGVfa2V5X2Zsb2F0X3NlcmlhbCB8fAogICAgICAgICAgICAg ICAgICAgICAgICBhcmdfcyA9PSBidWlsdGluX3R5cGVfa2V5X2ZzX3NlcmlhbCkgewoKCiAgICAg ICAgICAgICAgICAgICAgICAgICgqa2V5KyspLlNldEtleShhcmdfTixpKTsKICAgICAgICAgICAg ICAgICAgICAgICAga2V5cysrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICgqdmFsdWUtLSkuU2V0VmFsdWUoYXJnX3MsaSk7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlcysrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg Zm9yIChpPTA7aTxOO2krKykgewogICAgICAgICAgICAgICAgaWYgKGFyZ19idWZbaV0uRmxhZygp ID49IElOVkFMSUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ImRlY2xhcmUgZnVu Y3Rpb24gOiBpbnZhbGlkIGFyZ3VtZW50IC5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNv dXQ8PCBpIDw8ICJ0aCBhcmd1bWVudCBpcyAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo YXJnX2J1ZltpXS5GbGFnKCkgPT0gSU5WQUxJRF9UWVBFKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvdXQgPDwgIm5vIHN1cHBvcnRlZCB0eXBlLlxuIjsKICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoYXJnX2J1ZltpXS5GbGFnKCkgPT0gSU5WQUxJRF9GUykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJpbnRlZ2VyIGJ1dCBpbnZhbGlkIGZl YXR1cmVzLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvdXQgPDwgInVua25vd24gLi4uIFxuIjsKICAgICAgICAgICAgICAg ICAgICAgICAgaW52YWxpZF9mbGFnID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgICAgaWYgKGtleXMgIT0gMCkgewogICAgICAgICAgICAgICAga2V5Wy0xXS5TZXRSZXN1bHRG bGFnKCk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBpZiAoIWludmFsaWRfZmxhZykgewogICAg ICAgICAgICAgICAgQXJyYXkqIHJldCA9IGFycmF5X2hhc2guQWRkKHRoaXMpOwogICAgICAgICAg ICAgICAgaWYgKHJldCAhPSBfX251bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8 PCAiRHVwbGljYXRlIGFycmF5IGRlY2xhcmF0aW9uLlxuIjsKICAgICAgICAgICAgICAgICAgICAg ICAgYXJyYXlfaGFzaC5BZGQocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9m bGFnID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFyZ19idWZbTi0xXS5GbGFnKCkg PT0gS0ZTICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2VyID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlFbnRyeTwg TGluZWFyRlNQID4gPihfX251bGwsICphbGxvY3ApOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIGFyZ19idWZbTi0xXS5GbGFnKCkgPT0g S1NUUiB8fCBhcmdfYnVmW04tMV0uRmxhZygpID09IEtJTlQgKQogICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXIgPSBuZXcgQXJyYXlN YWtlcktleVRlbXBsYXRlPCBBcnJheUVudHJ5PCB1bG9uZyA+ID4oX19udWxsLCAqYWxsb2NwKTsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YWtlciA9IG5ldyBBcnJheU1ha2VyU2VudGluZWwoKmFsbG9jcCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBpbnQgaT1OLTE7IGk+MDsgaS0t ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1ha2VyID0gYXJnX2J1ZltpXS5NYWtlQXJyYXlNYWtlcigmYXJnX2J1ZltpLTFdLCBtYWtl ciwgKmFsbG9jcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZXIgPSBhcmdfYnVmWzBdLk1ha2VBcnJheU1ha2VyKF9fbnVsbCwgbWFrZXIsICph bGxvY3ApOwogICAgICAgICAgICAgICAgICAgICAgICByb290ID0gX19udWxsOwogICAgICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxldGVbXSBhcmdfYnVmOwogICAgICAgIHJldHVy bjsKfQoKdm9pZCBBcnJheTo6Q2xlYXJBbGwoKSB7CiAgICAgICAgYWxsb2NwLT5kZXN0cm95X2Fs bG9jYXRvcigpOwogICAgICAgIGRlbGV0ZSBhbGxvY3A7CiAgICAgICAgcm9vdCA9IF9fbnVsbDsK ICAgICAgICBhbGxvY3AgPSBuZXcgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPjsKICAgICAgICBtYWtl ci0+U2V0QWxsb2MoKmFsbG9jcCk7Cn0KCnZvaWQgQXJyYXk6OkRlc3Ryb3koKSB7CiAgICAgICAg YWxsb2NwLT5kZXN0cm95X2FsbG9jYXRvcigpOwogICAgICAgIGRlbGV0ZSBhbGxvY3A7CiAgICAg ICAgcm9vdCA9IF9fbnVsbDsKICAgICAgICBhcnJheV9oYXNoLkRlbGV0ZSh0aGlzKTsKICAgICAg ICBkZWxldGUgdGhpczsKfQoKQXJyYXkmIEFycmF5OjpTZWFyY2goY2VsbCBwcmVkKSB7CgogICAg ICAgIHRzZXJpYWwgcyA9IGMyU1RSUyhGU1AocHJlZCkuUmVhZENlbGwoKSk7CiAgICAgICAgcmV0 dXJuICooYXJyYXlfaGFzaC5GaW5kKHMpKTsKfQoKYm9vbCBBcnJheTo6U2V0KGNlbGwgcHJlZCkK ewogICAgICAgIEZTUCBwcmVkX2ZzKHByZWQpOwoKCgoKCgoKICAgICAgICBpZiggcm9vdCA9PSBf X251bGwgKQogICAgICAgICAgICAgICAgcm9vdCA9IG1ha2VyLT5NYWtlRW50cnkoKTsKICAgICAg ICA7CgogICAgICAgIEFycmF5RW50cnlCYXNlICpjdXJyZW50ID0gcm9vdDsKICAgICAgICBBcnJh eU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGZvciAoaW50IGk9MDsgaTxhcml0eTsgaSsrKSB7 CgoKCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBwID0gcC0+TmV4dCgpOwogICAg ICAgICAgICAgICAgRlNQIGYgPSBwcmVkX2ZzLkZvbGxvdyhhcmd1bWVudF9zZXJpYWxbaV0pOwog ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPlNldChmLCBwKTsKICAgICAgICB9CiAg ICAgICAgcmV0dXJuIGN1cnJlbnQgIT0gQXJyYXlFbnRyeUJhc2U6OmVycm9yOwp9Cgpib29sIEFy cmF5OjpHZXQoY2VsbCBwcmVkKQp7CiAgICAgICAgRlNQIHByZWRfZnMocHJlZCk7CiMgNTE2ICJh cnJheS5jcHAiCiAgICAgICAgQXJyYXlFbnRyeUJhc2UgKmN1cnJlbnQgPSByb290OwoKICAgICAg ICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGk9MDsgaTxhcml0eTsgaSsrKSB7 CiAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PSBfX251bGwgKQogICAgICAgICAgICAgICAg ewoKCgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg ICB9CgoKCiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+R2V0KHByZWRfZnMuRm9s bG93KGFyZ3VtZW50X3NlcmlhbFtpXSkpOwogICAgICAgIH0KICAgICAgICBpZiggY3VycmVudCA9 PSBfX251bGwgfHwgY3VycmVudCA9PSBBcnJheUVudHJ5QmFzZTo6ZXJyb3IgKQogICAgICAgIHsK CgoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgoKCgoKICAgICAgICBy ZXR1cm4gdHJ1ZTsKfQoKYm9vbCBBcnJheTo6RXF1aXYoY2VsbCBwMSwgY2VsbCBwMikKewogICAg ICAgIEZTUCBwMV9mcyhwMSksIHAyX2ZzKHAyKTsKCgoKCgoKCiAgICAgICAgaWYoIHJvb3QgPT0g X19udWxsICkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgQXJyYXlFbnRy eUJhc2UgKmMxLCAqYzI7CgogICAgICAgIGlmKCBrZXlzID09IDAgKQogICAgICAgIHsKICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoK CgogICAgICAgICAgICAgICAgYzEgPSByb290LT5HZXQocDFfZnMuRm9sbG93KGFyZ3VtZW50X3Nl cmlhbFswXSkpOwogICAgICAgICAgICAgICAgYzIgPSByb290LT5HZXQocDJfZnMuRm9sbG93KGFy Z3VtZW50X3NlcmlhbFswXSkpOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0xOyBpPGtleXM7 IGkrKykgewoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiggYzEgPT0gX19udWxsIHx8IGMy ID09IF9fbnVsbCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OwogICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGMxLT5HZXQocDFfZnMuRm9sbG93KGFyZ3Vt ZW50X3NlcmlhbFtpXSkpOwogICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGMyLT5HZXQocDJf ZnMuRm9sbG93KGFyZ3VtZW50X3NlcmlhbFtpXSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHJldHVybiBjMS0+RXF1aXYoYzIpOwogICAgICAgIH0KfQoKYm9vbCBBcnJheTo6 UmVtb3ZlKGNlbGwgcHJlZCkKewogICAgICAgIEZTUCBwcmVkX2ZzKHByZWQpOwoKCgoKCgoKICAg ICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgICAgICAgICAgcm9vdCA9IG1ha2VyLT5N YWtlRW50cnkoKTsKICAgICAgICA7CgogICAgICAgIEFycmF5RW50cnlCYXNlICpjdXJyZW50ID0g cm9vdDsKICAgICAgICBBcnJheU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGZvciAoaW50IGk9 MDsgaTxhcml0eTsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBG U1AgZiA9IHByZWRfZnMuRm9sbG93KGFyZ3VtZW50X3NlcmlhbFtpXSk7CiAgICAgICAgICAgICAg ICBjdXJyZW50ID0gY3VycmVudC0+UmVtb3ZlKGYsIHApOwogICAgICAgIH0KICAgICAgICByZXR1 cm4gY3VycmVudCAhPSBBcnJheUVudHJ5QmFzZTo6ZXJyb3I7Cn0KCgpib29sIEFycmF5OjpLZXlM aXN0KGNlbGwgYywgRlNQIHJldCkKewogICAgICAgIEZTUCBmcyhjKTsKCgoKCgoKCiAgICAgICAg QXJyYXlFbnRyeUJhc2UgKmMxID0gcm9vdDsKCiAgICAgICAgaWYoIHJvb3QgPT0gX19udWxsICkK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnMuQ29lcmNlKG5pbCk7CiAgICAgICAg fQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8 a2V5czsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjMSA9PSBfX251bGwg KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg ICAgICAgICAgICAgICAgRlNQIGFyZyA9IGZzLkZvbGxvdyhhcmd1bWVudF9zZXJpYWxbaV0pOwog ICAgICAgICAgICAgICAgICAgICAgICBpZiggYXJnLkdldFR5cGUoKS0+R2V0U2VyaWFsTm8oKSA9 PSBidWlsdGluX3R5cGVfdW5zcGVjaWZpZWRfa2V5X3NlcmlhbCApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGMxLT5H ZXQoYXJnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBjMS0+S2V5 TGlzdChyZXQpOwogICAgICAgIH0KfQoKYm9vbCBBcnJheTo6U2VyaWFsaXplKGNlbGwgYywgc3Ry aW5nIGZuYW1lKQp7CiAgICAgICAgRlNQIGZzKGMpOwoKCgoKCgoKICAgICAgICBBcnJheUVudHJ5 QmFzZSAqYzEgPSByb290OwoKICAgICAgICBvZnN0cmVhbSBvZnMoZm5hbWUuY19zdHIoKSk7CiAg ICAgICAgaWYoIG9mcy5iYWQoKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgZG8geyBvc3Ry aW5nc3RyZWFtIG9zczsgb3NzIDw8ICJDYW5ub3Qgb3BlbiBzZXJpYWxpemluZyBmaWxlIGZvciB3 cml0ZTogIiArIGZuYW1lOyBfUnVuV2Fybihvc3Muc3RyKCkpOyB9IHdoaWxlKGZhbHNlKTsKICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgb3NlcmlhbGl6ZXIg b3Mob2ZzKTsKCiAgICAgICAgaWYoIHJvb3QgPT0gX19udWxsICkKICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICBlbHNlCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgZm9y IChpbnQgaT0wOyBpPGtleXM7IGkrKykgewoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZigg YzEgPT0gX19udWxsICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgICAgICAgICAgICAgICAgICAgIEZTUCBhcmcgPSBmcy5Gb2xsb3coYXJndW1lbnRf c2VyaWFsW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFyZy5HZXRUeXBlKCktPkdl dFNlcmlhbE5vKCkgPT0gYnVpbHRpbl90eXBlX3Vuc3BlY2lmaWVkX2tleV9zZXJpYWwgKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEt PlNlcmlhbGl6ZVRvU3RyZWFtKG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBjMSA9IGMxLT5HZXQoYXJnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGMxLT5TZXJpYWxpemVUb1N0cmVhbShvcyk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK ICAgICAgICB9Cn0KCgpib29sIEFycmF5OjpEZXNlcmlhbGl6ZShjZWxsIHAxLCBzdHJpbmcgZm5h bWUpCnsKICAgICAgICBGU1AgZnMocDEpOwoKCgoKCgoKICAgICAgICBBcnJheUVudHJ5QmFzZSAq YzEgPSByb290OwoKICAgICAgICBBcnJheU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGlmc3Ry ZWFtIGlmcyhmbmFtZS5jX3N0cigpKTsKICAgICAgICBpZiggaWZzLmJhZCgpICkgewogICAgICAg ICAgICAgICAgZG8geyBvc3RyaW5nc3RyZWFtIG9zczsgb3NzIDw8ICJDYW5ub3Qgb3BlbiBzZXJp YWxpemVkIGZpbGU6ICIgKyBmbmFtZTsgX1J1bldhcm4ob3NzLnN0cigpKTsgfSB3aGlsZShmYWxz ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKICAgICAgICBpc2Vy aWFsaXplciBpcyhpZnMpOwoKICAgICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UKICAgICAgICB7CgoKCiAgICAgICAgICAg ICAgICBmb3IgKGludCBpPTA7IGk8a2V5czsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmKCBjMSA9PSBfX251bGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgRlNQIGFyZyA9IGZzLkZvbGxvdyhh cmd1bWVudF9zZXJpYWxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggYXJnLkdldFR5 cGUoKS0+R2V0U2VyaWFsTm8oKSA9PSBidWlsdGluX3R5cGVfdW5zcGVjaWZpZWRfa2V5X3Nlcmlh bCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjMS0+UmVhZEZyb21TdHJlYW0oaXMscCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgYzEgPSBjMS0+R2V0KGFyZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHAg PSBwLT5OZXh0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjMS0+UmVhZEZy b21TdHJlYW0oaXMscCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cn0K IyA3NjAgImFycmF5LmNwcCIKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX2RlY2xhcmVf YXJyYXlfcHJpbWl0aXZlXzEoICJkZWNsYXJlX2FycmF5X3ByaW1pdGl2ZSIgLCAiZGVjbGFyZV9h cnJheV9wcmltaXRpdmUiICwgIiIgLCAxICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1BSRUQpOyBi b29sIGJ1aWx0aW5fZGVjbGFyZV9hcnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoRlNQIGFyZyk7 IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX2RlY2xhcmVfYXJyYXlfcHJpbWl0aXZlXzEgKGNlbGwg YzEpIHsgRlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2RlY2xhcmVf YXJyYXlfcHJpbWl0aXZlXzEiKSA8PCBlbmRsOyBib29sIHJldCA9IGJ1aWx0aW5fZGVjbGFyZV9h cnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoYXJnKTsgY291dCA8PCAiTGVhdmUgIiA8PCAoImJ1 aWx0aW5fZGVjbGFyZV9hcnJheV9wcmltaXRpdmVfMSIpIDw8IChyZXQgPyAiIHN1Y2Nlc3MiIDog IiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5fZGVjbGFyZV9h cnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoRlNQIGFyZykKewoKICBpZihwcmVkX3R5cGUgPT0g VFNfSU5WQUxJRCl7CiAgICBjb3V0IDw8ICJwcmVkX3R5cGUgaXMgVFNfSU5WQUxJRCEhIiA8PCBl bmRsOwogIH0KICBlbHNlewogICAgY291dCA8PCAicHJlZF90eXBlIGlzIHZhbGlkIiA8PCBlbmRs OwogIH0KICAgICAgICBpZiAoIWFyZy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAg ICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ2RlY2xhcmVf YXJyYXknIG5lZWRzIHByZWQuIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgY291dCA8PCBhcmcu RGlzcGxheUFWTSgpOwogICAgICAgICAgICAgICAgY291dCA8PCBwcmVkX3R5cGUgPDwgZW5kbDsK ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGFyZy5H ZXRUeXBlKCktPkdldE5GZWF0dXJlcygpID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwg IlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0LWluIGZ1bmN0aW9uICdkZWNsYXJlX2FycmF5JyBuZWVk cyBwcmVkIHdpdGggYXJndW1lbnQuIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KCgogICAgICAgIEFycmF5JiBhciA9ICpuZXcgQXJyYXkoYXJnKTsKICAg ICAgICBpZiAoYXIuSW52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJSdW50aW1l IEVycm9yIGluIGRlY2xhcmVfYXJyYXlfcHJpbWl0aXZlIDogY2Fubm90IGNyZWF0ZSBhcnJheSAi IDw8IGFyZy5HZXRUeXBlKCktPkdldE5hbWUoKSA8PCBlbmRsOwogICAgICAgICAgICAgICAgZGVs ZXRlICZhcjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAg cmV0dXJuIHRydWU7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19jbGVhcl9hcnJh eV8xKCAiY2xlYXJfYXJyYXkiICwgImNsZWFyX2FycmF5IiAsICIiICwgMSAsICJhcnJheS5jcHAi ICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKEZT UCBhcmcpOyBleHRlcm4gIkMiIGJvb2wgYnVpbHRpbl9jbGVhcl9hcnJheV8xIChjZWxsIGMxKSB7 IEZTUCBhcmcoYzEpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9jbGVhcl9hcnJheV8x IikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKGFy Zyk7IGNvdXQgPDwgIkxlYXZlICIgPDwgKCJidWlsdGluX2NsZWFyX2FycmF5XzEiKSA8PCAocmV0 ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7IH0gYm9vbCBi dWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKEZTUCBhcmcpCnsKICAgICAgICBwcm9mIHBy b2ZfX19MSU5FX18oImNsZWFyIGFycmF5Iik7CgoKCiAgICAgICAgaWYgKCFhcmcuQ29lcmNlKHBy ZWRfdHlwZSkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1 aWx0LWluIGZ1bmN0aW9uICdjbGVhcl9hcnJheScgbmVlZHMgcHJlZC4iIDw8IGVuZGw7CiAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICBjZWxsIGMwID0gYXJnLlJlYWRD ZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJyYXk6OlNlYXJjaChjMCk7CiAgICAgICAgaWYg KCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBw cmVkaWNhdGUgY2xlYXJfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAg ICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlIjsKICAgICAgICAgICAgICAg IGNvdXQgPDwgYXJnLkdldFR5cGUoKS0+R2V0TmFtZSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBhci5DbGVhckFsbCgpOwogICAgICAg IHJldHVybiB0cnVlOwp9CgpidWlsdGluX3ByZWRfdGFibGUgYnVpbHRpbmluZm9fZGVsZXRlX2Fy cmF5XzEoICJkZWxldGVfYXJyYXkiICwgImRlbGV0ZV9hcnJheSIgLCAiIiAsIDEgLCAiYXJyYXku Y3BwIiAsIEJVSUxUSU5fUFJFRCk7IGJvb2wgYnVpbHRpbl9kZWxldGVfYXJyYXlfMV9pbnRlcm5h bCAoRlNQIGFyZyk7IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX2RlbGV0ZV9hcnJheV8xIChjZWxs IGMxKSB7IEZTUCBhcmcoYzEpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9kZWxldGVf YXJyYXlfMSIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9kZWxldGVfYXJyYXlfMV9pbnRl cm5hbCAoYXJnKTsgY291dCA8PCAiTGVhdmUgIiA8PCAoImJ1aWx0aW5fZGVsZXRlX2FycmF5XzEi KSA8PCAocmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7 IH0gYm9vbCBidWlsdGluX2RlbGV0ZV9hcnJheV8xX2ludGVybmFsIChGU1AgYXJnKQp7CiAgICAg ICAgcHJvZiBwcm9mX19fTElORV9fKCJkZWxldGUgYXJyYXkiKTsKCgoKICAgICAgICBpZiAoIWFy Zy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUg V2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ2RlbGV0ZV9hcnJheScgbmVlZHMgcHJlZC4iIDw8 IGVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgIGNlbGwg YzAgPSBhcmcuUmVhZENlbGwoKTsKICAgICAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMw KTsKICAgICAgICBpZiAoJmFyID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10 aW1lIFdhcm5pbmc6IHByZWRpY2F0ZSBkZWxldGVfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAg ICAgICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlICI7 CiAgICAgICAgICAgICAgICBjb3V0IDw8IGFyZy5HZXRUeXBlKCktPkdldE5hbWUoKSA8PCBlbmRs OwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgYXIuQ2xl YXJBbGwoKTsKICAgICAgICBhci5EZXN0cm95KCk7CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCmJ1 aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19zZXRfYXJyYXlfMSggInNldF9hcnJheSIgLCAi c2V0X2FycmF5IiAsICIiICwgMSAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBi dWlsdGluX3NldF9hcnJheV8xX2ludGVybmFsIChGU1AgYXJnKTsgZXh0ZXJuICJDIiBib29sIGJ1 aWx0aW5fc2V0X2FycmF5XzEgKGNlbGwgYzEpIHsgRlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVy ICIgPDwgKCJidWlsdGluX3NldF9hcnJheV8xIikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGlu X3NldF9hcnJheV8xX2ludGVybmFsIChhcmcpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRp bl9zZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAiIHN1Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5k bDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5fc2V0X2FycmF5XzFfaW50ZXJuYWwgKEZTUCBh cmcpCnsKICAgICAgICBwcm9mIHByb2ZfX19MSU5FX18oInNldCBhcnJheSIpOwojIDg2MCAiYXJy YXkuY3BwIgogICAgICAgIGlmICghYXJnLkNvZXJjZShwcmVkX3R5cGUpKSB7CiAgICAgICAgICAg ICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsZGluIGZ1bmN0aW9uICdzZXRfYXJy YXknIG5lZWRzIHByZWQuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IH0KCiAgICBjZWxsIGMwID0gYXJnLlJlYWRDZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJy YXk6OlNlYXJjaChjMCk7CiAgICAgICAgaWYgKCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBj b3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUgc2V0X2FycmF5LzEgY2FuIGJlIHVz ZWQgdG8gXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQg cHJlZGljYXRlIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgoKICAg ICAgICBpZiAoYXIuU2V0KGMwKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgY291dCA8PCAi UnVuLXRpbWUgV2FybmluZzogcHJlZGljYXRlIHNldF9hcnJheS8xIGNhbm5vdCBzZXQuIjsKICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7 CgoKCgoKCjsKfQoKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX3Vuc2V0X2FycmF5XzEo ICJ1bnNldF9hcnJheSIgLCAidW5zZXRfYXJyYXkiICwgIiIgLCAxICwgImFycmF5LmNwcCIgLCBC VUlMVElOX1BSRUQpOyBib29sIGJ1aWx0aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoRlNQIGFy Zyk7IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX3Vuc2V0X2FycmF5XzEgKGNlbGwgYzEpIHsgRlNQ IGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX3Vuc2V0X2FycmF5XzEiKSA8 PCBlbmRsOyBib29sIHJldCA9IGJ1aWx0aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoYXJnKTsg Y291dCA8PCAiTGVhdmUgIiA8PCAoImJ1aWx0aW5fdW5zZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAi IHN1Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0 aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoRlNQIGFyZykKewogICAgICAgIHByb2YgcHJvZl9f X0xJTkVfXygidW5zZXQgYXJyYXkiKTsKIyA5MDcgImFycmF5LmNwcCIKICAgICAgICBpZiAoIWFy Zy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUg V2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ3JlbW92ZV9hcnJheScgbmVlZHMgcHJlZC5cbiI7 CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgIGNlbGwgYzAgPSBh cmcuUmVhZENlbGwoKTsKICAgICAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAg ICAgICBpZiAoJmFyID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdh cm5pbmc6IHByZWRpY2F0ZSByZW1vdmVfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAg ICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlIjsKICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGFyLlJlbW92ZShjMCk7 CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19n ZXRfYXJyYXlfMSggImdldF9hcnJheSIgLCAiZ2V0X2FycmF5IiAsICIiICwgMSAsICJhcnJheS5j cHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2dldF9hcnJheV8xX2ludGVybmFsIChG U1AgYXJnKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fZ2V0X2FycmF5XzEgKGNlbGwgYzEpIHsg RlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2dldF9hcnJheV8xIikg PDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2dldF9hcnJheV8xX2ludGVybmFsIChhcmcpOyBj b3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9nZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAiIHN1 Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5f Z2V0X2FycmF5XzFfaW50ZXJuYWwgKEZTUCBhcmcpCnsKICAgICAgICBwcm9mIHByb2ZfX19MSU5F X18oImdldCBhcnJheSIpOwoKCgogICAgICAgIGlmICghYXJnLkNvZXJjZShwcmVkX3R5cGUpKSB7 CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJidWlsZGluIGZ1bmN0aW9uICdnZXRfYXJyYXknIG5l ZWRzIHByZWQuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAg ICBjZWxsIGMwID0gYXJnLlJlYWRDZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJyYXk6OlNl YXJjaChjMCk7CiAgICAgICAgaWYgKCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBjb3V0PDwg InByZWRpY2F0ZSBnZXRfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAg ICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlICI7CiAgICAgICAgY291dCA8 PCBhcmcuR2V0VHlwZSgpLT5HZXROYW1lKCkgPDwgZW5kbDsKICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhci5HZXQoYzApOwp9CgpidWlsdGlu X3ByZWRfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfZGlmZmVyZW50XzIoICJhcnJheV9kaWZmZXJl bnQiICwgImFycmF5X2RpZmZlcmVudCIgLCAiIiAsIDIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5f UFJFRCk7IGJvb2wgYnVpbHRpbl9hcnJheV9kaWZmZXJlbnRfMl9pbnRlcm5hbCAoRlNQIGFyZzEs IEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzIgKGNl bGwgYzEsIGNlbGwgYzIpIHsgRlNQIGFyZzEoYzEpO0ZTUCBhcmcyKGMyKTsgY291dCA8PCAiRW50 ZXIgIiA8PCAoImJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzIiKSA8PCBlbmRsOyBib29sIHJldCA9 IGJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzJfaW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8 ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9hcnJheV9kaWZmZXJlbnRfMiIpIDw8IChyZXQgPyAiIHN1 Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5f YXJyYXlfZGlmZmVyZW50XzJfaW50ZXJuYWwgKEZTUCBhcmcxLCBGU1AgYXJnMikKewoKCiAgICAg ICAgaWYgKCFhcmcxLkNvZXJjZShwcmVkX3R5cGUpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8 ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlfZGlmZmVyZW50JyBu ZWVkcyBwcmVkLlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg ICAgICAgaWYgKGFyZzEuR2V0VHlwZSgpICE9IGFyZzIuR2V0VHlwZSgpKSB7CiAgICAgICAgICAg ICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlf ZGlmZmVyZW50JyBjYW5ub3QgYmUgdXNlZCB0byB0d28gaW5kZXBlbmRlbnQgYXJyYXlzLlxuIjsK ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgY2VsbCBjMCA9IGFy ZzEuUmVhZENlbGwoKTsKICAgIGNlbGwgYzEgPSBhcmcyLlJlYWRDZWxsKCk7CiAgICBBcnJheSYg YXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAgIGlmICgmYXIgPT0gMCkgewogICAgICAgICAgICBj b3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUgZ2V0X2FycmF5LzEgY2FuIGJlIHVz ZWQgdG8gIgogICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGlj YXRlIiA8PCBlbmRsOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgICAgIHJl dHVybiBhci5FcXVpdihjMCxjMSk7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19h cnJheV9zZXJpYWxpemVfMiggImFycmF5X3NlcmlhbGl6ZSIgLCAiYXJyYXlfc2VyaWFsaXplIiAs ICIiICwgMiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2FycmF5 X3NlcmlhbGl6ZV8yX2ludGVybmFsIChGU1AgYXJnMSwgRlNQIGFyZzIpOyBleHRlcm4gIkMiIGJv b2wgYnVpbHRpbl9hcnJheV9zZXJpYWxpemVfMiAoY2VsbCBjMSwgY2VsbCBjMikgeyBGU1AgYXJn MShjMSk7RlNQIGFyZzIoYzIpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9hcnJheV9z ZXJpYWxpemVfMiIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9hcnJheV9zZXJpYWxpemVf Ml9pbnRlcm5hbCAoYXJnMSwgYXJnMik7IGNvdXQgPDwgIkxlYXZlICIgPDwgKCJidWlsdGluX2Fy cmF5X3NlcmlhbGl6ZV8yIikgPDwgKHJldCA/ICIgc3VjY2VzcyIgOiAiIGZhaWx1cmUiKSA8PCBl bmRsOyByZXR1cm4gcmV0OyB9IGJvb2wgYnVpbHRpbl9hcnJheV9zZXJpYWxpemVfMl9pbnRlcm5h bCAoRlNQIGFyZzEsIEZTUCBhcmcyKQp7CgoKICAgICAgICBpZiAoIWFyZzEuQ29lcmNlKHByZWRf dHlwZSkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0 LWluIGZ1bmN0aW9uICdhcnJheV9zZXJpYWxpemUnIG5lZWRzIHByZWQuXG4iOwogICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoISBhcmcyLklzU3RyaW5n KCkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IDJuZCBhcmd1 bWVudCBvZiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlfc2VyaWFsaXplJyBzaG91bGQgYmUgYSBz dHJpbmcuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICBj ZWxsIGMwID0gYXJnMS5SZWFkQ2VsbCgpOwogICAgY2VsbCBjMSA9IGFyZzIuUmVhZENlbGwoKTsK ICAgIEFycmF5JiBhciA9IEFycmF5OjpTZWFyY2goYzApOwogICAgaWYgKCZhciA9PSAwKSB7CiAg ICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IHByZWRpY2F0ZSBhcnJheV9zZXJp YWxpemUvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAgICAgIm9ubHkgZGVjbGFy ZV9hcnJheSdlZCBwcmVkaWNhdGUiIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgIH0KCiAgICAgICAgcmV0dXJuIGFyLlNlcmlhbGl6ZShjMCxzdHJpbmcoYXJnMi5SZWFkU3Ry aW5nKCkpKTsKfQoKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX2FycmF5X2Rlc2VyaWFs aXplXzIoICJhcnJheV9kZXNlcmlhbGl6ZSIgLCAiYXJyYXlfZGVzZXJpYWxpemUiICwgIiIgLCAy ICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1BSRUQpOyBib29sIGJ1aWx0aW5fYXJyYXlfZGVzZXJp YWxpemVfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1 aWx0aW5fYXJyYXlfZGVzZXJpYWxpemVfMiAoY2VsbCBjMSwgY2VsbCBjMikgeyBGU1AgYXJnMShj MSk7RlNQIGFyZzIoYzIpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9hcnJheV9kZXNl cmlhbGl6ZV8yIikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2FycmF5X2Rlc2VyaWFsaXpl XzJfaW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9h cnJheV9kZXNlcmlhbGl6ZV8yIikgPDwgKHJldCA/ICIgc3VjY2VzcyIgOiAiIGZhaWx1cmUiKSA8 PCBlbmRsOyByZXR1cm4gcmV0OyB9IGJvb2wgYnVpbHRpbl9hcnJheV9kZXNlcmlhbGl6ZV8yX2lu dGVybmFsIChGU1AgYXJnMSwgRlNQIGFyZzIpCnsKCgogICAgICAgIGlmICghYXJnMS5Db2VyY2Uo cHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzog YnVpbHQtaW4gZnVuY3Rpb24gJ2FycmF5X3NlcmlhbGl6ZScgbmVlZHMgcHJlZC5cbiI7CiAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghIGFyZzIuSXNT dHJpbmcoKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogMm5k IGFyZ3VtZW50IG9mIGJ1aWx0LWluIGZ1bmN0aW9uICdhcnJheV9zZXJpYWxpemUnIHNob3VsZCBi ZSBhIHN0cmluZy5cbiI7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoK ICAgIGNlbGwgYzAgPSBhcmcxLlJlYWRDZWxsKCk7CiAgICBjZWxsIGMxID0gYXJnMi5SZWFkQ2Vs bCgpOwogICAgQXJyYXkmIGFyID0gQXJyYXk6OlNlYXJjaChjMCk7CiAgICBpZiAoJmFyID09IDAp IHsKICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogcHJlZGljYXRlIGFycmF5 X3NlcmlhbGl6ZS8xIGNhbiBiZSB1c2VkIHRvICIKICAgICAgICAgICAgICAgICAgICAib25seSBk ZWNsYXJlX2FycmF5J2VkIHByZWRpY2F0ZSIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgfQoKICAgICAgICByZXR1cm4gYXIuRGVzZXJpYWxpemUoYzAsc3RyaW5nKGFyZzIu UmVhZFN0cmluZygpKSk7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19hcnJheV9r ZXlsaXN0XzIoICJhcnJheV9rZXlsaXN0IiAsICJhcnJheV9rZXlsaXN0IiAsICIiICwgMiAsICJh cnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2FycmF5X2tleWxpc3RfMl9p bnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYXJy YXlfa2V5bGlzdF8yIChjZWxsIGMxLCBjZWxsIGMyKSB7IEZTUCBhcmcxKGMxKTtGU1AgYXJnMihj Mik7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2FycmF5X2tleWxpc3RfMiIpIDw8IGVu ZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9hcnJheV9rZXlsaXN0XzJfaW50ZXJuYWwgKGFyZzEsIGFy ZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9hcnJheV9rZXlsaXN0XzIiKSA8PCAo cmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7IH0gYm9v bCBidWlsdGluX2FycmF5X2tleWxpc3RfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKQp7 CgoKICAgICAgICBpZiAoIWFyZzEuQ29lcmNlKHByZWRfdHlwZSkpIHsKICAgICAgICAgICAgICAg IGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0LWluIGZ1bmN0aW9uICdhcnJheV9rZXls aXN0JyBuZWVkcyBwcmVkLlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg ICB9CgogICAgY2VsbCBjMCA9IGFyZzEuUmVhZENlbGwoKTsKICAgIGNlbGwgYzEgPSBhcmcyLlJl YWRDZWxsKCk7CiAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAgIGlmICgmYXIg PT0gMCkgewogICAgICAgICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUg YXJyYXlfa2V5bGlzdC8xIGNhbiBiZSB1c2VkIHRvICIKICAgICAgICAgICAgICAgICAgICAib25s eSBkZWNsYXJlX2FycmF5J2VkIHByZWRpY2F0ZSIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgfQoKICAgICAgICBib29sIHJldCA9IGFyLktleUxpc3QoIGMwLGFyZzIgKTsK CiAgICByZXR1cm4gcmV0Owp9CgoKCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19iX2Vx dWl2XzIoICJiX2VxdWl2IiAsICJiX2VxdWl2IiAsICIiICwgMiAsICJhcnJheS5jcHAiICwgQlVJ TFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2JfZXF1aXZfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZT UCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYl9lcXVpdl8yIChjZWxsIGMxLCBjZWxs IGMyKSB7IEZTUCBhcmcxKGMxKTtGU1AgYXJnMihjMik7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJi dWlsdGluX2JfZXF1aXZfMiIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9iX2VxdWl2XzJf aW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9iX2Vx dWl2XzIiKSA8PCAocmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVy biByZXQ7IH0gYm9vbCBidWlsdGluX2JfZXF1aXZfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBh cmcyKQp7CiAgcHJvZiBwcm9mX19fTElORV9fKCJiX2VxdWl2Iik7CiAgY2VsbCBjMCA9IGFyZzEu UmVhZENlbGwoKTsKICBjZWxsIGMxID0gYXJnMi5SZWFkQ2VsbCgpOwogIHJldHVybiBGU1AoYzAp LkVxdWl2KGMxKTsKfQoKc3RhdGljIHZvaWQgdGVybSh2b2lkKQp7CiAgICAgICAgZm9yKGludCBp PTA7IGk8YXJyYXlfaGFzaC5HZXRUYWJsZVNpemUoKTsgaSsrICkKICAgICAgICB7CiAgICAgICAg ICAgICAgICBpZiggYXJyYXlfaGFzaC5QaWNrKGkpICkKICAgICAgICAgICAgICAgICAgICAgICAg ZGVsZXRlIGFycmF5X2hhc2guUGljayhpKTsKICAgICAgICB9CiAgICAgICAgRlNGaWw6OmRlZmFs bG9jLmRlc3Ryb3lfYWxsb2NhdG9yKCk7Cn0KCnN0YXRpYyBUZXJtRnVuY3Rpb24gVEYodGVybSwy MCk7Cg==