public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: milgramjh@nswccd.navy.mil To: gcc-gnats@gcc.gnu.org Subject: c++/8014: Internal compiler error in `output_die' Date: Mon, 23 Sep 2002 18:06:00 -0000 [thread overview] Message-ID: <20020924005855.24269.qmail@sources.redhat.com> (raw) >Number: 8014 >Category: c++ >Synopsis: Internal compiler error in `output_die' >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Sep 23 18:06:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: J. Milgram >Release: gcc-2.95.3 >Organization: >Environment: mips-sgi-irix6.5 Reading specs from /usr/people/milgram/local/gcc295/lib/gcc-lib/mips-sgi-irix6.5/2.95.3/specs gcc version 2.95.3 20010315 (release) >Description: Compiling octave-2.0.16 (seen also in 2.0.17) cd src ; make gcc -c -I. -I.. -I../liboctave -I../src -I../libcruft/misc -I../glob -I../glob -DHAVE_CONFIG_H -fno-rtti -fno-exceptions -fno-implicit-templates -g -O2 -Wall sighandlers.cc sighandlers.cc:649: Internal compiler error in `output_die', at dwarf2out.c:5433 Please submit a full bug report. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. >How-To-Repeat: gcc was built on same machine gcc was configured ./configure --prefix=/usr/people/milgram/local >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="sighandlers.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sighandlers.ii" IyAxICJzaWdoYW5kbGVycy5jYyIKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9jb25m aWcuaCIgMQogCiAKCiAKCgoKIAoKCiAKIAoKIAogCgogCiAKCiAKCiAKCiAKIAoKIAoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAogCgogCgoKCiAKIAoKIAogCgogCiAKCiAKIAoKIAoKIAoKIAogCgog CgoKIAogCgogCgoKCgoKCiAKCiAKCgogCiAKCiAKCgogCiAKCiAKIAoKIAoKCgogCgogCgogCgoK IAoKCiAKIAoKCiAKCiAKCiAKICAKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKIAoKIAoKCiAKIAoK IAoKCiAKIAoKIAogCgogCgoKIAogCgogCgoKIAogCgogCiAKCiAKCgoKIAoKCgogCiAKCiAKCgog CgoKIAogCgogCgoKIAogCgogCiAKCiAKIAoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK CgogCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCiAKCiAKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgog CiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoK CiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCgogCgoKIAogCgogCgoKIAogCgogCgoKIAoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAoK CiAKIAoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAogCgogCgoKIAoKCiAK CgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjQgInNp Z2hhbmRsZXJzLmNjIiAyCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9jc3RkbGliIiAxIDMKIAogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMK CgoKZXh0ZXJuICJDIiB7CgojaWRlbnQgICIkUmV2aXNpb246IDEuNzggJCIKIAoKCgoKCgoKCgoK CgoKCgoKIAogCgogCiAKIAoKIAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0YW5kYXJkcy5oIiAxIDMK CgogCgoKCgoKCgoKCgoKCgoKCiNpZGVudCAgIiRJZDogc3RhbmRhcmRzLmgsdiAxLjE5IDE5OTcv MTIvMTUgMjE6MzA6MjUganBoIEV4cCAkIgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL3NnaWRlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgpleHRlcm4g IkMiIHsKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMTEgJCIKCiAKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCQkgCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCnR5cGVkZWYg aW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCAgX191aW50MzJfdDsKCgoKCgoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCSAKdHlwZWRlZiBsb25nIGxvbmcgX19p bnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgX191aW50NjRfdDsKCiMgMjE0ICIv dXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCgoKCgoKdHlwZWRlZiBfX2ludDMyX3QgX19wc2ludF90 Owp0eXBlZGVmIF9fdWludDMyX3QgX19wc3Vuc2lnbmVkX3Q7CgoKCgoKCgogCgoKCgoKCgoKCgoK IAp0eXBlZGVmIF9faW50MzJfdCBfX3NjaW50X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3NjdW5z aWduZWRfdDsKCgoKCgoKfQoKCgojIDM1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK CgogCgoKCiAKCgojIDY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKdHlwZWRlZglzdHJ1Y3QgewoJIGludAlxdW90OwoJIGludAlyZW07Cgl9IGRp dl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJIGxvbmcJcXVvdDsKCSBsb25nCXJlbTsKCX0gbGRpdl90 OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQJc2l6ZV90OwoKCgoKCgoKCgoKdHlwZWRlZiBpbnQJ c3NpemVfdDsKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZyB3Y2hhcl90OwoKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvbG9jYWxlX2F0dHIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMi IHsKCiNpZGVudCAgIiRSZXZpc2lvbjogMS40ICQiCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCnR5 cGVkZWYgc3RydWN0IHsKCiAgICB1bnNpZ25lZCBpbnQJX2NsYXNzIFsgMjU3IF07CiAgICBzaWdu ZWQgc2hvcnQJX2xvd2VyIFsgMjU3IF07CiAgICBzaWduZWQgc2hvcnQJX3VwcGVyIFsgMjU3IF07 CgogICAgY2hhcgkJX2Nzd2lkdGggWyA3IF07CiAgICBjaGFyCQlfZmlsbCBbIDEgXTsKCiAgICAg Cgp9IF9fY3R5cGVfdDsKCiAKdHlwZWRlZiBpbnQJKCpfX2lzc2V0X2Z1bmNfdCkoaW50KTsKCgoK Cgl0eXBlZGVmIGxvbmcJd2ludF90OwoKCgoKCiAKdHlwZWRlZiBpbnQJKCpfX2lzY29kZXNldF9m dW5jX3QpKGludCwgd2ludF90KTsKCiAKdHlwZWRlZiBzdHJ1Y3QgX19hdHRyIHsKCiAgICBfX2N0 eXBlX3QgKgkJX2N0eXBlX3RibDsJIAoKICAgIHN0cnVjdCBfY3NpbmZvIHsJCQkgCgl1bnNpZ25l ZCBjaGFyCV9ldWN3aWR0aFszXTsJIAoJdW5zaWduZWQgY2hhcglfc2Nyd2lkdGhbM107CSAKCXVu c2lnbmVkIGNoYXIJX21iX2N1cl9tYXg7CSAKICAgIH0gX2NzaW5mbzsKCiAgICBzdHJ1Y3QgX2V1 Y19mdW5jIHsJCQkgCglpbnQJCV9pc19ldWM7CSAKCV9faXNzZXRfZnVuY190CV9pc3NldDI7CSAK CV9faXNzZXRfZnVuY190CV9pc3NldDM7CSAKCV9faXNjb2Rlc2V0X2Z1bmNfdCBfaXNjb2Rlc2V0 OwkgCiAgICB9IF9ldWNfZnVuYzsKCiAgICBzdHJ1Y3QgX2NvbGxhdGVfcmVzIHsJCSAKCXVuc2ln bmVkIGNoYXIJX2NvbGxfYXNfY21wOwkgCiAgICB9IF9jb2xsYXRlX3JlczsKCiAgICB2b2lkICoJ CV9maWxsWzE1XTsJIAp9IF9fYXR0cl90OwoKCgogCmV4dGVybiBfX2F0dHJfdCBfX2xpYmNfYXR0 cjsKCgp9CgoKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgoKCgogCmV4 dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hh ciAqKTsKZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIGRvdWJsZSBz dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25z dCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRl cm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwg c2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNp emVfdCk7CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKCgoKCgoKCmV4dGVy biB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7CmV4 dGVybiB2b2lkIGV4aXQoaW50KTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAq KTsKZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgKmJzZWFyY2go Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LAoJaW50ICgqKShjb25z dCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVf dCwgc2l6ZV90LAoJaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKaW5s aW5lIGludCBhYnMoaW50IHgpIHtyZXR1cm4geCA+IDAgPyB4IDogLXg7fQoKCgoKCgoKCgpleHRl cm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7CgoKCgpl eHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7CmV4dGVybiBpbnQgbWJ0b3djKHdjaGFyX3Qg KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwg c2l6ZV90KTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKZXh0ZXJuIHNpemVf dCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVf dCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKCgoJIApleHRlcm4g aW50IHB1dGVudihjb25zdCBjaGFyICopOwpleHRlcm4gZG91YmxlCWRyYW5kNDgodm9pZCk7CmV4 dGVybiBkb3VibGUJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBbM10pOwpleHRlcm4gbG9uZwlscmFu ZDQ4KHZvaWQpOwpleHRlcm4gbG9uZwlucmFuZDQ4KHVuc2lnbmVkIHNob3J0IFszXSk7CmV4dGVy biBsb25nCW1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nCWpyYW5kNDgodW5zaWduZWQgc2hvcnQg WzNdKTsKZXh0ZXJuIHZvaWQJc3JhbmQ0OChsb25nKTsKZXh0ZXJuIHZvaWQJbGNvbmc0OCh1bnNp Z25lZCBzaG9ydCBpbnQgWzddKTsKZXh0ZXJuIHZvaWQgICAgIHNldGtleShjb25zdCBjaGFyICop OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgKiBzZWVkNDgodW5zaWduZWQgc2hvcnQgaW50IFszXSk7 CgoKCgkgCmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQo ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50 LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsK ZXh0ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiopOwpl eHRlcm4gaW50IGdyYW50cHQoaW50KTsKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCBp bnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFy ICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CmV4dGVybiBjaGFy ICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnJl YWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0 IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50IHR0eXNs b3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsKZXh0ZXJuIHZvaWQgKnZhbGxvYyhz aXplX3QpOwoKCgoKCgoKZXh0ZXJuIGludCByYW5kX3IodW5zaWduZWQgaW50ICopOwoKCgoJIAoj IDEgIi4uL2xpYm9jdGF2ZS9nZXRvcHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJu ICJDIiB7CgoKIAoKCgoKCmV4dGVybiBjaGFyICpvcHRhcmc7CgogCgoKCgoKCgoKCgoKZXh0ZXJu IGludCBvcHRpbmQ7CgogCgoKZXh0ZXJuIGludCBvcHRlcnI7CgogCgpleHRlcm4gaW50IG9wdG9w dDsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3Qgb3B0aW9uCnsKCiAgY29uc3QgY2hhciAq bmFtZTsKCgoKICAgCgogIGludCBoYXNfYXJnOwogIGludCAqZmxhZzsKICBpbnQgdmFsOwp9OwoK IAoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGdldG9wdCAoKTsKCmV4dGVybiBpbnQgZ2V0b3B0X2xv bmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzLAoJ CSAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CmV4 dGVybiBpbnQgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LAoJ CQkgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0cywKCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0 IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CgogCmV4dGVybiBpbnQgX2dldG9wdF9p bnRlcm5hbCAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LAoJCQkgICAgIGNvbnN0IGNoYXIg KnNob3J0b3B0cywKCQkgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ29wdHMs IGludCAqbG9uZ2luZCwKCQkJICAgICBpbnQgbG9uZ19vbmx5KTsKCgoKCgoKCgoKfQoKCgojIDI1 MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiBpbnQgYXRjaGVja3BvaW50KHZv aWQgKCopKHZvaWQpKTsKZXh0ZXJuIGludCBhdHJlc3RhcnQodm9pZCAoKikodm9pZCkpOwpleHRl cm4gaW50IGR1cDIoaW50LCBpbnQpOwpleHRlcm4gaW50IGdldHB3KGludCwgY2hhciAqKTsKZXh0 ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2 b2lkKTsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0 dHkoaW50KTsKZXh0ZXJuIHZvaWQgbDN0b2wobG9uZyAqLCBjb25zdCBjaGFyICosIGludCk7CmV4 dGVybiB2b2lkIGx0b2wzKGNoYXIgKiwgY29uc3QgbG9uZyAqLCBpbnQpOwpleHRlcm4gdm9pZCAq bWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOwoKCgoKCgoKCSAKCmV4dGVybiBsb25nIGRvdWJsZSBh dG9sZChjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZChjb25zdCBjaGFy ICpucHRyLCBjaGFyICoqZW5kcHRyKTsKZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBp bnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBp bnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAq KTsKZXh0ZXJuIGNoYXIgKmVjdnRsKGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4 dGVybiBjaGFyICpmY3Z0bChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4g Y2hhciAqZ2N2dGwobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKCgoKCiAKCgoKCgoKCnR5cGVk ZWYgc3RydWN0IHsKCSBfX2ludDY0X3QJcXVvdDsKCSBfX2ludDY0X3QJcmVtOwoJfSBsbGRpdl90 OwoKZXh0ZXJuIF9faW50NjRfdCBhdG9sbChjb25zdCBjaGFyICopOwpleHRlcm4gX19pbnQ2NF90 IHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gX191aW50NjRfdCBz dHJ0b3VsbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiBfX2ludDY0X3QgbGxh YnMoX19pbnQ2NF90KTsKCgoKCmV4dGVybiBsbGRpdl90IGxsZGl2KF9faW50NjRfdCwgX19pbnQ2 NF90KTsKCgoKCgoKCmV4dGVybiBjaGFyICplY3Z0X3IoZG91YmxlLCBpbnQsIGludCAqLCBpbnQg KiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmZjdnRfcihkb3VibGUsIGludCwgaW50ICosIGludCAq LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIgKnFlY3Z0X3IobG9uZyBkb3VibGUsIGludCwgaW50ICos IGludCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqcWZjdnRfcihsb25nIGRvdWJsZSwgaW50LCBp bnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0bF9yKGxvbmcgZG91YmxlLCBp bnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmZjdnRsX3IobG9uZyBkb3Vi bGUsIGludCwgaW50ICosIGludCAqLCBjaGFyICopOwoKCgoKCgp9CgoKIyAzNDMgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwoKCgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1 L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvY3N0ZGxpYiIgMiAzCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJjc3RkbGliIgoKCmV4dGVy biAiQysrIiB7CgoKCgppbmxpbmUgbG9uZyAgIGFicyhsb25nIHgpCQl7IHJldHVybiB4ID49IDAg PyB4IDogLXg7IH0KCiAKCn0gIAoKCiMgMjcgInNpZ2hhbmRsZXJzLmNjIiAyCgojIDEgIi91c3Iv cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3NpZ25hbCIgMSAzCiAKIAoKCgojIDEg Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJl dmlzaW9uOiAxLjU3ICQiCiAKCgoKCgoKCgoKCgoKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoKCgoK IyAxMDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Np Z25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoKCmV4dGVybiAiQyIgewoKCgoj aWRlbnQgCSIkUmV2aXNpb246IDMuMTQ0ICQiCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoKI2lkZW50IAkiJFJldmlzaW9u OiAzLjEzOSAkIgoKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1Y2hhcl90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0ICB1c2hvcnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludF90 Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1bG9uZ190OwoKIAoKIyAxICIvdXNyL2luY2x1ZGUv c3lzL3B0aHJlYWQuaCIgMSAzCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgCQlwdGhyZWFkX3Q7CQkgCgoKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs1XTsgfSBw dGhyZWFkX2F0dHJfdDsJCSAKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs4XTsgfSBwdGhyZWFk X211dGV4X3Q7CSAKdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFsyXTsgfSBwdGhyZWFkX211dGV4 YXR0cl90OwkgCnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbOF07IH0gcHRocmVhZF9jb25kX3Q7 CQkgCnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbMl07IH0gcHRocmVhZF9jb25kYXR0cl90Owkg CnR5cGVkZWYgc3RydWN0IHsgbG9uZyBfX0RbMTZdOyB9IHB0aHJlYWRfcndsb2NrX3Q7CSAKdHlw ZWRlZiBzdHJ1Y3QgeyBsb25nIF9fRFs0XTsgfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsJIAp0eXBl ZGVmIGludAkJCXB0aHJlYWRfa2V5X3Q7CQkgCnR5cGVkZWYgaW50CQkJcHRocmVhZF9vbmNlX3Q7 CQkgCgoKCgp9CgoKCiMgNDAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlw ZWRlZgljaGFyICoJCWFkZHJfdDsJCSAKdHlwZWRlZgljaGFyICoJCWNhZGRyX3Q7CSAKCnR5cGVk ZWYJX19pbnQ2NF90CWRhZGRyX3Q7CSAKCgoKdHlwZWRlZglsb25nCQlwZ25vX3Q7CQkgCnR5cGVk ZWYJX191aW50MzJfdAlwZm5fdDsJCSAKdHlwZWRlZglzaG9ydAkJY250X3Q7CQkgCnR5cGVkZWYg dW5zaWduZWQgbG9uZwliYXNpY3RpbWVfdDsKdHlwZWRlZiBfX2ludDY0X3QJbWljcm9fdDsKIAoK Cgp0eXBlZGVmIF9faW50MzJfdAlwZ2NudF90OwkgCgp0eXBlZGVmIGVudW0geyBCX0ZBTFNFLCBC X1RSVUUgfSBib29sZWFuX3Q7CgoKIAoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJCWlkX3Q7CSAKCQkJ CQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgoKCgoKIAoKCnR5cGVkZWYgdWxvbmdfdAltYWpvcl90 OwkgCnR5cGVkZWYgdWxvbmdfdAltaW5vcl90OwkgCgoKCgoKCiAKCgoKCgoKCgoKCnR5cGVkZWYJ dXNob3J0X3Qgb19tb2RlX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19kZXZfdDsJCSAKdHlwZWRlZgl1 c2hvcnRfdCBvX3VpZF90OwkJIAp0eXBlZGVmCW9fdWlkX3QJb19naWRfdDsJCSAKdHlwZWRlZglz aG9ydAlvX25saW5rX3Q7CQkgCnR5cGVkZWYgc2hvcnQJb19waWRfdDsJCSAKdHlwZWRlZiBfX3Vp bnQzMl90IG9faW5vX3Q7CQkgCgoKdHlwZWRlZgl1bnNpZ25lZCBsb25nCW1vZGVfdDsJCSAKdHlw ZWRlZgl1bnNpZ25lZCBsb25nCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCXVpZF90Owp0eXBlZGVm CWxvbmcJCWdpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJbmxpbmtfdDsJIAp0eXBlZGVmIGxv bmcJCXBpZF90OwkJIAoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgdGlkX3Q7ICAgICAgICAgICAgICAg ICAgICAgICAKCnR5cGVkZWYgZGV2X3QJdmVydGV4X2hkbF90OwkJIAoKCnR5cGVkZWYJX191aW50 NjRfdAlpbm9fdDsJCSAKCgoKdHlwZWRlZiBfX3VpbnQ2NF90CWlubzY0X3Q7CSAKCgoKCgoKCgp0 eXBlZGVmIF9faW50NjRfdAlvZmZfdDsJCSAKCgoKCgoKCnR5cGVkZWYJX19pbnQ2NF90CW9mZjY0 X3Q7CSAKCgp0eXBlZGVmIF9fc2NpbnRfdAlfX3Njb2ZmX3Q7CSAKCnR5cGVkZWYgX19zY29mZl90 CXNjb2ZmX3Q7CSAKCgoKCSAKdHlwZWRlZglfX2ludDY0X3QJYmxrY250NjRfdDsKdHlwZWRlZglf X3VpbnQ2NF90CWZzYmxrY250NjRfdDsKdHlwZWRlZglfX3VpbnQ2NF90CWZzZmlsY250NjRfdDsK CgoKdHlwZWRlZglfX2ludDY0X3QJYmxrY250X3Q7CSAKdHlwZWRlZglfX3VpbnQ2NF90CWZzYmxr Y250X3Q7CSAKdHlwZWRlZglfX3VpbnQ2NF90CWZzZmlsY250X3Q7CSAKCgoKCgoKdHlwZWRlZgls b25nCQlzd2Jsa190Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJcGFkZHJfdDsJIAp0eXBlZGVmCXVu c2lnbmVkIGxvbmcJaW9wYWRkcl90OwkgCnR5cGVkZWYJaW50CQlrZXlfdDsJCSAKdHlwZWRlZgl1 bnNpZ25lZCBjaGFyCXVzZV90OwkJIAp0eXBlZGVmCWxvbmcJCXN5c2lkX3Q7CnR5cGVkZWYJc2hv cnQJCWluZGV4X3Q7Cgp0eXBlZGVmIHNpZ25lZCBzaG9ydAluYXNpZF90OyAgICAgICAgIAp0eXBl ZGVmIHNpZ25lZCBzaG9ydAljbm9kZWlkX3Q7CSAKdHlwZWRlZglzaWduZWQgY2hhciAgCXBhcnRp ZF90OwkgCnR5cGVkZWYgc2lnbmVkIHNob3J0IAltb2R1bGVpZF90OwkgCnR5cGVkZWYgc2lnbmVk IHNob3J0IAljbW9kdWxlaWRfdDsJIAoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgCWxvY2tfdDsJCSAK dHlwZWRlZglzaWduZWQgc2hvcnQJY3B1aWRfdDsJIAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJcHJp X3Q7CQkgCnR5cGVkZWYgX191aW50NjRfdAlhY2N1bV90OwkgCnR5cGVkZWYgX19pbnQ2NF90CXBy aWRfdDsJCSAKdHlwZWRlZiBfX2ludDY0X3QJYXNoX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNlbGxf dDsJCSAKdHlwZWRlZiBpbnQJCWNyZWRpZF90OwkgCnR5cGVkZWYgX19pbnQ2NF90CWppZF90OwkJ IAoKIyAyMTQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiMgMjI0ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMKCgoKCgp0eXBlZGVmCWxvbmcJCXRpbWVfdDsJCSAKCgoKCgoKCgoK dHlwZWRlZglsb25nCQljbG9ja190OyAgCgoKCgoKCiMgMjU0ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKCgoKCnR5cGVkZWYgaW50ICAgICAgICAgICAgIGNsb2NraWRfdDsKCgoKdHlwZWRl ZiBpbnQJCXRpbWVyX3Q7CgoKCiAKCgoKCnR5cGVkZWYJdW5zaWduZWQgaW50CXVzZWNvbmRzX3Q7 CgoKIAoKCgp0eXBlZGVmIF9fc2N1bnNpZ25lZF90CWJpdG51bV90OwkgCnR5cGVkZWYgX19zY3Vu c2lnbmVkX3QJYml0bGVuX3Q7CSAKCgp0eXBlZGVmIGludCBwcm9jZXNzb3JpZF90OwkJIAp0eXBl ZGVmIGludCB0b2lkX3Q7CQkJIAp0eXBlZGVmCWxvbmcgKnFhZGRyX3Q7CQkgICAgICAgCnR5cGVk ZWYgX191aW50MzJfdCBpbnN0X3Q7CQkgCgogCgoKCgoKCnR5cGVkZWYgX191aW50NjRfdCBtYWNo cmVnX3Q7CgoKIAoKCgoKCgp0eXBlZGVmIF9fdWludDY0X3QgZnByZWdfdDsKCgogCgoKCgoKCgp0 eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgICAgIGludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj aGFyICAgICAgICAgICB1aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICAgICAgICAgIGlu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICAgICAgdWludDE2X3Q7CnR5cGVkZWYg c2lnbmVkIGludCAgICAgICAgICAgICAgaW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAg ICAgICAgICB1aW50MzJfdDsKdHlwZWRlZiBfX2ludDY0X3QgCQlpbnQ2NF90Owp0eXBlZGVmIF9f dWludDY0X3QJCXVpbnQ2NF90Owp0eXBlZGVmIF9faW50NjRfdCAJCWludG1heF90Owp0eXBlZGVm IF9fdWludDY0X3QJCXVpbnRtYXhfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBpbnQgICAgICAgICBp bnRwdHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCAgICAgICB1aW50cHRyX3Q7CgoKIAoK Cgp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdV9pbnQ4X3Q7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJ dV9pbnQxNl90Owp0eXBlZGVmCV9fdWludDMyX3QJdV9pbnQzMl90OwoKCiAKCgoKCgoKCgoKCgoK CgoKIAoKCgp0eXBlZGVmCWxvbmcJaG9zdGlkX3Q7CgogCgoKCgoKCgoKIAoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvYnNkX3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojaWRlbnQg CSIkUmV2aXNpb246IDEuMiAkIgoKIAoKCgoKdHlwZWRlZglzdHJ1Y3QgeyBpbnQgclsxXTsgfSAq CXBoeXNhZHI7CnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1bmNoYXI7CnR5cGVkZWYJdW5zaWduZWQg Y2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdXNob3J0Owp0eXBlZGVmCXVuc2ln bmVkIHNob3J0CXVfc2hvcnQ7CnR5cGVkZWYJdW5zaWduZWQgaW50CXVpbnQ7CnR5cGVkZWYJdW5z aWduZWQgaW50CXVfaW50Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJdWxvbmc7CnR5cGVkZWYJdW5z aWduZWQgbG9uZwl1X2xvbmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0g cXVhZDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgogCiAKIAoKIAogCiAKIAoKCgoKI2lkZW50IAkiJFJldmlzaW9uOiAxLjE3ICQiCgoK ZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNr X3Q7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1ZmRfbWFza190OwoKCgoKCgoKCgoKdHlwZWRlZiBz dHJ1Y3QgZmRfc2V0IHsKCgoKCWZkX21hc2tfdAlmZHNfYml0c1soKCggMTAyNCAgKSsoKCAgKGlu dCkoc2l6ZW9mKGZkX21hc2tfdCkgKiA4ICkgICktMSkpLyggIChpbnQpKHNpemVvZihmZF9tYXNr X3QpICogOCApICApKSBdOwp9IGZkX3NldDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAxIDMKCgoKZXh0ZXJuICJDIiB7CgojaWRlbnQgICIkUmV2aXNpb246IDEuNDEgJCIKIAoK CgoKCgoKCgoKCgoKCgoKIAogCiAKCiAKIAogCiAKCiAKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lk ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBj b25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy ICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVt Y2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpleHRlcm4gaW50IG1lbWNt cChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzdHJjbXAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNp emVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwoKZXh0ZXJuIHNp emVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKI3ByYWdtYSBpbnRfdG9f dW5zaWduZWQgc3RyY3NwbgoKZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBjaGFyICosIGludCk7CgpleHRl cm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiNwcmFnbWEgaW50 X3RvX3Vuc2lnbmVkIHN0cnNwbgoKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CgpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0 cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CiNwcmFnbWEg aW50X3RvX3Vuc2lnbmVkIHN0cmxlbgoKCmV4dGVybiBpbnQgZmZzKGludCk7CiAKZXh0ZXJuIGlu dCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJu Y2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKZXh0ZXJuIGNo YXIgKnN0cmR1cChjb25zdCBjaGFyICopOwoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IoY2hhciAq LCBjb25zdCBjaGFyICosIGNoYXIgKiopOwoKCiMgMTMyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDMKCgoKfQoKCiMgMjA1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCiMgODAgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAzCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYJbG9uZwlmZF9tYXNrOwoK CgoKCgoKCn0KCgojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL2JzZF90eXBlcy5oIiAyIDMKCgoKIyAz NzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fdWludDY0X3Qg a19zaWdzZXRfdDsJIAoKCgoKCgoKCgojIDQ5OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz CgoKCiMgODIgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMwoKIAoKCgoKCgoKCiAKCgoK CgoKCgogCnR5cGVkZWYgdm9pZCAJKCpTSUdfUEYpIChpbnQgKTsKCgoKCgoKCgogCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3NpZ2V2ZW50LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiNpZGVu dCAJIiRSZXZpc2lvbjogMS44ICQiCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCnR5cGVk ZWYgdW5pb24gc2lndmFsIHsKCWludAlzaXZhbF9pbnQ7Cgl2b2lkCSpzaXZhbF9wdHI7Cn0gc2ln dmFsX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuaW9uIG5vdGlmeWluZm8gIHsKCWludAluaXNp Z25vIDsJCQkgCgl2b2lkCSgqIG5pZnVuYyApIChzaWd2YWxfdCk7CSAJIAp9IG5vdGlmeWluZm9f dDsKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50IHsKCWludAkJCXNpZ2V2X25vdGlmeTsKCW5vdGlm eWluZm9fdAkJc2lnZXZfbm90aWZ5aW5mbzsKCXNpZ3ZhbF90CQlzaWdldl92YWx1ZTsKCXZvaWQg CQkJKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pIChzaWd2YWxfdCk7CiAgICAgICAgcHRocmVhZF9h dHRyX3QgCQkqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7Cgl1bnNpZ25lZCBsb25nCQlzaWdldl9y ZXNlcnZlZFsxMV07Cgl1bnNpZ25lZCBsb25nCQlzaWdldl9wYWRbNl07Cn0gc2lnZXZlbnRfdDsK CgoKCgoKCgoKfQoKCgojIDExNCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMiAzCgoKCgog CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMSAzCiAKCgoKCgoKCgoKCiAKIAog CgogCiAKIAogCgoKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMjYgJCIKCgpleHRlcm4gIkMiIHsK CgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9fc2lnaW5m byB7CglpbnQJc2lfc2lnbm87CQkgCglpbnQgCXNpX2NvZGU7CQkgCglpbnQJc2lfZXJybm87CQkg Cgl1bmlvbiB7CgoJCWludAlzaV9wYWRbKCgxMjggIC8gc2l6ZW9mKF9faW50MzJfdCkpIC0gMykg XTsJIAoKCQlzdHJ1Y3QgewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0 cnVjdCB7CgkJCQkJdWlkX3QJX191aWQ7CgkJCQl9IF9fa2lsbDsKCQkJCXN0cnVjdCB7CgkJCQkJ Y2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludCBfX3N0YXR1czsKCQkJCQljbG9ja190IF9fc3RpbWU7 CgkJCQkJaW50IF9fc3dhcDsKCQkJCX0gX19jbGQ7CgkJCX0gX19wZGF0YTsKCQl9IF9fcHJvYzsJ CQkKCgkJc3RydWN0IHsJIAoJCQl2b2lkIAkqX19hZGRyOwkgCgkJfSBfX2ZhdWx0OwoKCQlzdHJ1 Y3QgewkJCSAKCQkgCgkJCWludAlfX2ZkOwkgCgkJCWxvbmcJX19iYW5kOwoJCX0gX19maWxlOwoK CQl1bmlvbiBzaWd2YWwJX192YWx1ZTsKCgoKCX0gX19kYXRhOwoKfSBzaWdpbmZvX3Q7CgoKCgoK CgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCn0KCgoKIyAxMjEgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMwoK CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAKICAgICAgICBfX3VpbnQz Ml90IF9fc2lnYml0c1s0XTsKfSBzaWdzZXRfdDsKCgogCnR5cGVkZWYgdW5pb24gX19zaWdoYW5k bGVyIHsKICAgIAl2b2lkICAoKnNhX2hhbmRsZXIxKShpbnQgKTsgIAoKICAgIAl2b2lkICgqc2Ff c2lnYWN0aW9uMSkoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKCn0gX19zaWdoYW5kbGVyX3Q7 CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKCWludCBzYV9mbGFnczsJCQkgCiAgICAJ X19zaWdoYW5kbGVyX3Qgc2Ffc2lnaGFuZGxlcjsJIAoJc2lnc2V0X3Qgc2FfbWFzazsJCSAKCQkJ CQkgCglpbnQgc2FfcmVzdlsyXTsKfSBzaWdhY3Rpb25fdDsKIAoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKIAogCgoKCgoKCgogCgoKCQkJCQkgCgogCgoJCQkJCSAKCQkJCQkgCgoKIAoKCnN0cnVjdCBz aWdzdGFjayB7Cgl2b2lkCSpzc19zcDsJCQkgCglpbnQJc3Nfb25zdGFjazsJCSAKfTsKCiAKCgoK IAoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMSAzCiAKCgoKCgoK CgoKCiAKCgoKCgoKCgoKCgoKCiNpZGVudCAgIiRSZXZpc2lvbjogMS4zNiAkIgoKCmV4dGVybiAi QyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfc2lnYWx0 c3RhY2sgewoJdm9pZAkqc3Nfc3A7CglzaXplX3QJc3Nfc2l6ZTsKCWludAlzc19mbGFnczsKfSBz dGFja190OwoKCgoKCgoKCgogCgoKIyAxMTkgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIg MwoKCiAKCgoKCgoKCgp0eXBlZGVmIG1hY2hyZWdfdCBncmVnX3Q7CgoKIAoKdHlwZWRlZiBncmVn X3QgZ3JlZ3NldF90WzM3IF07CgoKCgp0eXBlZGVmIHN0cnVjdCBfX2ZwcmVnc2V0IHsKCXVuaW9u IHsKCQlkb3VibGUJCV9fZnBfZHJlZ3NbMzJdOwoKCQlzdHJ1Y3QgewoJCQlfX3VpbnQzMl90CV9m cF9maWxsOwoJCQlmbG9hdAkJX2ZwX2ZyZWdzOwoJCX0gX19mcF9mcmVnc1szMl07CgoKCgoKCgkJ bWFjaHJlZ190CV9fZnBfcmVnc1szMl07Cgl9IF9fZnBfcjsKCV9fdWludDMyX3QgCV9fZnBfY3Ny OwoJX191aW50MzJfdAlfX2ZwX3BhZDsKfSBmcHJlZ3NldF90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJ Z3JlZ3NldF90CV9fZ3JlZ3M7CSAKCWZwcmVnc2V0X3QgCV9fZnByZWdzOwkgCn0gbWNvbnRleHRf dDsKCnR5cGVkZWYgc3RydWN0IF9fdWNvbnRleHQgewoJdW5zaWduZWQgbG9uZwl1Y19mbGFnczsK CXN0cnVjdCBfX3Vjb250ZXh0ICp1Y19saW5rOwoJc2lnc2V0X3QgICAJdWNfc2lnbWFzazsKCXN0 YWNrX3QgCXVjX3N0YWNrOwoJbWNvbnRleHRfdCAJdWNfbWNvbnRleHQ7Cglsb25nCQl1Y19maWxs ZXJbNDldOwp9IHVjb250ZXh0X3Q7CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgojIDIyMyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAzCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMyOCAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5o IiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy9z aWduYWwuaCIgMiAzCgoKCiMgMjY1ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCgoKCgog CgoKCmV4dGVybiB2b2lkCSgqYnNkX3NpZ25hbChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOwpl eHRlcm4gaW50CWtpbGxwZyhwaWRfdCwgaW50KTsKZXh0ZXJuIGludAlzaWdzdGFjayhzdHJ1Y3Qg c2lnc3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgoKCmV4dGVybiB2b2lkIAkoKnNpZ25h bChpbnQsdm9pZCAgKCopKGludCApKSkoaW50ICk7CgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgp0 eXBlZGVmIHN0cnVjdCBzaWdjb250ZXh0IHsKCV9fdWludDMyX3QJc2NfcmVnbWFzazsJIAoJX191 aW50MzJfdAlzY19zdGF0dXM7CSAKCV9fdWludDY0X3QJc2NfcGM7CQkgCgkgCgoKCV9fdWludDY0 X3QJc2NfcmVnc1szMl07CSAKCSAKCgoJX191aW50NjRfdAlzY19mcHJlZ3NbMzJdOwkgCglfX3Vp bnQzMl90CXNjX293bmVkZnA7CSAKCV9fdWludDMyX3QJc2NfZnBjX2NzcjsJIAoJX191aW50MzJf dAlzY19mcGNfZWlyOwkgCgkJCQkJIAoJX191aW50MzJfdAlzY19zc2ZsYWdzOwkgCglfX3VpbnQ2 NF90CXNjX21kaGk7CSAKCV9fdWludDY0X3QJc2NfbWRsbzsKCSAKCgoJX191aW50NjRfdAlzY19j YXVzZTsJIAoJX191aW50NjRfdAlzY19iYWR2YWRkcjsJIAoJX191aW50NjRfdAlzY190cmlnZ2Vy c2F2ZTsJIAoJc2lnc2V0X3QJc2Nfc2lnc2V0OwkgCglfX3VpbnQ2NF90CXNjX2ZwX3JvdW5kZWRf cmVzdWx0OwkgCglfX3VpbnQ2NF90CXNjX3BhZFszMV07Cn0gc2lnY29udGV4dF90OwoKIAoKCgoK IAoKCiAKCgoKCgoKCgoKCgoKCgojIDM2NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAxMDkgIi91c3IvaW5jbHVkZS9zaWduYWwu aCIgMiAzCgoKCiAKdHlwZWRlZiBpbnQgCXNpZ19hdG9taWNfdDsKZXh0ZXJuIGludCByYWlzZShp bnQpOwoKCgoKZXh0ZXJuIGludCBraWxsKHBpZF90LCBpbnQpOwoKZXh0ZXJuIGludCBzaWdhY3Rp b24oaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKik7CmV4 dGVybiBpbnQgc2lncGVuZGluZyhzaWdzZXRfdCAqKTsKZXh0ZXJuIGludCBzaWdwcm9jbWFzayhp bnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ3N1c3BlbmQo Y29uc3Qgc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICosIGludCk7 CmV4dGVybiBpbnQgc2lnZGVsc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2lnZW1w dHlzZXQoc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lnZmlsbHNldChzaWdzZXRfdCAqKTsKZXh0 ZXJuIGludCBzaWdpc21lbWJlcihjb25zdCBzaWdzZXRfdCAqLCBpbnQpOwoKCgogCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3RpbWVzcGVjLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKI2lkZW50 IAkiJFJldmlzaW9uOiAxLjUgJCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgog CgoKCnR5cGVkZWYgc3RydWN0IHRpbWVzcGVjICB7CgoKCgl0aW1lX3QgIHR2X3NlYzsJCSAKCgoK Cglsb25nICAgIHR2X25zZWM7Cgp9IHRpbWVzcGVjX3Q7CgoKfQoKCgojIDEzNiAiL3Vzci9pbmNs dWRlL3NpZ25hbC5oIiAyIDMKCgpleHRlcm4gaW50IHNpZ3F1ZXVlKHBpZF90ICwgaW50LCBjb25z dCB1bmlvbiBzaWd2YWwpOwpleHRlcm4gaW50IHNpZ3dhaXRpbmZvKGNvbnN0IHNpZ3NldF90ICos IHNpZ2luZm9fdCAqKTsKZXh0ZXJuIGludCBzaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKiwg c2lnaW5mb190ICosIGNvbnN0IHRpbWVzcGVjX3QgKik7CmV4dGVybiBpbnQgc2lnd2FpdChjb25z dCBzaWdzZXRfdCAqLCBpbnQgKik7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbChwdGhyZWFk X3QsIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrKGludCwgY29uc3Qgc2lnc2V0X3Qg Kiwgc2lnc2V0X3QgKik7CgoKCiAKCgoKZXh0ZXJuIGludCBzaWdwYXVzZShpbnQpOwoKZXh0ZXJu IHZvaWQgICgqc2lnc2V0KGludCx2b2lkICAoKikoaW50ICkpKShpbnQgKTsKCmV4dGVybiBpbnQg c2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ3JlbHNlKGludCk7CmV4dGVybiBpbnQgc2lnaWdu b3JlKGludCk7CmV4dGVybiBpbnQgc2lnaW50ZXJydXB0KGludCwgaW50KTsKCmV4dGVybiBpbnQg X3NpZ2FsdHN0YWNrIChjb25zdCBzdGFja190ICosIHN0YWNrX3QgKik7CgoKCgoKCgoKCgoKZXh0 ZXJuIGNoYXIgKl9zeXNfc2lnbGlzdFtdOwpleHRlcm4gaW50IF9zeXNfbnNpZzsKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMKIAoKCgoKCgoKCgoKIAogCgogCiAKIAoKCgoK ZXh0ZXJuICJDIiB7CgoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjExICQiCgoKCiAKCgoKCgoKCgoK CiAKCgoKCgp0eXBlZGVmIGVudW0gaWR0eXBlIHsKCgoKCVBfUElELAkJIAoJUF9QUElELAkJIAoJ UF9QR0lELAkJIAoJCQkgCglQX1NJRCwJCSAKCVBfQ0lELAkJIAoJUF9VSUQsCQkgCglQX0dJRCwJ CSAKCVBfQUxMCQkgCn0gaWR0eXBlX3Q7CgoKCiAKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewoJUE9Q X0RJRkYsCSAKCQkJIAoJCQkgCglQT1BfQU5ELAkgCgkJCSAKCQkJIAoJUE9QX09SLAkJIAoJCQkg CgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJCQkgCn0gaWRvcF90OwoKIAoKCgp0eXBlZGVmIHN0cnVj dCBwcm9jc2V0IHsKCWlkb3BfdAkJcF9vcDsJIAoJCQkJIAoJCQkJIAoJCQkJIAoKCWlkdHlwZV90 CXBfbGlkdHlwZTsKCQkJCSAKCQkJCSAKCWlkX3QJCXBfbGlkOwkgCgoJaWR0eXBlX3QJcF9yaWR0 eXBlOwoJCQkJIAoJCQkJIAoJaWRfdAkJcF9yaWQ7CSAKfSBwcm9jc2V0X3Q7CgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgp9CgoKCiMgMTgwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0 ZXJuIGludCAoKnNzaWduYWwoaW50LCBpbnQgKCopKGludCkpKShpbnQpOwpleHRlcm4gaW50IGdz aWduYWwoaW50KTsKZXh0ZXJuIGludCBzaWdzZW5kKGlkdHlwZV90LCBpZF90LCBpbnQpOwpleHRl cm4gaW50IHNpZ3NlbmRzZXQoY29uc3QgcHJvY3NldF90ICosIGludCk7CgogCgoKCgoKCiAKCgoK CgpleHRlcm4gaW50IHNnaV9hbHRlcnNpZ3MoaW50LCBzaWdzZXRfdCAqLCBpbnRbXSk7CmV4dGVy biBpbnQgc2dpX3NpZ2Zmc2V0KHNpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQgc2dpX2R1bXBz ZXQoc2lnc2V0X3QgKik7CgoKCgoKCgp9CgoKIyA2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2NzaWduYWwiIDIgMwoKCiMgMjggInNpZ2hhbmRsZXJzLmNjIiAyCgoKIyAx ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p cml4Ni41LzIuOTUuMy9pbmNsdWRlL25ldyIgMSAzCiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2Ug Im5ldyIKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t aXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCgoK CgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRk ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50ICBwdHJkaWZmX3Q7CgoKCgoKCgoKCiAKCgoKCiAKCiAK CgoKIyAxODcgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p cHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKIAoKCgoKIAoK CgojIDI2OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw cy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoK CiAKCiAKCiMgMzE3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxp Yi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK CgoKCgoKCgogCgoKCgoKCgojIDggIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xp Yi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAi L3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJp eDYuNS8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJm YWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBl eGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlv biAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBi YWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9u ICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQg KCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxl cikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxl cik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5l eHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lk IHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1 Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL25l dyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxs b2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq IHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3Ry dWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlw ZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVy IChuZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93 IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChz dGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZv aWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3 IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3Ig bmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh dG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQg b3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp OwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93 KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwg dm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyAzMCAic2lnaGFu ZGxlcnMuY2MiIDIKCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9n Y2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv aW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJm YWNlCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1i dWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoK CiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5 NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91 c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2 LjUvMi45NS4zLy4uLy4uLy4uLy4uL21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9fR19jb25maWcu aCIgMSAzCiAgCgoKCgoKCgoKCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9fYXR0 cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIF9HX3Vp bnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmICAgICAgICAg IGludCAgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElf XykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXygoX19t b2RlX18oX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp YnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQ2 NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwoKX19leHRl bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CgoKCgoKCgoKdHlwZWRlZiBsb25nIF9HX2Ns b2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBfR19sbG9uZyBf R19mcG9zX3Q7CnR5cGVkZWYgbG9uZyBfR19naWRfdDsKdHlwZWRlZiBfR191bGxvbmcgX0dfaW5v X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBfR19ubGlua190Owp0eXBlZGVmIF9HX2xsb25nIF9HX29mZl90Owp0eXBlZGVmIGxvbmcgX0df cGlkX3Q7CgoKCnR5cGVkZWYgaW50ICBfR19wdHJkaWZmX3Q7CnR5cGVkZWYgaW50ICAgX0dfc2ln c2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR19zaXplX3Q7CnR5cGVkZWYgbG9uZyBf R190aW1lX3Q7CnR5cGVkZWYgbG9uZyBfR191aWRfdDsKdHlwZWRlZiBsb25nIF9HX3djaGFyX3Q7 CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3NzaXplX3Q7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoK CgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMt c2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAi L3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJp eDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv dXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4 Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CiAKCgoKCiAKCiAKCgoKIyAxODcgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xp Yi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK CgoKIAoKCgoKIAoKCgojIDI2OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGli L2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK CgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5 NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDg2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u Li9taXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCiMgMzAgIi91c3Iv cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoKCgoKCgoK CgoKCgoKIyA1NSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5o IiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgojaWRlbnQgICIkUmV2aXNpb246IDEuMyAkIgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKIyA1OSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5o IiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL3Vzci9wZW9w bGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1w X3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc1ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKICAgIHR5cGVkZWYgdm9pZCBfSU9fbG9j a190OwoKCgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAyMDgg Ii91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWly aXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKfTsKCnN0 cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3Jl YWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJ IAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNo YXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9f YnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1 cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAq X21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBp bnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAgIAogIHVuc2lnbmVkIHNo b3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAg IAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87CgoK CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBfSU9f RklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXplX3QgICgqd3JpdGUpICAo c3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfb2Zm X3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50 ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7 CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1 bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBf X3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxF ICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoKCgoK CgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVy biBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBf SU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9f RklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpf X2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsK ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBf SU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQg X0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQg KikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICos IF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAq LCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9f RklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX29mZl90ICBfSU9f c2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBfR19v ZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsKCgpleHRl cm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2 ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p cml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMK Cn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJl YW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRlZiBf R19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBlZGVm IF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFn czsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7 ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dp ZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3Rh dGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247 CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9wZW9w bGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6 IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChj b25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsK ICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5 cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJp dCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAg ZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4 ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4g PSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIs IGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0g eyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAs CgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAw ICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAw MCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0g MDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxk PWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVs ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3NyAiL3Vzci9wZW9wbGUvbWlsZ3Jh bS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBj b25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9z dHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgc2hv cnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZpbGwoc2hvcnQg IG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9 CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10Zmxh Z3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsg X2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBj b25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7 Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25l ZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg dmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJu IG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNr KSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNr KSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0Zihm bXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5t YXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dp ZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRo ID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25z dCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3Ry YnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90 aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0g ZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg dm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3Rh dGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25z dCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9z dGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0 ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyBy ZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0 IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBm YWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29u c3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJl dHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7 CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93 X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3Ry YnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFt YnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7 IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZv aWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBm bXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBw d29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGlu dCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJ bml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoK ICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwog ICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYq IHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vl a19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9f bWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQo aW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2Vy KHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsg cmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEo KTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQg Y2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0 cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0 YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQog IHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJ TEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAg IHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBf ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hh ciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRy KCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6 IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3Jp dGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNl OyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEw MCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29u c3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1 cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9l bmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dy aXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAg IGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJu IGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9p ZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAm IH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2Zs YWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAg ICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRi KGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFy KiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9l bmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAg ICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAg ICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBl ZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQg aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1 cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0 dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1 c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1 ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFs IHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0 dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFs IHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6Omlu fGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywg aW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihz dHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAg IHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z IHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQog ICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFt cG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6 b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlv czo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBp bnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2Nh dGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAw KTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQg dW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5l YnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1 bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+ MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4 MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglp ZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9j YXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxs ICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFp bCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93 YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBz dHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNw dXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikg eyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihj aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQog ICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29s dW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90ICBuLCBjaGFy IGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJu IF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4gX0lPX2dldGMo dGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9w dHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkg PT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVh ZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRyID49IF9JT19y ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJuICgtMSkgOwoJ ZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkg eyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAg aW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9 IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZm b3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIg Y29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hh ciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0 ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2Vl ayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAg IHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1 ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1 YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAg IGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsK CgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVi dWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmls ZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQg cHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGlu dCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1 cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkg PyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGlu dCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwg X3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFt YnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25z dCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywg c3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAog ICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNo YXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9 CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAg IHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7 CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAg ICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsK ICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Ns b3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJl YW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7 IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9m aWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249 NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFt KiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoK ICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMgMzEg Ii91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWly aXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoK ZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3Mm ICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYp Owp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFt JiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7 CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5k cyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewog ICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAg b3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBv cGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5m bHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFn cygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAg IG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNw dXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hh ciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNo YXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs IG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXpl IG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFt JiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAg b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxw KCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVh bSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3Ry ZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVk IGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAg b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNo YXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7 IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv cjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y PDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAg ICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19l eHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAg ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4p O30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVy YXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KGRvdWJsZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3Bl cmF0b3I8PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91 YmxlIG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9w ZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9z dHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAq dGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3Mg aXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3Np emVfdCAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFt KCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRp ZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk ZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxl biwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxp bSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25l ZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5l KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0 bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy ZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0 KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYg Z2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1 cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNp Z25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0 bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpw dHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwg c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBp c3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1 cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0 cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0 cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0m IGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVk ID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9Cgll bHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFp bCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlv czo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9 CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyBy ZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBp ZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1 cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlv czo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRi dWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAg IH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSBy ZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAg ICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkg ICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90 ICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49 MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVr ZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwog ICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlm IChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpi YWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2Qo KSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJl dHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwog ICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsK CgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0 b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQog ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+ KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFy JiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9w ZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBp c3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9w ZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9y Pj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYp OwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9w ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l ZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0m IG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAg ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRv cj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlz dHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7 IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVh bSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJl YW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs ICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpw dWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBf SU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYg cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykp OyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpw dWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBf SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg cmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykp OyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19v c3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNz aWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJu IGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3Ry ZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVj dCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0 Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxp bmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8 aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihp b3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgoj IDMyICJzaWdoYW5kbGVycy5jYyIgMgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjEzNyAkIgogCgoKCgoK CgoKCgoKCgoKCgogCiAKCiAKIAogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAK CgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgojIDEg Ii91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwogCiAKCiAKIAogCgogCgoKCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgog CgogCgoKCgkJCQkJIAoKCQkJCQkgCgoKCgkJCQkJIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCiMgMTg5ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzCgoKCiMgMjc4ICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCiAKCgpleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBjaGFy ICosIGludCk7CmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNpZ25lZCk7CmV4dGVybiBpbnQgY2hk aXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBn aWRfdCk7CmV4dGVybiBpbnQgY2xvc2UoaW50KTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAq KTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGludCBkdXAoaW50KTsKZXh0 ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4 dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29uc3Qg Kik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4dGVy biB2b2lkIF9leGl0KGludCk7CmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwpleHRlcm4gbG9uZyBm cGF0aGNvbmYoaW50LCBpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7 ICAgICAKZXh0ZXJuIGdpZF90IGdldGVnaWQodm9pZCk7CmV4dGVybiB1aWRfdCBnZXRldWlkKHZv aWQpOwpleHRlcm4gZ2lkX3QgZ2V0Z2lkKHZvaWQpOwoKCgpleHRlcm4gaW50IGdldGdyb3Vwcyhp bnQsIGdpZF90ICopOwoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwoKCgpleHRlcm4gcGlk X3QgZ2V0cGdycCh2b2lkKTsKCmV4dGVybiBwaWRfdCBnZXRwaWQodm9pZCk7CmV4dGVybiBwaWRf dCBnZXRwcGlkKHZvaWQpOwpleHRlcm4gdWlkX3QgZ2V0dWlkKHZvaWQpOwpleHRlcm4gaW50IGlz YXR0eShpbnQpOwoKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGludCBsaW5rZm9sbG93KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIyAzMzQg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKZXh0ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3Qs IGludCk7CmV4dGVybiBsb25nIHBhdGhjb25mKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGlu dCBwYXVzZSh2b2lkKTsKZXh0ZXJuIGludCBwaXBlKGludCAqKTsKZXh0ZXJuIHNzaXplX3QgcmVh ZChpbnQsIHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBybWRpcihjb25zdCBjaGFyICopOwpl eHRlcm4gaW50IHNldGdpZChnaWRfdCk7CmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3Qp OwpleHRlcm4gcGlkX3Qgc2V0c2lkKHZvaWQpOwpleHRlcm4gaW50IHNldHVpZCh1aWRfdCk7CmV4 dGVybiB1bnNpZ25lZCBzbGVlcCh1bnNpZ25lZCk7CmV4dGVybiBsb25nIHN5c2NvbmYoaW50KTsK ZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQpOwpleHRlcm4gaW50IHRjc2V0cGdycChpbnQsIHBp ZF90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKZXh0ZXJuIGludCB1bmxpbmsoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIHNzaXplX3Qgd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7 CgoKIAoKCmV4dGVybiBpbnQgZmRhdGFzeW5jKGludCk7CgoKCiAKCgpleHRlcm4gaW50IGZzeW5j KGludCk7CgoKCiAKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9mZl90KTsJCgoKCiAKCgpl eHRlcm4gaW50IGdldGxvZ2luX3IoY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHR0eW5hbWVf cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgq KSh2b2lkKSwgdm9pZCAoKikodm9pZCksIHZvaWQgKCopKHZvaWQpKTsKCgoKIAoKCgpleHRlcm4g c2l6ZV90ICAgY29uZnN0cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKCgoKIAoKCmV4dGVybiBpbnQg Y2hyb290KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgbmljZShpbnQpOwpleHRlcm4gY2hhciAg ICAgKmNyeXB0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgICAgIGVu Y3J5cHQoY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAgICAgKmdldHBhc3MoY29uc3QgY2hhciAq KTsKZXh0ZXJuIHZvaWQgICAgIHN3YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOwoK CgogCgoKZXh0ZXJuIGludCBicmsodm9pZCAqKTsKZXh0ZXJuIGludCBmY2hvd24oaW50LCB1aWRf dCwgZ2lkX3QpOwpleHRlcm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGdldGR0YWJsZXNp emUodm9pZCk7CmV4dGVybiBsb25nIGdldGhvc3RpZCh2b2lkKTsKZXh0ZXJuIGludCBnZXRob3N0 bmFtZShjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVy biBwaWRfdCBnZXRwZ2lkKHBpZF90KTsKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CmV4dGVy biBjaGFyICpnZXR3ZChjaGFyICopOwpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVp ZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGlu dCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKnNi cmsoc3NpemVfdCk7CgoKCmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwoKCgpleHRlcm4gaW50 IHNldHJlZ2lkKGdpZF90LCBnaWRfdCk7CiMgNDM5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKZXh0ZXJuIGludCBzeW1saW5rKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3luYyh2b2lkKTsKZXh0ZXJu IGludCB0cnVuY2F0ZShjb25zdCBjaGFyICosIG9mZl90KTsKZXh0ZXJuIHVzZWNvbmRzX3QgdWFs YXJtKHVzZWNvbmRzX3QsIHVzZWNvbmRzX3QpOwpleHRlcm4gaW50IHVzbGVlcCh1c2Vjb25kc190 KTsKCgoKCgoKCgoKCgoKCgpleHRlcm4gc3NpemVfdCBwcmVhZChpbnQsIHZvaWQgKiwgc2l6ZV90 LCBvZmZfdCk7CmV4dGVybiBzc2l6ZV90IHB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90 LCBvZmZfdCk7CgoKIAoKCgoKIAoKCnN0cnVjdCB0aW1ldmFsOwpleHRlcm4gaW50IHNlbGVjdChp bnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoKCiAK CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIAogCiAKCiAKIAogCiAKCgoKI2lk ZW50IAkiQCgjKXV0cy0zYjI6aW8vdWlvLmgJMS4yIgojaWRlbnQgCSIkUmV2aXNpb246IDEuMjIg JCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBpb3ZlYyB7CiAg ICAgICAgdm9pZCAqaW92X2Jhc2U7CiAgICAgICAgc2l6ZV90ICBpb3ZfbGVuOwp9IGlvdmVjX3Q7 CgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7 CmV4dGVybiBzc2l6ZV90IHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwoK CiMgODcgIi91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDMKCgoKfQoKCiMgNDgwICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdXRpbWUuaCIgMSAzCgoKCmV4dGVy biAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjkgJCIKIAoKCgoKCgoKCgoKCgoKCgoKIAog CiAKCiAKIAogCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdXRpbWUuaCIgMSAzCiAKIAogCgog CiAKIAogCgoKCgogCgoKCnN0cnVjdCB1dGltYnVmIHsKCXRpbWVfdCBhY3RpbWU7CQkgCgl0aW1l X3QgbW9kdGltZTsJCSAKfTsKCgojIDM0ICIvdXNyL2luY2x1ZGUvdXRpbWUuaCIgMiAzCgoKZXh0 ZXJuIGludCB1dGltZShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB1dGltYnVmICopOwoKCn0K CgojIDQ4MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3Jl X2NvbXAuaCIgMSAzCgoKCmV4dGVybiAiQyIgewoKI2lkZW50ICAiJFJldmlzaW9uOiAxLjEgJCIK IAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBjaGFyICpyZV9jb21wKGNvbnN0IGNoYXIgKik7CmV4 dGVybiBpbnQgcmVfZXhlYyhjb25zdCBjaGFyICopOwoKCn0KCgojIDQ4MiAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAyIDMKCmV4dGVybiBpbnQgYWNjdChjb25zdCBjaGFyICopOwpleHRlcm4gdm9p ZCBleGl0KGludCk7CmV4dGVybiBjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gaW50IHByb2ZpbCh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBpbnQsIHVu c2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBwdHJhY2UoaW50LCBwaWRfdCwg aW50LCBpbnQpOwpleHRlcm4gaW50IHJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 CSAKZXh0ZXJuIGludCBzZXRldWlkKHVpZF90KTsKZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsK ZXh0ZXJuIGludCBzdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBvZmZfdCB0ZWxsKGludCk7 CgoKCnN0cnVjdCBhY2N0X3NwaTsJIApleHRlcm4gaW50IGF0Zm9ya19jaGlsZCh2b2lkICgqZnVu Yykodm9pZCkpOwpleHRlcm4gaW50IGF0Zm9ya19jaGlsZF9wcmVwZW5kKHZvaWQgKCpmdW5jKSh2 b2lkKSk7CmV4dGVybiBpbnQgYXRmb3JrX3BhcmVudCh2b2lkICgqZnVuYykoaW50LCBpbnQpKTsK ZXh0ZXJuIGludCBhdGZvcmtfcHJlKHZvaWQgKCpmdW5jKSh2b2lkKSk7CmV4dGVybiBpbnQgYXRz cHJvY19jaGlsZCh2b2lkICgqZnVuYykodm9pZCkpOwpleHRlcm4gaW50IGF0c3Byb2NfcGFyZW50 KHZvaWQgKCpmdW5jKShpbnQsIGludCkpOwpleHRlcm4gaW50IGF0c3Byb2NfcHJlKHZvaWQgKCpm dW5jKSh1bnNpZ25lZCBpbnQpKTsKZXh0ZXJuIHZvaWQgYnNldChjaGFyICosIGJpdG51bV90KTsK ZXh0ZXJuIHZvaWQgYmNscihjaGFyICosIGJpdG51bV90KTsKZXh0ZXJuIGludCBidHN0KGNoYXIg KiwgYml0bnVtX3QpOwpleHRlcm4gdm9pZCBiZnNldChjaGFyICosIGJpdG51bV90LCBiaXRsZW5f dCk7CmV4dGVybiB2b2lkIGJmY2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJu IGJpdGxlbl90IGJmdHN0c2V0KGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGJp dGxlbl90IGJmdHN0Y2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGludCBC U0RjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgQlNEZHVwMihp bnQsIGludCk7CmV4dGVybiBpbnQgQlNEZmNob3duKGludCwgdWlkX3QsIGdpZF90KTsKZXh0ZXJu IGludCBCU0RnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgQlNEc2V0cGdycChpbnQsIGludCk7CmV4 dGVybiBpbnQgQlNEc2V0Z3JvdXBzKGludCwgaW50ICopOwpleHRlcm4gaW50IEJTRGdldGdyb3Vw cyhpbnQsIGludCAqKTsKZXh0ZXJuIGludCBfZGFlbW9uaXplKGludCwgaW50LCBpbnQsIGludCk7 CmV4dGVybiBhc2hfdCBnZXRhc2godm9pZCk7CmV4dGVybiBpbnQgZ2V0ZHRhYmxlaGkodm9pZCk7 CmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZShjaGFyICosIGludCk7CmV4dGVybiBwcmlkX3QgZ2V0 cHJpZCh2b2lkKTsKZXh0ZXJuIGNoYXIgKl9nZXRwdHkoaW50ICosIGludCwgbW9kZV90LCBpbnQp OwpleHRlcm4gaW50IGdldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7CmV4dGVybiBpbnQgbWlu Y29yZShjYWRkcl90LCBzaXplX3QsIGNoYXIgKik7CmV4dGVybiBpbnQgbXBpbih2b2lkICosIHNp emVfdCk7CmV4dGVybiBpbnQgbXVucGluKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBuZXdh cnJheXNlc3Modm9pZCk7CmV4dGVybiBwaWRfdCBwY3JlYXRlbChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGVscChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2KGNvbnN0IGNoYXIgKiwgY2hhciAq Y29uc3QgKik7CmV4dGVybiBwaWRfdCBwY3JlYXRldmUoY29uc3QgY2hhciAqLCBjaGFyICpjb25z dCAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2cChjb25zdCBjaGFyICos IGNoYXIgKmNvbnN0ICopOwoKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6 ZV90LCBvZmY2NF90KTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICos IHNpemVfdCwgb2ZmNjRfdCk7CgpleHRlcm4gaW50IHJleGVjbChjZWxsX3QsIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IHJleGVjbGUoY2VsbF90LCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCByZXhlY2xwKGNlbGxfdCwgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgcmV4ZWN2KGNlbGxfdCwg Y29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGludCByZXhlY3ZlKGNlbGxfdCwg Y29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGludCBy ZXhlY3ZwKGNlbGxfdCwgY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGZsb2F0 IF9zcXJ0X3MoZmxvYXQpOwpleHRlcm4gZG91YmxlIF9zcXJ0X2QoZG91YmxlKTsKZXh0ZXJuIGlu dCBzZXRhc2goYXNoX3QpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUoY29uc3QgY2hhciAqLCBp bnQpOwoKCgpleHRlcm4gaW50IHNldGdyb3VwcyhpbnQsIGNvbnN0IGdpZF90ICopOwoKZXh0ZXJu IGludCBzZXRob3N0aWQoaW50KTsKZXh0ZXJuIGludCBzZXRob3N0bmFtZShjb25zdCBjaGFyICos IGludCk7CmV4dGVybiBpbnQgc2V0cHJpZChwcmlkX3QpOwpleHRlcm4gaW50IHNldHJnaWQoZ2lk X3QpOwpleHRlcm4gaW50IHNldHJ1aWQodWlkX3QpOwpleHRlcm4gaW50IHNldHNwaW5mbyhzdHJ1 Y3QgYWNjdF9zcGkgKik7CmV4dGVybiBpbnQgc2dpa29wdChjb25zdCBjaGFyICosIGNoYXIgKiwg aW50KTsKZXh0ZXJuIGxvbmcgc2dpbmFwKGxvbmcpOwpleHRlcm4gb2ZmNjRfdCB0ZWxsNjQoaW50 KTsKZXh0ZXJuIGludCB2aGFuZ3VwKHZvaWQpOwoKIAoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50 LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGZkZXRhY2goY29uc3QgY2hhciAqKTsKZXh0ZXJu IGludCBpb2N0bChpbnQsIGludCwgLi4uKTsKCgoKCgkgCmV4dGVybiBpbnQgZnRydW5jYXRlNjQo aW50LCBvZmY2NF90KTsKZXh0ZXJuIGludCBsb2NrZjY0KGludCwgaW50LCBvZmY2NF90KTsKZXh0 ZXJuIG9mZjY0X3QgbHNlZWs2NChpbnQsIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQgdHJ1bmNh dGU2NChjb25zdCBjaGFyICosIG9mZjY0X3QpOwoKCgoKCn0KCgojIDM4ICJzaWdoYW5kbGVycy5j YyIgMgoKCgojIDEgImVycm9yLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBv c3Ryc3RyZWFtOwoKCgoKCmV4dGVybiB2b2lkIG1lc3NhZ2UgKGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKTsKZXh0ZXJuIHZvaWQgdXNhZ2UgKGNvbnN0IGNoYXIgKmZtdCwg Li4uKTsKZXh0ZXJuIHZvaWQgd2FybmluZyAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4g dm9pZCBlcnJvciAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gdm9pZCBwYXJzZV9lcnJv ciAoY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gdm9pZCBwYW5pYyAoY29uc3QgY2hhciAq Zm10LCAuLi4pIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKSA7CgogCmV4dGVybiBpbnQg ZXJyb3Jfc3RhdGU7CgogCiAKIApleHRlcm4gaW50IGJ1ZmZlcl9lcnJvcl9tZXNzYWdlczsKCiAK ZXh0ZXJuIG9zdHJzdHJlYW0gKmVycm9yX21lc3NhZ2VfYnVmZmVyOwoKZXh0ZXJuIHZvaWQgc3lt Ym9sc19vZl9lcnJvciAodm9pZCk7CgoKCiAKCgoKCiMgNDEgInNpZ2hhbmRsZXJzLmNjIiAyCgoj IDEgImlucHV0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojIDEgIi91c3IvcGVv cGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGlvIiAxIDMKIAogCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwoKCgpleHRlcm4gIkMiIHsKCiNpZGVudCAgIiRSZXZpc2lv bjogMS43NiAkIgogCgoKCgoKCgoKCgoKCgoKCgogCiAKCiAKIAogCgogCgoKCgoKCgoKIyA0OCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgojIDU5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoK Cgp0eXBlZGVmIF9faW50NjRfdAlmcG9zX3Q7CgoKCgoKIAoKCgoKCgojIDg2ICIvdXNyL2luY2x1 ZGUvc3RkaW8uaCIgMwoKCgoKCgoKIAp0eXBlZGVmCV9faW50NjRfdAlmcG9zNjRfdDsKCgoKCgog CgoKdHlwZWRlZiBjaGFyICp2YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQw ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK Cgp0eXBlZGVmIHN0cnVjdAkgCgogCgoKCgoKCgpfX2ZpbGVfcwoKewoKCWludAkJX2NudDsJIAoK CgoKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCXVuc2lnbmVkIGNoYXIJKl9iYXNlOwkgCgoKCgoK CXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVuc2lnbmVkIGNoYXIJX29fZmlsZTsJIAoJdW5zaWdu ZWQgc2hvcnQJX2ZpbGU7CSAKCgoKCn0gRklMRTsKCmV4dGVybiBGSUxFCQlfX2lvYlsxMDAgXTsJ CgpleHRlcm4gRklMRQkJKl9sYXN0YnVmOwpleHRlcm4gdW5zaWduZWQgY2hhciAJKl9idWZlbmR0 YWJbXTsKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9zaWJ1ZltdLCBfc29idWZbXTsKCgpleHRlcm4g aW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXJlbmFtZShjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlKHZvaWQpOwpleHRlcm4gY2hhcgkq dG1wbmFtKGNoYXIgKik7CmV4dGVybiBpbnQJZmNsb3NlKEZJTEUgKik7CmV4dGVybiBpbnQJZmZs dXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg Kik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxF ICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFyICopOwpleHRlcm4gaW50CXNldHZi dWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklM RSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25z dCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwog CmV4dGVybiBpbnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKIApleHRlcm4gaW50CXNucHJp bnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgogCmV4dGVybiBpbnQJc3By aW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNzY2FuZihjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludAl2ZnByaW50ZihGSUxFICos IGNvbnN0IGNoYXIgKiwgICBjaGFyICopOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAq LCAgIGNoYXIgKik7CgpleHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3Qg Y2hhciAqLCAgIGNoYXIgKik7CgpleHRlcm4gaW50CXZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hh ciAqLCAgIGNoYXIgKik7CiMgMjU2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKZXh0ZXJuIGlu dAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7 IApleHRlcm4gaW50CWZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0cyhjb25zdCBj aGFyICosIEZJTEUgKik7CmV4dGVybiBpbnQJZ2V0YyhGSUxFICopOwpleHRlcm4gaW50CWdldGNo YXIodm9pZCk7CmV4dGVybiBjaGFyCSpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQJcHV0YyhpbnQs IEZJTEUgKik7CmV4dGVybiBpbnQJcHV0Y2hhcihpbnQpOwpleHRlcm4gaW50CXB1dHMoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGludAl1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZy ZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2ln bmVkIGZyZWFkCmV4dGVybiBzaXplX3QJZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXpl X3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIGZ3cml0ZQpleHRlcm4gaW50CWZn ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQJZnNlZWsoRklMRSAqLCBsb25nLCBp bnQpOwpleHRlcm4gaW50CWZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBs b25nCWZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkCXJld2luZChGSUxFICopOwpleHRlcm4gdm9p ZAljbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50CWZlb2YoRklMRSAqKTsKZXh0ZXJuIGludAlm ZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQJcGVycm9yKGNvbnN0IGNoYXIgKik7CgpleHRlcm4g aW50CV9fZmlsYnVmKEZJTEUgKik7CQpleHRlcm4gaW50CV9fZmxzYnVmKGludCwgRklMRSAqKTsJ CgoKCSAKZXh0ZXJuIEZJTEUgICAgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBp bnQJZmlsZW5vKEZJTEUgKik7CgoKCgkgCmV4dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICopOwpl eHRlcm4gaW50CWZ0cnlsb2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZAlmdW5sb2NrZmlsZShG SUxFICopOwpleHRlcm4gaW50CWdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludAlwdXRj X3VubG9ja2VkKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjaGFyX3VubG9ja2VkKHZvaWQp OwpleHRlcm4gaW50CXB1dGNoYXJfdW5sb2NrZWQoaW50KTsKCgoKZXh0ZXJuIEZJTEUJKnBvcGVu KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsK CgoJIAoKZXh0ZXJuIGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN1c2VyaWQo Y2hhciAqKTsKZXh0ZXJuIGNoYXIJKnRlbXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsK CgoKCgkgCmV4dGVybiBjaGFyCSpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludAlta3N0ZW1wKGNo YXIgKik7CmV4dGVybiBpbnQJc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4g aW50CXNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludAlzeXN0ZW0oY29uc3QgY2hhciAqKTsK CgoKCSAKZXh0ZXJuIG9mZl90CWZ0ZWxsbyhGSUxFICopOwpleHRlcm4gaW50CWZzZWVrbyhGSUxF ICosIG9mZl90LCBpbnQpOwoKCgoJIApleHRlcm4gaW50CWZnZXRwb3M2NChGSUxFICosIGZwb3M2 NF90ICopOwpleHRlcm4gRklMRQkqZm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 CmV4dGVybiBGSUxFCSpmcmVvcGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUg Kik7CmV4dGVybiBpbnQJZnNlZWs2NChGSUxFICosIF9faW50NjRfdCwgaW50KTsKZXh0ZXJuIGlu dAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVybiBpbnQJZnNldHBvczY0KEZJ TEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBfX2ludDY0X3QgZnRlbGw2NChGSUxFICop OwpleHRlcm4gb2ZmNjRfdAlmdGVsbG82NChGSUxFICopOwpleHRlcm4gRklMRQkqdG1wZmlsZTY0 KHZvaWQpOwoKCgpleHRlcm4gaW50CV9fc2VtcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJ X19zZW1nZXRjKEZJTEUgKik7CmV4dGVybiBpbnQJX191c19yc3RocmVhZF9zdGRpbzsKCgoKZXh0 ZXJuIGNoYXIJKmN0ZXJtaWRfcihjaGFyICopOwoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoK CgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiMgNDQ3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MwoKCgoKCgoKfQoKCiMgNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9j c3RkaW8iIDIgMwoKCiMgMjggImlucHV0LmgiIDIKCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0v bG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIAoKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxn cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAxIDMKIAogCgogCiAKIAogCiAK CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoK IyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDEgMwog CiAKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t aXBzLXNnaS1pcml4Ni41LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3Iv cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKCgojIDM1ICIvdXNyL3Blb3BsZS9taWxncmFtL2xv Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL3Vzci9wZW9wbGUvbWls Z3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIAogCgogCiAKIAogCiAK CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiAKI3ByYWdtYSBpbnRlcmZhY2Ug InN0ZC9zdHJhaXRzLmgiCgoKCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+ CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgewogIHR5cGVkZWYgY2hhclQgY2hhcl90eXBlOyAg CgogICAKCiAgc3RhdGljIHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5 cGUmIGMyKQogICAgeyBjMSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlw ZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAg c3RhdGljIGJvb2wgbmUgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIp CiAgICB7IHJldHVybiAhKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFy X3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9 CiAgc3RhdGljIGNoYXJfdHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0 YXRpYyBib29sIGlzX2RlbChjaGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCgog IHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBl KiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBp IDwgbjsgKytpKQoJaWYgKG5lIChzMVtpXSwgczJbaV0pKQoJICByZXR1cm4gbHQgKHMxW2ldLCBz MltpXSkgPyAtMSA6IDE7CgogICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogIHN0YXRpYyBzaXpl X3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVfdCBsID0gMDsK ICAgICAgd2hpbGUgKG5lICgqcysrLCBlb3MgKCkpKQoJKytsOwogICAgICByZXR1cm4gbDsKICAg IH0KCiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90 eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFb bl0sIHMyW25dKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBt b3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsK ICAgICAgY2hhcl90eXBlIGFbbl07CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBp IDwgbjsgKytpKQoJYXNzaWduIChhW2ldLCBzMltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBu OyArK2kpCglhc3NpZ24gKHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBz dGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywg c2l6ZV90IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIGMpOwog ICAgICByZXR1cm4gczE7CiAgICB9Cn07CgpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwoj IDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dp LWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIAog CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwoKCgpleHRlcm4gIkMiIHsKCiNpZGVu dCAgIiRSZXZpc2lvbjogMS4yOSAkIgogCgoKCgoKCgoKCgoKCgoKCgogCiAKCiAKIAogCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOwpl eHRlcm4gaW50IGlzYWxwaGEoaW50KTsKZXh0ZXJuIGludCBpc2NudHJsKGludCk7CmV4dGVybiBp bnQgaXNkaWdpdChpbnQpOwpleHRlcm4gaW50IGlzZ3JhcGgoaW50KTsKZXh0ZXJuIGludCBpc2xv d2VyKGludCk7CmV4dGVybiBpbnQgaXNwcmludChpbnQpOwpleHRlcm4gaW50IGlzcHVuY3QoaW50 KTsKZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CmV4dGVybiBpbnQgX19pc2JsYW5rKGludCk7CmV4 dGVybiBpbnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7CmV4dGVybiBp bnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsKCiAKZXh0ZXJuIGludCBp c2FzY2lpKGludCk7ICAgICAgICAKZXh0ZXJuIGludCB0b2FzY2lpKGludCk7ICAgICAgICAKCmV4 dGVybiBpbnQgX3RvbG93ZXIoaW50KTsKZXh0ZXJuIGludCBfdG91cHBlcihpbnQpOwoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoKCgp9 CgoKIyA2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMiAz CgoKIyAxMDUgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p cHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFp dHMuaCIgMiAzCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0 cmluZyIgMSAzCiAKIAoKCgoKCgojIDk0ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5 NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2NzdHJpbmciIDMKCgoKIyAxMDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2Nj Mjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8 Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAo Y2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0 YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK ICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90 eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0K ICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBj MikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsg cmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgo X19saWJjX2F0dHIuX2N0eXBlX3RibC0+X2NsYXNzKzEpWyBhIF0gJiAoMHgwMDAwMDAwOCAgfCAw eDgwMDAwMDAwICkgKSA7IH0KCiAgc3RhdGljIGludCBjb21wYXJlIChjb25zdCBjaGFyX3R5cGUq IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIG1lbWNtcCAo czEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25zdCBjaGFyX3R5cGUqIHMp CiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogY29weSAoY2hh cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo Y2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAgc3RhdGljIGNoYXJfdHlwZSogbW92 ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJl dHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5 cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlJiBjLCBzaXplX3QgbikKICAg IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBjLCBuKTsgfQp9OwoKIyAxNTkgIi91 c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2 LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMwoKfSAg CgojIDM2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu Zy5oIiAyIDMKCgogCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9h bGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xv Y2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAogCiAKIAogCiAKIAog CiAKIAogCgoKIAoKIAogCiAKIAogCiAKIAoKCgoKCgoKCiMgMTQ4ICIvdXNyL3Blb3BsZS9taWxn cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoK CiMgMTc4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcu aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNyL3Blb3BsZS9t aWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCiMgMjQ4ICIvdXNyL3Bl b3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiMg MzE2ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTggIi91c3Iv cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMiAzCgoKCiMgMSAiL3Vz ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMSAzCiAKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCiMg MSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2kt aXJpeDYuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL3Blb3BsZS9t aWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy9p bmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUzICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5 NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2Fs L2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9t aXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoKIyAxOSAiL3Vz ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu NS8yLjk1LjMvLi4vLi4vLi4vLi4vbWlwcy1zZ2ktaXJpeDYuNS9pbmNsdWRlL2Fzc2VydC5oIiAz CgoKCgogCgpleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18g KChub3JldHVybikpOwp9CgoKCgoKCgoKCgoKCiMgNTIgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9j YWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4u L21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgojIDU2ICIvdXNyL3Blb3Bs ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCgoKCgoj IDc4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAz CgojIDg3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBz LXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5o IiAzCgojIDk3ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t aXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxv Yy5oIiAzCgojIDExNSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1s aWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf YWxsb2MuaCIgMwoKCiAKCgoKCgoKIAoKCgoKCiAKIAoKCgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9f aW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGlj IHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxs b2Modm9pZCosIHNpemVfdCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21f aGFuZGxlcikoKTsKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19u KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jl c3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7 CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApCiAgewog ICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxv YyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29v bV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3Rh dGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAg ICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21h bGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsK CiAKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUg PGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29v bV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgp OwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9j X2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBf X215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4 aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVz dWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQp OwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAg ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAg ICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2Vy ciA8PCAib3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9fbXlf bWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsK ICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0 aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAg OiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0 aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxv Y2F0ZShzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19w LCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9f cCwgX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq IF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07 CgogCiAKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoK cHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBh bGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxv Yzo6YWxsb2NhdGUoX19uICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19u OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFs bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChj aGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09 IF9fbiApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4i LAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAs ICAgMjYzICwgICIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxs b2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2 b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf c3opCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAo KHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiApID8gMCA6IChfX2Vwcmlu dGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxn cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjcwICwgICIqKHNpemVfdCop X19yZWFsX3AgPT0gX19vbGRfc3oiICksIDApICkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNo YXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0 cmEsIF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdf c3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxh dGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZSB7Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtf TUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJ R059OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7 IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2 YXRlIDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGlu azsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoK CiAgICBzdGF0aWMgX09iaiogICBfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICBzdGF0aWMg IHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVy biAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9CgogICAKICBzdGF0aWMg dm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwogICAKICAgCiAgc3RhdGljIGNoYXIqIF9TX2No dW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgogICAKICBzdGF0aWMgY2hh ciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3RhdGljIHNp emVfdCBfU19oZWFwX3NpemU7CgoKCgoKCgoKCgoKCgoKCiMgMzg5ICIvdXNyL3Blb3BsZS9taWxn cmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsK ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyAgOyB9CiAgICAgICAgICAgIH5f TG9jaygpIHsgIDsgfQogICAgfTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAg IAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9f bXlfZnJlZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsKCiAgICBpZiAoX19uID4gKHNpemVf dCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9f bikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz dF9pbmRleChfX24pOwogICAgIAogICAgIAogICAgIAoKCgoKICAgIF9fcmVzdWx0ID0gKl9fbXlf ZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3IgPSBf U19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0KICAg ICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgcmV0 dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2Jq KiAgKiBfX215X2ZyZWVfbGlzdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykg ewogICAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0 dXJuOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz dF9pbmRleChfX24pOwogICAgIAoKCgoKICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpf X215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0 YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3Qg X19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTwgZmFsc2Ug LCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNp bmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAg IGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25v YmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJl ZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jl c3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5 dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVm dCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6 ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19y ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9i eXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXpl X3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9T X2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDAp IHsKICAgICAgICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAg ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoK ICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9 ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9T X3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFs bG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAg ICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0 OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAg ICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kg Kz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz dCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9m cmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAg ICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAg ICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAg ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAg IHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo Y2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAg ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBf c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy ZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl LCBfX25vYmpzKSk7CiAgICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hh ciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiAgKiBf X215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29i ajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9i anMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9f Y2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1 bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJl bnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciop X19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAg ICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBf TV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1 cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoK X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQq IF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBz aXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMg JiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxs b2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9 PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxv Y2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29s ZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAg ICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCgoK CgoKCgoKCgoKCgojIDYwMiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGxfYWxsb2MuaCIgMwoKCiMgNjg5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9s aWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGxvYy5oIiAzCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19z dGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hh ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2Zy ZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0g MDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogIApfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX05GUkVFTElTVFMK XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9Owog CiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz cyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAgICAgCnB1YmxpYzoK ICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0 eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2 YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0 eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSAgIHt9CiAg YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpICAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpICAge30KICB+YWxsb2NhdG9yKCkgICB7 fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl dHVybiAmX194OyB9CgogICAKICAgCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25z dCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9B bGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDog MDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24p CiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBz aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCAgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6 ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192 YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg eyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewog IHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0 IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7 CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90 eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBl ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZl cmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0Fs bG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpICAge30KICBfX2FsbG9jYXRvcihjb25z dCBfX2FsbG9jYXRvciYgX19hKSAgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRl cmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNv bnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgIAogICAgOiBfX3VuZGVybHlpbmdf YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSAgIHt9Cgog IHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAg Y29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJu ICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCog PSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9f dW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAw OwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikK ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw KSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgIAogICAgeyByZXR1cm4gc2l6ZV90 KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25z dCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9p bnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNs YXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6 ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg dm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7 CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4g b3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ey KQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n X2FsbG9jOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsK ICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxs b2M7Cn0KCgogCiAKIAoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1 ZTsKfQoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNl Owp9CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wg b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsK fQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg ZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf YWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKIAoKIAogCiAK IAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6 ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0 czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAx PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVk ZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2Nh dG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3Rh dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h bGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgog ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9y X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0Fs bG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAogCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4K c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0 b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9f aW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f YWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg ZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8 X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKCgoKIAoK CgoKCiAKIAogCiMgMjEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxs b2MuaCIgMiAzCgoKCiMgNDAgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9n Y2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv YWxsb2MuaCIgMwoKCgoKIAogCiAKIyAzOSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2My OTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVh bTsgY2xhc3Mgb3N0cmVhbTsKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9pdGVyYXRvciIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91 c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2 LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewog IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9v bCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9f eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAog CiAKIyAzMSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg MiAzCgojIDEgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p cHMtc2dpLWlyaXg2LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9w ZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8y Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzMiAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL3Vzci9wZW9wbGUvbWlsZ3Jh bS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKIAoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0 IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoK IAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5w dXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf RGlzdGFuY2UgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9 OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFn IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg ICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j ZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAg ICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf RGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAg ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAg ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAg ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICBy ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVj dCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50 ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgoj IDk4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNn aS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o IiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRz IHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0 b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAg ICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2Vf dHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9p bnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVm ZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgICBwb2lu dGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4g ewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U cCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0Nh dGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpf X2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRp Y19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXIm IF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy ZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlz dGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9J dGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgoKCgoKIyAyNTkgIi91c3Iv cGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3Rh ZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s YXN0LCBfRGlzdGFuY2UmIF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24s IGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0 dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl bmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykgewogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsKICByZXR1 cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpIHsK ICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAg ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdo aWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoKCgoK CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFu Y2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KSB7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rp c3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19p KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVy YXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBl ZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2 b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRl cmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFp bmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192 YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlz OyB9Cn07CgojIDM3OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1s aWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf aXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gp IHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnBy b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250 YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAg ICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh bHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9 Cn07CgojIDQxNyAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIv bWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRl cmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkg ewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3Rl ZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBp bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9 CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g KnRoaXM7IH0KfTsKCiMgNDU5ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIv Z2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9J dGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0Nv bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFp bmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAKICAgICAgICAgIGNs YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C aWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBf QmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAg ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAg ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZl cmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQg cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194 KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBj b25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7 CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAq LS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl cmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAg cmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190 bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYm IG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9T ZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJy ZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNTUwICIvdXNyL3Blb3BsZS9taWxncmFt L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9C aUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p dGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCBy ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFu Y2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CgoKCiAKIAog CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAK ewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAg ICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNl OwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7 fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVu dChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50 KF9feC5jdXJyZW50KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVy YXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9f eC5iYXNlKCkpIHt9CgogICAgCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4g Y3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3Ig X190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVy YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVy YXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBv cGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsK ICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJl bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K CiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVy biBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5j ZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4g X1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf dHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBy ZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAq KCp0aGlzICsgX19uKTsgfSAgCn07IAogCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs IAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3gu YmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3gu YmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+IApvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0 b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgojIDgwNSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2Nh bC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBm cmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p dGVyYXRvciYpOwpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1 ZTsKICBib29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21h cmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2Vy KSAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFt KSA/IHRydWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3Rh ZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0 eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYg ICAgICAgICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNp biksIF9NX2VuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBf X3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9y KigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv bnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf RGlzdD4mIG9wZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsK ICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAg IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQo KTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9s b2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0 ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5f TV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIg PT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZh bHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIG9zdHJlYW0qIF9NX3N0cmVh bTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1dF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAg IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9f cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Io b3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9N X3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0 IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChfTV9z dHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBv c3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0 cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0gCiAgb3N0 cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0gCn07 CgojIDkwNyAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0 b3IuaCIgMwoKCiAKCgoKIAogCiAKIyAzOCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2My OTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgogCiAKIAojIDQ0ICIvdXNyL3Blb3BsZS9taWxncmFt L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgojIDU2ICIvdXNyL3Blb3Bs ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAzCgoKIyAxICIvdXNy L3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41 LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Nhc3NlcnQiIDEgMwogCiAKCgoKIyAx ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1p cml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9taXBzLXNnaS1pcml4Ni41L2luY2x1ZGUvYXNzZXJ0 LmgiIDEgMwogCgoKCgoKCgoKIyAxOSAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUv bGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vbWlwcy1zZ2kt aXJpeDYuNS9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKCgogCgpleHRlcm4gIkMiIHsKZXh0ZXJuIHZv aWQgX19lcHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0 IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwp9CgoKCgoKCgoKCgoKCiMg NTIgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dp LWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL21pcHMtc2dpLWlyaXg2LjUvaW5jbHVkZS9hc3Nl cnQuaCIgMwoKCgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2Mt bGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY2Fz c2VydCIgMiAzCgoKIyA1OCAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2dj Yy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGQvYmFzdHJpbmcuaCIgMiAzCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzID0gc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxsb2NhdG9yID0gYWxs b2MgPgpjbGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBSZXAgewogICAgc2l6 ZV90IGxlbiwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hhclQqIGRhdGEgKCkg eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7IH0KICAgIGNoYXJU JiBvcGVyYXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107IH0KICAgIGNoYXJU KiBncmFiICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKytyZWY7IHJldHVybiBk YXRhICgpOyB9CiMgMTA4ICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2Nj LWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 ZC9iYXN0cmluZy5oIiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRl bGV0ZSB0aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6 ZV90LCBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9p ZCAqKTsKICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCog Y2xvbmUgKCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBz aXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXpl X3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3Qp OwoKICAgIGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwog ICAgaW5saW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgog ICAgUmVwICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRl ZgkgICB0cmFpdHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFy X3R5cGUJdmFsdWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7 CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hh clQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYg Y29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwog IHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJz ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJz ZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0 aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnBy aXZhdGU6CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAg Kj4oZGF0KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgp OyBkYXQgPSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29u c3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBj b25zdAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25z dAogICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29u c3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNv bnN0CiAgICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBl bXB0eSAoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3Ry aW5nJiBvcGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAo JnN0ciAhPSB0aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3Jh YiAoKTsgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmlu ZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNp Y19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3Ry aW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4g PSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4p OyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRh dCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29u c3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQog IGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdy YWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9y PgogICAgYmFzaWNfc3RyaW5nKElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBf X2VuZCkKCgoKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKF9fYmVnaW4sIF9f ZW5kKTsgfQoKICB+YmFzaWNfc3RyaW5nICgpCiAgICB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgfQoK ICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5k YXQ7IHMuZGF0ID0gZDsgfQoKICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgYmFzaWNfc3Ry aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7 IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0 cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiBy ZXBsYWNlIChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNv bnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykp OyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyBy ZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJ bnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJz dCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwg aWVuZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7 IGFwcGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2lj X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQog ICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3Ry aW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJl cGxhY2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNo YXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg YmFzaWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4g cmVwbGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRv cj4KICAgIGJhc2ljX3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl cmF0b3IgbGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwg Zmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCog cykKICAgIHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAo Y2hhclQgYykKICAgIHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBv cGVyYXRvcis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAo cmhzKTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7 IHJldHVybiBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBj KQogICAgeyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAo c2l6ZV90eXBlIHBvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9z MiA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAs IHN0ciwgcG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywg Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAw LCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBj aGFyVCogcykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykp OyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBj aGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9y IGluc2VydChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGli ZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsK ICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBwLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVn aW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAg ICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVy YXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElu cHV0SXRlcmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9 CgogIGJhc2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9 IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJU KTApOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9 IHAgLSBiZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJU KTApOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRv ciBlcmFzZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAt IGliZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQp MCk7c2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0 cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNf c3RyaW5nJiBzdHIsCgkJCSBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3Mp OwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBj b25zdCBjaGFyVCogcywKCQkJIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl IChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1 cm4gcmVwbGFjZSAocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0 cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIs IGNoYXJUIGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90 eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAg YmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJh c2ljX3N0cmluZyYgc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGky IC0gaTEsIHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVy YXRvciBpMiwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFj ZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBs YWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1 cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5n JiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBj KQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9 CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxh Y2UoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0 SXRlcmF0b3IgajIpOwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVy biB0cmFpdHM6OmVvcyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4g MSkgYWxsb2MgKGxlbmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUg KCk7IHJlcCAoKS0+c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltd IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkK CXJldHVybiBlb3MgKCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVy ZW5jZSBvcGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4g KCpyZXAgKCkpW3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewog ICAgICAoKHZvaWQpICgoICEoIHBvcyA+PSBsZW5ndGggKCkgKSApID8gMCA6IChfX2VwcmludGYg KCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFt L2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAsICAgMzIzICwgICIhKHBvcyA+PSBs ZW5ndGggKCkpIiApLCAwKSApKSAgOwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwogICAgfQog IGNvbnN0X3JlZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgKCh2 b2lkKSAoKCAhKCBwb3MgPj0gbGVuZ3RoICgpICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6 IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9n Y2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgLCAgIDMyOCAsICAiIShwb3MgPj0gbGVuZ3RoICgp KSIgKSwgMCkgKSkgIDsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCnByaXZhdGU6 CiAgdm9pZCB0ZXJtaW5hdGUgKCkgY29uc3QKICAgIHsgdHJhaXRzOjphc3NpZ24gKCgqcmVwICgp KVtsZW5ndGggKCldLCBlb3MgKCkpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGNfc3RyICgp IGNvbnN0CiAgICB7IGlmIChsZW5ndGggKCkgPT0gMCkgcmV0dXJuICIiOyB0ZXJtaW5hdGUgKCk7 IHJldHVybiBkYXRhICgpOyB9CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKTsK ICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4pCiAgICB7IHJlc2l6ZSAobiwgZW9zICgpKTsgfQog IHZvaWQgcmVzZXJ2ZSAoc2l6ZV90eXBlKSB7IH0KCiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBz LCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmlu ZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAg eyByZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90 eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29u c3Q7CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkg Y29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQog IHNpemVfdHlwZSBmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNp emVfdHlwZSByZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBu cG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0 aCgpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms IHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBz aXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzLCBwb3MsIHRy YWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlw ZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJh c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZp bmRfZmlyc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlw ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl IG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3Ms IHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQg Yywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9 CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl X3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAoc3RyLmRh dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5 cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNv bnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMp KTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBu cG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6ZV90eXBlIGZp bmRfZmlyc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9 IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9z LCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBj aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBm aW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z dAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGgg KHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBl IHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFz aWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4g ZmluZF9sYXN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6 ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz aXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNo YXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFz dF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5k X2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIGJh c2ljX3N0cmluZyBzdWJzdHIgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3Mp IGNvbnN0CiAgICB7IHJldHVybiBiYXNpY19zdHJpbmcgKCp0aGlzLCBwb3MsIG4pOyB9CgogIGlu dCBjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsIHNp emVfdHlwZSBuID0gbnBvcykgY29uc3Q7CiAgIAogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCog cywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIGludCBjb21wYXJlIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBjb21wYXJl IChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KCiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBz ZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbMF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxm aXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVuZ3RoICgpXTsgfQoKcHJpdmF0ZToKICBpdGVyYXRv ciBpYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVswXTsgfQogIGl0ZXJhdG9yIGll bmQgKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVtsZW5ndGggKCldOyB9CgpwdWJsaWM6CiAg Y29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9CiAgY29u c3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIGllbmQgKCk7IH0KCiAgcmV2ZXJzZV9p dGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkp OyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAg ICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvYyAoc2l6ZV90eXBl IHNpemUsIGJvb2wgc2F2ZSk7CiAgc3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQq IHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOwogIGlubGluZSBi b29sIGNoZWNrX3JlYWxsb2MgKHNpemVfdHlwZSBzKSBjb25zdDsKCiAgc3RhdGljIFJlcCBuaWxS ZXA7CiAgY2hhclQgKmRhdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPiB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElu cHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpCgoKCgoKewogIGNvbnN0IHNpemVfdHlw ZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgpOwogIHNp emVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAgKCh2b2lk KSAoKCAhKCBwb3MgPiBsZW4gKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFz c2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIv Z2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3N0ZC9iYXN0cmluZy5oIiAsICAgNDQxICwgICIhKHBvcyA+IGxlbikiICksIDApICkpICA7CiAg aWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgKCh2b2lkKSAoKCAhKCBs ZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTog ZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2dj YzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAsICAgNDQ0ICwgICIhKGxlbiAtIG4xID4gbWF4X3Np emUgKCkgLSBuMikiICksIDApICkpICA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7 CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6 OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAg cC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7 CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpw KVtwb3NdLCAqajEpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBy ZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBu MSkpOwogICAgICBmb3IgKDsgajEgIT0gajI7ICsrajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24g KCgqcmVwICgpKVtwb3NdLCAqajEpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICBy ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y PiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAo bGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBjaGFyVCogbGhz LCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3Ry LmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY2hhclQgbGhzLCBjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKDEsIGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsK ICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0 cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv cisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBj aGFyVCByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3Ry IChsaHMpOwogIHN0ci5hcHBlbmQgKDEsIHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK b3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApv cGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPT0g MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0 b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMu Y29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgY2hhclQq IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp CnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRv ciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywg Y29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBib29sCm9wZXJhdG9yPCAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChs aHMpID4gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4g KGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgY2hh clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy aHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh dG9yPiAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMs IGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID4gMCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFy ZSAobGhzKSA+PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBy ZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChj b25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPD0gMCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi b29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz KSA+PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMp ICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID4g MCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0 b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAw KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID49IDAp Owp9CgpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpvcGVyYXRvcj4+IChpc3Ry ZWFtJiwgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IG9zdHJlYW0mCm9w ZXJhdG9yPDwgKG9zdHJlYW0mLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4gaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYsIGNoYXJUIGRlbGltID0gJ1xuJyk7Cgp9ICAKCiMgMSAiL3Vz ci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYu NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiIDEgMwog CiAKCiAKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKCiAKIAogCiAKIAoKIAogCgpleHRlcm4gIkMr KyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgdm9pZCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 UmVwOjoKb3BlcmF0b3IgbmV3IChzaXplX3Qgcywgc2l6ZV90IGV4dHJhKQp7CiAgcmV0dXJuIEFs bG9jYXRvcjo6YWxsb2NhdGUocyArIGV4dHJhICogc2l6ZW9mIChjaGFyVCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9p ZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9y IGRlbGV0ZSAodm9pZCAqIHB0cikKewogIEFsbG9jYXRvcjo6ZGVhbGxvY2F0ZShwdHIsIHNpemVv ZihSZXApICsKCQkJcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4ocHRyKS0+cmVzICoKCQkJc2l6ZW9m IChjaGFyVCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgppbmxpbmUgc2l6ZV90IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6UmVwOjoKZnJvYl9zaXplIChzaXplX3QgcykKewogIHNpemVfdCBpID0gMTY7CiAg d2hpbGUgKGkgPCBzKSBpICo9IDI7CiAgcmV0dXJuIGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcCAqCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPjo6UmVwOjoKY3JlYXRlIChzaXplX3QgZXh0cmEpCnsKICBleHRyYSA9IGZy b2Jfc2l6ZSAoZXh0cmEgKyAxKTsKICBSZXAgKnAgPSBuZXcgKGV4dHJhKSBSZXA7CiAgcC0+cmVz ID0gZXh0cmE7CiAgcC0+cmVmID0gMTsKICBwLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJuIHA7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CmNoYXJUICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpj bG9uZSAoKQp7CiAgUmVwICpwID0gUmVwOjpjcmVhdGUgKGxlbik7CiAgcC0+Y29weSAoMCwgZGF0 YSAoKSwgbGVuKTsKICBwLT5sZW4gPSBsZW47CiAgcmV0dXJuIHAtPmRhdGEgKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBi b29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZXhjZXNz X3Nsb3AgKHNpemVfdCBzLCBzaXplX3QgcikKewogIHJldHVybiAyICogKHMgPD0gMTYgPyAxNiA6 IHMpIDwgcjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+OjoKY2hlY2tfcmVhbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5cGUgcykgY29uc3QKewog IHMgKz0gc2l6ZW9mIChjaGFyVCk7CiAgcmVwICgpLT5zZWxmaXNoID0gZmFsc2U7CiAgcmV0dXJu IChyZXAgKCktPnJlZiA+IDEKCSAgfHwgcyA+IGNhcGFjaXR5ICgpCgkgIHx8IFJlcDo6ZXhjZXNz X3Nsb3AgKHMsIGNhcGFjaXR5ICgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjoKYWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIF9fc2l6ZSwgYm9v bCBfX3NhdmUpCnsKICBpZiAoISBjaGVja19yZWFsbG9jIChfX3NpemUpKQogICAgcmV0dXJuOwoK ICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKCiAgaWYgKF9fc2F2ZSkKICAgIHsKICAg ICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgbGVuZ3RoICgpKTsKICAgICAgcC0+bGVuID0gbGVuZ3Ro ICgpOwogICAgfQogIGVsc2UKICAgIHAtPmxlbiA9IDA7CgogIHJlcHVwIChwKTsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAoJ IGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zMiwgc2l6ZV90eXBlIG4yKQp7 CiAgY29uc3Qgc2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwoKICBpZiAocG9zMSA9PSAwICYm IG4xID49IGxlbmd0aCAoKSAmJiBwb3MyID09IDAgJiYgbjIgPj0gbGVuMikKICAgIHJldHVybiBv cGVyYXRvcj0gKHN0cik7CgogICgodm9pZCkgKCggISggcG9zMiA+IGxlbjIgKSApID8gMCA6IChf X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3Bs ZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDEyNiAsICAi IShwb3MyID4gbGVuMikiICksIDApICkpICA7CgogIGlmIChuMiA+IGxlbjIgLSBwb3MyKQogICAg bjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAo KSArIHBvczIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90 IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoK bW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAg ICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAg KCh2b2lkKSAoKCAhKCBwb3MgPiBsZW4gKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFp bGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5 NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDE1NiAsICAiIShwb3MgPiBsZW4pIiApLCAwKSAp KSAgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkg KCggISggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgKSA/IDAgOiAoX19lcHJpbnRmICgi JXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9s b2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuY2MiICwgICAxNTkgLCAgIiEobGVuIC0gbjEg PiBtYXhfc2l6ZSAoKSAtIG4yKSIgKSwgMCkgKSkgIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z ICsgbjEpKTsKICAgICAgcC0+Y29weSAocG9zLCBzLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAg IH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBw b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAoKS0+Y29weSAocG9zLCBzLCBu Mik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l IHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpzZXQg KHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUIGMsIHNpemVfdCBuKQp7CiAgdHJhaXRzOjpzZXQgIChk YXRhICgpICsgcG9zLCBjLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChz aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYykKewogIGNv bnN0IHNpemVfdCBsZW4gPSBsZW5ndGggKCk7CiAgKCh2b2lkKSAoKCAhKCBwb3MgPiBsZW4gKSAp ID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIv dXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4 Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgLCAg IDE5MiAsICAiIShwb3MgPiBsZW4pIiApLCAwKSApKSAgOwogIGlmIChuMSA+IGxlbiAtIHBvcykK ICAgIG4xID0gbGVuIC0gcG9zOwogICgodm9pZCkgKCggISggbGVuIC0gbjEgPiBtYXhfc2l6ZSAo KSAtIG4yICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVz J1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGliL2djYy1saWIvbWlw cy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJp bmcuY2MiICwgICAxOTUgLCAgIiEobGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yKSIgKSwgMCkg KSkgIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxs b2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwog ICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwg ZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcC0+c2V0ICAocG9z LCBjLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAo KS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7 CiAgICAgIHJlcCAoKS0+c2V0ICAocG9zLCBjLCBuMik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBu ZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgKCh2b2lkKSAo KCAhKCBuID4gbWF4X3NpemUgKCkgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVk IGFzc2VydGlvbiBgJXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9s aWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0ZC9iYXN0cmluZy5jYyIgLCAgIDIyMCAsICAiIShuID4gbWF4X3NpemUgKCkpIiApLCAw KSApKSAgOwoKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwg Yyk7CiAgZWxzZQogICAgZXJhc2UgKG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46Ogpjb3B5IChjaGFyVCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK ICAoKHZvaWQpICgoICEoIHBvcyA+IGxlbmd0aCAoKSApICkgPyAwIDogKF9fZXByaW50ZiAoIiVz OiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydcbiIsCSAgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9j YWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiAsICAgMjMzICwgICIhKHBvcyA+IGxlbmd0 aCAoKSkiICksIDApICkpICA7CgogIGlmIChuID4gbGVuZ3RoICgpIC0gcG9zKQogICAgbiA9IGxl bmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgpICsgcG9zLCBuKTsKICBy ZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3Qg Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhw b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYg KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0 YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0 IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAg Zm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3Nd LCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsK ICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJu IG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykK ICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJh aXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgp ICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5 cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAg c2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9 IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChk YXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFy VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9 IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChz LCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0 dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90 eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9v ZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAg aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0 aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z OyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9 IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNp emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAg Zm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAo KSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAo Y2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZv ciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAo KSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09 IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJl dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAg aWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0 aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9z OyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAg ICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNp emVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgKCh2b2lkKSAoKCAhKCBwb3MgPiBs ZW5ndGggKCkgKSApID8gMCA6IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBg JXMnXG4iLAkgICIvdXNyL3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9t aXBzLXNnaS1pcml4Ni41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0 cmluZy5jYyIgLCAgIDM5OSAsICAiIShwb3MgPiBsZW5ndGggKCkpIiApLCAwKSApKSAgOwoKICBz aXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0g bjsKICBpZiAocmxlbiA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsK ICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJs ZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0 dXJuIDA7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQoKdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNo YXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogICgodm9pZCkgKCgg ISggcG9zID4gbGVuZ3RoICgpICkgKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwJICAiL3Vzci9wZW9wbGUvbWlsZ3JhbS9sb2NhbC9nY2MyOTUvbGli L2djYy1saWIvbWlwcy1zZ2ktaXJpeDYuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGQvYmFzdHJpbmcuY2MiICwgICA0MTggLCAgIiEocG9zID4gbGVuZ3RoICgpKSIgKSwgMCkg KSkgIDsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQog ICAgcmxlbiA9IG47CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHMs IHJsZW4pOwogIGlmIChyICE9IDApCiAgICByZXR1cm4gcjsKICByZXR1cm4gKGxlbmd0aCAoKSAt IHBvcykgLSBuOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICZpcywgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ICZzKQp7CiAgaW50IHcgPSBpcy53aWR0aCAo MCk7CiAgaWYgKGlzLmlwZngwICgpKQogICAgewogICAgICByZWdpc3RlciBzdHJlYW1idWYgKnNi ID0gaXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7Cgkg IGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAg ICBpcy5zZXRzdGF0ZSAoaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNl IGlmICh0cmFpdHM6OmlzX2RlbCAoY2gpKQoJICAgIHsKCSAgICAgIHNiLT5zdW5nZXRjICgpOwoJ ICAgICAgYnJlYWs7CgkgICAgfQoJICBzICs9IHN0YXRpY19jYXN0PGNoYXJUPiAoY2gpOwoJICBp ZiAoLS13ID09IDEpCgkgICAgYnJlYWs7Cgl9CiAgICB9CgogIGlzLmlzZnggKCk7CiAgaWYgKHMu bGVuZ3RoICgpID09IDApCiAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCiAgcmV0dXJu IGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgpvc3RyZWFtICYKb3BlcmF0b3I8PCAob3N0cmVhbSAmbywgY29uc3QgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzKQp7CiAgcmV0dXJuIG8ud3JpdGUgKHMuZGF0 YSAoKSwgcy5sZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtICZpcywgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBzLCBjaGFyVCBkZWxpbSkKewogIGlm IChpcy5pcGZ4MSAoKSkKICAgIHsKICAgICAgX0dfc2l6ZV90ICBjb3VudCA9IDA7CiAgICAgIHN0 cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwoKICAgICAgd2hp bGUgKDEpCgl7CgkgIGludCBjaCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkK CSAgICB7CgkgICAgICBpcy5zZXRzdGF0ZSAoY291bnQgPT0gMAoJCQkgICA/IChpb3M6OmZhaWxi aXR8aW9zOjplb2ZiaXQpCgkJCSAgIDogaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg fQoKCSAgKytjb3VudDsKCgkgIGlmIChjaCA9PSBkZWxpbSkKCSAgICBicmVhazsKCgkgIHMgKz0g c3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgoJICBpZiAocy5sZW5ndGggKCkgPT0gcy5ucG9zIC0g MSkKCSAgICB7CgkgICAgICBpcy5zZXRzdGF0ZSAoaW9zOjpmYWlsYml0KTsKCSAgICAgIGJyZWFr OwoJICAgIH0KCX0KICAgIH0KCiAgIAogICAKICBpcy5pc2Z4ICgpOwoKICByZXR1cm4gaXM7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwCmJhc2ljX3N0cmluZzxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpuaWxSZXAgPSB7IDAsIDAsIDEsIGZhbHNlIH07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjb25z dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Om5wb3M7Cgp9ICAKIyA2NTUgIi91 c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMtc2dpLWlyaXg2 LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoK CgojIDYgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21pcHMt c2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAyIDMK CgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5nOwogCn0g IAoKCiMgMzAgImlucHV0LmgiIDIKCgpleHRlcm4gaW50IG9jdGF2ZV9yZWFkIChjaGFyICpidWYs IHVuc2lnbmVkIG1heF9zaXplKTsKZXh0ZXJuIEZJTEUgKmdldF9pbnB1dF9mcm9tX2ZpbGUgKGNv bnN0IHN0cmluZyYgbmFtZSwgaW50IHdhcm4gPSAxKTsKZXh0ZXJuIEZJTEUgKmdldF9pbnB1dF9m cm9tX3N0ZGluICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9yZWFkbGluZSAodm9pZCk7 CgogCmV4dGVybiBzdHJpbmcgY3VycmVudF9ldmFsX3N0cmluZzsKCiAKZXh0ZXJuIGludCBnZXRf aW5wdXRfZnJvbV9ldmFsX3N0cmluZzsKCiAKZXh0ZXJuIGludCByZWFkaW5nX2Zjbl9maWxlOwoK IApleHRlcm4gc3RyaW5nIGN1cnJfZmNuX2ZpbGVfbmFtZTsKCiAKZXh0ZXJuIHN0cmluZyBjdXJy X2Zjbl9maWxlX2Z1bGxfbmFtZTsKCiAKZXh0ZXJuIGludCByZWFkaW5nX3NjcmlwdF9maWxlOwoK IApleHRlcm4gRklMRSAqZmZfaW5zdHJlYW07CgogCmV4dGVybiBpbnQgaW50ZXJhY3RpdmU7Cgog CmV4dGVybiBpbnQgZm9yY2VkX2ludGVyYWN0aXZlOwoKIApleHRlcm4gaW50IHByb21wdGZsYWc7 CgogCmV4dGVybiBzdHJpbmcgY3VycmVudF9pbnB1dF9saW5lOwoKIApleHRlcm4gYm9vbCBvY3Rh dmVfY29tcGxldGlvbl9tYXRjaGVzX2NhbGxlZDsKCiAKZXh0ZXJuIGJvb2wgb2N0YXZlX2luaXRp YWxpemVkX3JlYWRsaW5lOwoKY2hhciAqZ251X3JlYWRsaW5lIChjb25zdCBjaGFyICpzLCBib29s IGZvcmNlX3JlYWRsaW5lID0gZmFsc2UpOwoKZXh0ZXJuIHN0cmluZyBWcHM0OwoKZXh0ZXJuIGRv dWJsZSBWbGFzdF9wcm9tcHRfdGltZTsKCmV4dGVybiB2b2lkIHN5bWJvbHNfb2ZfaW5wdXQgKHZv aWQpOwoKCgogCgoKCgojIDQyICJzaWdoYW5kbGVycy5jYyIgMgoKIyAxICJsb2FkLXNhdmUuaCIg MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIG9zdHJlYW07CgpjbGFzcyBvY3RhdmVf dmFsdWU7CgoKCmV4dGVybiBpbnQgc2F2ZV9hc2NpaV9kYXRhIChvc3RyZWFtJiBvcywgY29uc3Qg b2N0YXZlX3ZhbHVlJiB0LAoJCQkgICAgY29uc3Qgc3RyaW5nJiBuYW1lID0gc3RyaW5nICgpLAoJ CQkgICAgaW50IHN0cmlwX25hbl9hbmRfaW5mID0gMCwKCQkJICAgIGludCBtYXJrX2FzX2dsb2Jh bCA9IDAsIGludCBwcmVjaXNpb24gPSAwKTsKCmV4dGVybiBpbnQgc2F2ZV90aHJlZV9kIChvc3Ry ZWFtJiBvcywgY29uc3Qgb2N0YXZlX3ZhbHVlJiB0LAoJCQkgaW50IHBhcmFtZXRyaWMgPSAwKTsK CmV4dGVybiB2b2lkIHNhdmVfdXNlcl92YXJpYWJsZXMgKHZvaWQpOwoKZXh0ZXJuIHZvaWQgc3lt Ym9sc19vZl9sb2FkX3NhdmUgKHZvaWQpOwoKCgogCgoKCgojIDQzICJzaWdoYW5kbGVycy5jYyIg MgoKIyAxICJwYWdlci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy L3Blb3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41 LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cnN0cmVhbS5oIiAxIDMKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvdXNyL3Bl b3BsZS9taWxncmFtL2xvY2FsL2djYzI5NS9saWIvZ2NjLWxpYi9taXBzLXNnaS1pcml4Ni41LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmZpbGUuaCIgMSAzCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdm9pZCAqKCpfSU9fYWxsb2NfdHlw ZSkgIChfR19zaXplX3QgKSAgOwp0eXBlZGVmIHZvaWQgKCpfSU9fZnJlZV90eXBlKSAgKHZvaWQq KSAgOwoKc3RydWN0IF9JT19zdHJfZmllbGRzCnsKICBfSU9fYWxsb2NfdHlwZSBfYWxsb2NhdGVf YnVmZmVyOwogIF9JT19mcmVlX3R5cGUgX2ZyZWVfYnVmZmVyOwp9OwoKIAoKCgoKc3RydWN0IF9J T19zdHJlYW1idWYKewogIHN0cnVjdCBfSU9fRklMRSBfZjsKICBjb25zdCB2b2lkICpfdnRhYmxl Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgX0lPX3N0cmZpbGVfCnsKICBzdHJ1Y3QgX0lPX3N0cmVhbWJ1 ZiBfc2JmOwogIHN0cnVjdCBfSU9fc3RyX2ZpZWxkcyBfczsKfSBfSU9fc3RyZmlsZTsKCiAKCgoK IAoKCiMgMzMgIi91c3IvcGVvcGxlL21pbGdyYW0vbG9jYWwvZ2NjMjk1L2xpYi9nY2MtbGliL21p cHMtc2dpLWlyaXg2LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Ryc3RyZWFt LmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIHN0cnN0cmVhbWJ1ZiA6IHB1YmxpYyBzdHJl YW1idWYKewogIHN0cnVjdCBfSU9fc3RyX2ZpZWxkcyBfczsKICBmcmllbmQgY2xhc3MgaXN0cnN0 cmVhbTsKCiAgICB2b2lkIGluaXRfZHluYW1pYyhfSU9fYWxsb2NfdHlwZSBhbGxvYywgX0lPX2Zy ZWVfdHlwZSBmcmVlLAoJCSAgICAgIGludCBpbml0aWFsX3NpemUgPSAwKTsKICAgIHZvaWQgaW5p dF9zdGF0aWMoY2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hhciAqcHN0YXJ0KTsKICAgIHZvaWQgaW5p dF9yZWFkb25seShjb25zdCBjaGFyICpwdHIsIGludCBzaXplKTsKICBwcm90ZWN0ZWQ6CiAgICB2 aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgPSAoLTEpICk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZs b3coKTsKICAgIHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CiAgcHVibGljOgogICAgdmly dHVhbCB+c3Ryc3RyZWFtYnVmKCk7CiAgICBzdHJzdHJlYW1idWYoKSB7IGluaXRfZHluYW1pYygw LCAwKTsgfQogICAgc3Ryc3RyZWFtYnVmKGludCBpbml0aWFsX3NpemUpIHsgaW5pdF9keW5hbWlj KDAsIDAsIGluaXRpYWxfc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zih2b2lkICooKl9fYWxsb2Mp KF9HX3NpemVfdCApLCB2b2lkICgqX19mcmVlKSh2b2lkKikpCgl7IGluaXRfZHluYW1pYyhfX2Fs bG9jLCBfX2ZyZWUpOyB9CiAgICBzdHJzdHJlYW1idWYoY2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hh ciAqcHN0YXJ0ID0gX19udWxsICkKCXsgaW5pdF9zdGF0aWMocHRyLCBzaXplLCBwc3RhcnQpOyB9 CiAgICBzdHJzdHJlYW1idWYodW5zaWduZWQgY2hhciAqcHRyLCBpbnQgc2l6ZSwgdW5zaWduZWQg Y2hhciAqcHN0YXJ0ID0gX19udWxsICkKCXsgaW5pdF9zdGF0aWMoKGNoYXIqKXB0ciwgc2l6ZSwg KGNoYXIqKXBzdGFydCk7IH0KICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBjaGFyICpwdHIsIGludCBz aXplKQoJeyBpbml0X3JlYWRvbmx5KHB0ciwgc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zihjb25z dCB1bnNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplKQoJeyBpbml0X3JlYWRvbmx5KChjb25zdCBj aGFyKilwdHIsIHNpemUpOyB9CiAgICBzdHJzdHJlYW1idWYoc2lnbmVkIGNoYXIgKnB0ciwgaW50 IHNpemUsIHNpZ25lZCBjaGFyICpwc3RhcnQgPSBfX251bGwgKQoJeyBpbml0X3N0YXRpYygoY2hh ciopcHRyLCBzaXplLCAoY2hhciopcHN0YXJ0KTsgfQogICAgc3Ryc3RyZWFtYnVmKGNvbnN0IHNp Z25lZCBjaGFyICpwdHIsIGludCBzaXplKQoJeyBpbml0X3JlYWRvbmx5KChjb25zdCBjaGFyKilw dHIsIHNpemUpOyB9CiAgICAgCiAgICBpbnQgZnJvemVuKCkgeyByZXR1cm4gX2ZsYWdzICYgMSAg PyAxIDogMDsgfQogICAgdm9pZCBmcmVlemUoaW50IG49MSkKCXsgaWYgKCgoIHRoaXMgKS0+X3Mu X2FsbG9jYXRlX2J1ZmZlciAhPSAoX0lPX2FsbG9jX3R5cGUpMCkgKQoJICAgIHsgaWYgKG4pIF9m bGFncyB8PSAxIDsgZWxzZSBfZmxhZ3MgJj0gfjEgOyB9IH0KICAgIF9HX3NzaXplX3QgIHBjb3Vu dCgpOwogICAgY2hhciAqc3RyKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKfTsKCmNsYXNzIHN0 cnN0cmVhbWJhc2UgOiB2aXJ0dWFsIHB1YmxpYyBpb3MgewogIHByb3RlY3RlZDoKICAgIHN0cnN0 cmVhbWJ1ZiBfX215X3NiOwogIHB1YmxpYzoKICAgIHN0cnN0cmVhbWJ1ZiogcmRidWYoKSB7IHJl dHVybiAmX19teV9zYjsgfQogIHByb3RlY3RlZDoKICAgIHN0cnN0cmVhbWJhc2UoKSB7IGluaXQg KCZfX215X3NiKTsgfQogICAgc3Ryc3RyZWFtYmFzZShjaGFyICpjcCwgaW50IG4sIGludCBtb2Rl PWlvczo6b3V0KTsKfTsKCmNsYXNzIGlzdHJzdHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwg cHVibGljIGlzdHJlYW0gewogIHB1YmxpYzoKICAgIGlzdHJzdHJlYW0oY29uc3QgY2hhciosIGlu dD0wKTsKfTsKCmNsYXNzIG9zdHJzdHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGlj IG9zdHJlYW0gewogIHB1YmxpYzoKICAgIG9zdHJzdHJlYW0oKSB7IH0KICAgIG9zdHJzdHJlYW0o Y2hhciAqY3AsIGludCBuLCBpbnQgbW9kZT1pb3M6Om91dCkgOnN0cnN0cmVhbWJhc2UoY3Asbixt b2RlKXt9CiAgICBfR19zc2l6ZV90ICBwY291bnQoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1Ziop X3N0cmJ1ZiktPnBjb3VudCgpOyB9CiAgICBjaGFyICpzdHIoKSB7IHJldHVybiAoKHN0cnN0cmVh bWJ1ZiopX3N0cmJ1ZiktPnN0cigpOyB9CiAgICB2b2lkIGZyZWV6ZShpbnQgbiA9IDEpIHsgKChz dHJzdHJlYW1idWYqKV9zdHJidWYpLT5mcmVlemUobik7IH0KICAgIGludCBmcm96ZW4oKSB7IHJl dHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPmZyb3plbigpOyB9Cn07CgpjbGFzcyBzdHJz dHJlYW0gOiBwdWJsaWMgc3Ryc3RyZWFtYmFzZSwgcHVibGljIGlvc3RyZWFtIHsKICBwdWJsaWM6 CiAgc3Ryc3RyZWFtKCkgeyB9CiAgICBzdHJzdHJlYW0oY2hhciAqY3AsIGludCBuLCBpbnQgbW9k ZT1pb3M6Om91dCkgOnN0cnN0cmVhbWJhc2UoY3Asbixtb2RlKXt9CiAgICBfR19zc2l6ZV90ICBw Y291bnQoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPnBjb3VudCgpOyB9CiAg ICBjaGFyICpzdHIoKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPnN0cigpOyB9 CiAgICB2b2lkIGZyZWV6ZShpbnQgbiA9IDEpIHsgKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5m cmVlemUobik7IH0KICAgIGludCBmcm96ZW4oKSB7IHJldHVybiAoKHN0cnN0cmVhbWJ1ZiopX3N0 cmJ1ZiktPmZyb3plbigpOyB9Cn07Cn0gIAoKCiMgMjkgInBhZ2VyLmgiIDIKCgoKCgoKY2xhc3MK b2N0YXZlX3BhZ2VyX2J1ZiA6IHB1YmxpYyBzdHJzdHJlYW1idWYKewpwdWJsaWM6CgogIG9jdGF2 ZV9wYWdlcl9idWYgKGludCBzaXplID0gMCkgOiBzdHJzdHJlYW1idWYgKHNpemUpIHsgfQoKcHJv dGVjdGVkOgoKICBpbnQgc3luYyAodm9pZCk7Cn07CgpjbGFzcwpvY3RhdmVfcGFnZXJfc3RyZWFt IDogcHVibGljIG9zdHJlYW0Kewpwcm90ZWN0ZWQ6CgogIG9jdGF2ZV9wYWdlcl9zdHJlYW0gKHZv aWQpOwoKcHVibGljOgoKICB+b2N0YXZlX3BhZ2VyX3N0cmVhbSAodm9pZCk7CgogIHN0YXRpYyBv Y3RhdmVfcGFnZXJfc3RyZWFtJiBzdHJlYW0gKHZvaWQpOwoKcHJpdmF0ZToKCiAgc3RhdGljIG9j dGF2ZV9wYWdlcl9zdHJlYW0gKmluc3RhbmNlOwoKICBvY3RhdmVfcGFnZXJfYnVmICpwYjsKCiAg IAoKICBvY3RhdmVfcGFnZXJfc3RyZWFtIChjb25zdCBvY3RhdmVfcGFnZXJfc3RyZWFtJik7Cgog IG9jdGF2ZV9wYWdlcl9zdHJlYW0mIG9wZXJhdG9yID0gKGNvbnN0IG9jdGF2ZV9wYWdlcl9zdHJl YW0mKTsKfTsKCmNsYXNzCm9jdGF2ZV9kaWFyeV9idWYgOiBwdWJsaWMgc3Ryc3RyZWFtYnVmCnsK cHVibGljOgoKICBvY3RhdmVfZGlhcnlfYnVmIChpbnQgc2l6ZSA9IDApIDogc3Ryc3RyZWFtYnVm IChzaXplKSB7IH0KCnByb3RlY3RlZDoKCiAgaW50IHN5bmMgKHZvaWQpOwp9OwoKY2xhc3MKb2N0 YXZlX2RpYXJ5X3N0cmVhbSA6IHB1YmxpYyBvc3RyZWFtCnsKcHJvdGVjdGVkOgoKICBvY3RhdmVf ZGlhcnlfc3RyZWFtICh2b2lkKTsKCnB1YmxpYzoKCiAgfm9jdGF2ZV9kaWFyeV9zdHJlYW0gKHZv aWQpOwoKICBzdGF0aWMgb2N0YXZlX2RpYXJ5X3N0cmVhbSYgc3RyZWFtICh2b2lkKTsKCnByaXZh dGU6CgogIHN0YXRpYyBvY3RhdmVfZGlhcnlfc3RyZWFtICppbnN0YW5jZTsKCiAgb2N0YXZlX2Rp YXJ5X2J1ZiAqZGI7CgogICAKCiAgb2N0YXZlX2RpYXJ5X3N0cmVhbSAoY29uc3Qgb2N0YXZlX2Rp YXJ5X3N0cmVhbSYpOwoKICBvY3RhdmVfZGlhcnlfc3RyZWFtJiBvcGVyYXRvciA9IChjb25zdCBv Y3RhdmVfZGlhcnlfc3RyZWFtJik7Cn07CgoKCgoKZXh0ZXJuIHZvaWQgZmx1c2hfb2N0YXZlX3N0 ZG91dCAodm9pZCk7CgpleHRlcm4gdm9pZCBzeW1ib2xzX29mX3BhZ2VyICh2b2lkKTsKCgoKIAoK CgoKIyA0NCAic2lnaGFuZGxlcnMuY2MiIDIKCiMgMSAic2lnaGFuZGxlcnMuaCIgMQogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAiLi4vbGlib2N0YXZlL0FycmF5LmgiIDEKIAogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGlkeF92 ZWN0b3I7CgogCiAKCgoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBcnJheQp7CnBy aXZhdGU6CgogCgogIGNsYXNzIEFycmF5UmVwCiAgewogIHB1YmxpYzoKCiAgICBUICpkYXRhOwog ICAgaW50IGxlbjsKICAgIGludCBjb3VudDsKCiAgICBBcnJheVJlcCYgb3BlcmF0b3IgPSAoY29u c3QgQXJyYXlSZXAmIGEpOwoKICAgIEFycmF5UmVwIChUICpkLCBpbnQgbCkgOiBkYXRhIChkKSwg bGVuIChsKSwgY291bnQgKDEpIHsgfQoKICAgIEFycmF5UmVwICh2b2lkKSA6IGRhdGEgKDApLCBs ZW4gKDApLCBjb3VudCAoMSkgeyB9CgogICAgQXJyYXlSZXAgKGludCBuKSA6IGRhdGEgKG5ldyBU IFtuXSksIGxlbiAobiksIGNvdW50ICgxKSB7IH0KCiAgICBBcnJheVJlcCAoY29uc3QgQXJyYXlS ZXAmIGEpCiAgICAgIDogZGF0YSAobmV3IFQgW2EubGVuXSksIGxlbiAoYS5sZW4pLCBjb3VudCAo MSkKCXsKCSAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykKCSAgICBkYXRhW2ldID0gYS5k YXRhW2ldOwoJfQoKICAgIH5BcnJheVJlcCAodm9pZCkgeyBkZWxldGUgW10gZGF0YTsgfQoKICAg IGludCBsZW5ndGggKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxlbjsgfQoKICAgIFQmIGVsZW0gKGlu dCBuKSB7IHJldHVybiBkYXRhW25dOyB9CgogICAgVCBlbGVtIChpbnQgbikgY29uc3QgeyByZXR1 cm4gZGF0YVtuXTsgfQoKICAgIHZvaWQgcXNvcnQgKGludCAoKmNvbXBhcmUpIChjb25zdCB2b2lk ICosIGNvbnN0IHZvaWQgKikpCiAgICAgIHsKCTo6cXNvcnQgKGRhdGEsIGxlbiwgc2l6ZW9mIChU KSwgY29tcGFyZSk7CiAgICAgIH0KICB9OwoKICB2b2lkIG1ha2VfdW5pcXVlICh2b2lkKQogICAg ewogICAgICBpZiAocmVwLT5jb3VudCA+IDEpCgl7CgkgIC0tcmVwLT5jb3VudDsKCSAgcmVwID0g bmV3IEFycmF5UmVwICgqcmVwKTsKCX0KICAgIH0KCgogIGlkeF92ZWN0b3IgKmlkeDsKICBpbnQg bWF4X2luZGljZXM7CiAgaW50IGlkeF9jb3VudDsKCgpwcm90ZWN0ZWQ6CgogIEFycmF5UmVwICpy ZXA7CgogIEFycmF5IChUICpkLCBpbnQgbCkKICAgIHsKICAgICAgcmVwID0gbmV3IEFycmF5UmVw IChkLCBsKTsKCgogICAgICBpZHggPSAwOwogICAgICBtYXhfaW5kaWNlcyA9IDE7CiAgICAgIGlk eF9jb3VudCA9IDA7CgogICAgfQoKcHVibGljOgoKICBBcnJheSAodm9pZCkKICAgIHsKICAgICAg cmVwID0gbmV3IEFycmF5UmVwICgpOwoKCiAgICAgIGlkeCA9IDA7CiAgICAgIG1heF9pbmRpY2Vz ID0gMTsKICAgICAgaWR4X2NvdW50ID0gMDsKCiAgICB9CgogIEFycmF5IChpbnQgbikKICAgIHsK ICAgICAgcmVwID0gbmV3IEFycmF5UmVwIChuKTsKCgogICAgICBpZHggPSAwOwogICAgICBtYXhf aW5kaWNlcyA9IDE7CiAgICAgIGlkeF9jb3VudCA9IDA7CgogICAgfQoKICBBcnJheSAoaW50IG4s IGNvbnN0IFQmIHZhbCk7CgogIEFycmF5IChjb25zdCBBcnJheTxUPiYgYSkKICAgIHsKICAgICAg cmVwID0gYS5yZXA7CiAgICAgIHJlcC0+Y291bnQrKzsKCgogICAgICBtYXhfaW5kaWNlcyA9IGEu bWF4X2luZGljZXM7CiAgICAgIGlkeF9jb3VudCA9IDA7CiAgICAgIGlkeCA9IDA7CgogICAgfQoK ICB+QXJyYXkgKHZvaWQpOwoKICBBcnJheTxUPiYgb3BlcmF0b3IgPSAoY29uc3QgQXJyYXk8VD4m IGEpOwoKICBpbnQgY2FwYWNpdHkgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIHJlcC0+bGVuZ3RoICgp OyB9CiAgaW50IGxlbmd0aCAodm9pZCkgY29uc3QgeyByZXR1cm4gcmVwLT5sZW5ndGggKCk7IH0K CiAgIAoKICBUJiB4ZWxlbSAoaW50IG4pIHsgcmV0dXJuIHJlcC0+ZWxlbSAobik7IH0KICBUIHhl bGVtIChpbnQgbikgY29uc3QgeyByZXR1cm4gcmVwLT5lbGVtIChuKTsgfQoKICAgCiAgIAogICAK CiAgVCYgY2hlY2tlbGVtIChpbnQgbikKICAgIHsKICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gcmVw LT5sZW5ndGggKCkpCglyZXR1cm4gcmFuZ2VfZXJyb3IgKCJUJiBBcnJheTxUPjo6Y2hlY2tlbGVt Iiwgbik7CiAgICAgIGVsc2UKCXsKCSAgbWFrZV91bmlxdWUgKCk7CgkgIHJldHVybiB4ZWxlbSAo bik7Cgl9CiAgICB9CgogIFQmIGVsZW0gKGludCBuKQogICAgewogICAgICBtYWtlX3VuaXF1ZSAo KTsKICAgICAgcmV0dXJuIHhlbGVtIChuKTsKICAgIH0KCgoKCiAgVCYgb3BlcmF0b3IgKCkgKGlu dCBuKSB7IHJldHVybiBlbGVtIChuKTsgfQoKCiAgVCBjaGVja2VsZW0gKGludCBuKSBjb25zdAog ICAgewogICAgICBpZiAobiA8IDAgfHwgbiA+PSByZXAtPmxlbmd0aCAoKSkKCXJldHVybiByYW5n ZV9lcnJvciAoIlQgQXJyYXk8VD46OmNoZWNrZWxlbSIsIG4pOwogICAgICBlbHNlCglyZXR1cm4g eGVsZW0gKG4pOwogICAgfQoKICBUIGVsZW0gKGludCBuKSBjb25zdCB7IHJldHVybiB4ZWxlbSAo bik7IH0KCgoKCiAgVCBvcGVyYXRvciAoKSAoaW50IG4pIGNvbnN0IHsgcmV0dXJuIGVsZW0gKG4p OyB9CgoKICB2b2lkIHJlc2l6ZSAoaW50IG4pOwogIHZvaWQgcmVzaXplIChpbnQgbiwgY29uc3Qg VCYgdmFsKTsKCiAgY29uc3QgVCAqZGF0YSAodm9pZCkgY29uc3QgeyByZXR1cm4gcmVwLT5kYXRh OyB9CgogIFQgKmZvcnRyYW5fdmVjICh2b2lkKTsKCiAgQXJyYXk8VD4mIHFzb3J0IChpbnQgKCpj b21wYXJlKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQogICAgewogICAgICBtYWtlX3Vu aXF1ZSAoKTsKCiAgICAgIHJlcC0+cXNvcnQgKGNvbXBhcmUpOwoKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICBUIHJhbmdlX2Vycm9yIChjb25zdCBjaGFyICpmY24sIGludCBuKSBjb25zdDsK ICBUJiByYW5nZV9lcnJvciAoY29uc3QgY2hhciAqZmNuLCBpbnQgbik7CgoKICB2b2lkIHNldF9t YXhfaW5kaWNlcyAoaW50IG1pKSB7IG1heF9pbmRpY2VzID0gbWk7IH0KCiAgdm9pZCBjbGVhcl9p bmRleCAodm9pZCk7CgogIHZvaWQgc2V0X2luZGV4IChjb25zdCBpZHhfdmVjdG9yJiBpKTsKCiAg aW50IGluZGV4X2NvdW50ICh2b2lkKSBjb25zdCB7IHJldHVybiBpZHhfY291bnQ7IH0KCiAgaWR4 X3ZlY3RvciAqZ2V0X2lkeCAodm9pZCkgY29uc3QgeyByZXR1cm4gaWR4OyB9CgogIHZvaWQgbWF5 YmVfZGVsZXRlX2VsZW1lbnRzIChpZHhfdmVjdG9yJiBpKTsKCiAgQXJyYXk8VD4gdmFsdWUgKHZv aWQpOwoKICBBcnJheTxUPiBpbmRleCAoaWR4X3ZlY3RvciYgaSkgY29uc3Q7Cgp9OwoKdGVtcGxh dGUgPGNsYXNzIExULCBjbGFzcyBSVD4KaW50IGFzc2lnbiAoQXJyYXk8TFQ+JiBsaHMsIGNvbnN0 IEFycmF5PFJUPiYgcmhzKTsKCgoKIAoKCgoKIyAyOCAic2lnaGFuZGxlcnMuaCIgMgoKCiMgMSAi c3lzd2FpdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgojaWRlbnQg ICIkUmV2aXNpb246IDEuNDYgJCIKCgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKCgoKCiAK CgoKCnR5cGVkZWYgdW5pb24gd2FpdAl7CglpbnQJd19zdGF0dXM7CQkgCgkgCgoKCXN0cnVjdCB7 CgoKCgoKCgoJCXVuc2lnbmVkIGludAl3X0ZpbGxlcjoxNiwJIAoJCQkJd19SZXRjb2RlOjgsCSAK CQkJCXdfQ29yZWR1bXA6MSwJIAoJCQkJd19UZXJtc2lnOjc7CSAKCgl9IHdfVDsKCSAKCgoKCglz dHJ1Y3QgewoKCgoKCgoJCXVuc2lnbmVkIGludAl3X0ZpbGxlcjoxNiwJIAoJCQkJd19TdG9wc2ln OjgsCSAKCQkJCXdfU3RvcHZhbDo4OwkgCgoJfSB3X1M7Cn0gd2FpdF90OwoKCgoKCgoKCgoKCgoK IAoKCiAKCgoKCgoKCgoKCiMgMTIyICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMwoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o IiAxIDMKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCiAKCgoKCnN0cnVjdCB0aW1ldmFs IHsKCgoKICAgICAgICB0aW1lX3QgIHR2X3NlYzsgICAgICAgICAgCiAgICAgICAgbG9uZyAgICB0 dl91c2VjOyAgICAgICAgIAp9OwoKIAoKCgoKc3RydWN0IF9faXJpeDVfdGltZXZhbCB7CiAgICAg ICAgX19pbnQzMl90ICAgIHR2X3NlYzsgICAgICAgICAgCiAgICAgICAgX19pbnQzMl90ICAgIHR2 X3VzZWM7ICAgICAgICAgCn07CgoKIAoKCgoKCgoKCgogCgoKCgoKCnN0cnVjdAlydXNhZ2UgewoJ c3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CSAKCXN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkgCgoK Cglsb25nCXJ1X21heHJzczsKCglsb25nCXJ1X2l4cnNzOwkJIAoJbG9uZwlydV9pZHJzczsJCSAK CWxvbmcJcnVfaXNyc3M7CQkgCglsb25nCXJ1X21pbmZsdDsJCSAKCWxvbmcJcnVfbWFqZmx0OwkJ IAoJbG9uZwlydV9uc3dhcDsJCSAKCWxvbmcJcnVfaW5ibG9jazsJCSAKCWxvbmcJcnVfb3VibG9j azsJCSAKCWxvbmcJcnVfbXNnc25kOwkJIAoJbG9uZwlydV9tc2dyY3Y7CQkgCglsb25nCXJ1X25z aWduYWxzOwkJIAoJbG9uZwlydV9udmNzdzsJCSAKCWxvbmcJcnVfbml2Y3N3OwkJIAoKCn07Cgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBfX3VpbnQ2NF90 IHJsaW1fdDsKCgoKCnN0cnVjdCBybGltaXQgewoJcmxpbV90CXJsaW1fY3VyOwkJIAoJcmxpbV90 CXJsaW1fbWF4OwkJIAp9OwoKCnR5cGVkZWYgX191aW50NjRfdCBybGltNjRfdDsKCnN0cnVjdCBy bGltaXQ2NCB7CglybGltNjRfdAlybGltX2N1cjsKCXJsaW02NF90CXJsaW1fbWF4OwkJCn07CQkK CgojIDE2NiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzCgoKZXh0ZXJuIGludCBnZXRy bGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0ICopOwpleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNv bnN0IHN0cnVjdCBybGltaXQgKik7CmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkoaW50LCBpZF90KTsK ZXh0ZXJuIGludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7CmV4dGVybiBpbnQgZ2V0cnVz YWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwg c3RydWN0IHJsaW1pdDY0ICopOwpleHRlcm4gaW50IHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3Ry dWN0IHJsaW1pdDY0ICopOwoKCgoKCn0KCgoKIyAxNTMgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o IiAyIDMKCgoKCgoKCgoKZXh0ZXJuIHBpZF90IHdhaXRwaWQocGlkX3QsIGludCAqLCBpbnQpOwoK CgoKCmV4dGVybiBwaWRfdCB3YWl0KGludCAqKTsKCgoKCgoKZXh0ZXJuIHBpZF90IHdhaXQzKGlu dCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwg aWRfdCwgc2lnaW5mb190ICosIGludCk7CgoKCgoKfQoKCgojIDM3ICJzeXN3YWl0LmgiIDIKCgoK IyA0OSAic3lzd2FpdC5oIgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAzMCAi c2lnaGFuZGxlcnMuaCIgMgoKCiAKCgoKCgoKCiAKCgojIDUxICJzaWdoYW5kbGVycy5oIgoKCgoK CgoKCgp0eXBlZGVmIHZvaWQgIHNpZ19oYW5kbGVyIChpbnQpOwoKIAoKc3RydWN0Cm9jdGF2ZV9p bnRlcnJ1cHRfaGFuZGxlcgp7CgogIHNpZ19oYW5kbGVyICppbnRfaGFuZGxlcjsKCgoKCgp9OwoK IAogCmV4dGVybiBpbnQgcGlwZV9oYW5kbGVyX2Vycm9yX2NvdW50OwoKIApleHRlcm4gaW50IGNh bl9pbnRlcnJ1cHQ7CgpleHRlcm4gc2lnX2hhbmRsZXIgKm9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs ZXIgKGludCwgc2lnX2hhbmRsZXIgKik7CgpleHRlcm4gdm9pZCBpbnN0YWxsX3NpZ25hbF9oYW5k bGVycyAodm9pZCk7CgpleHRlcm4gb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyIG9jdGF2ZV9jYXRj aF9pbnRlcnJ1cHRzICh2b2lkKTsKCmV4dGVybiBvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIgb2N0 YXZlX2lnbm9yZV9pbnRlcnJ1cHRzICh2b2lkKTsKCmV4dGVybiBvY3RhdmVfaW50ZXJydXB0X2hh bmRsZXIKb2N0YXZlX3NldF9pbnRlcnJ1cHRfaGFuZGxlciAoY29uc3Qgdm9sYXRpbGUgb2N0YXZl X2ludGVycnVwdF9oYW5kbGVyJik7CgpleHRlcm4gdm9pZCBvY3RhdmVfc2F2ZV9zaWduYWxfbWFz ayAodm9pZCk7CgpleHRlcm4gdm9pZCBvY3RhdmVfcmVzdG9yZV9zaWduYWxfbWFzayAodm9pZCk7 CgogCgogCgoKZXh0ZXJuIGNoYXIgKnN5c19zaWdsaXN0W107CgoKIAoKY2xhc3MKb2N0YXZlX2No aWxkCnsKcHVibGljOgoKICB0eXBlZGVmIHZvaWQgKCpkZWFkX2NoaWxkX2hhbmRsZXIpIChwaWRf dCwgaW50KTsKCiAgb2N0YXZlX2NoaWxkIChwaWRfdCBpZCA9IC0xLCBkZWFkX2NoaWxkX2hhbmRs ZXIgZiA9IDApCiAgICA6IHBpZCAoaWQpLCBoYW5kbGVyIChmKSB7IH0KCiAgb2N0YXZlX2NoaWxk IChjb25zdCBvY3RhdmVfY2hpbGQmIG9jKQogICAgOiBwaWQgKG9jLnBpZCksIGhhbmRsZXIgKG9j LmhhbmRsZXIpIHsgfQoKICBvY3RhdmVfY2hpbGQmIG9wZXJhdG9yID0gKGNvbnN0IG9jdGF2ZV9j aGlsZCYgb2MpCiAgICB7CiAgICAgIGlmICgmb2MgIT0gdGhpcykKCXsKCSAgcGlkID0gb2MucGlk OwoJICBoYW5kbGVyID0gb2MuaGFuZGxlcjsKCX0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB+b2N0YXZlX2NoaWxkICh2b2lkKSB7IH0KCiAgIAogIHBpZF90IHBpZDsKCiAgIAogIGRlYWRf Y2hpbGRfaGFuZGxlciBoYW5kbGVyOwp9OwoKY2xhc3MKb2N0YXZlX2NoaWxkX2xpc3QKewpwcm90 ZWN0ZWQ6CgogIG9jdGF2ZV9jaGlsZF9saXN0ICh2b2lkKSA6IGxpc3QgKDApLCBjdXJyX2xlbiAo MCkgeyB9CgpwdWJsaWM6CgogIH5vY3RhdmVfY2hpbGRfbGlzdCAodm9pZCkgeyB9CgogIHN0YXRp YyB2b2lkIGluc2VydCAocGlkX3QgcGlkLCBvY3RhdmVfY2hpbGQ6OmRlYWRfY2hpbGRfaGFuZGxl ciBmKTsKCiAgc3RhdGljIHZvaWQgcmVtb3ZlIChwaWRfdCBwaWQpOwoKICBzdGF0aWMgaW50IGxl bmd0aCAodm9pZCkgeyByZXR1cm4gaW5zdGFuY2UgPyBpbnN0YW5jZS0+Y3Vycl9sZW4gOiAwOyB9 CgogIHN0YXRpYyBvY3RhdmVfY2hpbGQmIGVsZW0gKGludCBpKQogICAgewogICAgICBzdGF0aWMg b2N0YXZlX2NoaWxkIGZvbzsKCiAgICAgIGlmIChpbnN0YW5jZSkKCXsKCSAgaW50IG4gPSBsZW5n dGggKCk7CgoJICBpZiAoaSA+PSAwICYmIGkgPCBuKQoJICAgIHJldHVybiBpbnN0YW5jZS0+bGlz dCAoaSk7Cgl9CgogICAgICByZXR1cm4gZm9vOwogICAgfQoKcHJpdmF0ZToKCiAgQXJyYXk8b2N0 YXZlX2NoaWxkPiBsaXN0OwoKICBpbnQgY3Vycl9sZW47CgogIHN0YXRpYyBvY3RhdmVfY2hpbGRf bGlzdCAqaW5zdGFuY2U7CgogIHZvaWQgZG9faW5zZXJ0IChwaWRfdCBwaWQsIG9jdGF2ZV9jaGls ZDo6ZGVhZF9jaGlsZF9oYW5kbGVyIGYpOwoKICB2b2lkIGRvX3JlbW92ZSAocGlkX3QgcGlkKTsK fTsKCgoKIAoKCgoKIyA0NSAic2lnaGFuZGxlcnMuY2MiIDIKCiMgMSAic3lzd2FpdC5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3MyAic3lzd2FpdC5oIgoKCiAKCgoKCiMgNDYgInNpZ2hh bmRsZXJzLmNjIiAyCgojIDEgInRvcGxldi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgpjbGFzcyBvY3RhdmVfdmFsdWU7CmNsYXNzIG9jdGF2ZV92YWx1ZV9saXN0OwpjbGFzcyB0cmVl X2Z1bmN0aW9uOwpjbGFzcyB0cmVlX3N0YXRlbWVudF9saXN0OwpjbGFzcyBjaGFyTWF0cml4OwoK CgpleHRlcm4gdm9pZCBjbGVhbl91cF9mb3JfZXhpdCAodm9pZCk7CgpleHRlcm4gdm9pZCBjbGVh bl91cF9hbmRfZXhpdCAoaW50KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkgOwoKZXh0 ZXJuIHZvaWQgcGFyc2VfYW5kX2V4ZWN1dGUgKEZJTEUgKmYsIGludCBwcmludCA9IDApOwoKZXh0 ZXJuIHZvaWQgcGFyc2VfYW5kX2V4ZWN1dGUgKGNvbnN0IHN0cmluZyYgcywgaW50IHByaW50ID0g MCwKCQkJICAgICAgIGludCB2ZXJib3NlID0gMCwKCQkJICAgICAgIGNvbnN0IGNoYXIgKndhcm5f Zm9yID0gMCk7CgpleHRlcm4gb2N0YXZlX3ZhbHVlIGV2YWxfc3RyaW5nIChjb25zdCBzdHJpbmcm LCBpbnQgcHJpbnQsCgkJCQkgIGludCYgcGFyc2Vfc3RhdHVzKTsKCgpleHRlcm4gb2N0YXZlX3Zh bHVlX2xpc3QKZmV2YWwgKGNvbnN0IHN0cmluZyYgbmFtZSwgY29uc3Qgb2N0YXZlX3ZhbHVlX2xp c3QmIGFyZ3MsIGludCBuYXJnb3V0KTsKCmV4dGVybiBvY3RhdmVfdmFsdWVfbGlzdApmZXZhbCAo Y29uc3Qgb2N0YXZlX3ZhbHVlX2xpc3QmIGFyZ3MsIGludCBuYXJnb3V0KTsKCmV4dGVybiBpbnQg bWFpbl9sb29wICh2b2lkKTsKCmV4dGVybiB2b2lkIGRvX29jdGF2ZV9hdGV4aXQgKHZvaWQpOwoK ZXh0ZXJuIHZvaWQgc3ltYm9sc19vZl90b3BsZXYgKHZvaWQpOwoKIApleHRlcm4gc3RyaW5nIFZw cm9ncmFtX2ludm9jYXRpb25fbmFtZTsKCiAKZXh0ZXJuIHN0cmluZyBWcHJvZ3JhbV9uYW1lOwoK IApleHRlcm4gc3RyaW5nIFZ1c2VyX25hbWU7CgogCmV4dGVybiBzdHJpbmcgVmhvc3RfbmFtZTsK CiAKZXh0ZXJuIHN0cmluZyBWaG9tZV9kaXJlY3Rvcnk7CgogCmV4dGVybiBpbnQgdXNpbmdfcmVh ZGxpbmU7CgogCmV4dGVybiBpbnQgcmVhZGluZ19zdGFydHVwX21lc3NhZ2VfcHJpbnRlZDsKCiAK ZXh0ZXJuIGludCBjdXJyZW50X2NvbW1hbmRfbnVtYmVyOwoKIApleHRlcm4gaW50IHF1aXR0aW5n X2dyYWNlZnVsbHk7CgogCmV4dGVybiB0cmVlX3N0YXRlbWVudF9saXN0ICpnbG9iYWxfY29tbWFu ZDsKCiAKZXh0ZXJuIHRyZWVfZnVuY3Rpb24gKmN1cnJfZnVuY3Rpb247CgogCmV4dGVybiBpbnQg aW5wdXRfZnJvbV9zdGFydHVwX2ZpbGU7CgogCiAKZXh0ZXJuIGludCBpbnB1dF9mcm9tX2NvbW1h bmRfbGluZV9maWxlOwoKCgogCgoKCgojIDQ3ICJzaWdoYW5kbGVycy5jYyIgMgoKIyAxICJ1dGls cy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0 cnN0cmVhbTsKCgoKIyAxICIuLi9saWJvY3RhdmUvbG8tdXRpbHMuaCIgMQogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgTklOVCAoZG91YmxlIHgpOwpleHRlcm4gZG91YmxlIERf TklOVCAoZG91YmxlIHgpOwoKCgogCgoKCgojIDMxICJ1dGlscy5oIiAyCgoKY2xhc3Mgb2N0YXZl X3ZhbHVlX2xpc3Q7CmNsYXNzIHN0cmluZ192ZWN0b3I7CgpleHRlcm4gY2hhciAqc3Ryc2F2ZSAo Y29uc3QgY2hhciAqKTsKCmV4dGVybiBzdHJpbmcgc2VhcmNoX3BhdGhfZm9yX2ZpbGUgKGNvbnN0 IHN0cmluZyYsIGNvbnN0IHN0cmluZyYpOwpleHRlcm4gc3RyaW5nIGZpbGVfaW5fcGF0aCAoY29u c3Qgc3RyaW5nJiwgY29uc3Qgc3RyaW5nJik7CmV4dGVybiBzdHJpbmcgZmNuX2ZpbGVfaW5fcGF0 aCAoY29uc3Qgc3RyaW5nJik7CmV4dGVybiBzdHJpbmcgb2N0X2ZpbGVfaW5fcGF0aCAoY29uc3Qg c3RyaW5nJik7CgpleHRlcm4gIkMiIHZvaWQganVtcF90b190b3BfbGV2ZWwgKHZvaWQpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKSA7CgpleHRlcm4gaW50IGFsbW9zdF9tYXRjaCAoY29u c3Qgc3RyaW5nJiBzdGQsIGNvbnN0IHN0cmluZyYgcywKCQkJIGludCBtaW5fbWF0Y2hfbGVuID0g MSwgaW50IGNhc2Vfc2VucyA9IDEpOwoKZXh0ZXJuIGludAprZXl3b3JkX2FsbW9zdF9tYXRjaCAo Y29uc3QgY2hhciAqKnN0ZCwgaW50ICptaW5fbGVuLAoJCSAgICAgIGNvbnN0IHN0cmluZyYgcywg aW50IG1pbl90b2tzX3RvX21hdGNoLAoJCSAgICAgIGludCBtYXhfdG9rcyk7CgpleHRlcm4gaW50 IGVtcHR5X2FyZyAoY29uc3QgY2hhciAqbmFtZSwgaW50IG5yLCBpbnQgbmMpOwoKZXh0ZXJuIGNv bnN0IGNoYXIgKnVuZG9fc3RyaW5nX2VzY2FwZSAoY2hhciBjKTsKCmV4dGVybiBzdHJpbmcgZG9f c3RyaW5nX2VzY2FwZXMgKGNvbnN0IHN0cmluZyYgcyk7CgpleHRlcm4gc3RyaW5nIHVuZG9fc3Ry aW5nX2VzY2FwZXMgKGNvbnN0IHN0cmluZyYgcyk7CgpleHRlcm4gdm9pZCBvY3RfcHV0ZW52IChj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgpleHRlcm4gaW50IGNoZWNrX3ByZWZlcmVuY2Ug KGNvbnN0IHN0cmluZyYgdmFyKTsKCmV4dGVybiAiQyIgdm9pZCBvY3RhdmVfdXNsZWVwICh1bnNp Z25lZCBpbnQgdXNlY29uZHMpOwoKZXh0ZXJuICJDIiBpbnQgb2N0YXZlX3N0cmNhc2VjbXAgKGNv bnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CgpleHRlcm4gIkMiIGludCBvY3RhdmVfc3Ry bmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pOwoKCgog CgoKCgojIDQ4ICJzaWdoYW5kbGVycy5jYyIgMgoKCiAKIAppbnQgcGlwZV9oYW5kbGVyX2Vycm9y X2NvdW50ID0gMDsKCiAKaW50IGNhbl9pbnRlcnJ1cHQgPSAwOwoKIAogCiAKIAogCiAKIAoKCnN0 YXRpYyBzaWdzZXRfdCBvY3RhdmVfc2lnbmFsX21hc2s7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCnZvaWQKb2N0YXZlX3NhdmVfc2lnbmFsX21hc2sgKHZvaWQpCnsKCiAgc2lncHJvY21h c2sgKDAsIDAsICZvY3RhdmVfc2lnbmFsX21hc2spOwoKfQoKdm9pZApvY3RhdmVfcmVzdG9yZV9z aWduYWxfbWFzayAodm9pZCkKewoKICBzaWdwcm9jbWFzayAoMyAsICZvY3RhdmVfc2lnbmFsX21h c2ssIDApOwoKfQoKc3RhdGljIHZvaWQKbXlfZnJpZW5kbHlfZXhpdCAoY29uc3QgY2hhciAqc2ln X25hbWUsIGludCBzaWdfbnVtYmVyKQp7CiAgc3RhdGljIGJvb2wgYmVlbl90aGVyZV9kb25lX3Ro YXQgPSBmYWxzZTsKCiAgaWYgKGJlZW5fdGhlcmVfZG9uZV90aGF0KQogICAgewoKICAgICAgb2N0 YXZlX3NldF9zaWduYWxfaGFuZGxlciAoNiAsICgoU0lHX1BGKTBMKSApOwoKCiAgICAgIGNlcnIg PDwgImVycm9yOiBhdHRlbXB0ZWQgY2xlYW4gdXAgYXBwYXJlbnRseSBmYWlsZWQgLS0gYWJvcnRp bmcuLi5cbiI7CgogICAgICBhYm9ydCAoKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGJlZW5f dGhlcmVfZG9uZV90aGF0ID0gdHJ1ZTsKCiAgICAgIGNlcnIgPDwgImVycm9yOiAiIDw8IHNpZ19u YW1lIDw8ICIgLS0gc3RvcHBpbmcgbXlzZWxmLi4uXG4iOwoKICAgICAgc2F2ZV91c2VyX3Zhcmlh YmxlcyAoKTsKCiAgICAgIGNsZWFuX3VwX2Zvcl9leGl0ICgpOwoKICAgICAgaWYgKHNpZ19udW1i ZXIgPCAwKQoJZXhpdCAoMSk7CiAgICAgIGVsc2UKCXsKCSAgb2N0YXZlX3NldF9zaWduYWxfaGFu ZGxlciAoc2lnX251bWJlciwgKChTSUdfUEYpMEwpICk7CgoJICBraWxsIChnZXRwaWQgKCksIHNp Z19udW1iZXIpOwoJfQogICAgfQp9CgogCgpzdGF0aWMgdm9pZApvY3RhdmVfbmV3X2hhbmRsZXIg KHZvaWQpCnsKICBjZXJyIDw8ICJlcnJvcjogbWVtb3J5IGV4aGF1c3RlZCAtLSB0cnlpbmcgdG8g cmV0dXJuIHRvIHByb21wdFxuIjsKCiAgaWYgKGNhbl9pbnRlcnJ1cHQpCiAgICB7CiAgICAgIGp1 bXBfdG9fdG9wX2xldmVsICgpOwogICAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hl ZCBpbiBmaWxlIGAlcycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDE1OSkgOwogICAg fQogIGVsc2UKICAgIG15X2ZyaWVuZGx5X2V4aXQgKCJvcGVyYXRvciBuZXciLCA2ICApOwp9Cgpz aWdfaGFuZGxlciAqCm9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKGludCBzaWcsIHNpZ19oYW5k bGVyICpoYW5kbGVyKQp7CgogIHN0cnVjdCBzaWdhY3Rpb24gYWN0LCBvYWN0OwogIGFjdC4gc2Ff c2lnaGFuZGxlci5zYV9oYW5kbGVyMSAgPSBoYW5kbGVyOwogIGFjdC5zYV9mbGFncyA9IDA7CiAg c2lnZW1wdHlzZXQgKCZhY3Quc2FfbWFzayk7CiAgc2lnZW1wdHlzZXQgKCZvYWN0LnNhX21hc2sp OwogIHNpZ2FjdGlvbiAoc2lnLCAmYWN0LCAmb2FjdCk7CiAgcmV0dXJuIG9hY3QuIHNhX3NpZ2hh bmRsZXIuc2FfaGFuZGxlcjEgOwoKCgp9CgpzdGF0aWMgdm9pZCAKZ2VuZXJpY19zaWdfaGFuZGxl ciAoaW50IHNpZykKewogIG15X2ZyaWVuZGx5X2V4aXQgKHN5c19zaWdsaXN0W3NpZ10sIHNpZyk7 CgogIHJldHVybiA7Cn0KCiAKCnN0YXRpYyB2b2lkIApzaWdjaGxkX2hhbmRsZXIgKGludCAgKQp7 CiAgdm9sYXRpbGUgb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyIHNhdmVkX2ludGVycnVwdF9oYW5k bGVyCiAgICAgPSBvY3RhdmVfaWdub3JlX2ludGVycnVwdHMgKCk7CgogICAKICAgCiAgIAoKCgoK CgogIHNpZ3NldF90IHNldCwgb3NldDsKCiAgZG8geyBzaWdlbXB0eXNldCAoJiAgIHNldCAgKTsg c2lnYWRkc2V0ICgmICAgc2V0ICAsICAxOCAgKTsgc2lnZW1wdHlzZXQgKCYgICAgb3NldCAgKTsg c2lncHJvY21hc2sgKDEgLCAmICAgc2V0ICAsICYgICAgb3NldCAgKTsgfSB3aGlsZSAoMCkgIDsK CiAgaW50IG4gPSBvY3RhdmVfY2hpbGRfbGlzdDo6bGVuZ3RoICgpOwoKICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgb2N0YXZlX2NoaWxkJiBlbHQgPSBvY3RhdmVfY2hp bGRfbGlzdDo6ZWxlbSAoaSk7CgogICAgICBwaWRfdCBwaWQgPSBlbHQucGlkOwoKICAgICAgaWYg KHBpZCA+IDApCgl7CgkgIGludCBzdGF0dXM7CgoJICBpZiAod2FpdHBpZCAocGlkLCAmc3RhdHVz LCAwMTAwICkgPiAwKQoJICAgIHsKCSAgICAgIGVsdC5waWQgPSAtMTsKCgkgICAgICBvY3RhdmVf Y2hpbGQ6OmRlYWRfY2hpbGRfaGFuZGxlciBmID0gZWx0LmhhbmRsZXI7CgoJICAgICAgaWYgKGYp CgkJZiAocGlkLCBzdGF0dXMpOwoKCSAgICAgIGJyZWFrOwoJICAgIH0KCX0KICAgIH0KCiAgb2N0 YXZlX3NldF9pbnRlcnJ1cHRfaGFuZGxlciAoc2F2ZWRfaW50ZXJydXB0X2hhbmRsZXIpOwoKICBz aWdwcm9jbWFzayAoMyAsICYgb3NldCAsIDApIDsKCgoKCgogIGRvIHsgfSB3aGlsZSAoMCkgOwoK ICBkbyB7IH0gd2hpbGUgKDApIDsKCiAgcmV0dXJuIDsKfQoKIyAyNjkgInNpZ2hhbmRsZXJzLmNj IgoKCiMgMjg5ICJzaWdoYW5kbGVycy5jYyIKCgogCiAKIAogCiAKCnN0YXRpYyB2b2lkIApzaWdp bnRfaGFuZGxlciAoaW50IHNpZykKewogIGRvIHsgfSB3aGlsZSAoMCkgOwoKICBkbyB7IH0gd2hp bGUgKDApIDsKCiAgaWYgKGNhbl9pbnRlcnJ1cHQpCiAgICB7CiAgICAgIGp1bXBfdG9fdG9wX2xl dmVsICgpOwogICAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hlZCBpbiBmaWxlIGAl cycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDMwNykgOwogICAgfQoKICByZXR1cm4g Owp9CgpzdGF0aWMgdm9pZCAKc2lncGlwZV9oYW5kbGVyIChpbnQgICkKewogIGRvIHsgfSB3aGls ZSAoMCkgOwoKICBkbyB7IH0gd2hpbGUgKDApIDsKCiAgaWYgKHBpcGVfaGFuZGxlcl9lcnJvcl9j b3VudCsrID09IDApCiAgICBjZXJyIDw8ICJ3YXJuaW5nOiBicm9rZW4gcGlwZVxuIjsKCiAgIAoK ICBpZiAocGlwZV9oYW5kbGVyX2Vycm9yX2NvdW50ICA+IDEwMCkKICAgIGp1bXBfdG9fdG9wX2xl dmVsICgpOwoKICByZXR1cm4gOwp9CgpvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIKb2N0YXZlX2Nh dGNoX2ludGVycnVwdHMgKHZvaWQpCnsKICBvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIgcmV0dmFs OwoKCiAgcmV0dmFsLmludF9oYW5kbGVyID0gb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMiAs IHNpZ2ludF9oYW5kbGVyKTsKCgoKCgoKICByZXR1cm4gcmV0dmFsOwp9CgpvY3RhdmVfaW50ZXJy dXB0X2hhbmRsZXIKb2N0YXZlX2lnbm9yZV9pbnRlcnJ1cHRzICh2b2lkKQp7CiAgb2N0YXZlX2lu dGVycnVwdF9oYW5kbGVyIHJldHZhbDsKCgogIHJldHZhbC5pbnRfaGFuZGxlciA9IG9jdGF2ZV9z ZXRfc2lnbmFsX2hhbmRsZXIgKDIgLCAoKFNJR19QRikxTCkgKTsKCgoKCgoKICByZXR1cm4gcmV0 dmFsOwp9CgpvY3RhdmVfaW50ZXJydXB0X2hhbmRsZXIKb2N0YXZlX3NldF9pbnRlcnJ1cHRfaGFu ZGxlciAoY29uc3Qgdm9sYXRpbGUgb2N0YXZlX2ludGVycnVwdF9oYW5kbGVyJiBoKQp7CiAgb2N0 YXZlX2ludGVycnVwdF9oYW5kbGVyIHJldHZhbDsKCgogIHJldHZhbC5pbnRfaGFuZGxlciA9IG9j dGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDIgLCBoLmludF9oYW5kbGVyKTsKCgoKCgoKICByZXR1 cm4gcmV0dmFsOwp9CgogCgp2b2lkCmluc3RhbGxfc2lnbmFsX2hhbmRsZXJzICh2b2lkKQp7CiAg c2V0X25ld19oYW5kbGVyIChvY3RhdmVfbmV3X2hhbmRsZXIpOwoKICBvY3RhdmVfY2F0Y2hfaW50 ZXJydXB0cyAoKTsKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDYgLCBnZW5lcmljX3Np Z19oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICgxNCAsIGdlbmVyaWNf c2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDEwICwgZ2VuZXJp Y19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMTggLCBzaWdj aGxkX2hhbmRsZXIpOwoKCiAgIAogICAKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDcg LCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVy ICg4ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs ZXIgKDEgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5k bGVyICg0ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKICAgCiAgIAoKCiAgb2N0YXZlX3NldF9z aWduYWxfaGFuZGxlciAoMjIgLCAoKFNJR19QRikxTCkgKTsKCgoKICBvY3RhdmVfc2V0X3NpZ25h bF9oYW5kbGVyICg2ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCgoKCgogIG9jdGF2ZV9zZXRf c2lnbmFsX2hhbmRsZXIgKDEzICwgc2lncGlwZV9oYW5kbGVyKTsKCgoKICBvY3RhdmVfc2V0X3Np Z25hbF9oYW5kbGVyICgyMiAsICgoU0lHX1BGKTFMKSApOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFs X2hhbmRsZXIgKDI5ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKICAgCgoKICBvY3RhdmVfc2V0 X3NpZ25hbF9oYW5kbGVyICgzICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3Nl dF9zaWduYWxfaGFuZGxlciAoMTEgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgogICAKCgogIG9j dGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDEyICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoKCiAg b2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMTUgLCBnZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoK ICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICg1ICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7CgoK ICAgCiAgIAogICAKICAgCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVyICgxNiAsIGdlbmVy aWNfc2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRsZXIgKDE3ICwgZ2Vu ZXJpY19zaWdfaGFuZGxlcik7CgoKCiAgb2N0YXZlX3NldF9zaWduYWxfaGFuZGxlciAoMjggLCBn ZW5lcmljX3NpZ19oYW5kbGVyKTsKCgoKCgoKCgoKICBvY3RhdmVfc2V0X3NpZ25hbF9oYW5kbGVy ICgzMCAsIGdlbmVyaWNfc2lnX2hhbmRsZXIpOwoKCgogIG9jdGF2ZV9zZXRfc2lnbmFsX2hhbmRs ZXIgKDMxICwgZ2VuZXJpY19zaWdfaGFuZGxlcik7Cgp9CgojIDYxOCAic2lnaGFuZGxlcnMuY2Mi CgoKb2N0YXZlX2NoaWxkX2xpc3QgKm9jdGF2ZV9jaGlsZF9saXN0OjppbnN0YW5jZSA9IDA7Cgp2 b2lkCm9jdGF2ZV9jaGlsZF9saXN0Ojpkb19pbnNlcnQgKHBpZF90IHBpZCwgb2N0YXZlX2NoaWxk OjpkZWFkX2NoaWxkX2hhbmRsZXIgZikKewogICAKICAgCgogIGJvb2wgZW5sYXJnZSA9IHRydWU7 CgogIGZvciAoaW50IGkgPSAwOyBpIDwgY3Vycl9sZW47IGkrKykKICAgIHsKICAgICAgb2N0YXZl X2NoaWxkJiB0bXAgPSBsaXN0IChpKTsKCiAgICAgIGlmICh0bXAucGlkIDwgMCkKCXsKCSAgbGlz dCAoaSkgPSBvY3RhdmVfY2hpbGQgKHBpZCwgZik7CgkgIGVubGFyZ2UgPSBmYWxzZTsKCSAgYnJl YWs7Cgl9CiAgICB9CgogIGlmIChlbmxhcmdlKQogICAgewogICAgICBpbnQgdG90YWxfbGVuID0g bGlzdC5sZW5ndGggKCk7CgogICAgICBpZiAoY3Vycl9sZW4gPT0gdG90YWxfbGVuKQoJewoJICBp ZiAodG90YWxfbGVuID09IDApCgkgICAgbGlzdC5yZXNpemUgKDE2KTsKCSAgZWxzZQoJICAgIGxp c3QucmVzaXplICh0b3RhbF9sZW4gKiAyKTsKCX0KCiAgICAgIGxpc3QgKGN1cnJfbGVuKSA9IG9j dGF2ZV9jaGlsZCAocGlkLCBmKTsKICAgICAgY3Vycl9sZW4rKzsKICAgIH0KfQoKdm9pZApvY3Rh dmVfY2hpbGRfbGlzdDo6aW5zZXJ0IChwaWRfdCBwaWQsIG9jdGF2ZV9jaGlsZDo6ZGVhZF9jaGls ZF9oYW5kbGVyIGYpCnsKICBpZiAoISBpbnN0YW5jZSkKICAgIGluc3RhbmNlID0gbmV3IG9jdGF2 ZV9jaGlsZF9saXN0ICgpOwoKICBpZiAoaW5zdGFuY2UpCiAgICBpbnN0YW5jZS0+ZG9faW5zZXJ0 IChwaWQsIGYpOwogIGVsc2UKICAgIHBhbmljICgiaW1wb3NzaWJsZSBzdGF0ZSByZWFjaGVkIGlu IGZpbGUgYCVzJyBhdCBsaW5lICVkIiwgInNpZ2hhbmRsZXJzLmNjIiwgNjY4KSA7Cn0KCnZvaWQK b2N0YXZlX2NoaWxkX2xpc3Q6OmRvX3JlbW92ZSAocGlkX3QgcGlkKQp7CiAgIAoKICBmb3IgKGlu dCBpID0gMDsgaSA8IGN1cnJfbGVuOyBpKyspCiAgICB7CiAgICAgIG9jdGF2ZV9jaGlsZCYgdG1w ID0gbGlzdCAoaSk7CgogICAgICBpZiAodG1wLnBpZCA9PSBwaWQpCgl7CgkgIHRtcC5waWQgPSAt MTsKCSAgYnJlYWs7Cgl9CiAgICB9Cn0KCnZvaWQKb2N0YXZlX2NoaWxkX2xpc3Q6OnJlbW92ZSAo cGlkX3QgcGlkKQp7CiAgaWYgKCEgaW5zdGFuY2UpCiAgICBpbnN0YW5jZSA9IG5ldyBvY3RhdmVf Y2hpbGRfbGlzdCAoKTsKCiAgaWYgKGluc3RhbmNlKQogICAgaW5zdGFuY2UtPmRvX3JlbW92ZSAo cGlkKTsKICBlbHNlCiAgICBwYW5pYyAoImltcG9zc2libGUgc3RhdGUgcmVhY2hlZCBpbiBmaWxl IGAlcycgYXQgbGluZSAlZCIsICJzaWdoYW5kbGVycy5jYyIsIDY5NykgOwp9CgogCgoKCgo=
next reply other threads:[~2002-09-24 1:06 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2002-09-23 18:06 milgramjh [this message] 2002-10-28 14:31 reichelt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20020924005855.24269.qmail@sources.redhat.com \ --to=milgramjh@nswccd.navy.mil \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).