From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22957 invoked by alias); 26 Mar 2002 10:16:06 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 22923 invoked by uid 71); 26 Mar 2002 10:16:03 -0000 Date: Tue, 26 Mar 2002 02:16:00 -0000 Message-ID: <20020326101603.22922.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Mario Deilmann Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0 Reply-To: Mario Deilmann X-SW-Source: 2002-03/txt/msg00966.txt.bz2 List-Id: The following reply was made to PR c++/6001; it has been noted by GNATS. From: Mario Deilmann To: Neil Booth Cc: gcc-gnats@gcc.gnu.org Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0 Date: Tue, 26 Mar 2002 11:05:14 +0100 (MET) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-758783491-1017137114=:8152 Content-Type: TEXT/PLAIN; charset=US-ASCII Neil, here comes the output of g++ -Wall -E buffer.cc > out_ok g++ -Wall -E buffer.cpp > out_notok I'll sent you in my previous mail the output you suggested me to look at - sorry for the misunderstanding. > I'm quite sure there are no bugs in this part of CPP. People use it in > millions of situations every day. That's of course no argument to be error-free ! > > You don't need to replicate my system. With the source code example I send > > you you could replicate the error on a lot of systems. > > I can't, on g++ on Linux I get: > > $ g++ -c -Wall buffer.cpp > buffer.cpp: In method `char TSourceBuffer::GetLine()': > buffer.cpp:137: warning: unused variable `int lineNumber' > $ > > in both directories error/ and no-error/ of your tarball. > OK, that a simple warning no problem at all, uncomment the variable to avoid the warning. On Suse 7.2 with gcc 2.95.3 and on RedHat 7.2 with gcc 2.96 I also get no error with both versions ? Mmmh, maybe I tested it with a gcc >= 3.00. But I cannot access this machine at the moment sorry. So the only machine where I can reproduce it is the Sun Solaris machine. Maybe I updated my linux boxes to early. I try to install gcc 3.0.4 in the meantime on Linux though it failed under Solaris with the gcc 3.0.0 maybe that's a hint - but this is another bug report. > > No, that is not preprocessed source. You sent me the include trace, > which was *completely different for the two compilers*. How can you > expect to get the same result when the compilers are reading different > header files? This is definetly wrong !!! The version of the programm includes the following headers in the file buffer.cc and this is ok for g++ 3.0.0. #include #include #include #include #include #include #include #include "common.h" #include "misc.h" #include "error.h" #include "buffer.h" using namespace std ; The other version buffer.cpp includes (and this is not ok for g++ 3.0.0 but for CC 5.0) #include #include #include #include #include "common.h" in common.h #include "misc.h" #include "buffer.h" in buffer.h #include #include #include #include "misc.h" #include "error.h" So you end up with the same headers in a different sequence ! Both programs include only the following headers NO others. system headers: #include #include #include #include #include #include #include and #include "common.h" #include "misc.h" #include "error.h" #include "buffer.h" > How can you expect to get the same result when the compilers are reading > different header files? I expect the same results due to the fact that the include sequence in a given C/C++ programm should be of no relevance (if there are no dependecies - and that's what I expect from the system headers). Furthermore the program with the nested include sequence causes an error in different system headers not in the user code. It's vivid that you get different traces though the include sequence is different. -- Mario ---559023410-758783491-1017137114=:8152 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_notok Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IyAyMCAiYnVmZmVyLmNwcCINCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDEgMyA0DQojIDE0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u aCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAz IDQNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMyA0DQp0 eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0Ow0KIyAx NSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDM0ICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQojcHJhZ21hIGlkZW50 ICJAKCMpc3RkaW8uaAkxLjY5CTk4LzA3LzEzIFNNSSINCg0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTMgIi91 c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCiNwcmFnbWEg aWRlbnQgIkAoIylmZWF0dXJlX3Rlc3RzLmgJMS4xNwk5Ny8xMi8wNCBTTUki DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0K IyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KI3ByYWdt YSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4xNgk5OS8wNS8yNSBTTUkiDQoj IDE0OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQNCmV4dGVy biAiQyIgew0KIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIg MyA0DQp9DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTc1ICIvdXNyL2luY2x1 ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0DQp9DQojIDM3ICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zeXMv dmFfbGlzdC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0LmgJ MS4xMQk5Ny8xMS8yMiBTTUkiDQojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Zh X2xpc3QuaCIgMyA0DQpleHRlcm4gIkMiIHsNCg0KDQoNCnR5cGVkZWYgdm9p ZCAqX192YV9saXN0Ow0KDQoNCg0KDQoNCn0NCiMgMzggIi9ob21lL21kZWls L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv aW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3Rk aW9fdGFnLmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb190YWcu aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4 LzA0LzIwIFNNSSINCg0KDQpleHRlcm4gIkMiIHsNCiMgMjEgIi91c3IvaW5j bHVkZS9zdGRpb190YWcuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBGSUxFIF9f RklMRTsNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRp by5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAx IDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCiNw cmFnbWEgaWRlbnQgIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2LzMwIFNN SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0 DQojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNA0KDQoN CmV4dGVybiAiQyIgew0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBzc2l6 ZV90Ow0KIyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0DQpz dHJ1Y3QgRklMRQ0Kew0KDQoNCg0KDQogICAgICAgIHNzaXplX3QgX2NudDsN CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsNCg0KICAgICAgICB1bnNp Z25lZCBjaGFyICpfYmFzZTsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxh ZzsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmlsZTsNCiAgICAgICAgdW5z aWduZWQgX19vcmllbnRhdGlvbjoyOw0KICAgICAgICB1bnNpZ25lZCBfX2lv bm9sb2NrOjE7DQogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVyOjU7DQp9Ow0K DQoNCg0KDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIg MiAzIDQNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQN CmV4dGVybiAiQyIgew0KDQoNCg0KDQp0eXBlZGVmIF9fRklMRSBGSUxFOw0K DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7DQoj IDc0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVm IGxvbmcgbG9uZyBfX2xvbmdsb25nX3Q7DQojIDg4ICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIGxvbmcgb2ZmX3Q7DQoNCg0K DQoNCg0KDQoNCnR5cGVkZWYgX19sb25nbG9uZ190IG9mZjY0X3Q7DQoNCg0K DQoNCg0KDQp0eXBlZGVmIGxvbmcgZnBvc190Ow0KDQoNCg0KDQoNCg0KDQp0 eXBlZGVmIF9fbG9uZ2xvbmdfdCBmcG9zNjRfdDsNCiMgMTMyICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIF9fdmFfbGlzdCBf X25vdF92YV9saXN0X187DQojIDIwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgX19pb2JbMjBdOw0KIyAyMTUgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25l ZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsNCiMgMjQ0ICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciAq X2J1ZmVuZHRhYltdOw0KZXh0ZXJuIEZJTEUgKl9sYXN0YnVmOw0KIyAyNzUg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBpbnQg cmVtb3ZlKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHJlbmFtZShjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqdG1wZmls ZSh2b2lkKTsNCmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAqKTsNCg0KZXh0 ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7DQoNCmV4dGVybiBpbnQgZmNs b3NlKEZJTEUgKik7DQpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOw0KZXh0 ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsN CmV4dGVybiBGSUxFICpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCBGSUxFICopOw0KZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hh ciAqKTsNCg0KDQpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFy ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsN Cg0KZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNp emVfdCk7DQoNCmV4dGVybiBpbnQgZnByaW50ZihGSUxFICosIGNvbnN0IGNo YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25z dCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNo YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBzY2FuZihjb25zdCBjaGFyICos IC4uLik7DQoNCg0KDQoNCmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqLCBz aXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KDQpleHRlcm4gaW50IHNw cmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBp bnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0K ZXh0ZXJuIGludCB2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n bnVjX3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2cHJpbnRmKGNvbnN0IGNoYXIg KiwgX19nbnVjX3ZhX2xpc3QpOw0KDQoNCg0KZXh0ZXJuIGludCB2c25wcmlu dGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp c3QpOw0KDQpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hh ciAqLCBfX2dudWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IGZnZXRjKEZJTEUg Kik7DQpleHRlcm4gY2hhciAqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7 DQpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsNCmV4dGVybiBpbnQg ZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0ZXJuIGludCBnZXRj KEZJTEUgKik7DQpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7DQpleHRlcm4g Y2hhciAqZ2V0cyhjaGFyICopOw0KZXh0ZXJuIGludCBwdXRjKGludCwgRklM RSAqKTsNCmV4dGVybiBpbnQgcHV0Y2hhcihpbnQpOw0KZXh0ZXJuIGludCBw dXRzKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHVuZ2V0YyhpbnQsIEZJ TEUgKik7DQpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBz aXplX3QsIEZJTEUgKik7DQpleHRlcm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2 b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOw0KZXh0ZXJuIGludCBm Z2V0cG9zKEZJTEUgKiwgZnBvc190ICopOw0KZXh0ZXJuIGludCBmc2VlayhG SUxFICosIGxvbmcsIGludCk7DQpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAq LCBjb25zdCBmcG9zX3QgKik7DQpleHRlcm4gbG9uZyBmdGVsbChGSUxFICop Ow0KZXh0ZXJuIHZvaWQgcmV3aW5kKEZJTEUgKik7DQpleHRlcm4gdm9pZCBj bGVhcmVycihGSUxFICopOw0KZXh0ZXJuIGludCBmZW9mKEZJTEUgKik7DQpl eHRlcm4gaW50IGZlcnJvcihGSUxFICopOw0KZXh0ZXJuIHZvaWQgcGVycm9y KGNvbnN0IGNoYXIgKik7DQoNCg0KZXh0ZXJuIGludCBfX2ZpbGJ1ZihGSUxF ICopOw0KZXh0ZXJuIGludCBfX2Zsc2J1ZihpbnQsIEZJTEUgKik7DQojIDM1 MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJ TEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq Y3Rlcm1pZChjaGFyICopOw0KZXh0ZXJuIGludCBmaWxlbm8oRklMRSAqKTsN CiMgMzY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRl cm4gdm9pZCBmbG9ja2ZpbGUoRklMRSAqKTsNCmV4dGVybiBpbnQgZnRyeWxv Y2tmaWxlKEZJTEUgKik7DQpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxF ICopOw0KZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkKEZJTEUgKik7DQpleHRl cm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7DQpleHRlcm4gaW50IHB1 dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBwdXRjaGFy X3VubG9ja2VkKGludCk7DQojIDM3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7 DQpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7DQpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICos IGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gY2hhciAqb3B0YXJnOw0K ZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0Ow0KZXh0ZXJuIGlu dCBnZXR3KEZJTEUgKik7DQpleHRlcm4gaW50IHB1dHcoaW50LCBGSUxFICop Ow0KZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsNCg0KDQoNCg0KDQoNCg0K ZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsNCmV4dGVy biBvZmZfdCBmdGVsbG8oRklMRSAqKTsNCiMgNDA4ICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklMRSAqZm9wZW42NChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqZnJlb3Bl bjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0 ZXJuIEZJTEUgKnRtcGZpbGU2NCh2b2lkKTsNCmV4dGVybiBpbnQgZmdldHBv czY0KEZJTEUgKiwgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZXRwb3M2 NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOw0KZXh0ZXJuIGludCBmc2Vl a282NChGSUxFICosIG9mZjY0X3QsIGludCk7DQpleHRlcm4gb2ZmNjRfdCBm dGVsbG82NChGSUxFICopOw0KIyA1ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z dGRpby5oIiAzIDQNCn0NCiMgMjEgImJ1ZmZlci5jcHAiIDINCiMgMSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdHJpbmcuaAkx LjIyCTk3LzEyLzIyIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDMgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMyA0DQpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIHZvaWQgKm1lbW1v dmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQpleHRlcm4gY2hh ciAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFy ICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQpl eHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4 dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl X3QpOw0KDQpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0 IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgc3RyY29sbChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cm5jbXAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4g c2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7 DQoNCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNp emVfdCk7DQpleHRlcm4gY2hhciAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50 KTsNCmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBj aGFyICosIGludCk7DQpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpzdHJ0b2so Y2hhciAqLCBjb25zdCBjaGFyICopOw0KDQoNCmV4dGVybiBjaGFyICpzdHJ0 b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQoNCmV4dGVy biB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7DQpleHRlcm4g Y2hhciAqc3RyZXJyb3IoaW50KTsNCmV4dGVybiBzaXplX3Qgc3RybGVuKGNv bnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lk ICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOw0KDQoNCg0KDQpleHRl cm4gY2hhciAqc3Ryc2lnbmFsKGludCk7DQpleHRlcm4gaW50IGZmcyhpbnQp Ow0KZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsNCmV4dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosIHNpemVfdCk7DQoNCg0KDQoNCg0KZXh0ZXJuIGNo YXIgKnN0cmR1cChjb25zdCBjaGFyICopOw0KIyAxNDYgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMyA0DQp9DQojIDIyICJidWZmZXIuY3BwIiAyDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIg MSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv aW9zdHJlYW0iIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFt LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv bGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz Mi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAx ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf aW9zLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN CiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pb3Nmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2Nv bmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAx IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0cmluZ2Z3ZC5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr Y29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ug c3RkDQp7DQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHM7DQoNCiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0 czxjaGFyPjsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+ DQogICAgY2xhc3MgYWxsb2NhdG9yOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19zdHJpbmc7DQoNCiAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOw0KDQoNCg0KfQ0KIyA0MSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMw0KDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s YXJpczIuNy9iaXRzL2MrK2lvLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp dHMvYysraW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvY3N0ZGlvIiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9jc3RkaW8iIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RkaW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m aWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jc3RkZGVmLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMgNA0KIyAxNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z dGRkZWYuaCIgMyA0DQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQojIDM5ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OnB0 cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgi IDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk ZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMgODYgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk aW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJTEU7DQog IHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7DQogIHVz aW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5nIDo6ZmVy cm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0YzsNCiAg dXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1c2luZyA6 OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6ZnB1dGM7 DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQogIHVzaW5n IDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5nIDo6ZnNl ZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVsbDsNCiAg dXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNpbmcgOjpn ZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVycm9yOw0K ICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1c2luZyA6 OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpyZW1vdmU7 DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsNCiAgdXNp bmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5nIDo6c2V0 dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNzY2FuZjsN CiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsNCiAgdXNp bmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVzaW5nIDo6 dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMw0KIyAz NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1 bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMNCiMgMzcg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4t c29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv Yml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMN CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy Yy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQojIDE4ICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFnbWEgaWRl bnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoNCg0KIyAx ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDI1 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KI3ByYWdt YSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBTTUkiDQoNCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyOCAi L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNA0KIyAxICIv dXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjkg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQNCg0KDQoN Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAxIDMgNA0K IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQojcHJh Z21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8wOC8wMSBTTUki DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAyIDMg NA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9t YWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5c2Fkcl90IHsg aW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX2xh YmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoNCg0KdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0ICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1ICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1 ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUv c3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylpbnRf dHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vzci9pbmNsdWRl L3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMv aXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvaW50 X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDYyICIvdXNy L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVkZWYgY2hhciBp bnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQxNl90Ow0KdHlw ZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGxvbmcg aW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90 Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsNCnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3IvaW5jbHVkZS9z eXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90IGludG1heF90 Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDExMCAiL3Vzci9p bmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGludCBpbnRw dHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsNCg0KDQoN Cg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsNCg0KDQoNCg0K DQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBlZGVmIGludCBp bnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgbG9uZyBpbnRf bGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRf bGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3Qx Nl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7DQoN Cg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfbGVhc3Q2 NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0K IyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5 cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRfc2NhbGFy X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFyX3Q7DQoNCg0K DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7DQp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBp bnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nX3Q7DQoN CnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9uZyBkYWRkcl90 Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVmIHVsb25nX3Qg cGFkZHJfdDsNCiMgMTI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IHBmbl90Ow0KdHlwZWRlZiB1bG9u Z190IHBnY250X3Q7DQp0eXBlZGVmIGxvbmcgc3BnY250X3Q7DQoNCnR5cGVk ZWYgdWNoYXJfdCB1c2VfdDsNCnR5cGVkZWYgc2hvcnQgc3lzaWRfdDsNCnR5 cGVkZWYgc2hvcnQgaW5kZXhfdDsNCnR5cGVkZWYgdm9pZCAqdGltZW91dF9p ZF90Ow0KdHlwZWRlZiB2b2lkICpidWZjYWxsX2lkX3Q7DQojIDE2MyAiL2hv bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYgdWxv bmdfdCBpbm9fdDsNCnR5cGVkZWYgbG9uZyBibGtjbnRfdDsNCnR5cGVkZWYg dWxvbmdfdCBmc2Jsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzZmlsY250 X3Q7DQojIDE4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz IDQNCnR5cGVkZWYgdV9sb25nbG9uZ190IGlubzY0X3Q7DQp0eXBlZGVmIGxv bmdsb25nX3QgYmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZz YmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZzZmlsY250NjRf dDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBibGtzaXplX3Q7DQoNCg0K DQp0eXBlZGVmIGVudW0geyBfQl9GQUxTRSwgX0JfVFJVRSB9IGJvb2xlYW5f dDsNCiMgMjA4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NA0KdHlwZWRlZiBpbnQ2NF90IHBhZDY0X3Q7DQp0eXBlZGVmIHVpbnQ2NF90 IHVwYWQ2NF90Ow0KIyAyMjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmdsb25nX3Qgb2Zmc2V0X3Q7DQp0eXBl ZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Ow0KdHlwZWRlZiB1X2xvbmds b25nX3QgbGVuX3Q7DQp0eXBlZGVmIGxvbmdsb25nX3QgZGlza2FkZHJfdDsN CiMgMjQyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0K dHlwZWRlZiB1bmlvbiB7DQogICAgICAgIG9mZnNldF90IF9mOw0KICAgICAg ICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIGludDMyX3QgX3U7DQogICAg ICAgICAgICAgICAgaW50MzJfdCBfbDsNCiAgICAgICAgfSBfcDsNCn0gbGxv ZmZfdDsNCiMgMjYyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDMgNA0KdHlwZWRlZiB1bmlvbiB7DQogICAgICAgIGRpc2thZGRyX3QgX2Y7 DQogICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgaW50MzJfdCBf dTsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOw0KICAgICAgICB9IF9w Ow0KfSBsbGRhZGRyX3Q7DQoNCg0KdHlwZWRlZiB1aW50X3Qga19mbHRzZXRf dDsNCiMgMjg3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NA0KdHlwZWRlZiBsb25nIGlkX3Q7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVp bnRfdCB1c2Vjb25kc190Ow0KDQoNCg0KdHlwZWRlZiBsb25nIHN1c2Vjb25k c190Ow0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MyA0DQp0eXBlZGVmIHVsb25nX3QgbWFqb3JfdDsNCnR5cGVkZWYgdWxvbmdf dCBtaW5vcl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc2hvcnQgcHJpX3Q7DQoj IDMyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5 cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7DQp0eXBlZGVmIHNob3J0IG9fZGV2 X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7DQp0eXBlZGVmIG9fdWlk X3Qgb19naWRfdDsNCnR5cGVkZWYgc2hvcnQgb19ubGlua190Ow0KdHlwZWRl ZiBzaG9ydCBvX3BpZF90Ow0KdHlwZWRlZiB1c2hvcnRfdCBvX2lub190Ow0K DQoNCg0KDQoNCnR5cGVkZWYgaW50IGtleV90Ow0KDQoNCg0KdHlwZWRlZiB1 bG9uZ190IG1vZGVfdDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVp ZF90Ow0KDQoNCg0KdHlwZWRlZiB1aWRfdCBnaWRfdDsNCg0KDQoNCg0KDQoN CnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsNCnR5cGVkZWYgdW5z aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7DQoNCnR5cGVkZWYgc3RydWN0IF9w dGhyZWFkX211dGV4IHsNCiAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg ICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9mbGFnWzRdOw0KICAgICAg ICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9tdXRleF90eXBlOw0KICAg ICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsNCiAgICAgICAgdW5pb24g ew0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg ICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9wYWRbOF07DQogICAg ICAgICAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0Ow0KICAgICAg ICAgICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9tdXRleF9vd25lcjY0Ow0K ICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOw0KICAgICAgICB1cGFk NjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsNCn0gcHRocmVhZF9tdXRleF90 Ow0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kIHsNCiAgICAgICAg c3RydWN0IHsNCiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRocmVhZF9j b25kX2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWludDMyX3QgX19wdGhy ZWFkX2NvbmRfdHlwZTsNCiAgICAgICAgfSBfX3B0aHJlYWRfY29uZF9mbGFn czsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX2NvbmRfZGF0YTsNCn0g cHRocmVhZF9jb25kX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhy ZWFkX3J3bG9jayB7DQogICAgICAgIGludDMyX3QgX19wdGhyZWFkX3J3bG9j a19yZWFkZXJzOw0KICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfcndsb2Nr X3R5cGU7DQogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfbWFn aWM7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMVsz XTsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQyWzJd Ow0KICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07 DQp9IHB0aHJlYWRfcndsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0 IF9wdGhyZWFkX2F0dHIgew0KICAgICAgICB2b2lkICpfX3B0aHJlYWRfYXR0 cnA7DQp9IHB0aHJlYWRfYXR0cl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc3Ry dWN0IF9wdGhyZWFkX211dGV4YXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRo cmVhZF9tdXRleGF0dHJwOw0KfSBwdGhyZWFkX211dGV4YXR0cl90Ow0KDQoN Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2NvbmRhdHRyIHsNCiAg ICAgICAgdm9pZCAqX19wdGhyZWFkX2NvbmRhdHRycDsNCn0gcHRocmVhZF9j b25kYXR0cl90Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfb25jZSB7DQog ICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9vbmNlX3BhZFs0XTsNCn0gcHRo cmVhZF9vbmNlX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJl YWRfcndsb2NrYXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9yd2xv Y2thdHRycDsNCn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7DQoNCnR5cGVkZWYg dWxvbmdfdCBkZXZfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIHVsb25nX3Qgbmxp bmtfdDsNCnR5cGVkZWYgbG9uZyBwaWRfdDsNCiMgNDc2ICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRpbWVf dDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGNsb2NrX3Q7DQoNCg0KDQoNCnR5 cGVkZWYgaW50IGNsb2NraWRfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgdGlt ZXJfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNo YXI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsNCnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxv bmc7DQojIDU1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz IDQNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7DQp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IHVfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7DQp0eXBlZGVm IHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Ow0KdHlwZWRl ZiBxdWFkX3QgcXVhZDsNCg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMSAzIDQNCiMgMTIgIi91c3IvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNlbGVjdC5oCTEu MTYJOTgvMDQvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5cy9z ZWxlY3QuaCIgMiAzIDQNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMg NA0KI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkyLjYyCTk4LzAyLzA0IFNN SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg MSAzIDQNCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNA0K DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDkgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1ldmFsIHsNCiAgICAgICAg dGltZV90IHR2X3NlYzsNCiAgICAgICAgc3VzZWNvbmRzX3QgdHZfdXNlYzsN Cn07DQojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1 Y3QgdGltZXpvbmUgew0KICAgICAgICBpbnQgdHpfbWludXRlc3dlc3Q7DQog ICAgICAgIGludCB0el9kc3R0aW1lOw0KfTsNCg0KDQoNCg0KDQp9DQojIDEw MCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDEwMSAiL3Vzci9p bmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsN CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1Y3Qg aXRpbWVydmFsIHsNCiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2 YWw7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOw0KfTsNCiMg MjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQp0eXBlZGVmIGxv bmdsb25nX3QgaHJ0aW1lX3Q7DQojIDMxNSAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lLmgiIDMgNA0KaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3Ry dWN0IHRpbWV2YWwgKik7DQojIDMyNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1l LmgiIDMgNA0KaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwg Kik7DQppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRp bWV2YWwgKik7DQoNCmludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3Qg aXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7DQojIDM2NCAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KaW50IHNldHRpbWVvZmRheShz dHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOw0KDQpocnRpbWVfdCBnZXRocnRp bWUodm9pZCk7DQpocnRpbWVfdCBnZXRocnZ0aW1lKHZvaWQpOw0KIyAzODQg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCmludCBnZXR0aW1lb2Zk YXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsNCiMgNDA1ICIvdXNyL2lu Y2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1l LmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCiNw cmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5OC8wMy8yNyBTTUkiDQoN CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0 DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNy L2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2 NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0DQpzdHJ1Y3QgdG0gew0KICAg ICAgICBpbnQgdG1fc2VjOw0KICAgICAgICBpbnQgdG1fbWluOw0KICAgICAg ICBpbnQgdG1faG91cjsNCiAgICAgICAgaW50IHRtX21kYXk7DQogICAgICAg IGludCB0bV9tb247DQogICAgICAgIGludCB0bV95ZWFyOw0KICAgICAgICBp bnQgdG1fd2RheTsNCiAgICAgICAgaW50IHRtX3lkYXk7DQogICAgICAgIGlu dCB0bV9pc2RzdDsNCn07DQoNCg0KDQpleHRlcm4gY2xvY2tfdCBjbG9jayh2 b2lkKTsNCmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3Qp Ow0KZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOw0KZXh0ZXJu IHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsNCmV4dGVybiBjaGFyICphc2N0aW1l KGNvbnN0IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBjaGFyICpjdGltZShjb25z dCB0aW1lX3QgKik7DQpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3Qg dGltZV90ICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0 IHRpbWVfdCAqKTsNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciAqLCBz aXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOw0KDQoN Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICos IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9y KGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KZXh0 ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUv c3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5 cy90aW1lX2ltcGwuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9p bXBsLmgJMS4zCTk4LzAyLzEzIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUv c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTggIi91c3IvaW5jbHVk ZS9zeXMvdGltZV9pbXBsLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj IDM2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVk ZWYgc3RydWN0IHRpbWVzcGVjIHsNCiAgICAgICAgdGltZV90IHR2X3NlYzsN CiAgICAgICAgbG9uZyB0dl9uc2VjOw0KfSB0aW1lc3BlY190Ow0KIyA2MCAi L3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0 cnVjdCB0aW1lc3BlYyB0aW1lc3RydWNfdDsNCiMgNzkgIi91c3IvaW5jbHVk ZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgaXRpbWVy c3BlYyB7DQogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsN CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOw0KfSBpdGltZXJz cGVjX3Q7DQojIDEzMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIg MyA0DQp9DQojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQNCiMg MTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCnVuaW9uIHNpZ3ZhbCB7 DQogICAgICAgIGludCBzaXZhbF9pbnQ7DQogICAgICAgIHZvaWQgKnNpdmFs X3B0cjsNCn07DQoNCg0KDQoNCnN0cnVjdCBzaWdldmVudCB7DQogICAgICAg IGludCBzaWdldl9ub3RpZnk7DQogICAgICAgIGludCBzaWdldl9zaWdubzsN CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOw0KICAgICAgICB2 b2lkICgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2YWwpOw0K ICAgICAgICBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0 ZXM7DQogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7DQp9Ow0KDQoNCmV4dGVy biBpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVj ICopOw0KZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgc3Ry dWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNs b2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGlu dCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwg dGltZXJfdCAqKTsNCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3Qp Ow0KZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOw0KZXh0 ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJz cGVjICopOw0KZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGlu dCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiwNCiAgICAgICAgICAgICAg ICBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsNCmV4dGVybiBpbnQgbmFub3NsZWVw KGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7 DQoNCg0KDQoNCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOw0KDQpleHRlcm4g Y2hhciAqdHpuYW1lWzJdOw0KDQoNCmV4dGVybiBsb25nIF9zeXNjb25mKGlu dCk7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9uZyB0aW1lem9uZTsNCmV4dGVy biBpbnQgZGF5bGlnaHQ7DQojIDE3NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MyA0DQpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7 DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IGdldGRhdGVfZXJyOw0KIyAyNzIg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0Kc3RhdGljIGNoYXIgKg0KYXNj dGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqX190bSwgY2hhciAqX19idWYpDQp7 DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihjb25z dCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bv c2l4X2FzY3RpbWVfcihfX3RtLCBfX2J1ZikpOw0KfQ0Kc3RhdGljIGNoYXIg Kg0KY3RpbWVfcihjb25zdCB0aW1lX3QgKl9fdGltZSwgY2hhciAqX19idWYp DQp7DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1lX3IoY29u c3QgdGltZV90ICosIGNoYXIgKik7DQogICAgICAgIHJldHVybiAoX19wb3Np eF9jdGltZV9yKF9fdGltZSwgX19idWYpKTsNCn0NCiMgMzM0ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzIDQNCn0NCiMgNDA2ICIvdXNyL2luY2x1ZGUvc3lz L3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu aCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0 DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0K DQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA0NSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIGxvbmcgZmRfbWFzazsNCg0KdHlw ZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9z ZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBmZF9zZXQgew0KDQoNCg0K ICAgICAgICBsb25nIGZkc19iaXRzWygoKDEwMjQpKygoKHNpemVvZiAoZmRz X21hc2spICogOCkpLTEpKS8oKHNpemVvZiAoZmRzX21hc2spICogOCkpKV07 DQp9IGZkX3NldDsNCiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDMgNA0KZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0 ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0KDQoNCg0KDQoN Cn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MyA0DQojIDU4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz IDQNCn0NCiMgMjIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDIg MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDIzICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0KIyAxICIvdXNy L2luY2x1ZGUvc2NoZWQuaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5jbHVkZS9z Y2hlZC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5 OC8wMS8xNiBTTUkiDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90 eXBlcy5oIiAxIDMgNA0KIyAxNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE1ICIv dXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN Cg0KDQpzdHJ1Y3Qgc2NoZWRfcGFyYW0gew0KICAgICAgICBpbnQgc2NoZWRf cHJpb3JpdHk7DQogICAgICAgIGludCBzY2hlZF9uaWNlbGltOw0KICAgICAg ICBpbnQgc2NoZWRfbmljZTsNCiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsN Cg0KDQoNCn07DQojIDQ0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0DQpp bnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFy YW0gKnBhcmFtKTsNCmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNv bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX2dl dHNjaGVkdWxlcihwaWRfdCBwaWQpOw0KaW50IHNjaGVkX3NldHNjaGVkdWxl cihwaWRfdCBwaWQsIGludCBwb2xpY3ksDQogICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7DQppbnQgc2NoZWRfeWll bGQodm9pZCk7DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9s aWN5KTsNCmludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kp Ow0KaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVj dCB0aW1lc3BlYyAqaW50ZXJ2YWwpOw0KIyA2NSAiL3Vzci9pbmNsdWRlL3Nj aGVkLmgiIDMgNA0KfQ0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJl YWQuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA5NSAiL2hvbWUv bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBf Y2xlYW51cCB7DQogICAgICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBf cGFkWzRdOw0KfSBfY2xlYW51cF90Ow0KDQoNCg0Kdm9pZCBfX3B0aHJlYWRf Y2xlYW51cF9wdXNoKHZvaWQgKCpyb3V0aW5lKSh2b2lkICopLCB2b2lkICph cmdzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhZGRyX3QgZnAsIF9jbGVhbnVwX3QgKmluZm8pOw0Kdm9pZCBfX3B0aHJl YWRfY2xlYW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90ICppbmZvKTsNCmNh ZGRyX3QgX2dldGZwKHZvaWQpOw0KIyAxMjkgIi9ob21lL21kZWlsL2Jpbi8u Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk ZS9wdGhyZWFkLmgiIDMgNA0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5p dChwdGhyZWFkX2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90 KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShjb25z dCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiwgdm9p ZCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihj b25zdCBwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsNCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICos IGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0 ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUoY29uc3QgcHRo cmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0aW5oZXJpdHNjaGVkKHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3Qg cHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiwgaW50KTsN CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5KGNvbnN0 IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRzY2hlZHBhcmFtKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVk X3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFk X3QgKiwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqICgqKSh2b2lkICopLCB2b2lkICop Ow0KZXh0ZXJuIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKiwg dm9pZCAoKikodm9pZCkpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4ocHRo cmVhZF90LCB2b2lkICoqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2go cHRocmVhZF90KTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCh2b2lkICop Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbChwdGhyZWFkX3QpOw0KZXh0 ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90LCBpbnQs IGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRo cmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50ICosIHN0cnVjdCBz Y2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz dGF0ZShpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5j ZWx0eXBlKGludCwgaW50ICopOw0KZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0 Y2FuY2VsKHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJl YWRfdCwgcHRocmVhZF90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl YXRlKHB0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9pZCAqKSk7DQpleHRl cm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90KTsNCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBj b25zdCB2b2lkICopOw0KZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lm aWMocHRocmVhZF9rZXlfdCk7DQpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRf c2VsZih2b2lkKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kocHRocmVhZF9tdXRleGF0dHJf dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJl ZChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRl eGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh dHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29u c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0 ZXhhdHRyX3QgKiwgaW50KTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0 dHJfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhy ZWFkX211dGV4X3QgKiwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsN CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0 ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJl YWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxv Y2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBw dGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhfdCAq LCBpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9nZXRw cmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOw0KZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRo cmVhZF9jb25kYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh dHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90ICosIGludCk7DQpl eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBw dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFk X2NvbmRhdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0 cm95KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2Nv bmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBw dGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCAqLCBwdGhy ZWFkX211dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1l ZHdhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0Z3VhcmRzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAq KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhy ZWFkX2F0dHJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2dl dGNvbmN1cnJlbmN5KHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX3NldGNv bmN1cnJlbmN5KGludCBuZXd2YWwpOw0KZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBw dGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICosDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfcndsb2Nr YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95 KHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrX3JkbG9jayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsN CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKHB0aHJlYWRfcnds b2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9j ayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3Qg Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0 aHJlYWRfcndsb2NrYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf dCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9z ZXRwc2hhcmVkKHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCk7DQojIDMw NCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp9DQojIDM4 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzDQoNCnR5cGVk ZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7DQp0eXBlZGVmIHB0 aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7DQp0eXBlZGVmIHB0aHJl YWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsNCg0KDQoNCg0KDQoNCiNw cmFnbWEgd2VhayBwdGhyZWFkX29uY2UNCiNwcmFnbWEgd2VhayBwdGhyZWFk X2tleV9jcmVhdGUNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUN CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljDQojcHJhZ21hIHdl YWsgcHRocmVhZF9zZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0aHJlYWRf Y3JlYXRlDQoNCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sNCiNw cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sNCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX211dGV4X3VubG9jaw0KIyA3OCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv Z3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0 aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsNCg0Kc3RhdGlj IGlubGluZSBpbnQNCl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkNCnsNCiAg cmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7DQp9DQojIDQyNyAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z b2xhcmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyBpbmxp bmUgaW50DQpfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBm dW5jKTsNCiAgZWxzZQ0KICAgIHJldHVybiAtMTsNCn0NCg0Kc3RhdGljIGlu bGluZSBpbnQNCl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5 X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQ0Kew0KICByZXR1cm4g cHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOw0KfQ0KDQpzdGF0aWMg aW5saW5lIGludA0KX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5 X3Qga2V5LCB2b2lkICpwdHIpDQp7DQoNCiAgaWYgKHB0cikNCiAgICByZXR1 cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsNCiAgZWxzZQ0KICAg IHJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFk X2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpDQp7DQogIHJldHVy biBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7DQp9DQoNCnN0YXRpYyBpbmxp bmUgdm9pZCAqDQpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9r ZXlfdCBrZXkpDQp7DQogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChr ZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX3NldHNw ZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIp DQp7DQogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7 DQp9DQoNCnN0YXRpYyBpbmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfbG9j ayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQ0Kew0KICBpZiAoX19ndGhy ZWFkX2FjdGl2ZV9wICgpKQ0KICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xv Y2sgKG11dGV4KTsNCiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KDQpzdGF0 aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3Ro cmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3Rp dmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrICht dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9t dXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAo KSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsN CiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KIyA5OSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp dHMvZ3Roci5oIiAyIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgi IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdHlwZWRlZiBsb25nIHN0 cmVhbW9mZjsNCiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsNCg0K DQoNCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsNCg0KICB0eXBl ZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOw0KDQoNCg0KICB0eXBl ZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsNCg0KDQogIHN0cnVjdCBfX2lvc19m bGFncw0KICB7DQogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOw0KDQog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw MDAxOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4 MDAwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9 IDB4MDAwNDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXgg PSAweDAwMDg7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50 ZXJuYWwgPSAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfbGVmdCA9IDB4MDAyMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19vY3QgPSAweDAwNDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfcmlnaHQgPSAweDAwODA7DQogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsNCiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsNCiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7DQog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgw MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAw eDEwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1 ZiA9IDB4MjAwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191 cHBlcmNhc2UgPSAweDQwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7DQoN Cg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4 MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0 ID0gMHgwNDsNCg0KDQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf YXBwID0gMHgwMTsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h dGUgPSAweDAyOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jp biA9IDB4MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4g PSAweDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9 IDB4MTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMg PSAweDIwOw0KICB9Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAx IDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jd2NoYXIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj b25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o IiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMNCiMg MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDEgMyA0DQojIDE4ICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQojcHJhZ21hIGlkZW50 ICJAKCMpd2NoYXIuaAkxLjMxCTk4LzA1LzA0IFNNSSINCg0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjEgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDIyICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N0 ZGlvX3RhZy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3dj aGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgi IDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDMgNA0K I3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2ltcGwuaAkxLjIJOTgvMDIvMjcg U01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAz IDQNCiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0DQoN Cg0KZXh0ZXJuICJDIiB7DQoNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQoNCg0K DQogICAgICAgIGludCBfX2ZpbGxlcls2XTsNCg0KfSBfX21ic3RhdGVfdDsN Cg0KDQoNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAy IDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNSAi L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQoNCiMg MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0DQojIDMwICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQoNCiMgMSAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1 ZGUvY3R5cGUuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpY3R5cGUuaAkx LjMwCTk4LzAxLzE2IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9jdHlw ZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0OCAiL3Vzci9pbmNs dWRlL2N0eXBlLmgiIDMgNA0KZXh0ZXJuIGludCBpc2FsbnVtKGludCk7DQpl eHRlcm4gaW50IGlzYWxwaGEoaW50KTsNCmV4dGVybiBpbnQgaXNjbnRybChp bnQpOw0KZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7DQpleHRlcm4gaW50IGlz Z3JhcGgoaW50KTsNCmV4dGVybiBpbnQgaXNsb3dlcihpbnQpOw0KZXh0ZXJu IGludCBpc3ByaW50KGludCk7DQpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsN CmV4dGVybiBpbnQgaXNzcGFjZShpbnQpOw0KZXh0ZXJuIGludCBpc3VwcGVy KGludCk7DQpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7DQpleHRlcm4gaW50 IHRvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQgdG91cHBlcihpbnQpOw0KDQoN Cg0KDQpleHRlcm4gaW50IGlzYXNjaWkoaW50KTsNCmV4dGVybiBpbnQgdG9h c2NpaShpbnQpOw0KZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOw0KZXh0ZXJu IGludCBfdG91cHBlcihpbnQpOw0KDQoNCg0KZXh0ZXJuIHVuc2lnbmVkIGNo YXIgX19jdHlwZVtdOw0KZXh0ZXJuIHVuc2lnbmVkIGludCAqX19jdHlwZV9t YXNrOw0KZXh0ZXJuIGludCAqX190cmFuc191cHBlcjsNCmV4dGVybiBpbnQg Kl9fdHJhbnNfbG93ZXI7DQojIDE2MyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDMgNA0KfQ0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIg MyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQN CiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoN CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDM4 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQpleHRl cm4gIkMiIHsNCiMgNjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz IDQNCnR5cGVkZWYgbG9uZyB3aW50X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBp bnQgd2N0eXBlX3Q7DQojIDEwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFy LmgiIDMgNA0KdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7DQojIDEx MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJuIGlu dCBpc3dhbHBoYSh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d1cHBlcih3aW50 X3QpOw0KZXh0ZXJuIGludCBpc3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIGlu dCBpc3dkaWdpdCh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d4ZGlnaXQod2lu dF90KTsNCmV4dGVybiBpbnQgaXN3YWxudW0od2ludF90KTsNCmV4dGVybiBp bnQgaXN3c3BhY2Uod2ludF90KTsNCmV4dGVybiBpbnQgaXN3cHVuY3Qod2lu dF90KTsNCmV4dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsNCmV4dGVybiBp bnQgaXN3Z3JhcGgod2ludF90KTsNCmV4dGVybiBpbnQgaXN3Y250cmwod2lu dF90KTsNCmV4dGVybiBpbnQgaXN3Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7 DQpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7DQpleHRlcm4gd2lu dF90IHRvd3VwcGVyKHdpbnRfdCk7DQpleHRlcm4gd2ludF90IGZnZXR3Yyhf X0ZJTEUgKik7DQpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwg aW50LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IGZwdXR3Yyh3aW50X3Qs IF9fRklMRSAqKTsNCmV4dGVybiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3Qg KiwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBnZXR3YyhfX0ZJTEUgKik7DQpl eHRlcm4gd2ludF90IGdldHdjaGFyKHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBw dXR3Yyh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3QgcHV0d2No YXIod2ludF90KTsNCmV4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFy X3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qg d2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0KZXh0ZXJuIHVuc2lnbmVk IGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGlu dCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2F0KHdjaGFyX3QgKiwgY29uc3Qg d2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2No YXJfdCAqLCB3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdj aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2NzY29s bChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g d2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsN CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0 IHdjaGFyX3QgKik7DQpleHRlcm4gc2l6ZV90IHdjc2xlbihjb25zdCB3Y2hh cl90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBj b25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHdjc25jbXAo Y29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpl eHRlcm4gd2NoYXJfdCAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFy X3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90 ICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7DQpleHRlcm4g c2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg Kik7DQpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwg Y29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qg d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtKHdj aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGlu dCB3Y3dpZHRoKGNvbnN0IHdjaGFyX3QpOw0KZXh0ZXJuIHdjdHlwZV90IHdj dHlwZShjb25zdCBjaGFyICopOw0KIyAxNjkgIi9ob21lL21kZWlsL2Jpbi8u Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk ZS93Y2hhci5oIiAzIDQNCmV4dGVybiB3Y2hhcl90ICpfX3djc3Rva194cGc1 KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsNCmV4 dGVybiBzaXplX3QgX193Y3NmdGltZV94cGc1KHdjaGFyX3QgKiwgc2l6ZV90 LCBjb25zdCB3Y2hhcl90ICosDQogICAgICAgIGNvbnN0IHN0cnVjdCB0bSAq KTsNCiMgMTgwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQpl eHRlcm4gd2ludF90IGJ0b3djKGludCk7DQpleHRlcm4gaW50IGZ3cHJpbnRm KF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4gaW50 IGZ3c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4 dGVybiBpbnQgZndpZGUoX19GSUxFICosIGludCk7DQpleHRlcm4gaW50IG1i c2luaXQoY29uc3QgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnJs ZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4dGVy biBzaXplX3QgbWJydG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyh3 Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJzdGF0ZV90ICop Ow0KZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29u c3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBzd3NjYW5mKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGlu dCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX192YV9s aXN0KTsNCmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqLCBf X3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2c3dwcmludGYod2NoYXJfdCAqLCBz aXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgX192YV9saXN0KTsNCmV4dGVybiBz aXplX3Qgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsN CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJf dCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gd2NoYXJfdCAq d2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4 dGVybiBpbnQgd2N0b2Iod2ludF90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt Y2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsNCmV4dGVy biBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg Kiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3Qg KiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHdjaGFyX3Qg KndtZW1tb3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3Qp Ow0KZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQod2NoYXJfdCAqLCB3Y2hhcl90 LCBzaXplX3QpOw0KZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3Qg KiwgLi4uKTsNCmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwg Li4uKTsNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0 DQpleHRlcm4gd2ludF90IF9fZmdldHdjX3hwZzUoX19GSUxFICopOw0KZXh0 ZXJuIHdpbnRfdCBfX2dldHdjX3hwZzUoX19GSUxFICopOw0KZXh0ZXJuIHdp bnRfdCBfX2dldHdjaGFyX3hwZzUodm9pZCk7DQpleHRlcm4gd2ludF90IF9f ZnB1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90 IF9fcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50 X3QgX19wdXR3Y2hhcl94cGc1KHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAq X19mZ2V0d3NfeHBnNSh3Y2hhcl90ICosIGludCwgX19GSUxFICopOw0KZXh0 ZXJuIGludCBfX2ZwdXR3c194cGc1KGNvbnN0IHdjaGFyX3QgKiwgX19GSUxF ICopOw0KZXh0ZXJuIHdpbnRfdCBfX3VuZ2V0d2NfeHBnNSh3aW50X3QsIF9f RklMRSAqKTsNCiMgMzUyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIg MyA0DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA1NyAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQpu YW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWJzdGF0ZV90Ow0KfQ0KIyA0 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBv cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGZwb3MNCiAgICB7DQog ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90 eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7 DQogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7DQoNCiAgICBwdWJsaWM6DQog ICAgICBfX3N0YXRlX3R5cGUNCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1 cm4gX01fc3Q7IH0NCg0KICAgICAgdm9pZA0KICAgICAgc3RhdGUoX19zdGF0 ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9DQoNCg0KDQogICAgICBm cG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlw ZSgpKSB7IH0NCg0KICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3Rh dGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpDQogICAgICA6IF9NX29m ZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQ0KDQogICAgICBvcGVyYXRvciBz dHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAg ZnBvcyYNCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N X29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGZwb3Mm DQogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg LT0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zDQogICAg ICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQ0KICAgICAgew0KICAgICAg ICBmcG9zIF9fdCgqdGhpcyk7DQogICAgICAgIF9fdCArPSBfX29mZjsNCiAg ICAgICAgcmV0dXJuIF9fdDsNCiAgICAgIH0NCg0KICAgICAgZnBvcw0KICAg ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAg ICAgZnBvcyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgLT0gX19vZmY7DQog ICAgICAgIHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGJvb2wNCiAg ICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0DQogICAg ICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAg IGJvb2wNCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNv bnN0DQogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9 DQoNCiAgICAgIHN0cmVhbW9mZg0KICAgICAgX01fcG9zaXRpb24oKSBjb25z dCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01f cG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9 DQogICAgfTsNCg0KDQogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh bXBvczsNCg0KDQoNCn0NCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0 LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQog IHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOw0KDQoNCiAg dm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0KDQogIHZvaWQN CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhy b3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19s b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190 aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk DQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3Mp Ow0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3J1bnRpbWVf ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2 b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg Y2hhciogX19zKTsNCn0NCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQoNCm5hbWVzcGFj ZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3Mg YmFzaWNfaW9zOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNs YXNzIGJhc2ljX3N0cmVhbWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4NCiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz PF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgIHR5cGVu YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi YXNpY19zdHJpbmdidWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAg ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g Pg0KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g YWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdz dHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAg dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNs YXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOw0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29mc3Ry ZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJh c2ljX2ZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAg Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4NCiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQoN Cg0KICBjbGFzcyBpb3NfYmFzZTsNCg0KDQogIHR5cGVkZWYgYmFzaWNfaW9z PGNoYXI+IGlvczsNCiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4g c3RyZWFtYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0 cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07 DQogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07DQog IHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsNCiAg dHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl YW07DQogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3Ry aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFy PiBzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFy PiBmaWxlYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlm c3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3Ry ZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsN CiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zZndkLmgiIDMNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEg Mw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4 Y2VwdGlvbiIgMw0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K ew0KICBjbGFzcyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgZXhj ZXB0aW9uKCkgdGhyb3coKSB7IH0NCiAgICB2aXJ0dWFsIH5leGNlcHRpb24o KSB0aHJvdygpOw0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNv bnN0IHRocm93KCk7DQogIH07DQoNCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6 IHB1YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2V4 Y2VwdGlvbigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX2V4Y2Vw dGlvbigpIHRocm93KCk7DQogIH07DQoNCiAgdHlwZWRlZiB2b2lkICgqdGVy bWluYXRlX2hhbmRsZXIpICgpOw0KICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVj dGVkX2hhbmRsZXIpICgpOw0KDQogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90 ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQg dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0K DQogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVj dGVkX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQgdW5leHBlY3RlZCgpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICBib29sIHVuY2F1 Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7DQp9DQoNCn0NCiMgNDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2NoYXJfdHJhaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMw0KDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMw0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl Zi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIg Mw0KIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0DQojIDQxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 cmluZy5oIiAyIDMNCiMgNjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCm5hbWVzcGFjZSBzdGQN CnsNCiAgdXNpbmcgOjptZW1jcHk7DQogIHVzaW5nIDo6bWVtbW92ZTsNCiAg dXNpbmcgOjpzdHJjcHk7DQogIHVzaW5nIDo6c3RybmNweTsNCiAgdXNpbmcg OjpzdHJjYXQ7DQogIHVzaW5nIDo6c3RybmNhdDsNCiAgdXNpbmcgOjptZW1j bXA7DQogIHVzaW5nIDo6c3RyY21wOw0KICB1c2luZyA6OnN0cmNvbGw7DQog IHVzaW5nIDo6c3RybmNtcDsNCiAgdXNpbmcgOjpzdHJ4ZnJtOw0KICB1c2lu ZyA6OnN0cmNzcG47DQogIHVzaW5nIDo6c3Ryc3BuOw0KICB1c2luZyA6OnN0 cnRvazsNCiAgdXNpbmcgOjptZW1zZXQ7DQogIHVzaW5nIDo6c3RyZXJyb3I7 DQogIHVzaW5nIDo6c3RybGVuOw0KDQogIHVzaW5nIDo6bWVtY2hyOw0KDQog IGlubGluZSB2b2lkKg0KICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz aXplX3QgX19uKQ0KICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25z dCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpzdHJj aHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cmNocihjaGFyKiBfX3MxLCBp bnQgX19uKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nh c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpz dHJwYnJrOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJwYnJrKGNoYXIqIF9f czEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z dHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsg fQ0KDQogIHVzaW5nIDo6c3RycmNocjsNCg0KICBpbmxpbmUgY2hhcioNCiAg c3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQ0KICB7IHJldHVybiBfX2J1 aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg X19uKTsgfQ0KDQogIHVzaW5nIDo6c3Ryc3RyOw0KDQogIGlubGluZSBjaGFy Kg0KICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikNCiAg eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNo YXIqPihfX3MxKSwgX19zMik7IH0NCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9m cG9zLmgiIDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzDQoNCm5hbWVzcGFjZSBz dGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0 cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsNCg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7DQog ICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAgICAgIHR5cGVk ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lk DQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5 cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoNCiAgICAgIHN0 YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv bnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0g X19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3Qg Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAg ICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50 DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgew0KICAgICAg ICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQ0KICAg ICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQ0KICAgICAg ICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDog MTsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgICAgIHN0YXRp YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN CiAgICAgIHsNCiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7 DQogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsNCiAgICAgICAgcmV0dXJu IChfX3AgLSBfX3MpOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg Y2hhcl90eXBlKg0KICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywg c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpDQogICAgICB7DQog ICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVf dChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkNCiAgICAgICAgICBpZiAoKl9f cCA9PSBfX2EpIHJldHVybiBfX3A7DQogICAgICAgIHJldHVybiAwOw0KICAg ICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgbW92ZShj aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90 IF9fbikNCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9f czEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAg ICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAg IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19u ICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9DQoNCiAgICAgIHN0YXRpYyBjaGFy X3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf X24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7DQogICAgICAgIGZvciAoY2hh cl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApDQog ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7DQogICAgICAgIHJldHVybiBf X3M7DQogICAgICB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAg IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyBy ZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGludF90 eXBlDQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg eyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQ0KDQogICAgICBzdGF0aWMgYm9v bA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv bnN0IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBf X2MyOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQ0KDQogICAg ICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5 cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9m KCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0NCiAgICB9Ow0KDQoNCg0KICB0 ZW1wbGF0ZTw+DQogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+DQogICAg ew0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVk ZWYgaW50IGludF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z X3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0 YXRpYyB2b2lkDQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoN CiAgICAgIHN0YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUm IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpDQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBz dGF0aWMgaW50DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19z MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAg eyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0NCg0KICAgICAg c3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog X19zKQ0KICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0NCg0KICAgICAg c3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hh cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19h KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBl Kj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMg Y2hhcl90eXBlKg0KICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0 IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwg X19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIGNv cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5 cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0NCg0KICAgICAgc3Rh dGljIGNoYXJfdHlwZSoNCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkNCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7 IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZQ0KICAgICAgdG9fY2hhcl90 eXBlKGNvbnN0IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0NCg0KDQoNCiAgICAgIHN0YXRp YyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl JiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0NCg0KICAgICAg c3RhdGljIGJvb2wNCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAg ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEp KTsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2Yo Y29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIChfX2MgPT0g ZW9mKCkpID8gMCA6IF9fYzsgfQ0KICB9Ow0KIyAyNjQgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gNCiAgICB7DQogICAg ICBfQ2hhclQgX01fYzsNCiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hh clQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9DQoNCiAgICAgIGJvb2wN CiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJu IF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0NCiAgICB9Ow0KfQ0KIyA0MiAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv cy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZWZ3ZC5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzDQoNCiMgMSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz Mi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt c3VuLXNvbGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMSAzDQojIDM2ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv bGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMw0KbmFtZXNwYWNlIHN0ZA0K ew0KICB0eXBlZGVmIGludCogX19jX2xvY2FsZTsNCn0NCiMgNDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQNCiMgMTEg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMyA0DQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQNCiMgMjUgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50 ICJAKCMpbGltaXRzLmgJMS40OAk5OC8wNy8yMCBTTUkiDQoNCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDI4ICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDEgIi91 c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgMjkgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCiMgNDAgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5j bHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1 ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMp aW50X2xpbWl0cy5oCTEuNQk5OC8wMS8wNiBTTUkiDQojIDQ0ICIvdXNyL2lu Y2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk ZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDUgIi91c3IvaW5jbHVkZS9z eXMvaW50X2xpbWl0cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAx NjIgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQNCn0NCiMg NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCg0K DQoNCmV4dGVybiAiQyIgew0KIyAzMDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z eXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk LmgiIDEgMyA0DQojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAz IDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl1bmlzdGQuaAkxLjM2CTk4LzA3LzE2 IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu aCIgMSAzIDQNCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDIg MyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDI2NCAiL3Vzci9pbmNsdWRlL3N5 cy91bmlzdGQuaCIgMyA0DQp9DQojIDMwOCAiL2hvbWUvbWRlaWwvYmluLy4u L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl L3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAzMTggIi9ob21lL21kZWlsL2Jpbi8u Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMyA0DQpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQp Ow0KIyAzMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0 DQp9DQojIDEyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0 DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2xpbWl0cy5oIiAyIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0 cmluZy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMw0KDQojIDEgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIu Ny9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 cmluZ2Z3ZC5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRz LmgiIDEgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEg Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2l0ZXJhdG9yLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr Y29uZmlnLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl Zi5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAx IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw ZXMuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQoNCm5h bWVzcGFjZSBzdGQNCnsNCg0Kc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7 fTsNCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9Ow0Kc3RydWN0IGZv cndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3Rh ZyB7fTsNCnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCByYW5kb21f YWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZyB7fTsNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsN CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rp c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50 ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQpzdHJ1Y3Qg b3V0cHV0X2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVf dHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw ZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7 DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+ IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBmb3J3YXJk X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j ZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBf VHAmIHJlZmVyZW5jZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRv ciB7DQogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQog IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9 Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0 cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2Ug ZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAg dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz cyBfQ2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRy ZGlmZl90LA0KICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xh c3MgX1JlZmVyZW5jZSA9IF9UcCY+DQpzdHJ1Y3QgaXRlcmF0b3Igew0KICB0 eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVy ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7DQogIHR5 cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXJhdG9yPg0Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQog IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29y eSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl cmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBl bmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBv aW50ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVu Y2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0 cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gew0KICB0eXBlZGVmIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBk aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0 eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz IF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gew0K ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29u c3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJl bmNlOw0KfTsNCiMgMTQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQp0ZW1w bGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCl9faXRlcmF0b3Jf Y2F0ZWdvcnkoY29uc3QgX0l0ZXImKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9D YXRlZ29yeTsNCiAgcmV0dXJuIF9DYXRlZ29yeSgpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKg0KX19kaXN0YW5jZV90eXBl KGNvbnN0IF9JdGVyJikNCnsNCiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+ KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoNCl9f dmFsdWVfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNf Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90 eXBlKj4oMCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGlu ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j YXRlZ29yeQ0KaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkg eyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9DQoNCg0KdGVt cGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCmRpc3RhbmNlX3R5 cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBl KF9faSk7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQp2 YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVf dHlwZShfX2kpOyB9DQoNCn0NCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0 ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m dW5jcy5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM0ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9jb25jZXB0X2NoZWNrLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu Y3MuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0NCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPg0KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp bmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LA0KICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlz dGFuY2UmIF9fbikNCnsNCg0KICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUNCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u ID0gMDsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf X2ZpcnN0OyArK19fbjsNCiAgfQ0KICByZXR1cm4gX19uOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5saW5lIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUNCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs DQogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBy ZXR1cm4gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KZGlzdGFu Y2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KQ0Kew0KDQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICBfQ2F0 ZWdvcnk7DQogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X0NhdGVnb3J5KCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9J bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3Jf dGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB3aGlsZSAoX19u LS0pICsrX19pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19h ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgaWYgKF9fbiA+IDApDQogICAgd2hpbGUgKF9fbi0t KSArK19faTsNCiAgZWxzZQ0KICAgIHdoaWxlIChfX24rKykgLS1fX2k7DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9t QWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwNCiAgICAgICAg ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg X19pICs9IF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBhZHZhbmNlKF9J bnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgX19h ZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsNCn0N Cg0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGJhY2tfaW5zZXJ0X2l0 ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0NvbnRhaW5lciogY29udGFpbmVy Ow0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5 cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQogIHR5cGVk ZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBwb2lu dGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQogIGV4cGxpY2l0 IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250 YWluZXIoJl9feCkge30NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh aW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVy Ojp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29udGFpbmVyLT5wdXNo X2JhY2soX192YWx1ZSk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGJh Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7 IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9DQogIGJh Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGlu dCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBf Q29udGFpbmVyPg0KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7DQogIHJl dHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGZyb250 X2luc2VydF9pdGVyYXRvciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIq IGNvbnRhaW5lcjsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNv bnRhaW5lcl90eXBlOw0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl Ow0KICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm IHZvaWQgcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0K ICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg X194KSA6IGNvbnRhaW5lcigmX194KSB7fQ0KICBmcm9udF9pbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt ZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29u dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhp czsNCiAgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu ICp0aGlzOyB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmlubGluZSBmcm9udF9pbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRh aW5lciYgX194KSB7DQogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4oX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250 YWluZXI+DQpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0K ICBfQ29udGFpbmVyKiBjb250YWluZXI7DQogIHR5cGVuYW1lIF9Db250YWlu ZXI6Oml0ZXJhdG9yIGl0ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRh aW5lciBjb250YWluZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFs dWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAg dHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVu Y2U7DQoNCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQ0KICAgIDogY29udGFp bmVyKCZfX3gpLCBpdGVyKF9faSkge30NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh aW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGl0ZXIgPSBjb250 YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICArK2l0ZXI7DQog ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1 cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBs YXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+DQppbmxp bmUNCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQp7DQogIHR5cGVkZWYgdHlw ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOw0KICByZXR1cm4g aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwNCiAgICAg ICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+DQpjbGFzcyByZXZl cnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0KICB0eXBlZGVmIHJldmVy c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJh dG9yLCBfVHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7DQpwcm90ZWN0 ZWQ6DQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsNCnB1Ymxp YzoNCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVy YXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAg dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j ZTsNCg0KICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQ0K ICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0Jp ZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpDQogICAgOiBjdXJyZW50KF9feCkg e30NCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyBy ZXR1cm4gY3VycmVudDsgfQ0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3Vy cmVudDsNCiAgICByZXR1cm4gKi0tX190bXA7DQogIH0NCiAgcG9pbnRlciBv cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0N CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7DQogICAgLS1jdXJyZW50Ow0KICAg IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvcisrKGludCkg ew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7DQogICAgLS1jdXJyZW50Ow0K ICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItLSgp IHsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQog IF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAq dGhpczsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9 DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBj bGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgYm9vbCBvcGVy YXRvcj09KA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy YXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwNCiAg ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRl ciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpDQp7DQogIHJldHVybiBf X3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0 YW5jZT4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oDQogICAgY29uc3QgcmV2 ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl ZiwgX0Rpc3RhbmNlPiYgX194LA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5j ZT4mIF9feSkNCnsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9DQojIDE5 MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpj bGFzcyByZXZlcnNlX2l0ZXJhdG9yDQp7DQpwcm90ZWN0ZWQ6DQogIF9JdGVy YXRvciBjdXJyZW50Ow0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQ0K ICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQog ICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAg ICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyDQogICAgICAgICAg cG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cmVmZXJlbmNlDQogICAgICAgICAgcmVmZXJlbmNlOw0K DQogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7DQogIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOw0KDQpwdWJs aWM6DQogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQ0KICBleHBsaWNpdCByZXZl cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194 KSB7fQ0KDQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkg OiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0l0ZXI+DQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcj4mIF9feCkNCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkg e30NCg0KICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBj dXJyZW50OyB9DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQog ICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsNCiAgICByZXR1cm4gKi0t X190bXA7DQogIH0NCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyBy ZXR1cm4gJihvcGVyYXRvciooKSk7IH0NCg0KICBfU2VsZiYgb3BlcmF0b3Ir KygpIHsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9 DQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1NlbGYgX190bXAg PSAqdGhpczsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0K ICB9DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0KICAgICsrY3VycmVudDsN CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3ItLShp bnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgICsrY3VycmVu dDsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCg0KICBfU2VsZiBvcGVyYXRv cisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBf U2VsZihjdXJyZW50IC0gX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3Ir PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCAtPSBfX247 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLShk aWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7DQogICAgcmV0dXJuIF9TZWxm KGN1cnJlbnQgKyBfX24pOw0KICB9DQogIF9TZWxmJiBvcGVyYXRvci09KGRp ZmZlcmVuY2VfdHlwZSBfX24pIHsNCiAgICBjdXJyZW50ICs9IF9fbjsNCiAg ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o ZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyAr IF9fbik7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1 cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KSB7DQogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBib29s IG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiAhKF9feCA9 PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5s aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiBf X3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1 cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh dG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0K ICByZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0l0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpvcGVyYXRvci0oY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAg Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAg cmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPg0Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgew0K ICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNl KCkgLSBfX24pOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAg ICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBw dHJkaWZmX3Q+DQpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsNCnB1YmxpYzoN CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICB0eXBlZGVmIF9UcmFp dHMgdHJhaXRzX3R5cGU7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsNCg0KICB0eXBlZGVmIGlucHV0 X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVm IGNvbnN0IF9UcCYgcmVmZXJlbmNlOw0KDQogIGlzdHJlYW1faXRlcmF0b3Io KSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9DQogIGlzdHJlYW1f aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3Mp IHsgX01fcmVhZCgpOyB9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9DQogIHBvaW50ZXIgb3BlcmF0b3It PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgaXN0 cmVhbV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBfTV9yZWFkKCk7 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGlzdHJlYW1faXRlcmF0b3Ig b3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1w ID0gKnRoaXM7DQogICAgX01fcmVhZCgpOw0KICAgIHJldHVybiBfX3RtcDsN CiAgfQ0KDQogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRv ciYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01f b2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p OyB9DQoNCnByaXZhdGU6DQogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOw0K ICBfVHAgX01fdmFsdWU7DQogIGJvb2wgX01fb2s7DQoNCiAgdm9pZCBfTV9y ZWFkKCkgew0KICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFt KSA/IHRydWUgOiBmYWxzZTsNCiAgICBpZiAoX01fb2spIHsNCiAgICAgICpf TV9zdHJlYW0gPj4gX01fdmFsdWU7DQogICAgICBfTV9vayA9ICpfTV9zdHJl YW0gPyB0cnVlIDogZmFsc2U7DQogICAgfQ0KICB9DQp9Ow0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNs YXNzIF9EaXN0Pg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgaXN0 cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBf X3gsDQogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf Q2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7DQogIHJldHVybiBfX3gu X01fZXF1YWwoX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4NCmlubGlu ZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0KICAgICAgICAgICBj b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBf RGlzdD4mIF9feSkgew0KICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOw0K fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3Mg X0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPg0KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQog IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRz IHRyYWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBvdXRwdXRf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZv aWQgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw ZTsNCiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCBy ZWZlcmVuY2U7DQoNCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUm IF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQ0KICBv c3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hh clQqIF9fYykNCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9f Yykge30NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29u c3QgX1RwJiBfX3ZhbHVlKSB7DQogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVl Ow0KICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5n Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBvc3RyZWFtX2l0ZXJhdG9y PF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIG9zdHJl YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz OyB9DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQp IHsgcmV0dXJuICp0aGlzOyB9DQpwcml2YXRlOg0KICBvc3RyZWFtX3R5cGUq IF9NX3N0cmVhbTsNCiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7DQp9Ow0K IyA0MTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9pdGVyYXRvci5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpjbGFzcyBfX25vcm1hbF9pdGVy YXRvcg0KICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksDQogICAgICAgICAgICAgICAg ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLA0K ICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwNCiAgICAgICAgICAg ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j ZT4NCnsNCg0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3IgX01fY3VycmVudDsN Cg0KcHVibGljOg0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4gbm9ybWFsX2l0ZXJhdG9yX3R5cGU7DQogIHR5 cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlw ZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRv cl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBl bmFtZSBfX3RyYWl0c190eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQog IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90 eXBlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7DQogIHR5cGVkZWYgdHlwZW5h bWUgX190cmFpdHNfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsNCg0KICBf X25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg eyB9DQoNCiAgZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0 ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQ0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXI+DQogIGlubGluZSBfX25vcm1hbF9pdGVy YXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5l cj4mIF9faSkNCiAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9DQoN Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g Kl9NX2N1cnJlbnQ7IH0NCg0KICBwb2ludGVyDQogIG9wZXJhdG9yLT4oKSBj b25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9DQoNCiAgbm9ybWFsX2l0ZXJh dG9yX3R5cGUmDQogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0 dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUNCiAgb3Bl cmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1 cnJlbnQrKyk7IH0NCg0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBv cGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQ0K DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9yLS0oaW50KSB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9DQoN Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikgY29uc3QNCiAgeyByZXR1cm4gX01fY3VycmVudFtfX25d OyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9yKz0o Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVudCAr PSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90 eXBlDQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikg Y29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu dCArIF9fbik7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3Bl cmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikNCiAgeyBfTV9j dXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0 ZXJhdG9yX3R5cGUNCiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlw ZSYgX19uKSBjb25zdA0KICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf TV9jdXJyZW50IC0gX19uKTsgfQ0KDQogIGRpZmZlcmVuY2VfdHlwZQ0KICBv cGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u c3QNCiAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9 DQoNCiAgY29uc3QgX0l0ZXJhdG9yJg0KICBiYXNlKCkgY29uc3QgeyByZXR1 cm4gX01fY3VycmVudDsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I9PShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs DQogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA9PSBfX3Jocy5iYXNlKCk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh aW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX2xocyA9PSBfX3Jo cyk7IH0NCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxp bmUgYm9vbA0Kb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg X19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7 IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBib29s DQpvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y TCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgIGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykN CnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0NCg0KdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg X0NvbnRhaW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvcjw9KGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo cywNCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX3JocyA8 IF9fbGhzKTsgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5s aW5lIGJvb2wNCm9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpDQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9DQoNCnRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4NCmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+DQpvcGVyYXRvcisoX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX2kpDQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9DQoNCn0NCiMg MzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pdGVyYXRvci5oIiAyIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v cnkuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9j Kytjb25maWcuaCIgMSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Bh aXIuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfcGFpci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoN CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCnN0cnVjdCBwYWly IHsNCiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsNCiAgdHlwZWRlZiBfVDIg c2Vjb25kX3R5cGU7DQoNCiAgX1QxIGZpcnN0Ow0KICBfVDIgc2Vjb25kOw0K DQoNCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30NCg0KDQoNCiAg cGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3Qo X19hKSwgc2Vjb25kKF9fYikge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Ux LCBjbGFzcyBfVTI+DQogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9f cCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30N Cn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m aXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m aXJzdCA8IF9feS5maXJzdCB8fA0KICAgICAgICAgKCEoX195LmZpcnN0IDwg X194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29s IG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5s aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuIF9feSA8 IF9feDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0K aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiAh KF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEs IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICBy ZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+DQoNCg0KaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf cGFpcihfVDEgX194LCBfVDIgX195KQ0KDQoNCg0Kew0KICByZXR1cm4gcGFp cjxfVDEsIF9UMj4oX194LCBfX3kpOw0KfQ0KDQp9DQojIDM4ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMNCiMgMTkgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgi IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQoj IDIxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90 eXBlX3RyYWl0cy5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRl IDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Ow0KdHlwZWRlZiBfQm9v bDx0cnVlPiBfX3RydWVfdHlwZTsNCnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9f ZmFsc2VfdHlwZTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBf X3R5cGVfdHJhaXRzIHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19k dW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiMgODEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMN CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0 eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gew0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBf X3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8c2lnbmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln bmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8aW50PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0K dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+ IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5 cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7DQp9Ow0KIyAxOTkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsN Cn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk b3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1Rw Kj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsN CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gew0KICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxzaWduZWQgY2hhcj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PHVuc2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3 Y2hhcl90PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsN CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gew0K ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gew0KICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0 IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gew0KICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9J c19pbnRlZ2VyPGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1 bnNpZ25lZCBsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOw0KfTsNCiMgMjk2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsNCiAgIHR5cGVk ZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7DQp9Ow0KDQoNCm5hbWVzcGFjZSBz dGQgew0KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsNCn07DQoN CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh aW5lcj4NCnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7DQp9Ow0KIyA0MSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NzdGRsaWIuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s YXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgi IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMw0K IyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk bGliLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDQJOTgv MDEvMjIgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90 ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMgNA0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu aCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQN CiNwcmFnbWEgaWRlbnQgIkAoIyl3YWl0LmgJMS4yMQk5Ny8wNC8wOCBTTUki DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQoj IDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAxIDMgNA0KIyAxNiAi L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCiNwcmFnbWEgaWRl bnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAgU01JIg0KDQojIDEg Ii91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAx OSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjEg Ii91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQojIDIyICIvdXNyL2luY2x1 ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj IDY3ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHJsaW1fdDsNCiMgMTAyICIvdXNyL2luY2x1ZGUv c3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0IHJsaW1pdCB7DQogICAgICAg IHJsaW1fdCBybGltX2N1cjsNCiAgICAgICAgcmxpbV90IHJsaW1fbWF4Ow0K fTsNCg0KDQoNCg0KdHlwZWRlZiB1X2xvbmdsb25nX3QgcmxpbTY0X3Q7DQoN Cg0KDQoNCg0Kc3RydWN0IHJsaW1pdDY0IHsNCiAgICAgICAgcmxpbTY0X3Qg cmxpbV9jdXI7DQogICAgICAgIHJsaW02NF90IHJsaW1fbWF4Ow0KfTsNCiMg MTQzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0 IHJ1c2FnZSB7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOw0K ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsNCiAgICAgICAgbG9u ZyBydV9tYXhyc3M7DQogICAgICAgIGxvbmcgcnVfaXhyc3M7DQogICAgICAg IGxvbmcgcnVfaWRyc3M7DQogICAgICAgIGxvbmcgcnVfaXNyc3M7DQogICAg ICAgIGxvbmcgcnVfbWluZmx0Ow0KICAgICAgICBsb25nIHJ1X21hamZsdDsN CiAgICAgICAgbG9uZyBydV9uc3dhcDsNCiAgICAgICAgbG9uZyBydV9pbmJs b2NrOw0KICAgICAgICBsb25nIHJ1X291YmxvY2s7DQogICAgICAgIGxvbmcg cnVfbXNnc25kOw0KICAgICAgICBsb25nIHJ1X21zZ3JjdjsNCiAgICAgICAg bG9uZyBydV9uc2lnbmFsczsNCiAgICAgICAgbG9uZyBydV9udmNzdzsNCiAg ICAgICAgbG9uZyBydV9uaXZjc3c7DQp9Ow0KIyAxOTMgIi91c3IvaW5jbHVk ZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQpleHRlcm4gaW50IHNldHJsaW1pdChp bnQsIGNvbnN0IHN0cnVjdCBybGltaXQgKik7DQpleHRlcm4gaW50IGdldHJs aW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7DQoNCg0KDQoNCmV4dGVybiBp bnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7 DQpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0 ICopOw0KDQoNCmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkoaW50LCBpZF90KTsN CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOw0KZXh0 ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KIyAy MjggIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQp9DQojIDI1 ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1 ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2ln aW5mby5oCTEuNTQJOTgvMDMvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVk ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOSAiL3Vzci9pbmNs dWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjAgIi91c3IvaW5jbHVkZS9z eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxMjYg Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9tYWNoc2lnLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1 ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFj aHNpZy5oCTEuMTQJOTgvMDIvMDUgU01JIg0KDQoNCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIwICIvdXNyL2lu Y2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN CiMgMTEwICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQp9DQoj IDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDIw NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNA0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAyMDcgIi91c3Iv aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMTcgIi91c3IvaW5j bHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs dWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMTggIi91c3IvaW5jbHVkZS9z eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2ln aW5mbyB7DQoNCg0KDQogICAgICAgIGludCBzaV9zaWdubzsNCiAgICAgICAg aW50IHNpX2NvZGU7DQogICAgICAgIGludCBzaV9lcnJubzsNCg0KDQoNCiAg ICAgICAgdW5pb24gew0KDQogICAgICAgICAgICAgICAgaW50IF9fcGFkWygo MTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsNCg0KICAgICAgICAgICAgICAg IHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfX3Bp ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsNCg0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p b24gc2lndmFsIF9fdmFsdWU7DQoNCg0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tf dCBfX3N0aW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IF9fY2xkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0K ICAgICAgICAgICAgICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAg c3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRk cjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAg ICAgICAgICB9IF9fZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAg ICAgIH0gX19maWxlOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQog ICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsN Cg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lzY2Fs bDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOw0K ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0Ow0KICAgICAg ICAgICAgICAgICAgICAgICAgbG9uZyBfX3N5c2FyZ1s4XTsNCiAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX21zdGF0ZVsxMF07DQogICAgICAgICAg ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0gc2ln aW5mb190Ow0KIyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAz IDQNCnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7DQogICAgICAgIGludCBz aV9zaWdubzsNCiAgICAgICAgaW50IHNpX2NvZGU7DQogICAgICAgIGludCBz aV9lcnJubzsNCg0KDQoNCiAgICAgICAgdW5pb24gew0KICAgICAgICAgICAg ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBf X3BpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlv biBzaWd2YWwgX192YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfSBfX2tpbGw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xvY2tfdCBfX3V0aW1lOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3N0YXR1czsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3Rp bWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7 DQogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7DQogICAgICAg ICAgICAgICAgfSBfX3Byb2M7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ew0KICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOw0KICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHJhcG5vOw0KICAgICAgICAg ICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOw0KICAgICAgICAgICAgICAg IH0gX19mYXVsdDsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZkOw0KICAgICAgICAgICAg ICAgICAgICAgICAgbG9uZyBfX2JhbmQ7DQogICAgICAgICAgICAgICAgfSBf X2ZpbGU7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAg ICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOw0KDQoNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCg0KDQoNCiAgICAg ICAgICAgICAgICB9IF9fcHJvZjsNCg0KICAgICAgICB9IF9fZGF0YTsNCg0K fSBrX3NpZ2luZm9fdDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2lncXVldWUgew0K ICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKnNxX25leHQ7DQogICAgICAgIGtf c2lnaW5mb190IHNxX2luZm87DQogICAgICAgIHZvaWQgKCpzcV9mdW5jKShz dHJ1Y3Qgc2lncXVldWUgKik7DQogICAgICAgIHZvaWQgKnNxX2JhY2twdHI7 DQoNCn0gc2lncXVldWVfdDsNCiMgNDU0ICIvdXNyL2luY2x1ZGUvc3lzL3Np Z2luZm8uaCIgMyA0DQp9DQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu aCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDEg MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQoj cHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMTgJOTgvMDYvMzAgU01J Ig0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIzICIvdXNyL2luY2x1ZGUv c3lzL3Byb2NzZXQuaCIgMiAzIDQNCiMgNDAgIi91c3IvaW5jbHVkZS9zeXMv cHJvY3NldC5oIiAzIDQNCnR5cGVkZWYgZW51bQ0KDQogICAgICAgIGlkdHlw ZQ0KDQogICAgICAgICAgICAgICAgew0KICAgICAgICBQX1BJRCwNCiAgICAg ICAgUF9QUElELA0KICAgICAgICBQX1BHSUQsDQoNCiAgICAgICAgUF9TSUQs DQogICAgICAgIFBfQ0lELA0KICAgICAgICBQX1VJRCwNCiAgICAgICAgUF9H SUQsDQogICAgICAgIFBfQUxMLA0KICAgICAgICBQX0xXUElEDQp9IGlkdHlw ZV90Ow0KIyA2NCAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0K dHlwZWRlZiBlbnVtIGlkb3Agew0KICAgICAgICBQT1BfRElGRiwNCg0KDQog ICAgICAgIFBPUF9BTkQsDQoNCg0KICAgICAgICBQT1BfT1IsDQoNCg0KICAg ICAgICBQT1BfWE9SDQoNCg0KfSBpZG9wX3Q7DQoNCg0KDQoNCg0KDQoNCnR5 cGVkZWYgc3RydWN0IHByb2NzZXQgew0KICAgICAgICBpZG9wX3QgcF9vcDsN Cg0KDQoNCg0KICAgICAgICBpZHR5cGVfdCBwX2xpZHR5cGU7DQoNCg0KICAg ICAgICBpZF90IHBfbGlkOw0KDQogICAgICAgIGlkdHlwZV90IHBfcmlkdHlw ZTsNCg0KDQogICAgICAgIGlkX3QgcF9yaWQ7DQp9IHByb2NzZXRfdDsNCiMg MTI5ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQp9DQojIDI3 ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCmV4dGVy biAiQyIgew0KIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNA0K ZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOw0KZXh0ZXJuIHBpZF90IHdhaXRw aWQocGlkX3QsIGludCAqLCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgd2FpdGlk KGlkdHlwZV90LCBpZF90LCBzaWdpbmZvX3QgKiwgaW50KTsNCmV4dGVybiBw aWRfdCB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KDQoN Cg0KDQpleHRlcm4gcGlkX3Qgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0 cnVjdCBydXNhZ2UgKik7DQojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0 LmgiIDMgNA0KfQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o IiAyIDMgNA0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KdHlwZWRlZiBzdHJ1 Y3Qgew0KICAgICAgICBpbnQgcXVvdDsNCiAgICAgICAgaW50IHJlbTsNCn0g ZGl2X3Q7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgbG9uZyBxdW90 Ow0KICAgICAgICBsb25nIHJlbTsNCn0gbGRpdl90Ow0KDQoNCnR5cGVkZWYg c3RydWN0IHsNCiAgICAgICAgbG9uZyBsb25nIHF1b3Q7DQogICAgICAgIGxv bmcgbG9uZyByZW07DQp9IGxsZGl2X3Q7DQojIDE0OCAiL2hvbWUvbWRlaWwv YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p bmNsdWRlL3N0ZGxpYi5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f Y3R5cGVbXTsNCg0KDQoNCmV4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFy ICopOw0KZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7DQpleHRlcm4g bG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOw0KZXh0ZXJuIGRvdWJsZSBz dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsNCmV4dGVybiBsb25nIGlu dCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFy ICoqLCBpbnQpOw0KDQpleHRlcm4gaW50IHJhbmQodm9pZCk7DQpleHRlcm4g dm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgcmFu ZF9yKHVuc2lnbmVkIGludCAqKTsNCg0KDQpleHRlcm4gdm9pZCAqY2FsbG9j KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiB2b2lkIGZyZWUodm9pZCAqKTsN CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsNCmV4dGVybiB2b2lkICpy ZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsNCg0KZXh0ZXJuIHZvaWQgYWJvcnQo dm9pZCk7DQpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7DQpl eHRlcm4gdm9pZCBleGl0KGludCk7DQpleHRlcm4gdm9pZCBfZXhpdGhhbmRs ZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsN CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7DQoNCmV4dGVybiB2 b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXpl X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv bnN0IHZvaWQgKikpOw0KZXh0ZXJuIHZvaWQgcXNvcnQodm9pZCAqLCBzaXpl X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv bnN0IHZvaWQgKikpOw0KDQpleHRlcm4gaW50IGFicyhpbnQpOw0KZXh0ZXJu IGRpdl90IGRpdihpbnQsIGludCk7DQpleHRlcm4gbG9uZyBpbnQgbGFicyhs b25nKTsNCmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsNCg0KZXh0 ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVf dCk7DQpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsN CmV4dGVybiBpbnQgd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7DQoNCmV4dGVy biBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNp emVfdCk7DQpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qg d2NoYXJfdCAqLCBzaXplX3QpOw0KDQoNCg0KDQpleHRlcm4gZG91YmxlIGRy YW5kNDgodm9pZCk7DQpleHRlcm4gZG91YmxlIGVyYW5kNDgodW5zaWduZWQg c2hvcnQgKik7DQpleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0 ICopOw0KZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsN CmV4dGVybiBsb25nIGxyYW5kNDgodm9pZCk7DQpleHRlcm4gbG9uZyBtcmFu ZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9y dCAqKTsNCmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVk IHNob3J0ICopOw0KZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsNCmV4dGVy biBpbnQgcHV0ZW52KGNoYXIgKik7DQpleHRlcm4gdm9pZCBzZXRrZXkoY29u c3QgY2hhciAqKTsNCiMgMjE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli LmgiIDMgNA0KZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7DQoNCg0KZXh0 ZXJuIGludCBta3N0ZW1wNjQoY2hhciAqKTsNCg0KDQoNCg0KDQoNCmV4dGVy biBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICplY3Z0 KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmZj dnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAq Z2N2dChkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0c3Vi b3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOw0KZXh0ZXJu IGludCBncmFudHB0KGludCk7DQpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVu c2lnbmVkLCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4gY2hhciAqbDY0YShs b25nKTsNCmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsNCmV4dGVybiBj aGFyICpwdHNuYW1lKGludCk7DQpleHRlcm4gbG9uZyByYW5kb20odm9pZCk7 DQpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICop Ow0KZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7DQpleHRl cm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsNCmV4dGVybiBpbnQgdHR5c2xv dCh2b2lkKTsNCmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsNCmV4dGVybiB2 b2lkICp2YWxsb2Moc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGludCBkdXAy KGludCwgaW50KTsNCmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwg aW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFmY3Z0KGxvbmcg ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAqcWdj dnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBjaGFyICpn ZXRjd2QoY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNvbnN0IGNoYXIgKmdl dGV4ZWNuYW1lKHZvaWQpOw0KZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQp Ow0KZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25z dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKm9wdGFyZzsNCmV4dGVybiBpbnQg b3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsNCmV4dGVybiBjaGFyICpnZXRwYXNz KGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0cGFzc3BocmFzZShj b25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBnZXRwdyh1aWRfdCwgY2hhciAq KTsNCmV4dGVybiBpbnQgaXNhdHR5KGludCk7DQpleHRlcm4gdm9pZCAqbWVt YWxpZ24oc2l6ZV90LCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKnR0eW5hbWUo aW50KTsNCg0KDQpleHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIg Kik7DQpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7DQpleHRl cm4gbGxkaXZfdCBsbGRpdihsb25nIGxvbmcsIGxvbmcgbG9uZyk7DQpleHRl cm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7DQpleHRlcm4g bG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp Ow0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbChjb25zdCBj aGFyICosIGNoYXIgKiosIGludCk7DQpleHRlcm4gY2hhciAqdWxsdG9zdHIo dW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOw0KIyA0MTIgIi9ob21lL21k ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z LjAvaW5jbHVkZS9zdGRsaWIuaCIgMyA0DQp9DQojIDQyICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAy IDMNCiMgNzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jc3RkbGliLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNp bmcgOjpkaXZfdDsNCiAgdXNpbmcgOjpsZGl2X3Q7DQoNCiAgdXNpbmcgOjph Ym9ydDsNCiAgdXNpbmcgOjphYnM7DQogIHVzaW5nIDo6YXRleGl0Ow0KICB1 c2luZyA6OmF0b2Y7DQogIHVzaW5nIDo6YXRvaTsNCiAgdXNpbmcgOjphdG9s Ow0KICB1c2luZyA6OmJzZWFyY2g7DQogIHVzaW5nIDo6Y2FsbG9jOw0KICB1 c2luZyA6OmRpdjsNCiAgdXNpbmcgOjpleGl0Ow0KICB1c2luZyA6OmZyZWU7 DQogIHVzaW5nIDo6Z2V0ZW52Ow0KICB1c2luZyA6OmxhYnM7DQogIHVzaW5n IDo6bGRpdjsNCiAgdXNpbmcgOjptYWxsb2M7DQogIHVzaW5nIDo6bWJsZW47 DQogIHVzaW5nIDo6bWJzdG93Y3M7DQogIHVzaW5nIDo6bWJ0b3djOw0KICB1 c2luZyA6OnFzb3J0Ow0KICB1c2luZyA6OnJhbmQ7DQogIHVzaW5nIDo6cmVh bGxvYzsNCiAgdXNpbmcgOjpzcmFuZDsNCiAgdXNpbmcgOjpzdHJ0b2Q7DQog IHVzaW5nIDo6c3RydG9sOw0KICB1c2luZyA6OnN0cnRvdWw7DQogIHVzaW5n IDo6c3lzdGVtOw0KICB1c2luZyA6Ondjc3RvbWJzOw0KICB1c2luZyA6Ondj dG9tYjsNCg0KICBpbmxpbmUgbG9uZw0KICBhYnMobG9uZyBfX2kpIHsgcmV0 dXJuIGxhYnMoX19pKTsgfQ0KDQogIGlubGluZSBsZGl2X3QNCiAgZGl2KGxv bmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0N Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzDQoj IDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9uZXciIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL25ldyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzDQojIDM1ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvbmV3IiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIg MSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv bmV3IiAyIDMNCg0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K ew0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uDQogIHsN CiAgcHVibGljOg0KICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9DQogICAg dmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsNCiAgfTsNCg0KICBzdHJ1 Y3Qgbm90aHJvd190IHsgfTsNCiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBu b3Rocm93Ow0KICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsNCiAg bmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsNCn0N Cg0KDQp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChz dGQ6OmJhZF9hbGxvYyk7DQp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNp emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZvaWQgb3BlcmF0b3Ig ZGVsZXRlKHZvaWQgKikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRl W10odm9pZCAqKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lk ICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro cm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAq LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0 aHJvdygpOw0KDQoNCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpz aXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9 DQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZv aWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9DQp9DQojIDQ3 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMNCiMgNDkgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzDQoj IDUwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi IDEgMw0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz DQojIDUyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQoj IDUzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoN CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy ZEl0ZXIyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChf Rm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopDQp7 DQogIF9UcCBfX3RtcCA9ICpfX2E7DQogICpfX2EgPSAqX19iOw0KICAqX19i ID0gX190bXA7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIHZvaWQgaXRlcl9zd2Fw KF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19pdGVyX3N3YXAoX19h LCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9UcD4NCmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19i KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgX1RwIF9fdG1wID0gX19hOw0K ICBfX2EgPSBfX2I7DQogIF9fYiA9IF9fdG1wOw0KfQ0KDQoNCg0KDQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgbWlu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyBy ZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l IGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f Yikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19hIDwgX19i KSByZXR1cm4gX19iOyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1p bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9f Y29tcCkgew0KDQogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19i OyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAm IF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgew0KDQog IGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19h Ow0KfQ0KIyAxMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4N CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikNCnsNCiAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2Zp cnN0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19y ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGlu ZSBfT3V0cHV0SXRlcg0KX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9E aXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7DQogICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQog IH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPg0KaW5saW5lIF9UcCoNCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCog X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQp7 DQogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICog KF9fbGFzdCAtIF9fZmlyc3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0SXRl ciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHJldHVybiBf X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAg ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0KICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkN CnsNCiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LA0KICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCksDQogICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAqIF9f Y29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19y ZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkN CnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l IF9UcCogX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5X3RyaXZp YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz cyBfVHA+DQppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCop DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1Ry aXZpYWw7DQogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfVHJpdmlhbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUg X091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsNCiAg cmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdC5iYXNlKCksDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSkpOw0KfQ0KDQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBl KQ0Kew0KICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8 X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19j b3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1 bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0 SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsNCiAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6 X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu bGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCg0KICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs Ow0KICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXIyLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpDQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7DQogIHJldHVy biBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0 YW5jZT4NCmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3 YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3Rh bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQ0K ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1 bHQ7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl Y3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAg ICAgICAgIGNsYXNzIF9Cb29sVHlwZT4NCnN0cnVjdCBfX2NvcHlfYmFja3dh cmRfZGlzcGF0Y2gNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5 DQogICAgICAgICAgX0NhdDsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlw ZQ0KICAgICAgICAgIF9EaXN0YW5jZTsNCg0KICBzdGF0aWMgX0JpZGlyZWN0 aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7DQogICAg cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0KfTsNCg0KdGVt cGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlz cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBf VHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFz dCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt ID0gX19sYXN0IC0gX19maXJzdDsNCiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICByZXR1 cm4gX19yZXN1bHQgLSBfTnVtOw0KICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPg0Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25z dCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCnsNCiAgc3RhdGljIF9UcCog Y29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf VHAqIF9fcmVzdWx0KSB7DQogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9k aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCiAgICAgIDo6Y29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVt cGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+DQppbmxpbmUgX0JJMiBf X2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs IF9CSTIgX19yZXN1bHQpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf dHlwZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFsOw0KICBy ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U cml2aWFsPg0KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0 eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291 dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7DQogIHJl dHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdC5iYXNlKCkpKTsNCn0NCg0KdGVtcGxhdGUgPHR5cGVuYW1l IF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJMiBfX2NvcHlfYmFj a3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C STEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBl KXsNCiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O b3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0 cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJh c2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsNCn0NCg0KdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJ MiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEg X19maXJzdCwgX0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f ZmFsc2VfdHlwZSkgew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf aXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBf X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCnRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5l IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0 LCBfQkkyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf QkkxPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9iYWNr d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1 dEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlf bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICBmb3IgKCA7IF9fY291bnQg PiAwOyAtLV9fY291bnQpIHsNCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsN CiAgICArK19fZmlyc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1 cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19y ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3Mg X1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIHBhaXI8X1JBSXRl ciwgX091dHB1dEl0ZXI+DQpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9T aXplIF9fY291bnQsDQogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN CiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9S QUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7DQogIHJldHVybiBw YWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpfX2NvcHlf bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJ dGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBf X2NvdW50LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpjb3B5X24o X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19j b3VudCwgX19yZXN1bHQpOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCnZvaWQgZmlsbChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw JiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkNCiAgICAqX19maXJzdCA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9P dXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf X24sIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f Zmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICByZXR1cm4gX19m aXJzdDsNCn0NCg0KDQoNCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hh ciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LA0KICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIHVuc2ln bmVkIGNoYXIgX190bXAgPSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBfX3Rt cCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwo c2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsDQog ICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQog IHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwg c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBf X2ZpcnN0KTsNCn0NCg0KaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0 LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykNCnsNCiAgY2hhciBf X3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSB1bnNpZ25lZCBjaGFy KiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCnRlbXBsYXRl IDxjbGFzcyBfU2l6ZT4NCmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNo YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIGZpbGwoX19m aXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsNCiAgcmV0dXJuIF9fZmlyc3Qg KyBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSBj aGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCg0KDQoNCg0K dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy Mj4NCnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChf SW5wdXRJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg Kl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgew0KICAgICsrX19maXJzdDE7DQog ICAgKytfX2ZpcnN0MjsNCiAgfQ0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy MSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpwYWlyPF9JbnB1dEl0ZXIxLCBf SW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0 MikpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0N CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp cnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW5saW5lIGJvb2wgZXF1YWwo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCEo Kl9fZmlyc3QxID09ICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gZmFsc2U7 DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGlj YXRlPg0KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICBpZiAoIV9fYmluYXJ5X3By ZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNl Ow0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KYm9vbCBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIp DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0Mg0KICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIp IHsNCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0 dXJuIHRydWU7DQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAg ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz cyBfQ29tcGFyZT4NCmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgZm9yICggOyBf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDINCiAg ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gdHJ1 ZTsNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAg ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQppbmxpbmUg Ym9vbA0KbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQg Y2hhciogX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qy KQ0Kew0KICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly c3QxOw0KICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmly c3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEs IF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAgcmV0dXJuIF9f cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7 DQp9DQoNCmlubGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNv bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog X19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpDQp7DQoNCiAgcmV0dXJu IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciop IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly c3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0KDQoNCg0KDQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+ DQppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCiAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlm ICgqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICByZXR1cm4gLTE7DQog ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgIHJldHVybiAx Ow0KICAgICsrX19maXJzdDE7DQogICAgKytfX2ZpcnN0MjsNCiAgfQ0KICBp ZiAoX19maXJzdDIgPT0gX19sYXN0Mikgew0KICAgIHJldHVybiAhKF9fZmly c3QxID09IF9fbGFzdDEpOw0KICB9DQogIGVsc2Ugew0KICAgIHJldHVybiAt MTsNCiAgfQ0KfQ0KDQppbmxpbmUgaW50DQpfX2xleGljb2dyYXBoaWNhbF9j b21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh c3QyKQ0Kew0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAt IF9fZmlyc3QxOw0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0 MiAtIF9fZmlyc3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAg cmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdA0KICAgICAgICAgICAg ICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg PCBfX2xlbjIgPyAtMSA6IDEpKTsNCn0NCg0KaW5saW5lIGludA0KX19sZXhp Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3Qx LCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf X2xhc3QyKQ0Kew0KDQogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21w YXJlXzN3YXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3Qx LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln bmVkIGNoYXIqKSBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0K DQoNCg0KDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh c3MgX0lucHV0SXRlcjI+DQppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJu IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KfQ0KDQp9DQojIDIxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5 LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDI4ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KIyAx ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5j dGV4Y2VwdC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz LmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN CnsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsN Cg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0K ICB2b2lkDQogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0K ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9f dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk DQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN CiAgdm9pZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9y YW5nZShjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19y dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p ZA0KICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 DQoNCiAgdm9pZA0KICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJl KGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDI5ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkZGVmLmgiIDEgMw0KIyAzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o IiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzDQoj IDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMw0KIyAzNyAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3Nl cnQuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0DQoj IDExICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNA0KI3ByYWdtYSBpZGVu dCAiQCgjKWFzc2VydC5oCTEuOQk5Mi8wNy8xNCBTTUkiDQoNCg0KZXh0ZXJu ICJDIiB7DQoNCg0KDQpleHRlcm4gdm9pZCBfX2Fzc2VydChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgaW50KTsNCg0KDQoNCg0KDQp9DQojIDM4ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fz c2VydC5oIiAyIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KDQoNCg0KDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90 aHJlYWRzLmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy LjcvYml0cy9ndGhyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMiAzDQojIDUx ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf dGhyZWFkcy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDY2ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o IiAzDQpzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UNCnsNCg0KDQoNCg0KICB0eXBl ZGVmIHNpemVfdCBfUkNfdDsNCg0KDQoNCiAgIHZvbGF0aWxlIF9SQ190IF9N X3JlZl9jb3VudDsNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9y ZWZfY291bnRfbG9jazsNCiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6 IF9NX3JlZl9jb3VudChfX24pDQogICAgew0KDQogICAgICBfX2d0aHJlYWRf bXV0ZXhfdCBfX3RtcCA9IHt7ezB9LCAwfSwge3t7MH19fSwgezB9fTsNCiAg ICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7DQoNCg0KDQoNCg0KICAg IH0NCiMgMTEyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfdGhyZWFkcy5oIiAzDQogIHZvaWQgX01faW5jcigpIHsNCiAg ICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOw0K ICAgICsrX01fcmVmX2NvdW50Ow0KICAgIF9fZ3RocmVhZF9tdXRleF91bmxv Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgfQ0KICBfUkNfdCBfTV9kZWNy KCkgew0KICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf bG9jayk7DQogICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j b3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291 bnRfbG9jayk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQojIDE2MyAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh ZHMuaCIgMw0KfTsNCiMgMjg0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQp0ZW1wbGF0ZSA8aW50 IF9faW5zdD4NCnN0cnVjdCBfU1RMX211dGV4X3NwaW4gew0KICBlbnVtIHsg X19sb3dfbWF4ID0gMzAsIF9faGlnaF9tYXggPSAxMDAwIH07DQoNCg0KICBz dGF0aWMgdW5zaWduZWQgX19tYXg7DQogIHN0YXRpYyB1bnNpZ25lZCBfX2xh c3Q7DQp9Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVuc2lnbmVkIF9T VExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3Bp bjxfX2luc3Q+OjpfX2xvd19tYXg7DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0 Pg0KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9 IDA7DQojIDMxMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfbXV0ZXhfbG9j aw0Kew0KDQoNCg0KDQoNCg0KDQogIF9fZ3RocmVhZF9tdXRleF90IF9NX2xv Y2s7DQogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsNCiMgMzQyICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o IiAzDQogIH0NCiAgdm9pZCBfTV9hY3F1aXJlX2xvY2soKSB7DQoNCg0KDQog ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOw0KICB9DQogIHZv aWQgX01fcmVsZWFzZV9sb2NrKCkgew0KDQoNCg0KICAgIF9fZ3RocmVhZF9t dXRleF91bmxvY2soJl9NX2xvY2spOw0KICB9DQojIDQ1MyAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg Mw0KfTsNCiMgNDkyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQpzdHJ1Y3QgX1NUTF9hdXRvX2xv Y2sNCnsNCiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOw0KDQogIF9TVExf YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2so X19sb2NrKQ0KICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQ0K ICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr KCk7IH0NCg0KcHJpdmF0ZToNCiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NU TF9hdXRvX2xvY2smKTsNCiAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9h dXRvX2xvY2smKTsNCn07DQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgNjgg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGxvYy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8 aW50IF9faW5zdD4NCmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsN Cg0KcHJpdmF0ZToNCg0KICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz aXplX3QpOw0KICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos IHNpemVfdCk7DQogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29v bV9oYW5kbGVyKSgpOw0KDQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFs bG9jYXRlKHNpemVfdCBfX24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9 IG1hbGxvYyhfX24pOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3Vs dCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICByZXR1cm4gX19yZXN1bHQ7 DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg c2l6ZV90ICkNCiAgew0KICAgIGZyZWUoX19wKTsNCiAgfQ0KDQogIHN0YXRp YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90 IF9fbmV3X3N6KQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9j KF9fcCwgX19uZXdfc3opOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOw0KICAgIHJl dHVybiBfX3Jlc3VsdDsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkICgqIF9fc2V0 X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpDQogIHsNCiAgICB2 b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7 DQogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7DQogICAg cmV0dXJuKF9fb2xkKTsNCiAgfQ0KDQp9Ow0KDQoNCg0KdGVtcGxhdGUgPGlu dCBfX2luc3Q+DQp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsNCg0K dGVtcGxhdGUgPGludCBfX2luc3Q+DQp2b2lkKg0KX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQ0K ew0KICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICB2 b2lkKiBfX3Jlc3VsdDsNCg0KICAgIGZvciAoOzspIHsNCiAgICAgICAgX19t eV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy Ow0KICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0 ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQ0KICAgICAgICAoKl9fbXlfbWFs bG9jX2hhbmRsZXIpKCk7DQogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7DQogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsN CiAgICB9DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCogX19t YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Mo dm9pZCogX19wLCBzaXplX3QgX19uKQ0Kew0KICAgIHZvaWQgKCogX19teV9t YWxsb2NfaGFuZGxlcikoKTsNCiAgICB2b2lkKiBfX3Jlc3VsdDsNCg0KICAg IGZvciAoOzspIHsNCiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9f bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBpZiAoMCA9PSBf X215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2Mo KTsgfQ0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAg ICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7DQogICAgICAgIGlm IChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9DQp9DQoNCnR5 cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9j Ow0KDQp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmNsYXNz IHNpbXBsZV9hbGxvYyB7DQoNCnB1YmxpYzoNCiAgICBzdGF0aWMgX1RwKiBh bGxvY2F0ZShzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4gMCA9PSBfX24g PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChf VHApKTsgfQ0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpDQogICAg ICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9U cCkpOyB9DQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwg c2l6ZV90IF9fbikNCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRl YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9DQogICAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICAgIHsgX0FsbG9j OjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQ0KfTsNCg0KDQoN Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBkZWJ1Z19h bGxvYyB7DQoNCnByaXZhdGU6DQoNCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsN Cg0KDQoNCnB1YmxpYzoNCg0KICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6 ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOw0KICAgICoo c2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsNCiAgICByZXR1cm4gX19yZXN1bHQg KyAoaW50KSBfU19leHRyYTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkIGRlYWxs b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciog X19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7DQogICAg KHZvaWQpKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSB8fCAoX19hc3Nl cnQoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAp LCAwKSk7DQogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g KyAoaW50KSBfU19leHRyYSk7DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVh bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9f bmV3X3N6KQ0KICB7DQogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19w IC0gKGludCkgX1NfZXh0cmE7DQogICAgKHZvaWQpKCgqKHNpemVfdCopX19y ZWFsX3AgPT0gX19vbGRfc3opIHx8IChfX2Fzc2VydCgiKihzaXplX3QqKV9f cmVhbF9wID09IF9fb2xkX3N6IiwgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTk3KSwgMCkpOw0KICAg IGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQ0KICAgICAgX0FsbG9jOjpyZWFs bG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr IChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf X25ld19zejsNCiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRy YTsNCiAgfQ0KDQp9Ow0KIyAyNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v bCB0aHJlYWRzLCBpbnQgaW5zdD4NCmNsYXNzIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZSB7DQoNCnByaXZhdGU6DQoNCg0KICBlbnVtIHtfQUxJR04gPSA4 fTsNCiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07DQogIGVudW0ge19ORlJF RUxJU1RTID0gMTZ9Ow0KICBzdGF0aWMgc2l6ZV90DQogIF9TX3JvdW5kX3Vw KHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsg KHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7 IH0NCg0KICB1bmlvbiBfT2JqIHsNCiAgICAgICAgdW5pb24gX09iaiogX01f ZnJlZV9saXN0X2xpbms7DQogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb MV07DQogIH07DQoNCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVf bGlzdFtdOw0KDQogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgo c2l6ZV90IF9fYnl0ZXMpIHsNCiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMp ICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsNCiAg fQ0KDQoNCiAgc3RhdGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsN Cg0KDQogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXplX3QgX19z aXplLCBpbnQmIF9fbm9ianMpOw0KDQoNCiAgc3RhdGljIGNoYXIqIF9TX3N0 YXJ0X2ZyZWU7DQogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsNCiAgc3Rh dGljIHNpemVfdCBfU19oZWFwX3NpemU7DQoNCg0KICAgIHN0YXRpYyBfU1RM X211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsNCg0KDQoNCg0K DQogICAgY2xhc3MgX0xvY2s7DQogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOw0K ICAgIGNsYXNzIF9Mb2NrIHsNCiAgICAgICAgcHVibGljOg0KICAgICAgICAg ICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9y X2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0NCiAgICAgICAgICAgIH5f TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9j ay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQ0KICAgIH07DQoNCnB1YmxpYzoN Cg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICB7 DQogICAgdm9pZCogX19yZXQgPSAwOw0KDQogICAgaWYgKF9fbiA+IChzaXpl X3QpIF9NQVhfQllURVMpIHsNCiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9j OjphbGxvY2F0ZShfX24pOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIF9P YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1Nf ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCg0KDQoNCg0K DQogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7DQoNCiAgICAgIF9PYmoq IF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgaWYgKF9fcmVz dWx0ID09IDApDQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5k X3VwKF9fbikpOw0KICAgICAgZWxzZSB7DQogICAgICAgICpfX215X2ZyZWVf bGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOw0KICAgICAg ICBfX3JldCA9IF9fcmVzdWx0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJl dHVybiBfX3JldDsNCiAgfTsNCg0KDQogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgaWYgKF9fbiA+ IChzaXplX3QpIF9NQVhfQllURVMpDQogICAgICBtYWxsb2NfYWxsb2M6OmRl YWxsb2NhdGUoX19wLCBfX24pOw0KICAgIGVsc2Ugew0KICAgICAgX09iaiog dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0DQogICAgICAgICAgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAgICAgX09iaiog X19xID0gKF9PYmoqKV9fcDsNCg0KDQoNCg0KICAgICAgX0xvY2sgX19sb2Nr X2luc3RhbmNlOw0KDQogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsg PSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBf X3E7DQoNCiAgICB9DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6 KTsNCg0KfSA7DQoNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PHRydWUsIDA+IGFsbG9jOw0KdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7DQoNCnRlbXBs YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpDQp7DQog IHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhcioNCl9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2Fs bG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i anMpDQp7DQogICAgY2hhciogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fdG90 YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAgIHNpemVfdCBfX2J5 dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7DQoNCiAg ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsNCiAgICAg ICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOw0KICAgICAgICBfU19zdGFy dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7DQogICAgICAgIHJldHVybihfX3Jl c3VsdCk7DQogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXpl KSB7DQogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19z aXplKTsNCiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9i anM7DQogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAg ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICBy ZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHNpemVf dCBfX2J5dGVzX3RvX2dldCA9DQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0 ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7DQoNCiAgICAg ICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsNCiAgICAgICAgICAgIF9PYmoq IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9DQogICAgICAgICAgICAgICAg ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5 dGVzX2xlZnQpOw0KDQogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2Zy ZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0Ow0K ICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0 X2ZyZWU7DQogICAgICAgIH0NCiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj aGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOw0KICAgICAgICBpZiAoMCA9 PSBfU19zdGFydF9mcmVlKSB7DQogICAgICAgICAgICBzaXplX3QgX19pOw0K ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K ICAgICAgICAgICAgX09iaiogX19wOw0KDQoNCg0KICAgICAgICAgICAgZm9y IChfX2kgPSBfX3NpemU7DQogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6 ZV90KSBfTUFYX0JZVEVTOw0KICAgICAgICAgICAgICAgICBfX2kgKz0gKHNp emVfdCkgX0FMSUdOKSB7DQogICAgICAgICAgICAgICAgX19teV9mcmVlX2xp c3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOw0K ICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg ICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsNCiAgICAgICAgICAgICAgICAg ICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5r Ow0KICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIq KV9fcDsNCiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z dGFydF9mcmVlICsgX19pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4o X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7DQoNCg0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIF9TX2Vu ZF9mcmVlID0gMDsNCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh ciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQoN Cg0KDQogICAgICAgIH0NCiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0 ZXNfdG9fZ2V0Ow0KICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy ZWUgKyBfX2J5dGVzX3RvX2dldDsNCiAgICAgICAgcmV0dXJuKF9TX2NodW5r X2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KICAgIH0NCn0NCg0KDQoNCg0K DQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQp2b2lk Kg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0 Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pDQp7DQogICAgaW50IF9fbm9ianMg PSAyMDsNCiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u LCBfX25vYmpzKTsNCiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp c3Q7DQogICAgX09iaiogX19yZXN1bHQ7DQogICAgX09iaiogX19jdXJyZW50 X29iajsNCiAgICBfT2JqKiBfX25leHRfb2JqOw0KICAgIGludCBfX2k7DQoN CiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7DQogICAg X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9p bmRleChfX24pOw0KDQoNCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1 bms7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9P YmoqKShfX2NodW5rICsgX19uKTsNCiAgICAgIGZvciAoX19pID0gMTsgOyBf X2krKykgew0KICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsN CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9v YmogKyBfX24pOw0KICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7 DQogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9s aW5rID0gMDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9IGVsc2Ug ew0KICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3Rf bGluayA9IF9fbmV4dF9vYmo7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICBy ZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRz LCBpbnQgaW5zdD4NCnZvaWQqDQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX29sZF9zeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opDQp7 DQogICAgdm9pZCogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fY29weV9zejsN Cg0KICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYg X19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIHJl dHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsNCiAgICB9DQogICAgaWYg KF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19z eikpIHJldHVybihfX3ApOw0KICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19u ZXdfc3opOw0KICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/ IF9fb2xkX3N6IDogX19uZXdfc3o7DQogICAgbWVtY3B5KF9fcmVzdWx0LCBf X3AsIF9fY29weV9zeik7DQogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6 KTsNCiAgICByZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQoNCiAgICB0ZW1wbGF0 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgX1NUTF9tdXRl eF9sb2NrDQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaw0KICAgICAgICA9 IHsge3t7MH0sIDB9LCB7e3swfX19LCB7MH19IH07DQoNCg0KDQp0ZW1wbGF0 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFyKiBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFy dF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzaXplX3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z aXplID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p bnN0Pg0KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUNCl9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb DQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0Pjo6X05GUkVFTElTVFMNCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsNCiMgNTI2ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIg Mw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFsbG9jYXRvciB7DQog IHR5cGVkZWYgYWxsb2MgX0FsbG9jOw0KcHVibGljOg0KICB0eXBlZGVmIHNp emVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYg Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVm ZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxj bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9j YXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCg0KICBhbGxvY2F0b3IoKSB0aHJv dygpIHt9DQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygp IHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3Qg YWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQ0KICB+YWxsb2NhdG9yKCkg dGhyb3coKSB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194 KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRk cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194 OyB9DQoNCg0KDQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u c3Qgdm9pZCogPSAwKSB7DQogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGlj X2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1Rw KSkpDQogICAgICAgICAgICAgICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9p ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAg IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkp OyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0K ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQog IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBv aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZTw+ DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KcHVibGljOg0KICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOw0KICB0eXBl ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgdm9p ZCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1 Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhl cjsNCiAgfTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8 X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIHRy dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBj b25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0N CiMgNjAyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPg0Kc3RydWN0IF9fYWxsb2NhdG9yIHsNCiAgX0FsbG9jIF9fdW5k ZXJseWluZ19hbGxvYzsNCg0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw ZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z dF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBl ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1 Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9B bGxvYz4gb3RoZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygp IHt9DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRo cm93KCkNCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5 aW5nX2FsbG9jKSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4NCiAgX19h bGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19h KSB0aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k ZXJseWluZ19hbGxvYykge30NCiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7 fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7 IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25z dF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoNCg0K ICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g MCkgew0KICAgIHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0YXRpY19j YXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBz aXplb2YoX1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9pZCBk ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsg X191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl b2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0 aHJvdygpDQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHAp OyB9DQoNCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9U cCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQ0KICB2b2lkIGRl c3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0NCn07DQoNCnRl bXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBfX2FsbG9jYXRvcjx2b2lk LCBfQWxsb2M+IHsNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg dm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w b2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1w bGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0KICB9Ow0KfTsN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu X191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg X0FsbG9jPiYgX19hMSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQ0Kew0KICByZXR1cm4g X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdf YWxsb2M7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGludCBpbnN0Pg0KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxpbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikNCnsNCiAgcmV0dXJuIHRy dWU7DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sIG9w ZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7 DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxf QWxsb2M+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf YWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KIyA3MzIg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh dG9yPg0Kc3RydWN0IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7DQogIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVy IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jYXRvcj4NCmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7DQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0KICBzdGF0aWMgY29u c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNp bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxv Y190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g dHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc3RydWN0 IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 X190aHJlYWRzLCBfX2luc3Q+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+ID4NCiAgICAgICAgICBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBf X2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpz dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4g Pg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOw0KICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9j PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRv cjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsN Cn07DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAg ICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPg0Kew0KICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNpbXBs ZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g PiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg Ym9vbCBfX3RociwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwNCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3Rh dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQog IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgYWxsb2NhdG9yX3R5 cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAg c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAg dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQp9 DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAz NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2NvbnN0cnVjdC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9uZXciIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMNCg0K bmFtZXNwYWNlIHN0ZA0Kew0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgdm9pZCBfQ29uc3Ry dWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsNCm5ldyAoKHZv aWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9UMT4NCmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsNCiAg bmV3ICgodm9pZCopIF9fcCkgX1QxKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfVHA+DQppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikg ew0KICBfX3BvaW50ZXItPn5fVHAoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQpfX2Rlc3Ryb3lfYXV4KF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs IF9fZmFsc2VfdHlwZSkNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQ0KICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9p ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl cmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQNCl9fZGVz dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LCBfVHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcg0KICAgICAg ICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7DQogIF9fZGVzdHJveV9hdXgoX19m aXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCmlubGluZSB2b2lk IF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ dGVyYXRvciBfX2xhc3QpIHsNCiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFz dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KaW5saW5lIHZvaWQg X0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ry b3koaW50KiwgaW50Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcq LCBsb25nKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxv YXQqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91Ymxl Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90 Kikge30NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy Pg0KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDIm IF9fdmFsdWUpIHsNCiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPg0KaW5saW5lIHZvaWQgY29uc3RydWN0 KF9UMSogX19wKSB7DQogIF9Db25zdHJ1Y3QoX19wKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9UcD4NCmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3Bv aW50ZXIpIHsNCiAgX0Rlc3Ryb3koX19wb2ludGVyKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBkZXN0 cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QpIHsNCiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsNCn0N Cg0KfQ0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw ZXMuaCIgMSAzDQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0bF90ZW1wYnVmLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVt cGxhdGUgPGNsYXNzIF9UcD4NCnBhaXI8X1RwKiwgcHRyZGlmZl90Pg0KX19n ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopDQp7 DQogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9m KF9UcCkpKQ0KICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp Ow0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfVHAqIF9fdG1wID0g KF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOw0K ICAgIGlmIChfX3RtcCAhPSAwKQ0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwg cHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAgIF9fbGVuIC89IDI7DQog IH0NCg0KICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAs IDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIHBhaXI8 X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm X3QgX19sZW4pIHsNCiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo X19sZW4sIChfVHAqKSAwKTsNCn0NCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxj bGFzcyBfVHA+DQppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90 ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikgew0KICBy ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDAp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kdm9pZCByZXR1cm5fdGVt cG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgew0KICBmcmVlKF9fcCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+ DQpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7DQpwcml2YXRlOg0KICBwdHJk aWZmX3QgX01fb3JpZ2luYWxfbGVuOw0KICBwdHJkaWZmX3QgX01fbGVuOw0K ICBfVHAqIF9NX2J1ZmZlcjsNCg0KICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl cigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47DQogICAgX01f YnVmZmVyID0gMDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgy MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQ0KICAgICAgX01fbGVuID0gMjE0 NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hpbGUgKF9NX2xlbiA+ IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVu ICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZlcikNCiAgICAg ICAgYnJlYWs7DQogICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0K ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1 ZV90eXBlKSB7fQ0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0 IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsNCiAgICB1bmluaXRpYWxpemVk X2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0KDQpwdWJs aWM6DQogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVu OyB9DQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIF9NX29yaWdpbmFsX2xlbjsgfQ0KICBfVHAqIGJlZ2luKCkgeyByZXR1 cm4gX01fYnVmZmVyOyB9DQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVm ZmVyICsgX01fbGVuOyB9DQoNCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg ew0KDQogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46 Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3INCiAgICAgICAgICAg IF9Ucml2aWFsOw0KDQogICAgdHJ5IHsNCiAgICAgIF9NX2xlbiA9IDA7DQog ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7DQogICAg ICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsNCiAgICAgIGlmIChfTV9sZW4gPiAw KQ0KICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1Ry aXZpYWwoKSk7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1 ZmZlcik7IF9NX2J1ZmZlciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9Ow0K ICB9DQoNCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgew0KICAgIGRlc3Ryb3ko X01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOw0KICAgIGZyZWUoX01f YnVmZmVyKTsNCiAgfQ0KDQpwcml2YXRlOg0KDQogIF9UZW1wb3JhcnlfYnVm ZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCiAgdm9pZCBvcGVy YXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQ0KfTsNCg0KDQoN CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLA0KICAgICAgICAg IGNsYXNzIF9UcA0KICAgICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0K ICAgICAgICAgPg0Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMg X1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPg0Kew0K ICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQogICAgOiBfVGVtcG9yYXJ5X2J1 ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg e30NCiAgfnRlbXBvcmFyeV9idWZmZXIoKSB7fQ0KfTsNCg0KfQ0KIyAyNSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21l bW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM0ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p bml0aWFsaXplZC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5p dGlhbGl6ZWQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ dGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2Nv cHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K ew0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3 YXJkSXRlcj4NCl9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf YXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCnsN CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQog ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f Y3VyKQ0KICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQog ICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJv eShfX3Jlc3VsdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBf VHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw Pjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFs aXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNf UE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KICB1bmlu aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsNCn0NCg0KaW5s aW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2Zp cnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7DQogIG1lbW1vdmUoX19y ZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOw0KICByZXR1cm4g X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB3 Y2hhcl90Kg0KdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9f Zmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkNCnsNCiAgbWVtbW92ZShfX3Jlc3Vs dCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmly c3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIs IF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0 SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0ZvcndhcmRJ dGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQogICAgZm9yICggOyBf X2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQ0K ICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQogICAgcmV0 dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf X2N1cik7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0 LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+DQppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJ dGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICBy ZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigN CiAgICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1 bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0 ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBf X3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVz dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+ DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmlu aXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f Y291bnQsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m aXJzdCwgX19jb3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0K fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwPg0KaW5saW5lIHZvaWQNCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVl X3R5cGUpDQp7DQogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2 b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkNCnsNCiAg X0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsNCiAgdHJ5IHsNCiAgICBm b3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikNCiAgICAgIF9Db25z dHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rl c3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAx Pg0KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSop DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6 aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgX191bmluaXRpYWxpemVkX2ZpbGxf YXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOw0KDQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlu bGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChf X2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsN Cn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gZmlsbF9uKF9f Zmlyc3QsIF9fbiwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9Gb3J3YXJkSXRl cg0KX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJk SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICggOyBf X24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAgIF9Db25zdHJ1Y3QoJipf X2N1ciwgX194KTsNCiAgICByZXR1cm4gX19jdXI7DQogIH0NCiAgY2F0Y2go Li4uKSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl LCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+DQppbmxpbmUgX0ZvcndhcmRJdGVy DQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikNCnsNCiAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw ZSBfSXNfUE9EOw0KICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9h dXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf VHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQp1bmluaXRpYWxpemVkX2ZpbGxf bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAm IF9feCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoj IDIzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVy Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf Y29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkNCnsNCiAgX0Zvcndh cmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5p dGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOw0KICB9 DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0 aHJvdzsgfTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPg0KaW5saW5lIF9G b3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQogICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QpDQp7DQogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwg X19taWQsIF9feCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsNCiAgfQ0KICBjYXRj aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07 DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3Vu aW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J bnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7 DQogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsNCiAgdHJ5IHsNCiAgICB1 bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOw0KICB9 DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsg dGhyb3c7IH07DQp9DQoNCn0NCiMgMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdf c3RvcmFnZV9pdGVyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xhc3MgcmF3X3N0b3JhZ2VfaXRl cmF0b3Igew0KcHJvdGVjdGVkOg0KICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0 ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7 DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQog IGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0 b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQ0KICByYXdfc3RvcmFnZV9pdGVy YXRvciYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu dCkgew0KICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7DQog ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIHJhd19zdG9yYWdlX2l0ZXJhdG9y PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yKysoKSB7DQogICAg KytfTV9pdGVyOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3Rv cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IG9wZXJhdG9y KysoaW50KSB7DQogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ dGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOw0KICAgICsrX01faXRlcjsN CiAgICByZXR1cm4gX190bXA7DQogIH0NCn07DQoNCg0KfQ0KIyAyNyAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9y eS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogdGVtcGxhdGU8Y2xh c3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7DQogICBfVHAxKiBfTV9w dHI7DQogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3Ap IHt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0 ciB7DQpwcml2YXRlOg0KICBfVHAqIF9NX3B0cjsNCg0KcHVibGljOg0KICB0 eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7DQoNCiAgZXhwbGljaXQgYXV0b19w dHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30NCiAg YXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2Eu cmVsZWFzZSgpKSB7fQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRv X3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpDQogICAgOiBfTV9w dHIoX19hLnJlbGVhc2UoKSkge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9 KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxl YXNlKCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRl IDxjbGFzcyBfVHAxPg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRy PF9UcDE+JiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxlYXNl KCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQoNCg0KDQoNCiAgfmF1 dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9DQoNCiAgX1RwJiBvcGVyYXRv ciooKSBjb25zdCB0aHJvdygpIHsNCiAgICByZXR1cm4gKl9NX3B0cjsNCiAg fQ0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsNCiAgICBy ZXR1cm4gX01fcHRyOw0KICB9DQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co KSB7DQogICAgcmV0dXJuIF9NX3B0cjsNCiAgfQ0KICBfVHAqIHJlbGVhc2Uo KSB0aHJvdygpIHsNCiAgICBfVHAqIF9fdG1wID0gX01fcHRyOw0KICAgIF9N X3B0ciA9IDA7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIHZvaWQgcmVz ZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsNCiAgICBpZiAoX19wICE9IF9N X3B0cikgew0KICAgICAgZGVsZXRlIF9NX3B0cjsNCiAgICAgIF9NX3B0ciA9 IF9fcDsNCiAgICB9DQogIH0NCg0KDQoNCg0KDQpwdWJsaWM6DQogIGF1dG9f cHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpDQogICAgOiBf TV9wdHIoX19yZWYuX01fcHRyKSB7fQ0KDQogIGF1dG9fcHRyJiBvcGVyYXRv cj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgew0KICAgIGlm IChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpIHsNCiAgICAgIGRlbGV0 ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7DQogICAg fQ0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygp DQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFz ZSgpKTsgfQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0 b19wdHI8X1RwMT4oKSB0aHJvdygpDQogICAgeyByZXR1cm4gYXV0b19wdHI8 X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQ0KfTsNCg0KfQ0KIyA0NCAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmlu Zy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDQ1ICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zZndkLmgiIDEgMw0KIyA0NiAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy aXMyLjcvYml0cy9hdG9taWNpdHkuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv Yml0cy9hdG9taWNpdHkuaCIgMw0KdHlwZWRlZiBpbnQgX0F0b21pY193b3Jk Ow0KDQpzdGF0aWMgaW50DQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykp DQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCog X19tZW0sIGludCBfX3ZhbCkNCnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIg X19sb2NrOw0KICBfQXRvbWljX3dvcmQgX19yZXN1bHQsIF9fdG1wOw0KDQog IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0 Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y eSIpOw0KICBfX3Jlc3VsdCA9ICpfX21lbTsNCiAgKl9fbWVtICs9IF9fdmFs Ow0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiCSUlZzAsIFslMF0iDQog ICAgICAgICAgICAgICAgICAgICAgIDoNCiAgICAgICAgICAgICAgICAgICAg ICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDog Im1lbW9yeSIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnN0YXRpYyB2 b2lkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2F0b21pY19h ZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkN CnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgX19sb2NrOw0KICBfQXRvbWlj X3dvcmQgX190bXA7DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxk c3R1YglbJTFdLCAlMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJ Y21wCSUwLCAwXG5cdCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJ MWJcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAg ICAgICAgICAgICAgICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAg ICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAg ICAgICAgICAgOiAibWVtb3J5Iik7DQogICpfX21lbSArPSBfX3ZhbDsNCiAg X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v cnkiKTsNCn0NCg0Kc3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51 c2VkX18pKQ0KX19jb21wYXJlX2FuZF9zd2FwICh2b2xhdGlsZSBsb25nICpf X3AsIGxvbmcgX19vbGR2YWwsIGxvbmcgX19uZXd2YWwpDQp7DQogIHN0YXRp YyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgbG9uZyBfX3JldCwgX190bXA7 DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxkc3R1YglbJTFdLCAl MFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJY21wCSUwLCAwXG5c dCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0Ig0KICAg ICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAgICAgICAgICAgICAg ICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAgICAgICAgICAgICAg ICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi bWVtb3J5Iik7DQogIGlmICgqX19wICE9IF9fb2xkdmFsKQ0KICAgIF9fcmV0 ID0gMDsNCiAgZWxzZQ0KICAgIHsNCiAgICAgICpfX3AgPSBfX25ld3ZhbDsN CiAgICAgIF9fcmV0ID0gMTsNCiAgICB9DQogIF9fYXNtX18gX192b2xhdGls ZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAgICAgICAgICAgICAg Og0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAg ICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7DQoNCiAgcmV0dXJu IF9fcmV0Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMw0KDQpuYW1lc3BhY2Ug c3RkDQp7DQojIDgzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N CiAgICBjbGFzcyBiYXNpY19zdHJpbmcNCiAgICB7DQoNCiAgICBwdWJsaWM6 DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl Ow0KICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNl X3R5cGUgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVy ZW5jZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVy IHBvaW50ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29u c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOw0KICAgICAgdHlwZWRlZiBfX25v cm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9y Ow0KICAgICAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2lu dGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9yOw0KICAgICAgdHlw ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQogICAgcHJpdmF0 ZToNCiMgMTE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICAgICAgc3RydWN0IF9SZXANCiAg ICAgIHsNCg0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVi aW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOw0KIyAxMzYgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAzDQogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1Nf bWF4X3NpemU7DQogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVy bWluYWw7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsNCiAgICAg ICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5Ow0KICAgICAgICBfQXRvbWljX3dv cmQgX01fcmVmZXJlbmNlczsNCg0KICAgICAgICBib29sDQogICAgICAgIF9N X2lzX2xlYWtlZCgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVy ZW5jZXMgPCAwOyB9DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19z aGFyZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz ID4gMDsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X2xlYWtl ZCgpDQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9DQoNCiAgICAg ICAgdm9pZA0KICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQ0KICAgICAgICB7 IF9NX3JlZmVyZW5jZXMgPSAwOyB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAg ICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBy ZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0NCg0KICAg ICAgICBfQ2hhclQmDQogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykg dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107 IH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2dyYWIoY29uc3Qg X0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikNCiAg ICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9 PSBfX2FsbG9jMikgPw0KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01f Y2xvbmUoX19hbGxvYzEpOyB9DQoNCg0KICAgICAgICBzdGF0aWMgX1JlcCoN CiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7DQoN CiAgICAgICAgdm9pZA0KICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxv YyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fZXhjaGFuZ2Vf YW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApDQogICAgICAgICAg ICBfTV9kZXN0cm95KF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgICB2b2lk DQogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsN Cg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJv dygpDQogICAgICAgIHsNCiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3Jl ZmVyZW5jZXMsIDEpOw0KICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7 DQogICAgICAgIH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2Ns b25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOw0KIyAy MDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh c2ljX3N0cmluZy5oIiAzDQogICAgICAgIGlubGluZSBzdGF0aWMgYm9vbA0K ICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7DQoNCiAg ICAgIH07DQoNCg0KICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxv Yw0KICAgICAgew0KICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2Rh dCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIDogX0FsbG9jKF9fYSks IF9NX3AoX19kYXQpIHsgfQ0KDQogICAgICAgIF9DaGFyVCogX01fcDsNCiAg ICAgIH07DQoNCiAgICBwdWJsaWM6DQoNCg0KDQogICAgICBzdGF0aWMgY29u c3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x KTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIG11dGFibGUgX0FsbG9jX2hp ZGVyIF9NX2RhdGFwbHVzOw0KDQoNCg0KICAgICAgc3RhdGljIHNpemVfdHlw ZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9m KF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXpl X3R5cGUpXTsNCg0KICAgICAgX0NoYXJUKg0KICAgICAgX01fZGF0YSgpIGNv bnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9DQoNCiAg ICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApDQogICAg ICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0NCg0KICAg ICAgX1JlcCoNCiAgICAgIF9NX3JlcCgpIGNvbnN0DQogICAgICB7IHJldHVy biAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd KTsgfQ0KDQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9NX2liZWdpbigp IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAg ICAgaXRlcmF0b3INCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBp dGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9DQoNCiAgICAg IHZvaWQNCiAgICAgIF9NX2xlYWsoKQ0KICAgICAgew0KICAgICAgICBpZiAo IV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgICBfTV9sZWFr X2hhcmQoKTsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9N X2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAgICAgIHsNCiAgICAg ICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7DQog ICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOw0KICAgICAgfQ0K DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdA0KICAgICAgew0KICAgICAg ICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19w b3M7DQogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/ IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7DQogICAgICAgIHJldHVy biAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsNCiAgICAgIH0N Cg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4NCiAgICAg ICAgc3RhdGljIHZvaWQNCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq IF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQ0KICAgICAg ICB7DQogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCAr K19fcCkNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwg Kl9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAg ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBp dGVyYXRvciBfX2syKQ0KICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19r MS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQ0KDQogICAgICBzdGF0aWMgdm9p ZA0KICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRl cmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAgICAgIHsgX1Nf Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0N Cg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0No YXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQ0KICAgICAg eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsg fQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfY29weV9jaGFycyhf Q2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQq IF9fazIpDQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwg X19rMiAtIF9fazEpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX211dGF0 ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw ZSBfX2xlbjIpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9sZWFrX2hhcmQo KTsNCg0KICAgICAgc3RhdGljIF9SZXAmDQogICAgICBfU19lbXB0eV9yZXAo KQ0KICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZf U19lbXB0eV9yZXBfc3RvcmFnZSk7IH0NCg0KICAgIHB1YmxpYzoNCg0KDQoN Cg0KICAgICAgaW5saW5lDQogICAgICBiYXNpY19zdHJpbmcoKTsNCg0KICAg ICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm IF9fYSk7DQoNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpOw0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAg ICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7DQogICAgICBiYXNpY19z dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zLA0KICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0 IF9BbGxvYyYgX19hKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uLA0KICAgICAgICAgICAgICAgICAg IGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KICAgICAgYmFzaWNf c3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9 IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsN Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAg ICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5w dXRJdGVyYXRvciBfX2VuZCwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KDQogICAgICB+YmFzaWNfc3Ry aW5nKCkNCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0 X2FsbG9jYXRvcigpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg ICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1 cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQ0KDQogICAgICBiYXNpY19zdHJp bmcmDQogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0 dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmlu ZyYNCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz LT5hc3NpZ24oMSwgX19jKTsgfQ0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAg ICBiZWdpbigpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg ICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7DQogICAgICB9DQoNCiAg ICAgIGNvbnN0X2l0ZXJhdG9yDQogICAgICBiZWdpbigpIGNvbnN0DQogICAg ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAg ICAgIGl0ZXJhdG9yDQogICAgICBlbmQoKQ0KICAgICAgew0KICAgICAgICAg X01fbGVhaygpOw0KICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo KSArIHRoaXMtPnNpemUoKSk7DQogICAgICB9DQoNCiAgICAgIGNvbnN0X2l0 ZXJhdG9yDQogICAgICBlbmQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29u c3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQog ICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICByYmVnaW4oKQ0KICAgICAg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0NCg0K ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkg Y29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io dGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3INCiAg ICAgIHJlbmQoKQ0KICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0 aGlzLT5iZWdpbigpKTsgfQ0KDQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yDQogICAgICByZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0NCg0KICAgIHB1 YmxpYzoNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBzaXplKCkgY29uc3Qg eyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQ0KDQogICAgICBzaXpl X3R5cGUNCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgp LT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBtYXhf c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9DQoN CiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jKTsNCg0KICAgICAgdm9pZA0KICAgICAgcmVzaXplKHNpemVfdHlw ZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9DQoNCiAg ICAgIHNpemVfdHlwZQ0KICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVy biBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0NCg0KICAgICAgdm9pZA0KICAg ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7DQoNCiAgICAg IHZvaWQNCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6 ZSgpLCAwKTsgfQ0KDQogICAgICBib29sDQogICAgICBlbXB0eSgpIGNvbnN0 IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9DQoNCg0KICAgICAgY29u c3RfcmVmZXJlbmNlDQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19w b3MpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9 DQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShzaXplX3R5 cGUgX19wb3MpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg ICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107DQogICAgICB9DQoNCiAgICAg IGNvbnN0X3JlZmVyZW5jZQ0KICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29u c3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkp DQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu Zzo6YXQiKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOw0KICAg ICAgfQ0KDQogICAgICByZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBf X24pDQogICAgICB7DQogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQ0KICAg ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0 Iik7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAgICAgcmV0dXJuIF9NX2Rh dGEoKVtfX25dOw0KICAgICAgfQ0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyYN CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQ0KDQogICAgICBiYXNp Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19z KSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQ0KDQogICAgICBiYXNp Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0 dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0NCg0KICAg ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBh cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K ICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u KTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0 IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9f cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBiYXNp Y19zdHJpbmcmDQogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y Pg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIGFwcGVuZChfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQog ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAg ICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpDQogICAgICB7IHRoaXMtPnJlcGxh Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0NCg0KICAgICAg YmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3Np Z24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhp cy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwgX19zdHIuX01fZm9s ZChfX3BvcywgX19uKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmlu ZyYNCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyAr IF9fbik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWdu KGNvbnN0IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXNz aWduKF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24oc2l6ZV90eXBl IF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9DQoNCiAg ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi YXNpY19zdHJpbmcmDQogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQogICAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19m aXJzdCwgX19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbnNlcnQo aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAg ICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0NCg0K ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgICAg IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19i ZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQ0KICAgICAgICB7IHRoaXMtPnJl cGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0NCg0KICAgICAgYmFz aWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAgICAgIGl0 ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQogICAgICAgIHRoaXMt PnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdpbigpLCBfX3N0ci5f TV9pZW5kKCkpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoN CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUg X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAg ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pDQogICAgICB7 DQogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQog ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2NoZWNr KF9fcG9zMiksDQogICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9s ZChfX3BvczIsIF9fbikpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAg ICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXpl X3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u KQ0KICAgICAgew0KICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhf X3Bvcyk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fcywg X19zICsgX19uKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRo aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpDQog ICAgICB7DQogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks IF9fbiwgX19jKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K DQogICAgICBpdGVyYXRvcg0KICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwg X0NoYXJUIF9fYyA9IF9DaGFyVCgpKQ0KICAgICAgew0KICAgICAgICBzaXpl X3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhp cy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2Mp Ow0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAg ICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0N Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgZXJhc2Uoc2l6ZV90eXBl IF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpDQogICAgICB7DQog ICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg X01fZm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAg ICBpdGVyYXRvcg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikN CiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24g LSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0 aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0K ICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgICBy ZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7DQogICAgICB9DQoNCiAgICAgIGl0 ZXJhdG9yDQogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv ciBfX2xhc3QpDQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBf X2ZpcnN0IC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2Uo X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7DQogICAg ICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAgICAgcmV0dXJu IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19z dHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikNCiAgICAgIHsN CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp LCBfTV9mb2xkKF9fcG9zLCBfX24pLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOw0KICAgICAg fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf dHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz aXplX3R5cGUgX19uMik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u c3QgX0NoYXJUKiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24y KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOw0KICAgICAg fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYN CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u MSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgICB7DQogICAg ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f Zm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7DQogICAgICB9DQoNCiAg ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikN CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0 cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0NCg0KICAg ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVu Z3RoKF9fcykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBl IF9fbiwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAg IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwNCiAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv ciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9f aTIsIF9fazEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnko KSk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBf SW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAg ICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9J bnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAg dGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19z dHJpbmcmDQogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAg ICAgICAgX0Z3ZEl0ZXJhdG9yIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFn KTsNCg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+DQogICAg ICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgo X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBf X2EsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQ0K ICAgICAgICB7DQogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7DQog ICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9f YSwgX1RhZygpKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1wbGF0ZTxjbGFz cyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICBf U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAg IF9fdHJ1ZV90eXBlKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIF9T X2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVl X3R5cGU+KF9fZW5kKSwgX19hKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1w bGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0K ICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBf X2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIHsNCiAgICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50 ZWdyYWwgX0ludGVncmFsOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1 Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7DQogICAg ICAgIH0NCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAg ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICAgX1NfY29uc3RydWN0KF9J bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LA0KICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7 DQoNCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4NCiAgICAg ICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJ dGVyIF9fZW5kLCBfRndkSXRlciBfX2JlZywgY29uc3QgX0FsbG9jJiBfX2Es DQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7 DQoNCiAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICBfU19jb25zdHJ1Y3Qo c2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f YSk7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAg Y29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9f cG9zID0gMCkgY29uc3Q7DQoNCiAgICAgIHZvaWQNCiAgICAgIHN3YXAoYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsNCg0K DQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBjX3N0cigpIGNvbnN0DQog ICAgICB7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUo KTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u XSwgX1JlcDo6X1NfdGVybWluYWwpOw0KICAgICAgICByZXR1cm4gX01fZGF0 YSgpOw0KICAgICAgfQ0KDQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBk YXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9DQoNCiAgICAgIGFs bG9jYXRvcl90eXBlDQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy ZXR1cm4gX01fZGF0YXBsdXM7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19z dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz aXplX3R5cGUNCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5m aW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0N Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNp emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUN CiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz LT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7 IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZp bmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0 ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNp emVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0K ICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFp dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2Ms IF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFz dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9s YXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0N Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg Y29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29m KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywg X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAg c2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJmaW5kKF9fYywgX19wb3MpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w b3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl IF9fbikgY29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9m aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0 X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rf b2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7DQoN CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9v ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsNCiAgICAgIHNpemVfdHlw ZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJu IHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z ID0gbnBvcykgY29uc3Q7DQoNCiAgICAgIGJhc2ljX3N0cmluZw0KICAgICAg c3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu cG9zKSBjb25zdA0KICAgICAgew0KICAgICAgICBpZiAoX19wb3MgPiB0aGlz LT5zaXplKCkpDQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6c3Vic3RyIik7DQogICAgICAgIHJldHVybiBiYXNpY19z dHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOw0KICAgICAgfQ0KDQogICAgICBp bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg Y29uc3QNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0 ci5zaXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Np emUsIF9fb3NpemUpOw0KDQogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw ZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOw0K ICAgICAgICBpZiAoIV9fcikNCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBf X29zaXplOw0KICAgICAgICByZXR1cm4gX19yOw0KICAgICAgfQ0KDQogICAg ICBpbnQNCiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsNCg0K ICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNp emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAg ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikg Y29uc3Q7DQoNCiAgICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hh clQqIF9fcykgY29uc3Q7DQoNCg0KDQogICAgICBpbnQNCiAgICAgIGNvbXBh cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJU KiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsN Cg0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJh c2ljX3N0cmluZygpDQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0NCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQ0KICAgIHsNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5k KF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz LF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywN CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh aXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9w ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7DQogICAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAg ICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0 b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRl ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry aW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5 cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc3RyaW5nX3R5 cGUgX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90 eXBlKDEpLCBfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBv cGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I9 PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl cmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN CiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl cmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0g MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog ICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo cykgIT0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg b3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog ICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp ID4gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJv b2wNCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg b3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwg MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN CiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp DQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl cmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog ICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpDQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp ID49IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAg IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp ID49IDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9v bA0KICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f bGhzKSA8PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp bmUgdm9pZA0KICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IF9fbGhzLnN3 YXAoX19yaHMpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywNCiAgICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh clQgX19kZWxpbSk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jg0KICAgIGdldGxpbmUo YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19zdHIpOw0KfQ0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCg0KDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0 aG0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDMNCg0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0Lmgi IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDEgMw0KIyAz NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ28uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMNCm5h bWVzcGFjZSBzdGQNCnsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0K dm9pZA0KX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsDQogICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0 YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rpc3RhbmNl IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB3aGlsZSAo X19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFy ZW50KSA8IF9fdmFsdWUpIHsNCiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7DQogICAgX19ob2xlSW5kZXgg PSBfX3BhcmVudDsNCiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp IC8gMjsNCiAgfQ0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh bHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lk DQpfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19m aXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz dGFuY2UoMCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+ DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0Kew0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3B1c2hfaGVhcF9hdXgoX19m aXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90 eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9UcCwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFy ZT4NCnZvaWQNCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICBf RGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4 IC0gMSkgLyAyOw0KICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4 ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7 DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg X19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7DQogICAg X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7DQogIH0NCiAgKihf X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh cmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpp bmxpbmUgdm9pZA0KX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwNCiAgICAgICAgICAg ICAgICBfRGlzdGFuY2UqLCBfVHAqKQ0Kew0KICBfX3B1c2hfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0 YW5jZSgwKSwNCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpwdXNoX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgX0NvbXBhcmUgX19jb21w KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN CiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLA0K ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBf X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz IF9UcD4NCnZvaWQNCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwNCiAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rp c3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNl IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGls ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKCooX19maXJz dCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hp bGQgLSAxKSkpDQogICAgICBfX3NlY29uZENoaWxkLS07DQogICAgKihfX2Zp cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls ZCk7DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOw0KICAgIF9f c2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgfQ0K ICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgew0KICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk IC0gMSkpOw0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7 DQogIH0NCiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9f dG9wSW5kZXgsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j ZT4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0K ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9U cCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQ0Kew0KICAqX19yZXN1bHQgPSAqX19m aXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCks IF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz IF9UcD4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwNCiAgICAgICAgICAgICAgIF9UcCopDQp7DQogIF9fcG9wX2hlYXAo X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwNCiAgICAgICAgICAg ICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0 KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+DQppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K DQogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90 eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkDQpfX2FkanVzdF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19o b2xlSW5kZXgsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1Rw IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9f dG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNlIF9fc2Vjb25k Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGlsZSAoX19zZWNv bmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKF9fY29tcCgqKF9fZmlyc3Qg KyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg LSAxKSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp Ow0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3Nl Y29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAg aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAt IDEpKTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0K ICB9DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv cEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2 b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf Q29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQog ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBfX2FkanVzdF9oZWFwKF9fZmly c3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp LA0KICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9h dXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29t cGFyZSBfX2NvbXApDQp7DQogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0 IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAs DQogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh c3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcG9wX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BvcF9oZWFw X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwg X19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkDQpf X21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCos IF9EaXN0YW5jZSopDQp7DQogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg cmV0dXJuOw0KICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0 Ow0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0KDQog IHdoaWxlICh0cnVlKSB7DQogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf X3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsN CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAgIF9fcGFyZW50 LS07DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj4NCmlubGluZSB2b2lkDQptYWtlX2hlYXAoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh c3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fbWFrZV9oZWFw KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBl KF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf Q29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j ZT4NCnZvaWQNCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0K ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsNCiAgX0Rpc3Rh bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX0Rpc3RhbmNlIF9f cGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGlsZSAodHJ1ZSkgew0K ICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBf VHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwNCiAgICAgICAgICAgICAgICAg IF9fY29tcCk7DQogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAg ICBfX3BhcmVudC0tOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZv aWQNCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwN CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0Kdm9pZCBzb3J0X2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVhcChfX2Zp cnN0LCBfX2xhc3QtLSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0Kc29ydF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVh cChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsNCn0NCg0KfQ0KIyAzNSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z28uaCIgMiAzDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4o Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9f YykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChfX2EgPCBfX2Ip DQogICAgaWYgKF9fYiA8IF9fYykNCiAgICAgIHJldHVybiBfX2I7DQogICAg ZWxzZSBpZiAoX19hIDwgX19jKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBl bHNlDQogICAgICByZXR1cm4gX19hOw0KICBlbHNlIGlmIChfX2EgPCBfX2Mp DQogICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19iIDwgX19jKQ0KICAg IHJldHVybiBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBj b25zdCBfVHAmDQpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApDQp7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChf X2NvbXAoX19hLCBfX2IpKQ0KICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0K ICAgICAgcmV0dXJuIF9fYjsNCiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBf X2MpKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBlbHNlDQogICAgICByZXR1 cm4gX19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQ0KICAgIHJl dHVybiBfX2E7DQogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpDQogICAg cmV0dXJuIF9fYzsNCiAgZWxzZQ0KICAgIHJldHVybiBfX2I7DQp9DQoNCg0K dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4N Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQ0Kew0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QpDQogICAgX19mKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fZjsNCn0N Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+ DQppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZykNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0 ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQ0KICAgICsrX19maXJzdDsNCiAg cmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgq X19maXJzdCkpDQogICAgKytfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdDsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAg ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7 DQogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQNCiAgICA9IChfX2xh c3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQogIGZvciAoIDsgX190cmlwX2NvdW50 ID4gMCA7IC0tX190cmlwX2NvdW50KSB7DQogICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAg ICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0 dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYgKCpfX2Zp cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7 DQogIH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNl IDM6DQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsNCiAgICArK19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoKl9fZmly c3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsN CiAgY2FzZSAxOg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu IF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1 bHQ6DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpf UmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0K ew0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19s YXN0IC0gX19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3Vu dCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAg KytfX2ZpcnN0Ow0KDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy biBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQog IH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNlIDM6 DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K ICAgICsrX19maXJzdDsNCiAgY2FzZSAyOg0KICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh c2UgMToNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1bHQ6DQog ICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQppbmxpbmUgX0lu cHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFz dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0N Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2Fy ZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KQ0KICAgIHJldHVybiBfX2xhc3Q7DQogIF9Gb3J3YXJkSXRlciBfX25l eHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsN CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkNCiAgICAgIHJldHVybiBf X2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQogIH0NCiAgcmV0dXJu IF9fbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciBhZGphY2Vu dF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIg X19uZXh0ID0gX19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0 KSB7DQogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQp KQ0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgX19maXJzdCA9IF9fbmV4 dDsNCiAgfQ0KICByZXR1cm4gX19sYXN0Ow0KfQ0KDQoNCg0KDQoNCg0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf U2l6ZT4NCnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLA0KICAgICAgICAgICBf U2l6ZSYgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0 ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXpl Pg0Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAgICAgICAgICAg X1NpemUmIF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgKytf X247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf VHA+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp ZmZlcmVuY2VfdHlwZQ0KY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOw0KICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0 ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCiAgcmV0dXJuIF9fbjsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNh dGU+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp ZmZlcmVuY2VfdHlwZQ0KY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9fbiA9IDA7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsr X19uOw0KICByZXR1cm4gX19uOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3 YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCg0KICBpZiAo X19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0K ICAgIHJldHVybiBfX2ZpcnN0MTsNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX190 bXAoX19maXJzdDIpOw0KICArK19fdG1wOw0KICBpZiAoX190bXAgPT0gX19s YXN0MikNCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9f Zmlyc3QyKTsNCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoN CiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVy MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSkgew0KICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwg X19sYXN0MSwgKl9fZmlyc3QyKTsNCiAgICBpZiAoX19maXJzdDEgPT0gX19s YXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQogICAgX19wID0gX19w MTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCiAgICBpZiAoKytfX2N1 cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQog ICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgew0KICAgICAgaWYgKCsr X19wID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1 cm4gX19sYXN0MTsNCiAgICB9DQoNCiAgICArK19fZmlyc3QxOw0KICB9DQog IHJldHVybiBfX2ZpcnN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQ cmVkPg0KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19w cmVkaWNhdGUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KDQoNCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg PT0gX19sYXN0MikNCiAgICByZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9y d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYg KF9fdG1wID09IF9fbGFzdDIpIHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp KQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICByZXR1cm4gX19maXJzdDE7DQog IH0NCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoNCiAgX19w MSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVyMSBfX2N1 cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSkgew0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7DQog ICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0K ICAgICAgICBicmVhazsNCiAgICAgICsrX19maXJzdDE7DQogICAgfQ0KICAg IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgq X19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICArK19fZmlyc3QxOw0KICAg IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgcmV0dXJuIF9fbGFz dDE7DQoNCiAgICBfX3AgPSBfX3AxOw0KICAgIF9fY3VycmVudCA9IF9fZmly c3QxOw0KICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4g X19sYXN0MTsNCg0KICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50 LCAqX19wKSkgew0KICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpDQogICAg ICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgICAgIGlmICgrK19fY3VycmVudCA9 PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQoN CiAgICArK19fZmlyc3QxOw0KICB9DQogIHJldHVybiBfX2ZpcnN0MTsNCn0N Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9J bnRlZ2VyLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1Rw JiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGlmIChf X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOw0K ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVn ZXIgX19uID0gX19jb3VudCAtIDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19p ID0gX19maXJzdDsNCiAgICAgICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAh PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgew0KICAg ICAgICArK19faTsNCiAgICAgICAgLS1fX247DQogICAgICB9DQogICAgICBp ZiAoX19uID09IDApDQogICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg ZWxzZQ0KICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192 YWwpOw0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBj bGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQcmVkPg0KX0ZvcndhcmRJdGVyIHNl YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQs IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgX0Jp bmFyeVByZWQgX19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChf X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgaWYgKF9f YmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkNCiAgICAgICAgYnJlYWs7 DQogICAgICArK19fZmlyc3Q7DQogICAgfQ0KICAgIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt IDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAg ICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9 IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsNCiAgICAgICAg KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2Ug ew0KICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgew0KICAgICAgICAg IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkNCiAgICAgICAgICAg IGJyZWFrOw0KICAgICAgICAgICsrX19pOw0KICAgICAgICB9DQogICAgICAg IF9fZmlyc3QgPSBfX2k7DQogICAgICB9DQogICAgfQ0KICAgIHJldHVybiBf X2xhc3Q7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMiBz d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MikNCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f Zmlyc3QyKTsNCiAgcmV0dXJuIF9fZmlyc3QyOw0KfQ0KDQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz cyBfVW5hcnlPcGVyYXRpb24+DQpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl cmF0aW9uIF9fdW5hcnlfb3ApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCg0KDQoNCg0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5 X29wKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj bGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5T3Bl cmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jl c3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9u IF9fYmluYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9f Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsr X19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmly c3QxLCAqX19maXJzdDIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2 b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1 ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xk X3ZhbHVlKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0 ZSwgY2xhc3MgX1RwPg0Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKF9fcHJl ZCgqX19maXJzdCkpDQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1 dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs ICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19v bGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Ow0KICByZXR1cm4g X19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1Rw Pg0KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg X19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAg ICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6 ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPg0K dm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgKl9fZmly c3QgPSBfX2dlbigpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPg0KX091dHB1dEl0 ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s IF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCg0KDQoNCg0KDQogIGZvciAoIDsg X19uID4gMDsgLS1fX24sICsrX19maXJzdCkNCiAgICAqX19maXJzdCA9IF9f Z2VuKCk7DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf VHA+DQpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkN CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBpZiAoISgqX19maXJzdCA9PSBf X3ZhbHVlKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg ICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0 ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpfT3V0cHV0SXRlciByZW1vdmVfY29w eV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBp ZiAoIV9fcHJlZCgqX19maXJzdCkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBf X3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fZmlyc3QgPSBmaW5kKF9fZmly c3QsIF9fbGFzdCwgX192YWx1ZSk7DQogIF9Gb3J3YXJkSXRlciBfX2kgPSBf X2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0 DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsr X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX0Zv cndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0g ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7DQogIF9Gb3J3YXJk SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xh c3QgPyBfX2ZpcnN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJl bW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7 DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVl X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9UcCopDQp7DQoNCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg Kl9fcmVzdWx0ID0gX192YWx1ZTsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpDQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsNCiAg ICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICorK19fcmVzdWx0ID0g X192YWx1ZTsNCiAgICB9DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+ DQppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf dGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+DQpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJh dG9yX3RhZykNCnsNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCEoKl9fcmVzdWx0 ID09ICpfX2ZpcnN0KSkNCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7 DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1 dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgcmV0 dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwN CiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf X3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsDQog ICAgICAgICAgY2xhc3MgX1RwPg0KX091dHB1dEl0ZXIgX191bmlxdWVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2JpbmFyeV9wcmVkLCBfVHAqKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmly c3Q7DQogICpfX3Jlc3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQ0KICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl LCAqX19maXJzdCkpIHsNCiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg ICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICB9DQogIHJldHVybiAr K19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpp bmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f YmluYXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1 ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3By ZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9y d2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogICpfX3Jlc3VsdCA9ICpfX2Zp cnN0Ow0KICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAo IV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVz dWx0ID0gKl9fZmlyc3Q7DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX091dHB1dEl0ZXIg dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmlu YXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3Qp Ow0KICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2Zp cnN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl ZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19maXJzdCA9IGFkamFjZW50X2Zp bmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsNCiAgcmV0dXJu IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5h cnlfcHJlZCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0 aW9uYWxJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgew0KICB3aGls ZSAodHJ1ZSkNCiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJz dCA9PSAtLV9fbGFzdCkNCiAgICAgIHJldHVybjsNCiAgICBlbHNlDQogICAg ICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQp2b2lkIF9fcmV2ZXJzZShf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykgew0KICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkNCiAgICBpdGVy X3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+DQppbmxpbmUgdm9pZCByZXZlcnNl KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ dGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIC0tX19sYXN0Ow0KICAgICpf X3Jlc3VsdCA9ICpfX2xhc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0V1 Y2xpZGVhblJpbmdFbGVtZW50Pg0KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9f Z2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikNCnsN CiAgd2hpbGUgKF9fbiAhPSAwKSB7DQogICAgX0V1Y2xpZGVhblJpbmdFbGVt ZW50IF9fdCA9IF9fbSAlIF9fbjsNCiAgICBfX20gPSBfX247DQogICAgX19u ID0gX190Ow0KICB9DQogIHJldHVybiBfX207DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJk SXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UqLA0KICAgICAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9 PSBfX21pZGRsZSkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0 ID09IF9fbWlkZGxlKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9Gb3J3 YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOw0KICBkbyB7DQogICAgc3dh cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICB9 IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOw0KDQogIF9Gb3J3YXJkSXRl ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0Ow0KDQogIF9fZmlyc3QyID0gX19t aWRkbGU7DQoNCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgew0KICAg IHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsNCiAgICBpZiAoX19m aXJzdCA9PSBfX21pZGRsZSkNCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7 DQogICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQ0KICAgICAgX19m aXJzdDIgPSBfX21pZGRsZTsNCiAgfQ0KDQogIHJldHVybiBfX25ld19taWRk bGU7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl ciwgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90 YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSosDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAg ICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQ0K ICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBf X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogIF9f cmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZygpKTsNCg0KICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAm JiBfX21pZGRsZSAhPSBfX2xhc3QpDQogICAgc3dhcCAoKl9fZmlyc3QrKywg Ki0tX19sYXN0KTsNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgew0K ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZygpKTsNCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQog IGVsc2Ugew0KICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fZmly c3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCl9SYW5kb21BY2Nl c3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSAqLCBfVHAgKikNCnsNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9f Zmlyc3Q7DQogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7 DQogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7DQogIF9SYW5kb21BY2Nl c3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRs ZSk7DQoNCiAgaWYgKF9fayA9PSAwKQ0KICAgIHJldHVybiBfX2xhc3Q7DQoN CiAgZWxzZSBpZiAoX19rID09IF9fbCkgew0KICAgIHN3YXBfcmFuZ2VzKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7DQogICAgcmV0dXJuIF9fcmVz dWx0Ow0KICB9DQoNCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19r KTsNCg0KICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9f aSsrKSB7DQogICAgX1RwIF9fdG1wID0gKl9fZmlyc3Q7DQogICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsNCg0KICAgIGlmIChfX2sgPCBf X2wpIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f bC9fX2Q7IF9faisrKSB7DQogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsg X19sKSB7DQogICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsNCiAgICAg ICAgICBfX3AgLT0gX19sOw0KICAgICAgICB9DQoNCiAgICAgICAgKl9fcCA9 ICooX19wICsgX19rKTsNCiAgICAgICAgX19wICs9IF9fazsNCiAgICAgIH0N CiAgICB9DQoNCiAgICBlbHNlIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9f aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsNCiAgICAgICAg aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgew0KICAgICAgICAgICpfX3AgPSAq KF9fcCArIF9fayk7DQogICAgICAgICAgX19wICs9IF9fazsNCiAgICAgICAg fQ0KDQogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOw0KICAgICAgICBf X3AgLT0gX19sOw0KICAgICAgfQ0KICAgIH0NCg0KICAgICpfX3AgPSBfX3Rt cDsNCiAgICArK19fZmlyc3Q7DQogIH0NCg0KICByZXR1cm4gX19yZXN1bHQ7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUg X0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX19yb3RhdGUoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlz dGFuY2VfdHlwZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ dGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN Cg0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21p ZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRv bV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgew0KDQogIHJldHVybiBscmFuZDQ4 KCkgJSBfX247DQoNCg0KDQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAg aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19p IC0gX19maXJzdCkgKyAxKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4N CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2Zp cnN0KSArIDEpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpf T3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBf X24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsNCiAg ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7DQogIF9E aXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7DQoNCiAgd2hp bGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5kb21fbnVtYmVyKF9fcmVt YWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7DQog ICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQogICAgLS1f X3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0dXJuIF9f b3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQpfT3V0cHV0SXRlciByYW5k b21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19y YW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVt YWluaW5nID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jl bWFpbmluZyk7DQogIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFp bmluZyk7DQoNCiAgd2hpbGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5k KF9fcmVtYWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmly c3Q7DQogICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQog ICAgLS1fX3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0 dXJuIF9fb3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9S YW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5j ZSBfX24pDQp7DQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2Ug X190ID0gX19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9f bSA8IF9fbjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0g Kl9fZmlyc3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQog ICAgKytfX3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJl cihfX3QpOw0KICAgIGlmIChfX00gPCBfX24pDQogICAgICBfX291dFtfX01d ID0gKl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJu IF9fb3V0ICsgX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAgICAgICAgY2xhc3Mg X1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdl bmVyYXRvciYgX19yYW5kLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KDQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2UgX190ID0g X19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9f bjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0gKl9fZmly c3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf X3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZChfX3QpOw0KICAgIGlm IChfX00gPCBfX24pDQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7DQog ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fb3V0ICsgX19tOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnJhbmRv bV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCg0KICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19v dXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAg ICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4NCmlubGluZSBf UmFuZG9tQWNjZXNzSXRlcg0KcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19vdXRfbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy YXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcmFu ZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOw0KfQ0KDQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp Y2F0ZT4NCl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIg X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybiBfX2ZpcnN0Ow0KDQogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQ0K ICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsN Cg0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCg0KICB3aGls ZSAoKytfX25leHQgIT0gX19sYXN0KQ0KICAgIGlmIChfX3ByZWQoKl9fbmV4 dCkpIHsNCiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOw0KICAgICAg KytfX2ZpcnN0Ow0KICAgIH0NCg0KICByZXR1cm4gX19maXJzdDsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1By ZWRpY2F0ZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxl ICh0cnVlKQ0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAg ICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19m aXJzdCkpDQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGVsc2UNCiAgICAg ICAgYnJlYWs7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUgKHRydWUpDQog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBf X2ZpcnN0Ow0KICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkNCiAg ICAgICAgLS1fX2xhc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJyZWFrOw0K ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICsrX19maXJz dDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRp b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCg0KICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0 LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0K DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVk aWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX2lucGxh Y2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p DQp7DQogIGlmIChfX2xlbiA9PSAxKQ0KICAgIHJldHVybiBfX3ByZWQoKl9f Zmlyc3QpID8gX19sYXN0IDogX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9f bWlkZGxlID0gX19maXJzdDsNCiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4g LyAyKTsNCiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRp dGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksDQog ICAgICAgICAgICAgICAgX19taWRkbGUsDQogICAgICAgICAgICAgICAgX19p bnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19w cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGlj YXRlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRl ciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlz dGFuY2UgX19sZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf c2l6ZSkNCnsNCiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsNCiAgICBfUG9p bnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsNCiAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQ0KICAgICAgaWYgKF9fcHJlZCgq X19maXJzdCkpIHsNCiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Ow0K ICAgICAgICArK19fcmVzdWx0MTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0K ICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7DQogICAgICAgICsrX19y ZXN1bHQyOw0KICAgICAgfQ0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0 MiwgX19yZXN1bHQxKTsNCiAgICByZXR1cm4gX19yZXN1bHQxOw0KICB9DQog IGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7 DQogICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsNCiAgICByZXR1 cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJl ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSksDQogICAgICAgICAgICAgICAgICAgIF9f bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk ZGxlLCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl KSk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+ DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1Rw KiwgX0Rpc3RhbmNlKikNCnsNCiAgX1RlbXBvcmFyeV9idWZmZXI8X0Zvcndh cmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChf X2J1Zi5zaXplKCkgPiAwKQ0KICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19i dWYucmVxdWVzdGVkX3NpemUoKSksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkp Ow0KICBlbHNlDQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0 aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVz dGVkX3NpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBz dGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2UN CiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRp b24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1RwIF9fcGl2b3QpDQp7DQogIHdoaWxlICh0cnVlKSB7DQogICAgd2hp bGUgKCpfX2ZpcnN0IDwgX19waXZvdCkNCiAgICAgICsrX19maXJzdDsNCiAg ICAtLV9fbGFzdDsNCiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpDQog ICAgICAtLV9fbGFzdDsNCiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkN CiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIGl0ZXJfc3dhcChfX2ZpcnN0 LCBfX2xhc3QpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0 aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgd2hp bGUgKHRydWUpIHsNCiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bp dm90KSkNCiAgICAgICsrX19maXJzdDsNCiAgICAtLV9fbGFzdDsNCiAgICB3 aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQ0KICAgICAgLS1fX2xh c3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAgICByZXR1 cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsN CiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KY29uc3QgaW50IF9fc3RsX3Ro cmVzaG9sZCA9IDE2Ow0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwp DQp7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsNCiAg LS1fX25leHQ7DQogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsNCiAgICAq X19sYXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAg LS1fX25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmU+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0K ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u ZXh0Ow0KICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgew0KICAg ICpfX2xhc3QgPSAqX19uZXh0Ow0KICAgIF9fbGFzdCA9IF9fbmV4dDsNCiAg ICAtLV9fbmV4dDsNCiAgfQ0KICAqX19sYXN0ID0gX192YWw7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0K aW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBfVHAgX192YWwgPSAq X19sYXN0Ow0KICBpZiAoX192YWwgPCAqX19maXJzdCkgew0KICAgIGNvcHlf YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAq X19maXJzdCA9IF9fdmFsOw0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRl ZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl IF9fY29tcCkNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFzdDsNCiAgaWYgKF9f Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7DQogICAgY29weV9iYWNrd2FyZChf X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOw0KICAgICpfX2ZpcnN0ID0g X192YWw7DQogIH0NCiAgZWxzZQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p bnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX2luc2VydGlvbl9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCAr IDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIF9fbGluZWFyX2luc2Vy dChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv bXBhcmU+DQp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p KQ0KICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVf dHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFy ZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr X19pKQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAo Kl9faSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXI+DQppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsNCiAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21w YXJlIF9fY29tcCkNCnsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg PSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX3VuZ3Vh cmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPg0KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX191bmd1YXJkZWRfaW5zZXJ0 aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f Zmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy Pg0Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0IC0gX19m aXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7DQogICAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3Ro cmVzaG9sZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2xh c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7DQogICAgX19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xk LCBfX2NvbXApOw0KICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsNCiAg fQ0KICBlbHNlDQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlu bGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikNCnsNCiAgX1NpemUgX19rOw0K ICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOw0K ICByZXR1cm4gX19rOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+DQp2b2lkIF9faW50 cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U cCosDQogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1p dCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJl c2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7DQogICAg ICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOw0KICAg ICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhfbGltaXQ7DQogICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsNCiAgICBfX2lu dHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRo X2xpbWl0KTsNCiAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2ludHJvc29ydF9s b29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0KICAg ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21w YXJlIF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBf X3N0bF90aHJlc2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw KSB7DQogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xh c3QsIF9fY29tcCk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIC0tX19k ZXB0aF9saW1pdDsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQog ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19m aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAt IDEpLCBfX2NvbXApKSwNCiAgICAgICBfX2NvbXApOw0KICAgIF9faW50cm9z b3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGlt aXQsIF9fY29tcCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZv aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m aXJzdCAhPSBfX2xhc3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmly c3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0 IC0gX19maXJzdCkgKiAyKTsNCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2 b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ICE9 IF9fbGFzdCkgew0KICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly c3QpLA0KICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2Zp cnN0KSAqIDIsDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAg IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv bXApOw0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXI+DQp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0 IC0gX19maXJzdCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNj ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkgLyAyOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t aWRkbGUpOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9f bGFzdCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21p ZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19s YXN0IC0gX19taWRkbGUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJz dCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7DQogICAgcmV0dXJuOw0KICB9DQogIF9SYW5kb21BY2Nl c3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0 KSAvIDI7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p ZGRsZSwgX19jb21wKTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlk ZGxlLCBfX2xhc3QsIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLA0K ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0 X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3Vs dCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX190 d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsNCg0KICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7DQogICAgX19yZXN1bHQgPSBt ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsDQogICAgICAg ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg KyBfX3R3b19zdGVwLA0KICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQp Ow0KICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsNCiAgfQ0KDQogIF9fc3Rl cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19z dGVwX3NpemUpOw0KICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw X3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LA0KICAgICAg ICBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAgICAg ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIy IF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsDQogICAgICAgICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNl IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0 ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp cnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz dWx0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp cnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCiAgX19zdGVwX3NpemUgPSBtaW4o X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7DQoN CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg ICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAg X19yZXN1bHQsDQogICAgICAgIF9fY29tcCk7DQp9DQoNCmNvbnN0IGludCBf X3N0bF9jaHVua19zaXplID0gNzsNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fY2h1bmtf aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpDQp7DQogIHdoaWxlIChf X2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgew0KICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7 DQogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh c3MgX0NvbXBhcmU+DQp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv bXBhcmUgX19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+ PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7DQogICAgX19m aXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz IF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp c3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m aXJzdDsNCiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg X19sZW47DQoNCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1 bmtfc2l6ZTsNCiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QsIF9fc3RlcF9zaXplKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUg PCBfX2xlbikgew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsNCiAgICBfX3N0ZXBfc2l6 ZSAqPSAyOw0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1 ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVw X3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2Us DQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fbWVyZ2Vfc29y dF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkNCnsN CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX1Bv aW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47DQoNCiAg X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsNCiAg X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3Rl cF9zaXplLCBfX2NvbXApOw0KDQogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f bGVuKSB7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0 LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7DQogICAgX19zdGVw X3NpemUgKj0gMjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7 DQogICAgX19zdGVwX3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfRGlzdGFuY2U+DQp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9f YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAoX19s YXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+IF9f YnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQog ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogIH0NCiAgZWxzZSB7DQogICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7DQogICAgX19tZXJnZV9zb3J0X3dp dGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3Rh bmNlKikwKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp LA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwg Y2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0K dm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6 ZSwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAo X19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+ IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19z dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl ciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29tcCk7DQogIH0NCiAgZWxzZSB7DQogICAgX19tZXJnZV9zb3J0X3dp dGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0 YW5jZSopMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwg X19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICB9DQogIF9fbWVyZ2Vf YWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl KF9fbWlkZGxlIC0gX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUsDQogICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCos IF9EaXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21B Y2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAo YnVmLmJlZ2luKCkgPT0gMCkNCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X19maXJzdCwgX19sYXN0KTsNCiAgZWxzZQ0KICAgIF9fc3RhYmxlX3NvcnRf YWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0KaW5s aW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g YnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChidWYuYmVnaW4oKSA9PSAw KQ0KICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl KF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBzdGFibGVf c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJz dCksDQogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBzdGFibGVfc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4 KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh bmNlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9fY29t cCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcD4NCnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs DQogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX1RwKikNCnsNCiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsN CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p IDwgX19sYXN0OyArK19faSkNCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQ0K ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAo Kl9faSksDQogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp cnN0KSk7DQogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2 b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fcGFydGlh bF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19w YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21w KQ0Kew0KICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7 DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9f aSA8IF9fbGFzdDsgKytfX2kpDQogICAgaWYgKF9fY29tcCgqX19pLCAqX19m aXJzdCkpDQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2ksIF9UcCgqX19pKSwgX19jb21wLA0KICAgICAgICAgICAgICAgICBfX2Rp c3RhbmNlX3R5cGUoX19maXJzdCkpOw0KICBzb3J0X2hlYXAoX19maXJzdCwg X19taWRkbGUsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBw YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K DQoNCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFz dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfVHA+DQpf UmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAq KQ0Kew0KICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg cmV0dXJuIF9fcmVzdWx0X2xhc3Q7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f cmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0Ow0KICB3aGlsZShf X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y ZXN1bHRfbGFzdCkgew0KICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19m aXJzdDsNCiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsNCiAgICArK19fZmly c3Q7DQogIH0NCiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs dF9yZWFsX2xhc3QpOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpDQogICAgICBf X2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksDQog ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xh c3QgLSBfX3Jlc3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9U cCgqX19maXJzdCkpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hl YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7DQogIHJl dHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGlu ZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LA0KICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz dCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl KF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfQ29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz IF9UcD4NCl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAg aWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBf X3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9y ZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJzdCAh PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh c3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7DQog ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9 DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s YXN0LCBfX2NvbXApOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQ0K ICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNl KDApLA0KICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAg ICAgICBfVHAoKl9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hlYXAoX19yZXN1 bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsNCiAgcmV0 dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf Q29tcGFyZT4NCmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9z b3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz dWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHko X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19y ZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fbnRo X2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+IDMpIHsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9 DQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigq X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz dCAtIDEpKSkpOw0KICAgIGlmIChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9f Zmlyc3QgPSBfX2N1dDsNCiAgICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1 dDsNCiAgfQ0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlu bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19s YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv bXBhcmU+DQp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29t cGFyZSBfX2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g Mykgew0KICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9f dW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQog ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQ0KICAgICAgX19maXJzdCA9IF9fY3V0 Ow0KICAgIGVsc2UNCiAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQogIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9D b21wYXJlPg0KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19u dGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5 cGUoX19maXJzdCksIF9fY29tcCk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl Pg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQ0Kew0K ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgq X19taWRkbGUgPCBfX3ZhbCkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxl Ow0KICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9f aGFsZiAtIDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19o YWxmOw0KICB9DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgX0Zvcndh cmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90 eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3Rh bmNlPg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7 DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAg d2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7 DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRk bGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs KSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2Zp cnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAg fQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICB9DQogIHJl dHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIF9Gb3J3 YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0Kew0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgcmV0dXJu IF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w LA0KICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19m aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX3Vw cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0g MDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9E aXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsNCg0K ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4g MTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21p ZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpDQog ICAgICBfX2xlbiA9IF9faGFsZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVu ID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4g X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh bCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX3Vw cGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsDQogICAgICAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBf X3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQ0Kew0K ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmIChf X2NvbXAoX192YWwsICpfX21pZGRsZSkpDQogICAgICBfX2xlbiA9IF9faGFs ZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg LSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf Q29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3Qs IF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAg ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu Y2U+DQpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVh bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0Rpc3Rh bmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7 DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0Ow0K DQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+ PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkg ew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2ZpcnN0 Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgfQ0K ICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgX19sZW4g PSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9i b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOw0KICAgICAgYWR2YW5j ZShfX2ZpcnN0LCBfX2xlbik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91 bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOw0KICAgICAgcmV0dXJu IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19y aWdodCk7DQogICAgfQ0KICB9DQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5l IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQplcXVhbF9yYW5n ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpfX2VxdWFsX3Jh bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7 DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm dCwgX19yaWdodDsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w KCpfX21pZGRsZSwgX192YWwpKSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRk bGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0g X19oYWxmIC0gMTsNCiAgICB9DQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs LCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgZWxz ZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgX192YWwsIF9fY29tcCk7DQogICAgICBhZHZhbmNlKF9fZmlyc3Qs IF9fbGVuKTsNCiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlk ZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsNCiAgICAgIHJldHVybiBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmln aHQpOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv bXBhcmU+DQppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl cj4NCmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwg X19sYXN0LCBfX3ZhbCwgX19jb21wLA0KICAgICAgICAgICAgICAgICAgICAg ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQpib29sIGJpbmFyeV9z ZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQogIF9Gb3J3YXJkSXRlciBfX2kg PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgcmV0 dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPg0KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQogIHJldHVybiBfX2kg IT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOw0KfQ0KDQoNCg0K dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy MiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBtZXJnZShfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAg ZWxzZSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAr K19fZmlyc3QxOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJl dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRl ciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIG1l cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsN CiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4gY29weShf X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV93aXRo b3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQ0Kew0KICBp ZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0K ICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoKl9fbWlk ZGxlIDwgKl9fZmlyc3QpDQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t aWRkbGUpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogIF9EaXN0YW5jZSBfX2xl bjExID0gMDsNCiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICBpZiAoX19s ZW4xID4gX19sZW4yKSB7DQogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7DQog ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgX19zZWNv bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly c3RfY3V0KTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0 LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIyID0gX19s ZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7 DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCk7DQogICAgZGlzdGFuY2UoX19maXJzdCwg X19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRpcmVjdGlvbmFs SXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwg X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsNCiAg X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25k X2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2Us IGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sZW4x ID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0KICBpZiAoX19s ZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoX19jb21wKCpfX21pZGRs ZSwgKl9fZmlyc3QpKQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlk ZGxlKTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4x MSA9IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVu MSA+IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg IGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25k X2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0 X2N1dCwgX19jb21wKTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNv bmRfY3V0LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIy ID0gX19sZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s ZW4yMik7DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0 LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsNCiAgICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogIH0NCiAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQ0KICAgID0gcm90YXRl KF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19u ZXdfbWlkZGxlLCBfX2xlbjExLCBfX2xlbjIyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBf X2xlbjIyLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAg ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsNCiAgaWYgKF9fbGVuMSA+IF9f bGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0K ICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7 DQogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19m aXJzdCk7DQogIH0NCiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3Np emUpIHsNCiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlcik7DQogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf X2ZpcnN0KTsNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwg X19idWZmZXJfZW5kLCBfX2xhc3QpOw0KICB9DQogIGVsc2UNCiAgICByZXR1 cm4gcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIzPg0KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3 YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpDQp7DQogIGlmIChf X2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJk KF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAgLS1f X2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmICgqX19sYXN0MiA8 ICpfX2xhc3QxKSB7DQogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOw0K ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0 KTsNCiAgICAgIC0tX19sYXN0MTsNCiAgICB9DQogICAgZWxzZSB7DQogICAg ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOw0KICAgICAgaWYgKF9fZmlyc3Qy ID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgIC0tX19sYXN0 MjsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAg ICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBh cmU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2Zp cnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAg LS1fX2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmIChfX2NvbXAo Kl9fbGFzdDIsICpfX2xhc3QxKSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAq X19sYXN0MTsNCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy LCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVs c2Ugew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlm IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAg ICAtLV9fbGFzdDI7DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg X1BvaW50ZXI+DQp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAg ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUpDQp7DQogIGlmIChfX2xlbjEgPD0gX19sZW4y ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIg X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm ZXIpOw0KICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk ZGxlLCBfX2xhc3QsIF9fZmlyc3QpOw0KICB9DQogIGVsc2UgaWYgKF9fbGVu MiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJf ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAg X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs IF9fYnVmZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlIHsNCiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsN CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgX0Rpc3RhbmNlIF9f bGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsNCiAgICAg IF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0 X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOw0KICAgICAg ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQog ICAgfQ0KICAgIGVsc2Ugew0KICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7 DQogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQogICAg ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl LCAqX19zZWNvbmRfY3V0KTsNCiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICB9DQogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbmV3X21pZGRsZSA9DQogICAgICBfX3JvdGF0ZV9hZGFwdGl2 ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4x IC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIs IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu MTEsDQogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19t aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx LA0KICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19i dWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh c3MgX1BvaW50ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lk IF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAgICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K ew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm ZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICBtZXJnZShfX2J1 ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0 LCBfX2NvbXApOw0KICB9DQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZl cl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAgX19tZXJnZV9iYWNr d2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAg fQ0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j dXQgPSBfX2ZpcnN0Ow0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u ZF9jdXQgPSBfX21pZGRsZTsNCiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7 DQogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEg PiBfX2xlbjIpIHsNCiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3Nl Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m aXJzdF9jdXQsIF9fY29tcCk7DQogICAgICBkaXN0YW5jZShfX21pZGRsZSwg X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICB9DQogICAgZWxzZSB7DQog ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgIGFkdmFuY2UoX19z ZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICAgIF9fZmlyc3RfY3V0ID0gdXBw ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9f Y29tcCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwg X19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l d19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9j dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEs DQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUsIF9fY29tcCk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0K ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7DQogIH0NCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4 KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0 YW5jZSBfX2xlbjEgPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sZW4xKTsNCiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7DQogIGRpc3Rh bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7DQoNCiAgX1RlbXBvcmFy eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly c3QsIF9fbGFzdCk7DQogIGlmIChfX2J1Zi5iZWdpbigpID09IDApDQogICAg X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0LCBfX2xlbjEsIF9fbGVuMik7DQogIGVsc2UNCiAgICBfX21lcmdlX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s ZW4yLA0KICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rp c3RhbmNlKF9fYnVmLnNpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xh c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIF9f aW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3Rh bmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4xID0gMDsNCiAgZGlz dGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7DQogIF9EaXN0YW5j ZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBf X2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFs SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19i dWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9f Y29tcCk7DQogIGVsc2UNCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNp emUoKSksDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZv aWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp ZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp DQogICAgcmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkN CiAgICByZXR1cm47DQogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfX3Zh bHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwN CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMj4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4g ZmFsc2U7DQogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpDQog ICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJzdDEs ICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu cHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPg0KYm9vbCBpbmNsdWRlcyhfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQ0KICAgICAgcmV0dXJu IGZhbHNlOw0KICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkNCiAgICAgICsrX19maXJzdDE7DQogICAgZWxzZQ0KICAgICAgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICByZXR1cm4gX19maXJzdDIgPT0g X19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0 SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg ICAgKytfX2ZpcnN0MTsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3Qy IDwgKl9fZmlyc3QxKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9 DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0 cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJ dGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j b21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg fQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp IHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19m aXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJz dDI7DQogICAgfQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNv cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091 dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikN CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgKytfX2Zp cnN0MTsNCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQog ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19m aXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9f cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAg IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytf X2ZpcnN0MTsNCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog ICAgICArK19fZmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQog IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+ DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsNCiAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICAr K19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAq X19maXJzdDEpDQogICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAg ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICBy ZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29t cGFyZT4NCl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmIChfX2NvbXAoKl9fZmly c3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jlc3VsdDsNCiAg ICB9DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICArK19f Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogIHJldHVybiBj b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICAg IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICAg ICsrX19yZXN1bHQ7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKytfX2Zp cnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29w eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAg ICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlcg0Kc2V0X3N5bW1l dHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7 DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp cnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAg ICsrX19maXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBl bHNlIHsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K ICAgIH0NCiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQp9DQoNCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgbWF4 X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm4gX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJz dDsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCpf X3Jlc3VsdCA8ICpfX2ZpcnN0KQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0 Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPg0KX0ZvcndhcmRJdGVyIG1h eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly c3Q7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmIChf X2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJz dDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQog IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHdoaWxlICgr K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19maXJzdCA8ICpfX3Jl c3VsdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJuIF9f cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN Cg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0K ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAo KytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0 LCAqX19yZXN1bHQpKQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICBy ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXI+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19p ID09IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFz dDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2kg PCAqX19paSkgew0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9f bGFzdDsNCiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQ0KICAgICAg ICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVy c2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0N CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19m aXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQog IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg Y2xhc3MgX0NvbXBhcmU+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9f bGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAg LS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19p LCAqX19paSkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBf X2xhc3Q7DQogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQ0K ICAgICAgICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAg IHJldmVyc2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0K ICAgIH0NCiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVy c2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg ICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcj4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp DQogICAgcmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p ID0gX19maXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0K ICAgIHJldHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsN Cg0KICBmb3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9 IF9faTsNCiAgICAtLV9faTsNCiAgICBpZiAoKl9faWkgPCAqX19pKSB7DQog ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Ow0KICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpDQogICAgICAgIHt9DQogICAgICBp dGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lpLCBfX2xh c3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlmIChfX2kg PT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3Qp Ow0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFy ZT4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAg cmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m aXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0KICAgIHJl dHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsNCg0KICBm b3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsN CiAgICAtLV9faTsNCiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgew0K ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAg IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpDQogICAgICAgIHt9DQog ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lp LCBfX2xhc3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlm IChfX2kgPT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf X2xhc3QpOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0K DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3 YXJkSXRlcj4NCl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVy IF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpDQog ICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl ciAhPSBfX2xhc3QyOyArK19faXRlcikNCiAgICAgIGlmICgqX19maXJzdDEg PT0gKl9faXRlcikNCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICByZXR1 cm4gX19sYXN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3Qx LCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh c3QxOyArK19fZmlyc3QxKQ0KICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRl ciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpDQog ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpDQogICAgICAg IHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9fbGFzdDE7DQp9DQojIDMz OTAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj bGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5k KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0 MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRl cmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAg ICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVy MSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAg IF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNo KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7DQogICAg ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy biBfX3Jlc3VsdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfX3Jlc3VsdCA9 IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1 bHQ7DQogICAgICAgICsrX19maXJzdDE7DQogICAgICB9DQogICAgfQ0KICB9 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf Rm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNh dGU+DQpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsDQogICAg ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp DQp7DQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBf X2xhc3QxOw0KICBlbHNlIHsNCiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0 ID0gX19sYXN0MTsNCiAgICB3aGlsZSAoMSkgew0KICAgICAgX0ZvcndhcmRJ dGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgPSBzZWFyY2goX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOw0KICAgICAg aWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4g X19yZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBf X25ld19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0 Ow0KICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0K fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPg0KX0JpZGlyZWN0aW9uYWxJdGVy MQ0KX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIg X19sYXN0MiwNCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAg dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+ IF9SZXZJdGVyMjsNCg0KICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEp Ow0KICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOw0KICBfUmV2SXRl cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19y bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0 ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7DQoNCiAgaWYgKF9fcnJlc3VsdCA9 PSBfX3JsYXN0MSkNCiAgICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQog ICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i YXNlKCk7DQogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmly c3QyLCBfX2xhc3QyKSk7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5h cnlQcmVkaWNhdGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIxDQpfX2ZpbmRfZW5k KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0KICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcsDQogICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv bmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsNCg0KICBfUmV2 SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOw0KICBfUmV2SXRlcjIgX19ybGFz dDIoX19maXJzdDIpOw0KICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNo KF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K DQogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpDQogICAgcmV0dXJuIF9f bGFzdDE7DQogIGVsc2Ugew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19y ZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOw0KICAgIGFkdmFuY2UoX19yZXN1 bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOw0KICAgIHJldHVy biBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQppbmxpbmUgX0Zv cndhcmRJdGVyMQ0KZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVy MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICByZXR1cm4gX19maW5k X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQog ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9C aW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX0ZvcndhcmRJdGVyMQ0KZmluZF9l bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh c3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K DQogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0MSksDQogICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLA0KICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KYm9vbCBfX2lz X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9f bikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChfRGlz dGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkg ew0KICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGls ZF0pDQogICAgICByZXR1cm4gZmFsc2U7DQogICAgaWYgKChfX2NoaWxkICYg MSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQogIH0NCiAgcmV0dXJuIHRy dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPg0K Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0 cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsDQogICAgICAgICAgICAgICBfRGlz dGFuY2UgX19uKQ0Kew0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOw0KICBm b3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytf X2NoaWxkKSB7DQogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwg X19maXJzdFtfX2NoaWxkXSkpDQogICAgICByZXR1cm4gZmFsc2U7DQogICAg aWYgKChfX2NoaWxkICYgMSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQog IH0NCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcj4NCmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19m aXJzdCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy aW5nPg0KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQ0Kew0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0 LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpib29sIGlzX3NvcnRlZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRy dWU7DQoNCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZv ciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25l eHQsICsrX19uZXh0KSB7DQogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkN CiAgICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3Ry aWN0V2Vha09yZGVyaW5nPg0KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICByZXR1cm4gdHJ1ZTsNCg0KICBf Rm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCiAgZm9yICgrK19fbmV4 dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25l eHQpIHsNCiAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkNCiAg ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0KfQ0K DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyA1MCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv YmFzaWNfc3RyaW5nLnRjYyIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQpu YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0 IF9DaGFyVA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Og0KICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog ICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXAp KS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsNCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0 b3JhZ2VbDQogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsg c2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07DQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5JdGVyPg0KICAgICAgX0NoYXJUKg0KICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgICBfU19jb25z dHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs bG9jJiBfX2EsDQogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKQ0KICAgICAgew0KICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg X19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJldHVybiBfU19lbXB0eV9y ZXAoKS5fTV9yZWZjb3B5KCk7DQoNCiAgICAgICAgX0NoYXJUIF9fYnVmWzEw MF07DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOw0KICAgICAgICB3aGls ZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNp emVvZihfQ2hhclQpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fYnVm W19faSsrXSA9ICpfX2JlZzsNCiAgICAgICAgICAgICsrX19iZWc7DQogICAg ICAgICAgfQ0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUo X19pLCBfX2EpOw0KICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N X3JlZmRhdGEoKSwgX19idWYsIF9faSk7DQogICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19pOw0KICAgICAgICB0cnkNCiAgICAgICAgICB7DQoNCg0KDQog ICAgICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9f ci0+X01fbGVuZ3RoOw0KICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0 ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5Ow0KICAg ICAgICAgICAgICAgIGZvciAoOzspDQogICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAg ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBf X3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAg ICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFs Ow0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVm ZGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpDQogICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpf X2JlZzsNCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAg ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xl biA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAg IF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEs IF9fYSk7DQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19h bm90aGVyLT5fTV9yZWZkYXRhKCksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsNCiAgICAg ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAg ICAgICBfX3IgPSBfX2Fub3RoZXI7DQogICAgICAgICAgICAgICAgX19yLT5f TV9sZW5ndGggPSBfX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAg IH0NCiAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgIHsNCiAgICAgICAg ICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgICAgdGhyb3c7 DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRl cj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAg IHsNCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNp emVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7DQoNCiAgICAgICAg aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkNCiAgICAg ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOw0KDQoN CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywg X19hKTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgeyBfU19jb3B5X2NoYXJz KF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9DQogICAgICAg IGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3ItPl9N X2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg IH0NCiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7DQoNCiAgICAg ICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1p bmFsOw0KICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX1Nf Y29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B bGxvYyYgX19hKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2Eg PT0gX0FsbG9jKCkpDQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5f TV9yZWZjb3B5KCk7DQoNCg0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf Y3JlYXRlKF9fbiwgX19hKTsNCiAgICAgIHRyeQ0KICAgICAgICB7DQogICAg ICAgICAgaWYgKF9fbikNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3Np Z24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsNCiAgICAgICAgfQ0K ICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19yLT5f TV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0N CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOw0KICAgICAgX19yLT5fTV9y ZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgcmV0 dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikNCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLA0KICAgICAg ICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B bGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNp emVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01f Y2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9j KCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNf c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcywNCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo X19zdHIuX01fY2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9f YSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z dHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0 IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCog X19zLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K ICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBj b25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0 cnVjdChfX24sIF9fYywgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+ DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 DQogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBs dXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQ0KICAg IHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIpDQogICAgew0KICAgICAgaWYgKF9NX3JlcCgpICE9IF9f c3RyLl9NX3JlcCgpKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7DQogICAgICAg ICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9f YSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAgICBfTV9yZXAo KS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXAp Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfTV9kZXN0 cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQ0KICAgIHsNCiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNp dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOw0KICAgICAgX1Jhd19ieXRlc19h bGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o dGhpcyksIF9fc2l6ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K ICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpfTV9sZWFrX2hhcmQoKQ0KICAgIHsNCiAgICAgIGlmIChfTV9y ZXAoKS0+X01faXNfc2hhcmVkKCkpDQogICAgICAgIF9NX211dGF0ZSgwLCAw LCAwKTsNCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBfTV9tdXRh dGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5 cGUgX19sZW4yKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXpl ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3 X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOw0KICAgICAg Y29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19s ZW4xOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29s ZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7DQoNCiAgICAgIGlmIChfTV9yZXAo KS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkp DQogICAgICAgIHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9 IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBfUmVwKiBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsNCiAgICAgICAgICB0cnkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9fcG9zKQ0KICAg ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0 YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsNCiAgICAgICAgICAgICAgaWYgKF9f aG93X211Y2gpDQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2Fs bG9jYXRvcigpKTsNCiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg ICB9DQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsNCiAg ICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsNCiAgICAgIH0N CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu MikNCiAgICAgICAgew0KDQogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUo X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNo KTsNCiAgICAgICAgfQ0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJs ZSgpOw0KICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7 DQogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJt aW5hbDsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lk DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpDQogICAgew0KICAgICAgaWYgKF9f cmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hh cmVkKCkpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlz LT5tYXhfc2l6ZSgpKQ0KICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJy b3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOw0KICAgICAgICAgIGFsbG9j YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBf Q2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMg LSB0aGlzLT5zaXplKCkpOw0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNw b3NlKF9fYSk7DQogICAgICAgICAgX01fZGF0YShfX3RtcCk7DQogICAgICAg IH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2lj X3N0cmluZyYgX19zKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfbGVha2VkKCkpDQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi bGUoKTsNCiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgp KQ0KICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOw0K ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2Fs bG9jYXRvcigpKQ0KICAgICAgICB7DQogICAgICAgICAgX0NoYXJUKiBfX3Rt cCA9IF9NX2RhdGEoKTsNCiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRh KCkpOw0KICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsNCiAgICAgICAg fQ0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBiYXNpY19z dHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRf YWxsb2NhdG9yKCkpOw0KICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIo X19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsNCiAg ICAgICAgICAqdGhpcyA9IF9fdG1wMjsNCiAgICAgICAgICBfX3MgPSBfX3Rt cDE7DQogICAgICAgIH0NCiAgICB9DQojIDM1NiAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpfUmVwKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9TX2NyZWF0ZShz aXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQ0KICAg IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KDQoNCiAgICAgIGlmIChfX2Nh cGFjaXR5ID4gX1NfbWF4X3NpemUpDQoNCg0KDQogICAgICAgIF9fdGhyb3df bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOw0KDQoN Cg0KDQogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAq IHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOw0KDQoNCiAgICAgIHZv aWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9j YXRlKF9fc2l6ZSk7DQogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2Up IF9SZXA7DQogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsN CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBfX3AtPl9N X2xlbmd0aCA9IDA7DQogICAgICByZXR1cm4gX19wOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBfQ2hhclQqDQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fY2xv bmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpDQog ICAgew0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xl bmd0aCArIF9fcmVzLCBfX2FsbG9jKTsNCiAgICAgIGlmIChfTV9sZW5ndGgp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgdHJh aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEo KSwgX01fbGVuZ3RoKTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxs b2MpOw0KICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7DQog ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICBpbmxpbmUgYm9vbA0KDQoNCg0KDQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQog ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikNCg0K ICAgIHsNCiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19z KSA8IF9fcjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9p ZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAg ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsNCiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z aXplIDwgX19uKQ0KICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXpl LCBfX2MpOw0KICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQ0KICAgICAg ICB0aGlzLT5lcmFzZShfX24pOw0KDQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+DQogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IF9JbnB1dEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0lucHV0SXRl ciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpDQogICAgICB7DQogICAgICAg IGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7DQogICAgICAgIHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwg X19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg ICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBf Rm9yd2FyZEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAg ICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7DQogICAgICAg IHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOw0KICAgICAg ICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihk aXN0YW5jZShfX2sxLCBfX2syKSk7DQoNCiAgICAgICAgaWYgKF9fZG1heCA8 PSBfX2RuZXcpDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOw0KICAgICAgICBzaXplX3R5cGUg X19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICAgIF9NX211dGF0 ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOw0KDQogICAgICAgIGlmIChfX2Ru ZXcpDQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29m ZiwgX19rMSwgX19rMik7DQoNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAg ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShzaXplX3R5 cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVf dHlwZSBfX24yKQ0KICAgIHsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl KF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9z MiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk KF9fcG9zMiwgX19uMikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAg YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KDQoN Cg0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAg ICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsN CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigp LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgp KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24pDQogICAgew0KDQoNCg0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0g bWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgp Ow0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAg ICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhpcy0+ cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so X19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f Zm9sZChfX3BvcywgX19uKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAg ICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pDQog ICAgew0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6 ZSgpOw0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAg ICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBf X24pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBwZW5kKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MpDQogICAgew0KICAgICAgc2l6ZV90eXBl IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fbGVu ID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf X2xlbik7DQogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp LCBfTV9pZW5kKCksIF9fbiwgX19jKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg X19zaXplX3R5cGU7DQogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFp dHM6Omxlbmd0aChfX2xocyk7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry Ow0KICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7 DQogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOw0K ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0 cjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRvcisoX0No YXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5 cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOw0K ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7DQogICAg ICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7DQogICAgICBfX3N0ci5hcHBl bmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVu ZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykNCiAgICB7 DQogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOw0KICAgICAg c2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsNCiAgICAg IGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9f bjIpDQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6OnJlcGxhY2UiKTsNCiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24x LCBfX24yKTsNCg0KICAgICAgaWYgKF9fbjIpDQogICAgICAgIHRyYWl0c190 eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOw0K ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoNCiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgaWYg KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X291dF9v Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7DQoNCiAgICAgIGlmIChf X24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykNCiAgICAgICAgX19uID0gdGhp cy0+c2l6ZSgpIC0gX19wb3M7DQoNCiAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7DQoNCiAgICAgIHJldHVy biBfX247DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K ICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90IF9feHBvcyA9 IF9fcG9zOw0KICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRh KCk7DQogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytf X3hwb3MpDQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2Rh dGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQ0KICAgICAgICAgIHJldHVy biBfX3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jl dCA9IG5wb3M7DQogICAgICBpZiAoX19wb3MgPCBfX3NpemUpDQogICAgICAg IHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo KTsNCiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7 DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6 ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOw0KICAgICAgICAgIGlm IChfX3ApDQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsNCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0 DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo KTsNCiAgICAgIGlmIChfX24gPD0gX19zaXplKQ0KICAgICAgICB7DQogICAg ICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsN CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsN CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp ZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywg X19uKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOw0K ICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K ICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAt IDE7DQogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQ0KICAgICAgICAg ICAgX194cG9zID0gX19wb3M7DQoNCiAgICAgICAgICBmb3IgKCsrX194cG9z OyBfX3hwb3MtLSA+IDA7ICkNCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw ZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpDQogICAgICAgICAgICAg IHJldHVybiBfX3hwb3M7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9z Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgZm9yICg7 IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykNCiAgICAg ICAgew0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5 cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOw0KICAgICAg ICAgIGlmIChfX3ApDQogICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAg ICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u c3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6 ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pDQogICAgICAgIHsNCiAg ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykNCiAgICAgICAgICAgIF9f c2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAgICB7DQog ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg X01fZGF0YSgpW19fc2l6ZV0pKQ0KICAgICAgICAgICAgICAgIHJldHVybiBf X3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6 ZS0tICE9IDApOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3Qg X194cG9zID0gX19wb3M7DQogICAgICBmb3IgKDsgX19uICYmIF9feHBvcyA8 IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAgIGlmICghdHJhaXRz X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkNCiAg ICAgICAgICByZXR1cm4gX194cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRf Zmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u c3QNCiAgICB7DQogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7DQogICAg ICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykNCiAg ICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10s IF9fYykpDQogICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVy biBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUN CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoN CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlm IChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKC0t X19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsN CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp ZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19z aXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOw0KICAgICAg ICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQg X19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3Np emUpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv cykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRv DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5 cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQ0KICAgICAgICAgICAg ICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAg d2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5w b3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdA0KICAgIHsNCiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+ IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj X3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAgICBzaXplX3R5cGUgX19yc2l6 ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOw0KICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf X3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAg ICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNv bXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsDQogICAgICAgICAgICBzaXplX3R5cGUg X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QNCiAgICB7DQogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90 eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3Mx ID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpDQogICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0K ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3Mx LCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z aXplIC0gX19wb3MyLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9 IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJh aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSAr IF9fcG9zMiwgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f ciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQog ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgY29t cGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3Np emUpOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9IF9fc2l6ZSAt IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHJldHVybiBfX3I7 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAg YmFzaWNfc3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBj b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IF9DaGFyVCogX19zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBf X3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICBzaXplX3R5cGUgX19y c2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7DQogICAgICBzaXpl X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7DQogICAgICBp bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w b3MsIF9fcywgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f ciA9IF9fcnNpemUgLSBfX29zaXplOw0KICAgICAgcmV0dXJuIF9fcjsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFzaWNf c3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBjb21wYXJl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy VCogX19zLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQog ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19v dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcyksIF9fbjIpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o X19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBlIF9fbGVu ID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRy YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f bGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXpl IC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQogIHRl bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9B bGxvYz4NCiAgICB2b2lkDQogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsDQog ICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0Fs bG9jOjpzaXplX3R5cGUgX19idWZzaXopDQogICAgew0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQogICAg ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAg c2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAt IDEpOw0KICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgp LCBfX2J5dGVzKTsNCiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7 DQogICAgfQ0KfQ0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgNDMgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NjdHlwZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMw0KIyAxICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQNCiMgMzkgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMiAz DQojIDU1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2N0eXBlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcg Ojppc2FsbnVtOw0KICB1c2luZyA6OmlzYWxwaGE7DQogIHVzaW5nIDo6aXNj bnRybDsNCiAgdXNpbmcgOjppc2RpZ2l0Ow0KICB1c2luZyA6OmlzZ3JhcGg7 DQogIHVzaW5nIDo6aXNsb3dlcjsNCiAgdXNpbmcgOjppc3ByaW50Ow0KICB1 c2luZyA6OmlzcHVuY3Q7DQogIHVzaW5nIDo6aXNzcGFjZTsNCiAgdXNpbmcg Ojppc3VwcGVyOw0KICB1c2luZyA6OmlzeGRpZ2l0Ow0KICB1c2luZyA6OnRv bG93ZXI7DQogIHVzaW5nIDo6dG91cHBlcjsNCn0NCiMgNDQgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyA0NSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIg Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDU2ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFz cyB2ZWN0b3I7DQogIGNsYXNzIGxvY2FsZTsNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzc3BhY2Uo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3ByaW50KF9DaGFy VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg aW5saW5lIGJvb2wNCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxl Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu ZSBib29sDQogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v bA0KICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg ICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXN4 ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2FsbnVt KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNncmFwaChfQ2hh clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG91cHBlcihfQ2hhclQs IGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG9sb3dlcihfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOw0KDQoNCg0KICBjbGFzcyBjdHlwZV9iYXNlOw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGU7DQog IHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47DQoNCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7 DQoNCg0KICBjbGFzcyBjb2RlY3Z0X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0 YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0Ow0KICB0ZW1wbGF0ZTw+IGNsYXNz IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsNCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0 eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOw0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFz cyBudW1fZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N CiAgICBjbGFzcyBudW1fcHV0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+IGNsYXNzIG51bXB1bmN0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlOw0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzDQogICAgY29sbGF0ZV9ieW5hbWU7 DQoNCg0KICBjbGFzcyB0aW1lX2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXQ7DQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXRfYnlu YW1lOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBj bGFzcyB0aW1lX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU PiA+DQogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOw0KDQoNCiAgY2xhc3Mg bW9uZXlfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N CiAgICBjbGFzcyBtb25leV9nZXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVD4gPg0KICAgIGNsYXNzIG1vbmV5X3B1dDsNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xh c3MgbW9uZXlwdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi b29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5h bWU7DQoNCg0KICBjbGFzcyBtZXNzYWdlc19iYXNlOw0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXM7DQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5h bWU7DQoNCg0KICBjbGFzcyBsb2NhbGUNCiAgew0KICBwdWJsaWM6DQoNCiAg ICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsNCg0KDQogICAgY2xh c3MgZmFjZXQ7DQogICAgY2xhc3MgaWQ7DQogICAgY2xhc3MgX0ltcGw7DQoN CiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7DQogICAgZnJpZW5kIGNsYXNzIF9J bXBsOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAg ZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAg ICAgIGZyaWVuZCBib29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl JikgdGhyb3coKTsNCg0KDQoNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg bm9uZSA9IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0g MUwgPDwgMDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9 IDFMIDw8IDE7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg PSAxTCA8PCAyOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0g MUwgPDwgMzsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkg PSAxTCA8PCA0Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdl cyA9IDFMIDw8IDU7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9 IChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUg fCBtZXNzYWdlcyk7DQoNCg0KICAgIGxvY2FsZSgpIHRocm93KCk7DQoNCiAg ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0KDQog ICAgZXhwbGljaXQNCiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRfbmFt ZSk7DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0 IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOw0KDQogICAgbG9jYWxlKGNv bnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl Z29yeSBfX2NhdCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+ DQogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQq IF9fZik7DQoNCiAgICB+bG9jYWxlKCkgdGhyb3coKTsNCg0KICAgIGNvbnN0 IGxvY2FsZSYNCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVy KSB0aHJvdygpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0K ICAgICAgbG9jYWxlDQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19v dGhlcik7DQoNCg0KICAgIHN0cmluZw0KICAgIG5hbWUoKSBjb25zdDsNCg0K ICAgIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhl cikgY29uc3QgdGhyb3cgKCk7DQoNCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w ZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAo KQ0KICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7 IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgICBib29sDQogICAgICBv cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywg X0FsbG9jPiYgX19zMSwNCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsN Cg0KDQogICAgc3RhdGljIGxvY2FsZQ0KICAgIGdsb2JhbChjb25zdCBsb2Nh bGUmKTsNCg0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmDQogICAgY2xhc3Np YygpOw0KDQogIHByaXZhdGU6DQoNCiAgICBfSW1wbCogX01faW1wbDsNCg0K DQogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOw0KDQoNCiAgICBzdGF0 aWMgX0ltcGwqIF9TX2dsb2JhbDsNCg0KICAgIHN0YXRpYyBjb25zdCBzaXpl X3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2Ow0KICAgIHN0YXRpYyBjb25zdCBz aXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOw0KDQogICAgZXhwbGljaXQNCiAg ICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOw0KDQogICAgc3RhdGljIGlubGlu ZSB2b2lkDQogICAgX1NfaW5pdGlhbGl6ZSgpDQogICAgeyBpZiAoIV9TX2Ns YXNzaWMpIGNsYXNzaWMoKTsgfQ0KDQogICAgc3RhdGljIGNhdGVnb3J5DQog ICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsNCg0KICAgIHZv aWQNCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29u c3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOw0KICB9Ow0KDQoN Cg0KICBjbGFzcyBsb2NhbGU6Ol9JbXBsDQogIHsNCiAgcHVibGljOg0KDQog ICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+ IF9fdmVjX2ZhY2V0Ow0KDQoNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0K ICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0Ow0KDQogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl dCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsNCg0KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KICBw cml2YXRlOg0KDQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQogICAgX192 ZWNfZmFjZXQqIF9NX2ZhY2V0czsNCiAgICBzdHJpbmcgX01fbmFtZXNbX1Nf bnVtX2NhdGVnb3JpZXNdOw0KICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7 DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0 eXBlW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T X2lkX251bWVyaWNbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog Y29uc3QgX1NfaWRfY29sbGF0ZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh bGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107DQogICAgc3RhdGljIGNvbnN0 IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107DQogICAgc3Rh dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107 DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBf U19mYWNldF9jYXRlZ29yaWVzW107DQoNCiAgICBpbmxpbmUgdm9pZA0KICAg IF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpDQogICAgeyArK19NX3JlZmVy ZW5jZXM7IH0NCg0KICAgIGlubGluZSB2b2lkDQogICAgX01fcmVtb3ZlX3Jl ZmVyZW5jZSgpIHRocm93KCkNCiAgICB7DQogICAgICBpZiAoX01fcmVmZXJl bmNlcy0tID09IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAg ICAgICAgIHsgZGVsZXRlIHRoaXM7IH0NCiAgICAgICAgICBjYXRjaCguLi4p DQogICAgICAgICAgICB7IH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIF9J bXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsNCiAgICBfSW1wbChzdHJpbmcg X19uYW1lLCBzaXplX3QpOw0KICAgfl9JbXBsKCkgdGhyb3coKTsNCg0KICAg IGJvb2wNCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQ0KICAgIHsNCiAgICAg IGJvb2wgX19yZXQgPSB0cnVlOw0KICAgICAgZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkNCiAgICAgICAgX19y ZXQgJj0gX01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOw0KICAgICAg cmV0dXJuIF9fcmV0Ow0KICAgIH0NCiAgICB2b2lkDQogICAgX01fcmVwbGFj ZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOw0KDQogICAg dm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCopOw0KDQogICAgdm9pZA0KICAgIF9N X3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk Kik7DQoNCiAgICB2b2lkDQogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBs b2NhbGU6OmlkKiwgZmFjZXQqKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4NCiAgICAgIGlubGluZSB2b2lkDQogICAgICBfTV9pbml0X2Zh Y2V0KF9GYWNldCogX19mYWNldCkNCiAgICAgIHsgX01faW5zdGFsbF9mYWNl dCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0NCiAgfTsNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikNCiAgICB7DQogICAgICBf TV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOw0KICAg ICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19m KTsNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9j YXRlZ29yaWVzOyArK19faSkNCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNb X19pXSA9ICIqIjsNCiAgICB9DQoNCg0KICBjbGFzcyBsb2NhbGU6OmZhY2V0 DQogIHsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZyaWVuZCBj bGFzcyBsb2NhbGU6Ol9JbXBsOw0KDQogIHByb3RlY3RlZDoNCiAgICBleHBs aWNpdA0KICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOw0K DQogICAgdmlydHVhbA0KICAgIH5mYWNldCgpIHsgfTsNCg0KICAgIHN0YXRp YyB2b2lkDQogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f Y2xvYywgY29uc3QgY2hhciogX19zKTsNCg0KICAgIHN0YXRpYyB2b2lkDQog ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOw0K DQogIHByaXZhdGU6DQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQoNCiAg ICB2b2lkDQogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7DQoNCiAg ICB2b2lkDQogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7DQoN CiAgICBmYWNldChjb25zdCBmYWNldCYpOw0KDQogICAgdm9pZA0KICAgIG9w ZXJhdG9yPShjb25zdCBmYWNldCYpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBs b2NhbGU6OmlkDQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3Mg bG9jYWxlOw0KICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOw0KICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25z dCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGJv b2wNCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsN Cg0KDQoNCg0KICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4Ow0KDQoNCiAg ICBzdGF0aWMgc2l6ZV90IF9TX2hpZ2h3YXRlcjsNCg0KICAgIHZvaWQNCiAg ICBvcGVyYXRvcj0oY29uc3QgaWQmKTsNCg0KICAgIGlkKGNvbnN0IGlkJik7 DQoNCiAgcHVibGljOg0KDQoNCg0KICAgIGlkKCkgeyB9DQogIH07DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYN CiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGJvb2wNCiAgICBoYXNfZmFj ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsNCn0NCiMgNDQgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Mu aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMw0KDQpuYW1l c3BhY2Ugc3RkDQp7DQoNCg0KDQoNCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsg X01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5l IF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19h LCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn cyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8 KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyBy ZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10 ZmxhZ3MNCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0Zt dGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoN CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8PShfSW9zX0Zt dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBf X2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0K ICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn cyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlu bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFn cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g X19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl cmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQ0KICB7IHJldHVybiBfSW9zX0Zt dGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCg0KICBlbnVt IF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwg MTYgfTsNCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvciYo X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJl dHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0 YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVu bW9kZQ0KICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl bm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19j YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0K ICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvcl4oX0lvc19PcGVu bW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9z X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0 PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBv cGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu ZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYg X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19h ICYgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0 b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K ICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lv c19PcGVubW9kZQ0KICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpDQog IHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19h KSk7IH0NCg0KDQogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3Rh dGVfZW5kID0gMUwgPDwgMTYgfTsNCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRl DQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg X19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50 PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGlu ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2Es IF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShz dGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp OyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl4oX0lv c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19j YXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQog IG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hICYg X19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl49 KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJl dHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0 YXRlDQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQ0KICB7IHJldHVy biBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0NCg0K ICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFM IDw8IDE2IH07DQoNCg0KICBjbGFzcyBpb3NfYmFzZQ0KICB7DQogIHB1Ymxp YzoNCg0KDQogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24N CiAgICB7DQogICAgcHVibGljOg0KDQoNCiAgICAgIGV4cGxpY2l0DQogICAg ICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7DQoNCiAg ICAgIHZpcnR1YWwNCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsNCg0KICAg ICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAgICAgd2hhdCgpIGNvbnN0IHRo cm93KCk7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZW51bSB7IF9NX2J1ZnNp emUgPSAyNTYgfTsNCiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsN Cg0KICAgIH07DQoNCg0KICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRm bGFnczsNCg0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsNCiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX2RlYyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVk ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsNCiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2hleCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFs ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsNCiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19sZWZ0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7DQogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX3JpZ2h0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50 aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsN CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOw0KICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1Nfc2hvd3BvaW50KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hv d3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsNCiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX3NraXB3cyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1 Zik7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOw0KICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7DQogICAgc3RhdGljIGNvbnN0IGZt dGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i YXNlZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZp ZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOw0K DQoNCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOw0KICAgIHN0 YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh Z3M6Ol9TX2JhZGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9m Yml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsNCiAgICBz dGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19m bGFnczo6X1NfZmFpbGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUg Z29vZGJpdCA9IGlvc3RhdGUoMCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19P cGVubW9kZSBvcGVubW9kZTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg YXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7DQogICAgc3Rh dGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz OjpfU19hdGUpOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkg PSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsNCiAgICBzdGF0aWMg Y29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf aW4pOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsNCiAgICBzdGF0aWMgY29uc3Qgb3Bl bm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOw0KICAg IHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7DQogICAg c3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsNCiAgICBz dGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOw0KIyAyMTYg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lvc19i YXNlLmgiIDMNCiAgICBlbnVtIGV2ZW50DQogICAgew0KICAgICAgZXJhc2Vf ZXZlbnQsDQogICAgICBpbWJ1ZV9ldmVudCwNCiAgICAgIGNvcHlmbXRfZXZl bnQNCiAgICB9Ow0KDQogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJh Y2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOw0KDQogICAgdm9pZA0KICAg IHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBf X2luZGV4KTsNCg0KICBwcm90ZWN0ZWQ6DQoNCiAgICBzdHJlYW1zaXplIF9N X3ByZWNpc2lvbjsNCiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOw0KICAgIGZt dGZsYWdzIF9NX2ZsYWdzOw0KDQoNCg0KICAgIHN0cnVjdCBfQ2FsbGJhY2tf bGlzdA0KICAgIHsNCg0KICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7 DQogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47DQogICAg ICBpbnQgX01faW5kZXg7DQogICAgICBpbnQgX01fcmVmY291bnQ7DQoNCiAg ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf X2ZuLCBpbnQgX19pbmRleCwNCiAgICAgICAgICAgICAgICAgICAgIF9DYWxs YmFja19saXN0KiBfX2NiKQ0KICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9m bihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsg fQ0KDQogICAgICB2b2lkDQogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyAr K19NX3JlZmNvdW50OyB9DQoNCiAgICAgIGludA0KICAgICAgX01fcmVtb3Zl X3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07IH0NCiAgICB9 Ow0KDQogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7DQoNCiAg ICB2b2lkDQogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhy b3coKTsNCg0KICAgIHZvaWQNCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2 b2lkKTsNCg0KDQogICAgc3RydWN0IF9Xb3Jkcw0KICAgIHsNCiAgICAgIHZv aWQqIF9NX3B3b3JkOw0KICAgICAgbG9uZyBfTV9pd29yZDsNCiAgICB9Ow0K DQogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkcyA9IDg7DQog ICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOw0KICAg IF9Xb3JkcyBfTV9kdW1teTsNCiAgICBfV29yZHMqIF9NX3dvcmRzOw0KICAg IGludCBfTV93b3JkX2xpbWl0Ow0KDQogICAgX1dvcmRzJg0KICAgIF9NX2dy b3dfd29yZHMoaW50IF9faW5kZXgpOw0KDQoNCiAgICBsb2NhbGUgX01faW9z X2xvY2FsZTsNCg0KICAgIHZvaWQNCiAgICBfTV9pbml0KCk7DQoNCiAgcHVi bGljOg0KDQoNCg0KDQoNCiAgICBjbGFzcyBJbml0DQogICAgew0KICAgICAg ZnJpZW5kIGNsYXNzIGlvc19iYXNlOw0KICAgIHB1YmxpYzoNCiAgICAgIElu aXQoKTsNCiAgICAgIH5Jbml0KCk7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQog ICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsNCg0KICAgICAgc3Rh dGljIHZvaWQNCiAgICAgIF9TX2lvc19kZXN0cm95KCk7DQoNCiAgICBwcml2 YXRlOg0KICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0Ow0KICAg ICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87DQogICAgfTsN Cg0KDQogICAgaW5saW5lIGZtdGZsYWdzDQogICAgZmxhZ3MoKSBjb25zdCB7 IHJldHVybiBfTV9mbGFnczsgfQ0KDQogICAgaW5saW5lIGZtdGZsYWdzDQog ICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7DQogICAgICBmbXRm bGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgPSBfX2Zt dGZsOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGlu ZSBmbXRmbGFncw0KICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7 DQogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01f ZmxhZ3MgfD0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9 DQoNCiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9f Zm10ZmwsIGZtdGZsYWdzIF9fbWFzaykNCiAgICB7DQogICAgICBmbXRmbGFn cyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgJj0gfl9fbWFz azsNCiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsNCiAg ICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZA0K ICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9f bWFzazsgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICBwcmVjaXNp b24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0NCg0KICAgIGlu bGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19w cmVjKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVj aXNpb247DQogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7DQogICAgICBy ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUN CiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9DQoNCiAg ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHdpZHRoKHN0cmVhbXNpemUgX193 aWRlKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0 aDsNCiAgICAgIF9NX3dpZHRoID0gX193aWRlOw0KICAgICAgcmV0dXJuIF9f b2xkOw0KICAgIH0NCg0KICAgIHN0YXRpYyBib29sDQogICAgc3luY193aXRo X3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7DQoNCg0KICAgIGxvY2FsZQ0K ICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgaW5saW5l IGxvY2FsZQ0KICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s b2NhbGU7IH0NCg0KDQogICAgc3RhdGljIGludA0KICAgIHhhbGxvYygpIHRo cm93KCk7DQoNCiAgICBpbmxpbmUgbG9uZyYNCiAgICBpd29yZChpbnQgX19p eCkNCiAgICB7DQogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01f d29yZF9saW1pdCkNCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29y ZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOw0KICAgICAgcmV0dXJu IF9fd29yZC5fTV9pd29yZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZCom DQogICAgcHdvcmQoaW50IF9faXgpDQogICAgew0KICAgICAgX1dvcmRzJiBf X3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpDQogICAgICAgICAgICAg ICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jkcyhf X2l4KTsNCiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7DQogICAgfQ0K DQoNCiAgICB+aW9zX2Jhc2UoKTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgaW9z X2Jhc2UoKTsNCg0KDQogIHByaXZhdGU6DQogICAgaW9zX2Jhc2UoY29uc3Qg aW9zX2Jhc2UmKTsNCg0KICAgIGlvc19iYXNlJg0KICAgIG9wZXJhdG9yPShj b25zdCBpb3NfYmFzZSYpOw0KDQogIH07DQoNCg0KICBpbmxpbmUgaW9zX2Jh c2UmDQogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJu IF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9ib29s YWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNl dGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJuIF9fYmFzZTsN CiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd2Jhc2UoaW9zX2Jh c2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpz aG93YmFzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGlu ZSBpb3NfYmFzZSYNCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQ0K ICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOw0K ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2Um DQogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9f YmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9zaG93cG9p bnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNldGYo aW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAg fQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd3Bvcyhpb3NfYmFzZSYg X19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dw b3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z X2Jhc2UmDQogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7DQogICAgcmV0 dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2tp cHdzKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6c2tpcHdzKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN CiAgaW5saW5lIGlvc19iYXNlJg0KICBub3NraXB3cyhpb3NfYmFzZSYgX19i YXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdz KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i YXNlJg0KICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVy biBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vdXBw ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5z ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVybiBfX2Jhc2U7 DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHVuaXRidWYoaW9zX2Jh c2UmIF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6 dW5pdGJ1Zik7DQogICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxp bmUgaW9zX2Jhc2UmDQogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQ0K ICB7DQogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOw0K ICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUgaW9zX2Jh c2UmDQogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq dXN0ZmllbGQpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s aW5lIGlvc19iYXNlJg0KICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsN CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFk anVzdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s aW5lIGlvc19iYXNlJg0KICByaWdodChpb3NfYmFzZSYgX19iYXNlKQ0KICB7 DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6 YWRqdXN0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQog IGlubGluZSBpb3NfYmFzZSYNCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpDQog IHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6 YmFzZWZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s aW5lIGlvc19iYXNlJg0KICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNl ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg aW9zX2Jhc2UmDQogIG9jdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs ZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlv c19iYXNlJg0KICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRm aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp b3NfYmFzZSYNCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7 DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19i YXNlOjpmbG9hdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzDQojIDM4 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf c3RyZWFtYnVmLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m aWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi IDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN CiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMNCiMgNDMg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z dHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyA0NCAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1 Zi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6 ZQ0KICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+JiBfaW9zLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sDQogICAgICAgICAg ICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q IF9fc2JvdXQpOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zg0K ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl IGludF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsNCg0KDQogICAgICB0 eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KICAgICAg dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlw ZT4gX19zdHJlYW1idWZfdHlwZTsNCg0KICAgICAgZnJpZW5kIGNsYXNzIGJh c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZyaWVu ZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ Ow0KICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBl LCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1 Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZy aWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJh aXRzX3R5cGU+Ow0KDQogICAgICBmcmllbmQgc3RyZWFtc2l6ZQ0KICAgICAg X19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4mIF9faW9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19z Ym91dCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0KDQoNCg0KDQogICAgICBj aGFyX3R5cGUqIF9NX2J1ZjsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZf c2l6ZTsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7DQoN Cg0KDQogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOw0KDQoNCg0KDQoNCg0K ICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7DQogICAgICBjaGFyX3R5cGUq IF9NX2luX2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOw0KICAg ICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOw0KICAgICAgY2hhcl90eXBlKiBf TV9vdXRfY3VyOw0KICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOw0KDQoN CiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOw0KDQoNCiAgICAg IGxvY2FsZSBfTV9idWZfbG9jYWxlOw0KDQoNCiAgICAgIGJvb2wgX01fYnVm X2xvY2FsZV9pbml0Ow0KDQoNCg0KDQoNCg0KICAgICAgaW50X3R5cGUgX01f cGJhY2tfc2l6ZTsNCiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7DQogICAg ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90 eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tf aW5pdDsNCg0KDQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fcGJhY2tfY3Jl YXRlKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQ0K ICAgICAgICAgIHsNCiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9N X2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICAgIGludF90eXBlIF9f bGVuID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7DQogICAgICAgICAg ICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xl bik7DQogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1 cjsNCiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5k Ow0KICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ss IF9NX3BiYWNrICsgX19sZW4pOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5p dCA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQoNCg0KDQogICAg ICB2b2lkDQogICAgICBfTV9wYmFja19kZXN0cm95KCkNCiAgICAgIHsNCiAg ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpDQogICAgICAgICAgew0KDQogICAg ICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9w YmFjazsNCg0KDQogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAw Ow0KICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9l bmQgLSBfTV9wYmFjazsNCiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9s ZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsNCiAgICAgICAgICAg IGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pDQogICAgICAgICAgICAg IF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsNCg0KICAg ICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZl ICsgX19vZmZfY3VyLA0KICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj a19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7DQogICAgICAgICAgICBfTV9wYmFj a19jdXJfc2F2ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2Vu ZF9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9 IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCiAgICAgIHZv aWQNCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOw0KICAg ICAgICBfTV9pbl9jdXIgKz0gX19uOw0KICAgICAgICBpZiAoX190ZXN0b3V0 ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX291dF9jdXIgKz0g X19uOw0KICAgICAgfQ0KIyAxOTMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgICAgdm9p ZA0KICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsNCg0KICAg ICAgICBfTV9vdXRfY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdGlu ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX2luX2N1ciArPSBf X247DQogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkNCiAg ICAgICAgICB7DQogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1 cjsNCg0KICAgICAgICAgICAgaWYgKF9fdGVzdGluKQ0KICAgICAgICAgICAg ICBfTV9pbl9lbmQgKz0gX19uOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0K DQoNCg0KICAgICAgb2ZmX3R5cGUNCiAgICAgIF9NX291dF9idWZfc2l6ZSgp DQogICAgICB7DQogICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsNCiAgICAg ICAgaWYgKF9NX291dF9jdXIpDQogICAgICAgICAgew0KDQogICAgICAgICAg ICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpDQogICAgICAgICAgICAgIF9f cmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsN Cg0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IF9N X291dF9lbmQgLSBfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAg cmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KIyAyMzYgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0K ICAgICAgdm9pZA0KICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkN CiAgICAgIHsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4p DQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVm KTsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQ0KICAg ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOw0KICAgICAgfQ0K DQogICAgICB2b2lkDQogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5 cGUgX19vZmYpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0aW4gPSBf TV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAgICAgICBib29sIF9fdGVzdG91 dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KICAgICAgICBpZiAoX190 ZXN0aW4pDQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1Ziwg X01fYnVmICsgX19vZmYpOw0KICAgICAgICBpZiAoX190ZXN0b3V0KQ0KICAg ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7DQog ICAgICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5h dGUodm9pZCkNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl Ow0KDQogICAgICAgIGlmIChfTV9idWYpDQogICAgICAgICAgew0KICAgICAg ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pDQogICAgICAgICAg ICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9j dXIgPT0gX01faW5fZW5kOw0KICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBp b3NfYmFzZTo6b3V0KQ0KICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9i ZWcgPT0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7 DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9 DQoNCiAgcHVibGljOg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX3N0 cmVhbWJ1ZigpDQogICAgICB7DQogICAgICAgIF9NX2J1Zl91bmlmaWVkID0g ZmFsc2U7DQogICAgICAgIF9NX2J1Zl9zaXplID0gMDsNCiAgICAgICAgX01f YnVmX3NpemVfb3B0ID0gMDsNCiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl OjpvcGVubW9kZSgwKTsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g ZmFsc2U7DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBwdWJp bWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQ0KICAgICAgew0KICAgICAgICBs b2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOw0KICAgICAgICB0aGlzLT5p bWJ1ZShfX2xvYyk7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAgIH0N Cg0KICAgICAgbG9jYWxlDQogICAgICBnZXRsb2MoKSBjb25zdA0KICAgICAg ew0KICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQ0KICAgICAgICAg IHJldHVybiBfTV9idWZfbG9jYWxlOw0KICAgICAgICBlbHNlDQogICAgICAg ICAgcmV0dXJuIGxvY2FsZSgpOw0KICAgICAgfQ0KDQoNCiAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUqDQogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms IHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVm KF9fcywgX19uKTsgfQ0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgcHVic2Vl a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXks DQogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1 cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0NCg0K ICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19z cCwNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJl dHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0NCg0KICAgICAg aW50DQogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9 DQoNCg0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBpbl9hdmFpbCgpDQog ICAgICB7DQogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7DQogICAgICAgIGlm IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQ0KICAgICAg ICAgIHsNCiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0KICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xl biA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7DQog ICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j dXIgLSBfTV9wYmFjazsNCiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2 ZV9sZW4gLSBfX3BiYWNrX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRy KCkgLSB0aGlzLT5ncHRyKCk7DQogICAgICAgICAgfQ0KICAgICAgICBlbHNl DQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsNCiAgICAg ICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0K ICAgICAgc25leHRjKCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIHJldHVybiAodGhp cy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkp Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc2J1bXBjKCk7 DQoNCiAgICAgIGludF90eXBlDQogICAgICBzZ2V0YygpDQogICAgICB7DQog ICAgICAgIGludF90eXBlIF9fcmV0Ow0KICAgICAgICBpZiAoX01faW5fY3Vy ICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICBfX3JldCA9 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOw0K ICAgICAgICBlbHNlDQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZs b3coKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAg ICBzdHJlYW1zaXplDQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19z LCBfX24pOyB9DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRiYWNr YyhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHN1 bmdldGMoKTsNCg0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc3B1dGMoY2hh cl90eXBlIF9fYyk7DQoNCiAgICAgIHN0cmVhbXNpemUNCiAgICAgIHNwdXRu KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAg IHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0NCg0KICAgIHBy b3RlY3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpDQogICAgICA6IF9N X2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwNCiAgICAgIF9NX2J1Zl9z aXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4oMTAyNCkpLCBfTV9idWZf dW5pZmllZChmYWxzZSksDQogICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1 cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3Vy KDApLA0KICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6 b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwNCiAgICAg IF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSks IF9NX3BiYWNrKF9fbnVsbCksDQogICAgICBfTV9wYmFja19jdXJfc2F2ZShf X251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBfTV9wYmFja19p bml0KGZhbHNlKQ0KICAgICAgeyB9DQoNCg0KICAgICAgY2hhcl90eXBlKg0K ICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0NCg0K ICAgICAgY2hhcl90eXBlKg0KICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJu IF9NX2luX2N1cjsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBlZ3B0 cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQ0KDQogICAgICB2b2lk DQogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0N Cg0KICAgICAgdm9pZA0KICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywg Y2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkNCiAgICAg IHsNCiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOw0KICAgICAgICBfTV9p bl9jdXIgPSBfX2duZXh0Ow0KICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7 DQogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkNCiAgICAgICAgICBfTV9tb2Rl ID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsNCiAgICAgIH0NCg0KDQogICAg ICBjaGFyX3R5cGUqDQogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N X291dF9iZWc7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgcHB0cigp IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0NCg0KICAgICAgY2hhcl90 eXBlKg0KICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5k OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHBidW1wKGludCBfX24pIHsgX01f b3V0X2N1ciArPSBfX247IH0NCg0KICAgICAgdm9pZA0KICAgICAgc2V0cChj aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpDQogICAgICB7 DQogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOw0K ICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOw0KICAgICAgICBpZiAoIShf TV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkN CiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7 DQogICAgICB9DQoNCg0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGlt YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgICB7DQogICAgICAgIF9N X2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7DQogICAgICAgIGlmIChfTV9idWZf bG9jYWxlICE9IF9fbG9jKQ0KICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBf X2xvYzsNCiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVh bWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qDQogICAgICBzZXRidWYoY2hhcl90 eXBlKiwgc3RyZWFtc2l6ZSkNCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0NCg0K ICAgICAgdmlydHVhbCBwb3NfdHlwZQ0KICAgICAgc2Vla29mZihvZmZfdHlw ZSwgaW9zX2Jhc2U6OnNlZWtkaXIsDQogICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQog ICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAg ICAgIHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtwb3MocG9zX3R5cGUs DQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJldHVybiBwb3NfdHlw ZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAg ICBzeW5jKCkgeyByZXR1cm4gMDsgfQ0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQ0KDQog ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu dF90eXBlDQogICAgICB1bmRlcmZsb3coKQ0KICAgICAgeyByZXR1cm4gdHJh aXRzX3R5cGU6OmVvZigpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUN CiAgICAgIHVmbG93KCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19y ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190ZXN0 ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7DQogICAgICAgIGJv b2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf TV9pbl9lbmQ7DQogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBl bmRpbmcpDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAg ICArK19NX2luX2N1cjsNCiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAgICAgICAg KytfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9f cmV0Ow0KICAgICAgfQ0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAg ICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkN CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQ0KDQoNCiAg ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHZpcnR1 YWwgaW50X3R5cGUNCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRz X3R5cGU6OmVvZigpKQ0KICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVv ZigpOyB9DQojIDUxNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzDQogICAgcHJpdmF0ZToNCiAg ICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7 DQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmDQogICAgICBvcGVyYXRvcj0o Y29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQogICAgfTsNCg0KfQ0KDQoN Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMw0KbmFt ZXNwYWNlIHN0ZCB7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBzYnVtcGMoKQ0KICAgIHsNCiAgICAgIGlu dF90eXBlIF9fcmV0Ow0KICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9j dXIgPCBfTV9pbl9lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFyX3R5 cGUgX19jID0gKmdwdHIoKTsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgx KTsNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlw ZShfX2MpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0 ID0gdGhpcy0+dWZsb3coKTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpp bnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykNCiAgICB7DQogICAg ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01f aW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsNCiAgICAgIGJvb2wg X190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2Ms IHRoaXMtPmdwdHIoKVstMV0pOw0KICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwg X190ZXN0bmUpDQogICAgICAgIF9fcmV0ID0gcGJhY2tmYWlsKHRyYWl0c190 eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAgIGVsc2UNCiAgICAgICAg ew0KICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsNCiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigp KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90 eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K ICAgIHN1bmdldGMoKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0Ow0K ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIp DQogICAgICAgIHsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N X2luX2N1cik7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX19y ZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsNCiAgICAgIHJldHVybiBfX3JldDsN CiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3B1dGMoY2hhcl90eXBlIF9fYykN CiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGlmIChfTV9v dXRfYnVmX3NpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgICpfTV9vdXRf Y3VyID0gX19jOw0KICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAg ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp Ow0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0gdGhp cy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOw0K ICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6 ZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9f YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICBp ZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg ICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWlu aW5nKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf TV9pbl9jdXIsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0gX19s ZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAgICAg ICAgX01faW5fY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAgICAgfQ0KDQog ICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOw0KICAg ICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlw ZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShf X2MpKTsNCiAgICAgICAgICAgICAgICAgICsrX19yZXQ7DQogICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy biBfX3JldDsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXpl DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p DQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICB3 aGlsZSAoX19yZXQgPCBfX24pDQogICAgICAgIHsNCiAgICAgICAgICBvZmZf dHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsNCiAgICAgICAg ICBpZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsNCiAg ICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBf X3JlbWFpbmluZyk7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9NX291dF9jdXIsIF9fcywgX19sZW4pOw0KICAgICAgICAgICAgICBfX3Jl dCArPSBfX2xlbjsNCiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOw0KICAg ICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAg ICAgfQ0KDQogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVy Zmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOw0KICAgICAg ICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAgICAg ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAg ICAgICAgICAgICAgICAgKytfX3M7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAg ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAg ICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fY29weV9z dHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAgICAgICAgIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQ0KICB7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu dF90eXBlOw0KDQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAg IHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0K ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0Ow0KICAgICAgYm9vbCBfX3Rlc3Rw dXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAg IHRyeSB7DQogICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXpl ICE9IC0xKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9feHRyY3QgPSBf X3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsNCiAg ICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7DQogICAgICAgICAgICBfX3Ni aW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOw0KICAgICAgICAgICAgaWYg KF9feHRyY3QgPT0gX19idWZzaXplKQ0KICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmluLT5zZ2V0YygpOw0K ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpDQog ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIF9faW9z LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgICAg ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7DQogICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpIHsNCiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkNCiAgICAgICAgICB0aHJv dzsNCiAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQp9DQoj IDUzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv cy5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2Jhc2ljX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMw0K IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c2J1Zl9pdGVyLmgiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xh c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9y PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl Ow0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsNCg0KICAgIHBy aXZhdGU6DQogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAg IGJvb2wgX01fZmFpbGVkOw0KDQogICAgcHVibGljOg0KICAgICAgaW5saW5l DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z KSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01f ZmFpbGVkKCFfTV9zYnVmKSB7IH0NCg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVy YXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQ0KICAgICAgOiBf TV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9DQoNCiAgICAg IG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcj0oX0NoYXJU IF9fYyk7DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBv cGVyYXRvciooKSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0K DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3Ir KyhpbnQpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAg ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgYm9v bA0KICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gX01fZmFpbGVkOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgaW5saW5lIG9zdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hh clQgX19jKQ0KICAgIHsNCiAgICAgIGlmICghX01fZmFpbGVkICYmDQogICAg ICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19j KSxfVHJhaXRzOjplb2YoKSkpDQogICAgICBfTV9mYWlsZWQgPSB0cnVlOw0K ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz IGlzdHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxp bnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6 b2ZmX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0No YXJUJj4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90 eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlw ZTsNCg0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOw0KDQogICAgcHJp dmF0ZToNCg0KDQoNCg0KDQoNCg0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9N X3NidWY7DQogICAgICBpbnRfdHlwZSBfTV9jOw0KDQogICAgcHVibGljOg0K ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkNCiAgICAgIDog X01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0NCg0KICAgICAgaXN0cmVh bWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQ0KICAg ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9DQoNCiAg ICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykg dGhyb3coKQ0KICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIpIHsgfQ0K DQoNCg0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIG9wZXJhdG9yKigpIGNv bnN0DQogICAgICB7DQoNCiAgICAgICAgY2hhcl90eXBlIF9fcmV0Ow0KICAg ICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90 eXBlPigtMikpDQogICAgICAgICAgX19yZXQgPSBfTV9jOw0KICAgICAgICBl bHNlIGlmIChfTV9zYnVmKQ0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OnRvX2NoYXJfdHlwZShfTV9zYnVmLT5zZ2V0YygpKTsNCiAgICAgICAg ZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl Pih0cmFpdHNfdHlwZTo6ZW9mKCkpOw0KICAgICAgICByZXR1cm4gX19yZXQ7 DQogICAgICB9DQoNCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYNCiAg ICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fc2J1 ZikNCiAgICAgICAgICBfTV9zYnVmLT5zYnVtcGMoKTsNCiAgICAgICAgX01f YyA9IC0yOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAg ICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQ0KICAgICAgb3BlcmF0b3IrKyhp bnQpDQogICAgICB7DQogICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBf X29sZCA9ICp0aGlzOw0KICAgICAgICBpZiAoX01fc2J1ZikNCiAgICAgICAg ICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9N X2MgPSAtMjsNCiAgICAgICAgcmV0dXJuIF9fb2xkOw0KICAgICAgfQ0KDQog ICAgICBib29sDQogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVy X3R5cGUmIF9fYikNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190aGlzZW9m ID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsNCiAg ICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYNCiAgICAgICAgICAg ICAgICAgICAgICB8fCBfX2IuX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsN CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190 aGlzZW9mICYmICFfX2Jlb2YpKTsNCiAgICAgIH0NCg0KDQoNCg0KICAgICAg Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl JiBfX2IpIGNvbnN0DQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9m ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2Vv ZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQog ICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAg ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7 DQogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9f dGhpc2VvZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCiAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAg ICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry YWl0cz4mIF9fYikNCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAg ICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7 IH0NCn0NCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMN CiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZV9mYWNldHMuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMNCiMgMzcg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j dGltZS5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIg Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2N0aW1lLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzIDQNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMgNTMgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzDQpuYW1l c3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6Y2xvY2tfdDsNCiAgdXNpbmcgOjp0 aW1lX3Q7DQogIHVzaW5nIDo6dG07DQoNCiAgdXNpbmcgOjpjbG9jazsNCiAg dXNpbmcgOjpkaWZmdGltZTsNCiAgdXNpbmcgOjpta3RpbWU7DQogIHVzaW5n IDo6dGltZTsNCiAgdXNpbmcgOjphc2N0aW1lOw0KICB1c2luZyA6OmN0aW1l Ow0KICB1c2luZyA6OmdtdGltZTsNCiAgdXNpbmcgOjpsb2NhbHRpbWU7DQog IHVzaW5nIDo6c3RyZnRpbWU7DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaW9zLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCg0K DQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRz L2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw ZV9iYXNlLmgiIDMNCiAgc3RydWN0IGN0eXBlX2Jhc2UNCiAgew0KDQogICAg dHlwZWRlZiBpbnQqIF9fdG9fdHlwZTsNCg0KDQoNCiAgICB0eXBlZGVmIHVu c2lnbmVkIGludCBtYXNrOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVy ID0gMHgwMDAwMDAwMTsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9 IDB4MDAwMDAwMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAw eDAwMDA0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gMHgw MDAwMDAwNDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAweDAw MDAwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gMHgwMDAw MDAwODsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IDB4MDAwMDgw MDA7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSAweDAwMDAyMDAw Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMHgwMDAwMDAyMDsN CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IDB4MDAwMDAwMTA7DQog ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSAoMHgwMDAwNDAwMCB8IDB4 MDAwMDAwMDQpOw0KICB9Ow0KIyA1NCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBfX2N0eXBl X2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGlj IGN0eXBlX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNo YXJfdHlwZSoNCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29u c3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QNCiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQ0K DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBzY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMo X19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUq DQogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJl dHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9DQoN CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19j KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2Mp OyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRvdXBwZXIo Y2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkp OyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG9sb3dlcihjaGFyX3R5 cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dl cihfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRv bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8s IF9faGkpOyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hh ciBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihf X2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXIqDQogICAgICB3aWRlbihjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9f dG8pIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xv LCBfX2hpLCBfX3RvKTsgfQ0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3co Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQog ICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBuYXJyb3coY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg ICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0DQogICAg ICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1 bHQsIF9fdG8pOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNp dA0KICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMg PSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0 dWFsDQogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9DQoNCiAg ICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBfX20sIGNoYXJf dHlwZSBfX2MpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgIG1hc2sqIF9f dmVjKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh cl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0K DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Rv dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7DQoNCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAw Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4o Y2hhcikgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq DQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy KiBfX2hpLA0KICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNv bnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQogICAgICBkb19uYXJy b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7DQoNCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93 KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp LA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rl c3QpIGNvbnN0ID0gMDsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVf YWJzdHJhY3RfYmFzZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0K ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOw0KDQogICAgICBleHBsaWNp dA0KICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9h YnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0NCg0KICAgICAgc3Rh dGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgIHByb3RlY3RlZDoNCiAgICAgIHZp cnR1YWwNCiAgICAgIH5jdHlwZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGJv b2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25z dA0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KICAgICAgdmlydHVhbCBj b25zdCBjaGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv bnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBf X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJu IF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRv X3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJu IF9fYzsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAg ICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b2xvd2VyKGNoYXJf dHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7IH0NCg0KICAg ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2Vy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNo YXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAg ICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXIqDQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBj b25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyDQog ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z dA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0NCg0KICAgICAgdmlydHVh bCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJyb3coY29uc3QgY2hh cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdA0K ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJU Pjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY3R5cGU8Y2hh cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+DQogICAg ew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw ZTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIGJvb2wgX01fZGVsOw0KICAg ICAgX190b190eXBlIGNvbnN0JiBfTV90b3VwcGVyOw0KICAgICAgX190b190 eXBlIGNvbnN0JiBfTV90b2xvd2VyOw0KICAgICAgY29uc3QgbWFzayogY29u c3QmIF9NX2N0YWJsZTsNCiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOw0K DQogICAgcHVibGljOg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQog ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOw0KDQogICAgICBleHBsaWNp dA0KICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wg X19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBp bmxpbmUgYm9vbA0KICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z dDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBpcyhjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykg Y29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgc2Nh bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciog X19oaSkgY29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAg ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGkpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg dmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIGNvbnN0IG1hc2sq DQogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJu IF9NX3RhYmxlOyB9DQoNCiAgICAgIGNvbnN0IG1hc2sqDQogICAgICBjbGFz c2ljX3RhYmxlKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fY3RhYmxl OyB9DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBf X20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAg ZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0 Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRv X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAg ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAg ICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhcikgY29u c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dp ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJf dHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQog ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z dDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGksDQogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo YXIqIF9fZGVzdCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog ICAgY29uc3QgY3R5cGU8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PGN0eXBlPGNo YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7DQojIDM5MiAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMN CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy Yy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAzDQogIGJv b2wNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhtYXNrIF9fbSwgY2hhciBfX2Mp IGNvbnN0DQogIHsgcmV0dXJuIF9NX3RhYmxlW19fY10gJiBfX207IH0NCg0K ICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIGlzKGNvbnN0IGNo YXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBj b25zdA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQ0KICAgICAg Kl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107DQogICAgcmV0dXJuIF9f aGlnaDsNCiAgfQ0KDQogIGNvbnN0IGNoYXIqDQogIGN0eXBlPGNoYXI+OjoN CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0 IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0KICAgIHdoaWxlIChfX2xvdyA8 IF9faGlnaCAmJiAhKF9NX3RhYmxlWypfX2xvd10gJiBfX20pKQ0KICAgICAg KytfX2xvdzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCg0KICBjb25zdCBj aGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNjYW5fbm90KG1hc2sgX19tLCBj b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdA0K ICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoDQogICAgICAgICAgICYm IChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQ0KICAgICAgKytfX2xv dzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCiMgMzkzICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgi IDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs YXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+DQogICAg ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25z dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJvdGVjdGVk Og0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfQ0K ICAgIH07DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY3R5cGVfYnluYW1lPGNo YXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsN Cg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvY29kZWN2dC5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KIyAxNzMgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQu aCIgMw0KICBjbGFzcyBjb2RlY3Z0X2Jhc2UNCiAgew0KICBwdWJsaWM6DQog ICAgZW51bSByZXN1bHQNCiAgICB7DQogICAgICBvaywNCiAgICAgIHBhcnRp YWwsDQogICAgICBlcnJvciwNCiAgICAgIG5vY29udg0KICAgIH07DQogIH07 DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3Mg X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UNCiAgICA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlDQogICAgew0KICAgIHB1Ymxp YzoNCg0KICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1 bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOw0KICAg ICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5cGVk ZWYgX1N0YXRlVCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHJlc3VsdA0KICAg ICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl KiBfX2Zyb20sDQogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu ZCwNCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QN CiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRl LCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQp Ow0KICAgICAgfQ0KDQogICAgICByZXN1bHQNCiAgICAgIHVuc2hpZnQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90 eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNo aWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQ0KDQog ICAgICByZXN1bHQNCiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNv bnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy b21fbmV4dCwNCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5f dHlwZSogX190b19lbmQsDQogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRv X2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQs DQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwg X190b19uZXh0KTsNCiAgICAgIH0NCg0KICAgICAgaW50DQogICAgICBlbmNv ZGluZygpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2VuY29kaW5nKCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgYWx3YXlzX25v Y29udigpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2Fsd2F5c19ub2NvbnYoKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGxlbmd0 aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsg fQ0KDQogICAgICBpbnQNCiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJv dygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0N Cg0KICAgIHByb3RlY3RlZDoNCiAgICAgIGV4cGxpY2l0DQogICAgICBfX2Nv ZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh bGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg IH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2aXJ0 dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29u c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl KiYgX19mcm9tX25leHQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0 dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0 YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9f aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21f ZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAg ICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu ZCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGlu ZygpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGJvb2wN CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsN Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBz dGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAg ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf X21heCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOw0KICAgIH07DQoN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0 DQogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVy blQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoN CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5 cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICBzdGF0aWMgbG9jYWxlOjpp ZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvZGVjdnQoc2l6ZV90 IF9fcmVmcyA9IDApDQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PF9JbnRlcm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQ0KDQog ICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQo KSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U LCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBs b2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVU Pjo6aWQ7DQojIDU5NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvY29kZWN2dC5oIiAzDQogIHRlbXBsYXRlPD4NCiAgICBjbGFz cyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4NCiAgICA6IHB1Ymxp YyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRl X3Q+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFy IGludGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBl Ow0KICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsNCg0KDQog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQN CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJv dGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQoKTsNCg0K ICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBl JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBp bnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVy bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ow0KDQogICAg ICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBl JiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBk b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tLA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv bV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9f ZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAg IGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2 aXJ0dWFsIGludA0KICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z dDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21heF9sZW5ndGgo KSBjb25zdCB0aHJvdygpOw0KICB9Ow0KIyA3MDAgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5 cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBw dWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+DQog ICAgew0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2Rl Y3Z0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApDQog ICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihf X3JlZnMpIHsgfQ0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAg ICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQojIDQxNiAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh Y2V0cy5oIiAyIDMNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgX051bWVyaWNfZ2V0Ow0KDQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xh c3MgX0Zvcm1hdF9jYWNoZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hh cl90cmFpdHM8X0NoYXJUPiB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl Ow0KDQoNCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7DQogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICAg ICAgZnJpZW5kIGNsYXNzIF9OdW1lcmljX2dldDsNCiAgICAgIGZyaWVuZCBj bGFzcyBudW1fZ2V0PF9DaGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbnVt X3B1dDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9D aGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47 DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ8X0NoYXJUPjsNCiAgICAg IGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsNCg0KDQoNCg0KICAg ICAgc3RhdGljIGludCBfU19wd29yZF9peDsNCg0KDQoNCiAgICAgIGJvb2wg X01fdmFsaWQ7DQoNCg0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19s aXRlcmFsc1tdOw0KDQoNCg0KDQogICAgICBlbnVtDQogICAgICB7DQogICAg ICAgIF9TX21pbnVzLA0KICAgICAgICBfU19wbHVzLA0KICAgICAgICBfU194 LA0KICAgICAgICBfU19YLA0KICAgICAgICBfU19kaWdpdHMsDQogICAgICAg IF9TX2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwNCiAgICAgICAgX1Nf dWRpZ2l0cyA9IF9TX2RpZ2l0c19lbmQsDQogICAgICAgIF9TX3VkaWdpdHNf ZW5kID0gX1NfdWRpZ2l0cyArIDE2LA0KICAgICAgICBfU19lZSA9IF9TX2Rp Z2l0cyArIDE0LA0KICAgICAgICBfU19FZSA9IF9TX3VkaWdpdHMgKyAxNA0K ICAgICAgfTsNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxf cG9pbnQ7DQoNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5k c19zZXA7DQoNCg0KDQogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsN CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsNCg0KDQoNCiAgICAg IGJvb2wgX01fdXNlX2dyb3VwaW5nOw0KDQoNCg0KICAgICAgc3RyaW5nIF9N X2dyb3VwaW5nOw0KDQogICAgICBfRm9ybWF0X2NhY2hlKCk7DQoNCiAgICAg IH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0NCg0KDQoNCg0KICAgICAg c3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioNCiAgICAgIF9TX2dldChp b3NfYmFzZSYgX19pb3MpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9wb3B1 bGF0ZShpb3NfYmFzZSYpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg X1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNl JiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7DQogICAgfTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50IF9Gb3JtYXRfY2FjaGU8 X0NoYXJUPjo6X1NfcHdvcmRfaXg7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPg0KICAgIGNvbnN0IGNoYXIgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ OjoNCiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVm MDEyMzQ1Njc4OUFCQ0RFRiI7DQoNCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9j YWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgpOw0KDQoNCg0KDQoNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog ICAgY2xhc3MgX051bWVyaWNfZ2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KDQogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQg Y2xhc3MgbnVtX2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy LCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1l X2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFt ZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ7DQog ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRl clQ+DQogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDsNCiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAg IGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsNCiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBj bGFzcyBtb25leV9wdXQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZXhwbGlj aXQNCiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs DQogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9DQoNCiAgICAgIGl0ZXJfdHlw ZQ0KICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90 eXBlIF9fZW5kKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBjbGFzcyBudW1f Z2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAgICB7DQogICAgcHVibGlj Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0 eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFy X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7DQoNCiAgICAgIHN0YXRp YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlw ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQ0KDQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KDQog ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICAg IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0NCiMgNjA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0 dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0N Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikg Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19p bywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQojIDYyOSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVy X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywN CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBf X3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQs IF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0 ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QNCiAgICAg IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly dHVhbCB+bnVtX2dldCgpIHsgfQ0KDQoNCg0KDQoNCiAgICAgIHZvaWQNCiAg ICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAg ICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJf dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiwgYm9vbCYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl DQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl JiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9ydCYpIGNvbnN0Ow0KICAgICAg dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGludCYp IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f Z2V0IChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz ZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsNCg0KDQoNCg0KDQogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwN CiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmKSBjb25zdDsNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7DQoNCg0K DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChp dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsNCg0K ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsDQogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LA0KICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7DQogICAgfTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog ICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOw0K DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PGNoYXIs IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6DQogICAgX01fZXh0cmFj dChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLA0KICAgICAgICAg ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAgICAgIGludCYgX19i YXNlLCBib29sIF9fZnApIGNvbnN0Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIF9O dW1lcmljX3B1dA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0 ZXJfdHlwZTsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAg ICAgX051bWVyaWNfcHV0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg IH5fTnVtZXJpY19wdXQoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgY2xhc3Mg bnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRp YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wg X192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBf X2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls bCwgbG9uZyBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19z LCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5 cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z dA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f dik7IH0NCiMgNzczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf dHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgICB7IHJldHVy biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBp dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg X19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGxvbmcgZG91Ymxl IF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwg X19maWxsLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp bGwsDQogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgICAg eyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0K ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1fcHV0 KCkgeyB9Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBi b29sIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQog ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf X2ZpbGwsIGxvbmcgX192KSBjb25zdDsNCg0KDQoNCg0KDQoNCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0 Ow0KDQoNCg0KDQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAg IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls bCwgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBp b3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikg Y29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2Rl Y2ltYWxfcG9pbnQ7DQogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3Nl cDsNCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190 eXBlIF9NX3RydWVuYW1lOw0KICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2Vu YW1lOw0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51 bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKQ0KICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0NCg0K ICAgICAgZXhwbGljaXQNCiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19j bG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9 DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNv bnN0DQogICAgICB7IHJldHVybiBkb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQ0KDQogICAg ICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIGRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg ICAgIHRydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3RydWVu YW1lKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGZhbHNlbmFt ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19mYWxzZW5hbWUoKTsgfQ0K DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1 bmN0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk b19kZWNpbWFsX3BvaW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2Rl Y2ltYWxfcG9pbnQ7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAg ICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4g X01fdGhvdXNhbmRzX3NlcDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0K ICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f Z3JvdXBpbmc7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg ICAgZG9fdHJ1ZW5hbWUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdHJ1 ZW5hbWU7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAg ZG9fZmFsc2VuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNl bmFtZTsgfQ0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2luaXRpYWxpemVf bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6 aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxfQ2hhclQ+Ojpf TV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQ0KICAgIHsNCg0K ICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0 PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j bG9jKTsNCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1 bmN0PF9DaGFyVD4NCiAgICB7DQogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j YWxlX251bXB1bmN0Ow0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBu dW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz ID0gMCkNCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpDQogICAg ICB7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u dW1wdW5jdCwgX19zKTsNCiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5j dChfTV9jX2xvY2FsZV9udW1wdW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90 ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtcHVuY3RfYnluYW1l KCkNCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u dW1wdW5jdCk7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPg0KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpm YWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk IGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29sbGF0ZShzaXplX3Qg X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAg ICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBj b25zdCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8y LCBfX2hpMik7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIHRyYW5z Zm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xv LCBfX2hpKTsgfQ0KDQogICAgICBsb25nDQogICAgICBoYXNoKGNvbnN0IF9D aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQ0KDQogIHBy b3RlY3RlZDoNCiAgICAgIH5jb2xsYXRlKCkgeyB9DQoNCiAgICAgIHZpcnR1 YWwgaW50DQogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEs IGNvbnN0IF9DaGFyVCogX19oaTEsDQogICAgICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb190cmFuc2Zv cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv bnN0Ow0KDQogICAgICB2aXJ0dWFsIGxvbmcNCiAgICAgIGRvX2hhc2goY29u c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0Ow0K ICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxv Y2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsNCg0KDQogIHRlbXBsYXRl PD4NCiAgICBpbnQNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19jb21wYXJlKGNv bnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBfX2hpMSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25z dCBjaGFyKiBfX2hpMikgY29uc3Q7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0 cmluZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBj aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsNCg0KICB0ZW1w bGF0ZTw+DQogICAgbG9uZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX2hhc2go Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoj IDEwMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0 ZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAg ICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZz ID0gMCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAg ICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRl PD4NCiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUo Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOw0KDQoNCg0KDQoNCiAgY2xh c3MgdGltZV9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVudW0gZGF0ZW9y ZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9Ow0KICB9Ow0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4NCiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 LCBwdWJsaWMgdGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf SW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQg aWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX2dldChzaXplX3Qg X19yZWZzID0gMCkNCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwg X01fZGF5bmFtZXMoMCksIF9NX21vbnRobmFtZXMoMCkgeyB9DQoNCiAgICAg IGRhdGVvcmRlcg0KICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0DQogICAgICB7 IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0NCg0KICAgICAgaXRlcl90eXBl DQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVy biBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9 DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0X2RhdGUoaXRlcl90eXBl IF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwg X19mLCBfX2VyciwgX190KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAg IGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0dXJu IGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K DQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90 eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXRfbW9udGhuYW1l KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0KDQogICAgICBpdGVyX3R5 cGUNCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVf Z2V0KCkNCiAgICAgIHsNCiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFt ZXM7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1lczsNCiAgICAgIH0N Cg0KICAgICAgdmlydHVhbCBkYXRlb3JkZXINCiAgICAgIGRvX2RhdGVfb3Jk ZXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0N Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF90aW1l KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwNCiAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0 DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy X3R5cGUNCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf dHlwZSAsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiAsIHRtKiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7 IH0NCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF93 ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB0bSogX190KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVy X3R5cGUNCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u c3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRf eWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQog ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkg Y29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBtdXRhYmxl IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9kYXluYW1lczsNCiAgICAgIG11 dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7DQog ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDog cHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4NCiAgICB7DQogICAg cHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhwbGlj aXQNCiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90 IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl cj4oX19yZWZzKSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs DQogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0K ICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1 YmxpYyB0aW1lX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRl ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0NCg0KDQogICAg ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgLCBjaGFyX3R5cGUgLA0KICAgICAgICAgIGNvbnN0IHRtKiAsIGNvbnN0 IF9DaGFyVCogLA0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw ZSBfX2ZpbGwsDQogICAgICAgICAgY29uc3QgdG0qIF9fdG1iLCBjaGFyIF9f Zm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1h dCwgX19tb2RpZmllcik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZp cnR1YWwNCiAgICAgIH50aW1lX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLA0KICAgICAgICAgICAgIGNo YXIgLCBjaGFyICkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KICAg IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091 dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6 IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPg0KICAgIHsNCiAg ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhw bGljaXQNCiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6 ZV90IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091 dEl0ZXI+IChfX3JlZnMpIHsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg dmlydHVhbA0KICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQ0KICAgIH07 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+DQogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6 ZmFjZXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n X3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAg ICBleHBsaWNpdA0KICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k LCBib29sIF9faW50bCwNCiAgICAgICAgICBpb3NfYmFzZSYgX19mLCBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50 bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0NCg0KICAgICAgaXRlcl90eXBl DQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBi b29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNv bnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRs LCBfX2YsIF9fZXJyLCBfX2RpZ2l0cyk7IH0NCg0KICAgIHByb3RlY3RlZDoN CiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leV9nZXQoKSB7IH0NCg0KICAg ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIGxvbmcg ZG91YmxlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAg ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIHN0cmlu Z190eXBlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4NCiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBs b2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIg aXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU PiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leV9wdXQoc2l6ZV90IF9f cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAg ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICBjaGFyX3R5cGUgX19m aWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdA0KICAgICAgeyByZXR1 cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX191bml0cyk7 IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9f cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hh cl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2Ys IF9fZmlsbCwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfcHV0KCkgeyB9DQoNCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg Ym9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAgICBs b25nIGRvdWJsZSApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0K ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5 cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLA0KICAgICAg ICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0DQogICAgICB7IHJl dHVybiBfX3M7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBtb25l eV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHN0cnVjdCBtb25l eV9iYXNlDQogIHsNCiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3lt Ym9sLCBzaWduLCB2YWx1ZSB9Ow0KICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hh ciBmaWVsZFs0XTsgfTsNCg0KICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9T X2RlZmF1bHRfcGF0dGVybjsNCg0KDQoNCiAgICBzdGF0aWMgcGF0dGVybg0K ICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hh ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7DQogIH07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNsYXNzIG1vbmV5 cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jh c2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh clQ+IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp bnRsID0gX0ludGw7DQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0K ICAgIHByaXZhdGU6DQogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2lu dDsNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOw0KICAgICAg c3RyaW5nIF9NX2dyb3VwaW5nOw0KICAgICAgc3RyaW5nX3R5cGUgX01fY3Vy cl9zeW1ib2w7DQogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWdu Ow0KICAgICAgc3RyaW5nX3R5cGUgX01fbmVnYXRpdmVfc2lnbjsNCiAgICAg IGludCBfTV9mcmFjX2RpZ2l0czsNCiAgICAgIHBhdHRlcm4gX01fcG9zX2Zv cm1hdDsNCiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsNCg0KICAgIHB1 YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leXB1bmN0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAg eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQ0KDQogICAgICBleHBs aWNpdA0KICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAg ICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9DQoNCiAg ICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog ICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQ0K DQogICAgICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3Ry aW5nX3R5cGUNCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0NCg0KICAgICAgc3Ry aW5nX3R5cGUNCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9DQoNCiAgICAg IHN0cmluZ190eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQog ICAgICBpbnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QNCiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0 dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVy biB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVybg0K ICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz LT5kb19uZWdfZm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0KCkgeyB9DQoNCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29u c3QNCiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAg ICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rob3VzYW5kc19zZXAo KSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQ0K DQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAgICAgZG9fZ3JvdXBpbmcoKSBj b25zdA0KICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0KICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fY3Vycl9zeW1ib2woKSBj b25zdA0KICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0NCg0KICAg ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2ln bigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9 DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25lZ2F0 aXZlX3NpZ24oKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVf c2lnbjsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZnJhY19k aWdpdHMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7 IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19wb3NfZm9y bWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0N Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19uZWdfZm9ybWF0 KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0NCg0K DQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGxvY2Fs ZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNvbnN0 IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgdm9p ZA0KICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxp emVfbW9uZXlwdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9DQoN CiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBtb25leXB1bmN0PGNoYXI+ OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mp Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv b2wgX0ludGw+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJs aWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPg0KICAgIHsNCiAgICAgIF9f Y19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsNCiAgICBwdWJsaWM6 DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7DQoNCiAgICAgIGV4 cGxpY2l0DQogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBf X3MsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBtb25leXB1bmN0PF9D aGFyVCwgX0ludGw+KF9fcmVmcykNCiAgICAgIHsNCiAgICAgICAgX1NfY3Jl YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7DQog ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9t b25leXB1bmN0KTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpDQogICAgICB7 IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7 IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9v bCBfSW50bD4NCiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9D aGFyVCwgX0ludGw+OjppbnRsOw0KDQoNCiAgc3RydWN0IG1lc3NhZ2VzX2Jh c2UNCiAgew0KICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7DQogIH07DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2Vz IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNl DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g c3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBj YXRhbG9nDQogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYg X19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdA0KICAgICAgeyByZXR1 cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQ0KDQogICAgICBzdHJpbmdfdHlw ZQ0KICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21z Z2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gZG9fZ2V0KF9fYyxfX3NldCxfX21zZ2lkLF9fcyk7IH0NCg0KICAg ICAgdm9pZA0KICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQogICAg ICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6 DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXMoKSB7IH0NCg0KDQoN CiAgICAgIHZpcnR1YWwgY2F0YWxvZw0KICAgICAgZG9fb3Blbihjb25zdCBi YXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0KICAg ICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl DQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJp bmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2Rm YXVsdDsgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGRvX2Nsb3Nl KGNhdGFsb2cpIGNvbnN0IHsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJU Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+ DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g c3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtZXNzYWdl c19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0K ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdl c19ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBt ZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBj aGFyKiwgc2l6ZV90IF9fcmVmcyk7DQojIDE1MzIgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wN CiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp DQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv YykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3By aW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5 cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2NudHJsKF9DaGFy VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6 Y250cmwsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNv bnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9f Yyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5s aW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg aXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz KGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNkaWdpdChf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh c2U6OmRpZ2l0LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwdW5jdChfQ2hhclQgX19j LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0 LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGlubGluZSBib29sDQogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3Qg bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5l IGJvb2wNCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg X19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg ICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQog ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBw ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVy KF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg aW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3Qg bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0NCn0NCiMgMzcgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi YXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UNCiAgICB7DQogICAgcHVibGlj Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5 cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf dHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRl ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0 X3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVk ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdl dF90eXBlOw0KDQoNCiAgICBwcml2YXRlOg0KICAgICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7DQogICAgICBjaGFyX3R5cGUg X01fZmlsbDsNCiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOw0KDQogICAg cHJvdGVjdGVkOg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9NX3N0cmVhbWJ1ZjsNCiAgICAgIGlvc3RhdGUgX01fc3RyZWFt YnVmX3N0YXRlOw0KDQoNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01f aW9zX2ZjdHlwZTsNCg0KICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01f Zm51bXB1dDsNCg0KICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51 bWdldDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZSBjb25zdCBfX2N0 eXBlX3R5cGUqDQogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQ0KICAg ICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZTsgfQ0KDQogICAgICBvcGVyYXRv ciB2b2lkKigpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkg PyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQ0KDQogICAg ICBpbmxpbmUgYm9vbA0KICAgICAgb3BlcmF0b3IhKCkgY29uc3QNCiAgICAg IHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQ0KDQogICAgICBpbmxpbmUgaW9z dGF0ZQ0KICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBf TV9zdHJlYW1idWZfc3RhdGU7IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAg ICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpDQogICAgICB7 DQogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQ0KICAgICAgICAgIF9NX3N0 cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7DQogICAgICAgIGVsc2UNCiAgICAg ICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0K ICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlv bnMoKSkpDQogICAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNf aW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7DQogICAg ICB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBzZXRzdGF0ZShpb3N0 YXRlIF9fc3RhdGUpDQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3Rh dGUoKSB8IF9fc3RhdGUpOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAg ICBnb29kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUo KSA9PSAwOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAgICBlb2YoKSBj b25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp dCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZmFpbCgp IGNvbnN0DQogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJh ZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9DQoNCiAgICAgIGlubGluZSBib29s DQogICAgICBiYWQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJk c3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgaW9z dGF0ZQ0KICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQogICAgICB7IHJldHVy biBfTV9leGNlcHRpb247IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAgICAg IGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkNCiAgICAgIHsNCiAgICAg ICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7DQogICAgICAgIHRoaXMtPmNs ZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7DQogICAgICB9DQoNCg0KICAgICAg ZXhwbGljaXQNCiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpDQogICAgICB7IHRo aXMtPmluaXQoX19zYik7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh c2ljX2lvcygpIHsgfQ0KDQoNCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoKSBjb25zdA0KICAgICAg eyByZXR1cm4gX01fdGllOyB9DQoNCiAgICAgIGlubGluZSBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikNCiAgICAgIHsNCiAgICAg ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9N X3RpZTsNCiAgICAgICAgX01fdGllID0gX190aWVzdHI7DQogICAgICAgIHJl dHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAgaW5saW5lIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYoKSBjb25z dA0KICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9DQoNCiAgICAgIGJh c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYo YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOw0KDQog ICAgICBiYXNpY19pb3MmDQogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lv cyYgX19yaHMpOw0KDQogICAgICBpbmxpbmUgY2hhcl90eXBlDQogICAgICBm aWxsKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZpbGw7IH0NCg0KICAg ICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbChjaGFyX3R5cGUgX19j aCkNCiAgICAgIHsNCiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gX01fZmls bDsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7DQogICAgICAgIHJldHVybiBf X29sZDsNCiAgICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAgIGltYnVl KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICBjaGFyDQogICAgICBu YXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0 Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBiYXNpY19pb3MoKSA6IGlv c19iYXNlKCkNCiAgICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbml0 KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0K ICAgICAgYm9vbA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxl OjpmYWNldCogX19mKQ0KICAgICAgew0KICAgICAgICBib29sIF9fcmV0ID0g ZmFsc2U7DQogICAgICAgIGlmIChfX2YpDQogICAgICAgICAgX19yZXQgPSB0 cnVlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX190aHJvd19iYWRfY2Fz dCgpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAg IHZvaWQNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9f bG9jKTsNCiAgICB9Ow0KfQ0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMNCiMg MzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh c2ljX2lvcy50Y2MiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7DQog ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgdGhpcy0+Y2xlYXIo KTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpDQog ICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMu X01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPw0KICAgICAgICBf TV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0 XTsNCiMgNjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2Jhc2ljX2lvcy50Y2MiIDMNCiAgICAgIF9DYWxsYmFja19saXN0KiBf X2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9fY2IpDQog ICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2Nh bGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3Jk cyAhPSBfTV93b3JkX2FycmF5KQ0KICAgICAgICBkZWxldGUgW10gX01fd29y ZHM7DQogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOw0KDQogICAgICBf TV9jYWxsYmFja3MgPSBfX2NiOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsg X19pIDwgX19yaHMuX01fd29yZF9saW1pdDsgKytfX2kpDQogICAgICAgIF9f d29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07DQogICAgICBpZiAo X01fd29yZHMgIT0gX01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtd IF9NX3dvcmRzOw0KICAgICAgX01fd29yZHMgPSBfX3dvcmRzOw0KICAgICAg X01fd29yZF9saW1pdCA9IF9fcmhzLl9NX3dvcmRfbGltaXQ7DQoNCiAgICAg IHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOw0KICAgICAgdGhpcy0+d2lk dGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNpb24oX19y aHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp KTsNCiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAg dGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOw0KDQogICAg ICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsNCiAgICAgIHJl dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19p b3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNo YXIgX19kZmF1bHQpIGNvbnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlw ZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIF9DaGFyVA0K ICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9f YykgY29uc3QNCiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRlbihf X2MpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgbG9jYWxlDQogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAg ew0KICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsNCiAgICAg IGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7DQogICAgICBfTV9jYWNoZV9mYWNl dHMoX19sb2MpOw0KICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkNCiAg ICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOw0KICAgICAg cmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2lj X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfX3NiKQ0KICAgIHsNCg0KICAgICAgaW9zX2Jh c2U6Ol9NX2luaXQoKTsNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3Nf bG9jYWxlKTsNCiAgICAgIF9NX3RpZSA9IDA7DQogICAgICBfTV9maWxsID0g dGhpcy0+d2lkZW4oJyAnKTsNCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2Ri aXQ7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgX01fc3Ry ZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg IHsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykp DQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVf dHlwZT4oX19sb2MpOw0KDQogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0 X3R5cGU+KF9fbG9jKSkNCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFj ZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOw0KICAgICAgaWYgKGhhc19mYWNl dDxfX251bWdldF90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZudW1nZXQg PSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsNCiAgICB9DQp9 DQojIDIxNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvYmFzaWNfaW9zLmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMNCiMgNDAgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry ZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz IGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCg0KICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBl Ow0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g X19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0K ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry YWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9w dXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsN CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoN Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJl YW1idWZfdHlwZSogX19zYikNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsg fQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsg fQ0KDQoNCiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFz cyBzZW50cnk7DQoNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFt X3R5cGUmKSk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl cmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoN CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChpb3Nf YmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7DQoNCg0KICAgICAgX19vc3Ry ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsNCg0KICAg ICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk IGxvbmcgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBv cGVyYXRvcjw8KGJvb2wgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikNCiAgICAgIHsNCiAgICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm IGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlv c19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAgICAg ICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln bmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7DQogICAgICAg IGVsc2UNCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0 aWNfY2FzdDxsb25nPihfX24pKTsNCiAgICAgIH0NCg0KICAgICAgX19vc3Ry ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCg0KICAgICAgX19vc3RyZWFt X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGludCBfX24pDQogICAgICB7DQog ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgICBpZiAoX19mbXQg JiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkNCiAg ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1 bnNpZ25lZCBsb25nPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsNCiAgICAg ICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29z dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9f bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCiMgMTM1ICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAz DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoZG91 YmxlIF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl cmF0b3I8PChmbG9hdCBfX2YpDQogICAgICB7IHJldHVybiB0aGlzLT5vcGVy YXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0NCg0KICAgICAg X19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl IF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0 b3I8PChjb25zdCB2b2lkKiBfX3ApOw0KDQogICAgICBfX29zdHJlYW1fdHlw ZSYNCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7 DQoNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBwdXQoY2hhcl90 eXBlIF9fYyk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgd3Jp dGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0K ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBmbHVzaCgpOw0KDQoNCiAg ICAgIHBvc190eXBlDQogICAgICB0ZWxscCgpOw0KDQogICAgICBfX29zdHJl YW1fdHlwZSYNCiAgICAgIHNlZWtwKHBvc190eXBlKTsNCg0KICAgICAgX19v c3RyZWFtX3R5cGUmDQogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6 OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQogICAgICBfX29zdHJl YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX29zdHJlYW1fdHlw ZSYpOw0KDQogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90 eXBlJik7DQoNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsNCg0KICAgICAg Ym9vbCBfTV9vazsNCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFp dHM+JiBfTV9vczsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQog ICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f b3MpOw0KDQogICAgICB+c2VudHJ5KCkNCiAgICAgIHsNCg0KICAgICAgICBp ZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNh dWdodF9leGNlcHRpb24oKSkNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAg IGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMo KSA9PSAtMSkNCiAgICAgICAgICAgICAgX01fb3Muc2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBv cGVyYXRvciBib29sKCkNCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9DQogICAg fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgX0NoYXJUIF9fYyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsg cmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQ0KDQoNCiAg dGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7DQoNCg0KICB0ZW1w bGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQ0KICAgIHsgcmV0 dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQ0KDQog IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykNCiAg ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh ciogX19zKTsNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBj aGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IHNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9DQoNCiAgdGVt cGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+ICYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX3Mp DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgY2hhcio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zKQ0KICAgIHsgcmV0dXJuIGZsdXNoKF9fb3Mu cHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kcyhiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5w dXQoX0NoYXJUKCkpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9 DQoNCn0NCg0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzDQojIDMyICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbG9jYWxlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAzDQoNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl ZndkLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAx IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzDQoj IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY2Vycm5vLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg MyA0DQojIDExICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQojcHJhZ21h IGlkZW50ICJAKCMpZXJybm8uaAkxLjE1CTk4LzAzLzAyIFNNSSINCg0KDQoN Cg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMSAzIDQNCiMg MTEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQojcHJhZ21hIGlk ZW50ICJAKCMpZXJybm8uaAkxLjE5CTk4LzAxLzE0IFNNSSINCiMgMzUgIi91 c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQpleHRlcm4gIkMiIHsNCiMg MTkxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMgNA0KfQ0KIyAxOCAi L3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7 DQojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQpleHRlcm4gaW50 ICpfX19lcnJubygpOw0KDQoNCg0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAy IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAz DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2xvY2FsZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUu aCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQNCiNw cmFnbWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE4CTk4LzAxLzIyIFNNSSIN CiMgNDYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQojIDEgIi91c3Iv aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyA0NyAiL3Vz ci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0DQojIDIwICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo IylsaWJpbnRsLmgJMS4xMgk5Ny8wOC8yMCBTTUkiDQoNCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRl aWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMu MC9pbmNsdWRlL2xpYmludGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN CiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDMgNA0KZXh0 ZXJuIGNoYXIgKmRjZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg KiwgY29uc3QgaW50KTsNCmV4dGVybiBjaGFyICpkZ2V0dGV4dChjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0dGV4dChj b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnRleHRkb21haW4oY29uc3Qg Y2hhciAqKTsNCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gaW50IHdkaW5p dCh2b2lkKTsNCmV4dGVybiBpbnQgd2RjaGtpbmQod2NoYXJfdCk7DQpleHRl cm4gaW50IHdkYmluZGYod2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVy biB3Y2hhcl90ICp3ZGRlbGltKHdjaGFyX3QsIHdjaGFyX3QsIGludCk7DQpl eHRlcm4gd2NoYXJfdCBtY2ZpbGxlcih2b2lkKTsNCmV4dGVybiBpbnQgbWN3 cmFwKHZvaWQpOw0KIyA3OCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmludGwu aCIgMyA0DQp9DQojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0 DQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQpzdHJ1Y3QgbGNvbnYgew0KICAg ICAgICBjaGFyICpkZWNpbWFsX3BvaW50Ow0KICAgICAgICBjaGFyICp0aG91 c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICpncm91cGluZzsNCiAgICAgICAg Y2hhciAqaW50X2N1cnJfc3ltYm9sOw0KICAgICAgICBjaGFyICpjdXJyZW5j eV9zeW1ib2w7DQogICAgICAgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50Ow0K ICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsNCiAgICAgICAgY2hh ciAqbW9uX2dyb3VwaW5nOw0KICAgICAgICBjaGFyICpwb3NpdGl2ZV9zaWdu Ow0KICAgICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOw0KICAgICAgICBjaGFy IGludF9mcmFjX2RpZ2l0czsNCiAgICAgICAgY2hhciBmcmFjX2RpZ2l0czsN CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOw0KICAgICAgICBjaGFyIHBf c2VwX2J5X3NwYWNlOw0KICAgICAgICBjaGFyIG5fY3NfcHJlY2VkZXM7DQog ICAgICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7DQogICAgICAgIGNoYXIgcF9z aWduX3Bvc247DQogICAgICAgIGNoYXIgbl9zaWduX3Bvc247DQp9Ow0KIyAx MDIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQpleHRlcm4gY2hhciAq c2V0bG9jYWxlKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBzdHJ1Y3Qg bGNvbnYgKmxvY2FsZWNvbnYodm9pZCk7DQoNCg0KDQoNCg0KDQp9DQojIDM5 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y2xvY2FsZS5oIiAyIDMNCg0KDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog IHVzaW5nIDo6bGNvbnY7DQogIHVzaW5nIDo6c2V0bG9jYWxlOw0KICB1c2lu ZyA6OmxvY2FsZWNvbnY7DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jc3RkbGliLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KIyAx ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgiIDEgMw0KIyA0NSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh cmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0 ZF9saW1pdHMuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzDQojIDM4ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0 LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0DQojIDE2 ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA KCMpZmxvYXQuaAkxLjE1CTk3LzExLzIyIFNNSSINCg0KDQpleHRlcm4gIkMi IHsNCg0KDQoNCg0KDQpleHRlcm4gaW50IF9fZmx0X3JvdW5kcyh2b2lkKTsN CiMgOTcgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAzIDQNCn0NCiMgMzkgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxv YXQuaCIgMiAzDQojIDQ3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgi IDIgMw0KDQpuYW1lc3BhY2Ugc3RkIHsNCg0KICAgIGVudW0gZmxvYXRfcm91 bmRfc3R5bGUgew0KICAgICAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEs DQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwNCiAgICAgICAgcm91 bmRfdG9fbmVhcmVzdCA9IDEsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZp bml0eSA9IDIsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkg PSAzDQogICAgfTsNCg0KICAgIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlIHsN CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwNCiAgICAgICAg ZGVub3JtX2Fic2VudCA9IDAsDQogICAgICAgIGRlbm9ybV9wcmVzZW50ID0g MQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVj dCBudW1lcmljX2xpbWl0cyB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NwZWNpYWxpemVkID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIF9U cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7 IH0NCiAgICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJu IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzMTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMDsNCg0KICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJv dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAg c3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGlj IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQ0KICAgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRo cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAg ICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJu IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBk ZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5 ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh cHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBf X2xpbWl0c19pbmZpbml0eSgpOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigpOw0KICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGluZ19OYU4oKTsNCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1f bWluKCk7DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0 czxib29sPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIHN0 YXRpYyBib29sIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gdHJ1 ZTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsN CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3Rh dGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g MDsgfQ0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93 KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAg c3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi b29sIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgc2ln bmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgZGVub3Jt X21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 Ym9vbD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i b3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0 cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8Y2hhcj4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z cGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNoYXIgbWlu KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0NCiAgICAg ICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy biAxMjc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAg c3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1 cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAg ICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIg c2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgZGVu b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8Y2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy ZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1l cmljX2xpbWl0czxzaWduZWQgY2hhcj4gew0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3Rh dGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1 cm4gKC0xMjgpOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQ0KDQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg ZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0 YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQogICAg ICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg fQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigp IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk IGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5v cm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxzaWduZWQgY2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPiB7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAg ICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNo YXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAyNTU7IH0NCg0K ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNp Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJy b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWll dF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25l ZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDAp OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg PSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAg IH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxz aG9ydD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0zMjc2Ny0xKTsgfQ0KICAgICAg ICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy biAzMjc2NzsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAg ICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9y KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K ICAgICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAg ICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAgICAgICAgc3Rh dGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0 aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg PSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8 PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl Ow0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJv dygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVu c2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g NjU1MzU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDE2Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsN CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAg ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAg ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg c2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9y dCBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAg ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg c2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk ZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4g c3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gew0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAg c3RhdGljIGludCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgt MjE0NzQ4MzY0Ny0xKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQ0KDQogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGludCBlcHNp bG9uKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg IHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl bm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBpbnQgaW5m aW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGludD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7 IH0NCiAgICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQog ICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQ0KDQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVt cGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMg dW5zaWduZWQgaW50IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g KDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9DQoNCiAgICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9u KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0 YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50 IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgICAg c3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0N CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVu b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj dCBudW1lcmljX2xpbWl0czxsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0 aWMgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMjE0 NzQ4MzY0N0wtMSk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQ0KDQogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGxvbmcgZXBz aWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAg ICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAg eyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGxvbmcg aW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05h TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u Zz4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigp IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o MCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93 KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0N Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln bmVkIGxvbmc+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs b25nIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpOyB9DQoNCiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g MDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJv cigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJv dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv bmc+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0 X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkNCiAg ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0 cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9 Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv YXQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6 ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJv dygpDQogICAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzUxRS0zOEY7IH0NCiAg ICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyBy ZXR1cm4gMy40MDI4MjM0NjZFKzM4RjsgfQ0KDQogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gMjQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4xOTIwOTI4OTZFLTA3RjsgfQ0K ICAgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIDEuMGY7IH0NCg0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7DQogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7DQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4Ow0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAg ICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAg c3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAgICAgIHN0YXRp YyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAgc3RhdGlj IGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+ IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+IHsNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAg ICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl dHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRFLTMwODsgfQ0KICAgICAgICBzdGF0 aWMgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS43 OTc2OTMxMzQ4NjIzMTU3RSszMDg7IH0NCg0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDUzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBy YWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxRS0x NjsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiAxLjA7IH0NCg0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIxOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0Ow0KICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4Ow0K DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOw0KDQogICAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJv dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7 IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygp DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0N CiAgICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9 DQogICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkN CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQ0K DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxz ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07 DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25n IGRvdWJsZT4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGxvbmcgZG91Ymxl IG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMx MTIwOTM1MDYyNjI2Nzc4MTczMjE3NTI2MDNFLTQ5MzJMOyB9DQogICAgICAg IHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDg1NzU5MzI2NjI4MDA3MDE2 RSs0OTMyTDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMTEzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g MzQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBm YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBm YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiAxLjkyNTkyOTk0NDM4NzIzNTg1MzA1NTk3Nzk0 MjU4NDkyNzMxOUUtMzRMOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJs ZSByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4w TDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gLTE2MzgxOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gLTQ5MzE7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMTYzODQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSA0OTMyOw0KDQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQog ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRp YyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQogICAgICAg IHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQ0K ICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRo cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3Vi bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1f bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs b25nIGRvdWJsZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsNCiAgICB9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9tZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3NidWZfaXRlci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMg MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NjdHlwZS5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAx IDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90 eXBlaW5mbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvZXhjZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysr IiB7DQoNCm5hbWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xh c3NfdHlwZV9pbmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog IGNsYXNzIHR5cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAg IHZpcnR1YWwgfnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0 eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0 eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0K ICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAg ZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShf X24pIHsgfQ0KDQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUo KSBjb25zdA0KICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAg Ym9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg ICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29s IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg ICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBi b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QN CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1 YmxpYzoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNv bnN0Ow0KDQogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNv bnN0Ow0KDQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0 Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJf b2JqLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9f b3V0ZXIpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNh c3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFy Z2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19v YmpfcHRyKSBjb25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1 YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3Qo KSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3co KTsNCiAgfTsNCg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2Vw dGlvbg0KICB7DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93 KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0K ICB9Ow0KfQ0KDQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0 b3IuaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93 X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq IF9fcyk7DQp9DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rv ci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9y LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvY29uY2VwdF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoN Cm5hbWVzcGFjZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+ DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6 YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAg YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2Fs bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9l bmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9j YXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0 Ow0KICBfVHAqIF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFn ZTsNCg0KICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyBy ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2 b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAg eyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwg X19uKTsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvY2F0b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf QWxsb2NhdG9yLCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf dHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9y X3R5cGUoKTsgfQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv Y2F0b3JfdHlwZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDAp LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQog IF9UcCogX01fc3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9N X2VuZF9vZl9zdG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2Nf dHlwZTsNCiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsg cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQg X01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9B bGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rv cl9iYXNlDQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9B bGxvYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190 cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5 cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs bG9jPjo6X1NfaW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0 eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsNCg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5 cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXpl X3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f YSkgew0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBf TV9maW5pc2ggPSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IF9NX3N0YXJ0ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsg X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf TV9zdGFydCk7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDog cHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf VHAsIF9BbGxvYz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0Fs bG9jPiB2ZWN0b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0 eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5 cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+ IGl0ZXJhdG9yOw0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0 X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlw ZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3Qg dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3Jf dHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9y KCk7IH0NCg0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K cHJvdGVjdGVkOg0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVz aW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01f c3RhcnQ7DQogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9C YXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lk IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw JiBfX3gpOw0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbik7DQoNCnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy biBpdGVyYXRvciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJl Z2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01f c3RhcnQpOyB9DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9y IChfTV9maW5pc2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0 IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAg cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVy c2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IgcmJlZ2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo KQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0N CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoN CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVf dHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6 ZSgpIGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVv ZihfVHApOyB9DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAg eyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9z dG9yYWdlKSAtIGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0K ICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2lu KCkgKyBfX24pOyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp emVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7 IH0NCg0KICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv bnN0IHsNCiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9f dGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVy ZW5jZSBhdChzaXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2so X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVu Y2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2No ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNp dCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpDQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNp emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0K ICAgIDogX0Jhc2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmlu aXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0K DQogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jh c2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9 DQoNCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkN CiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkp DQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJl Z2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkgOiBfQmFzZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl Z3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4N CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRl Z2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBf TV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f c3RhcnQgKyBfX247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlh bGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2Vf dHlwZSkgew0KICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQog IH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0N Cg0KICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVj dG9yPF9UcCwgX0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVf dHlwZSBfX24pIHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAg ICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBf TV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQs IF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0 ID0gX190bXA7DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3Np emU7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u Ow0KICAgIH0NCiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXpl X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWdu KF9fbiwgX192YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6 X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1w bGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3Bh dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl KQ0KICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1Rw KSBfX3ZhbCk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4N CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01f YXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPg0KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4 KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZyk7DQoNCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu KCk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1 cm4gKmJlZ2luKCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAq KGVuZCgpIC0gMSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25z dCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFj ayhjb25zdCBfVHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01f ZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K ICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lk IHB1c2hfYmFjaygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v Zl9zdG9yYWdlKSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAg ICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9p bnNlcnRfYXV4KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9U cCwgX0FsbG9jPiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBf X3guX01fc3RhcnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5f TV9maW5pc2gpOw0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGlu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0K ICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAg ICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9z aXRpb24gPT0gZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K ICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194 KTsNCiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRv ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlw ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmlu aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5k KCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytf TV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9h dXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigp ICsgX19uOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46 Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNo KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0K DQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNl cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu dGVnZXIgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1 ZV90eXBlKQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5 cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAg ICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGlu c2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX194KQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194 KTsgfQ0KDQogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9z LCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBw b3BfYmFjaygpIHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9N X2ZpbmlzaCk7DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19w b3NpdGlvbikgew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkN CiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9u KTsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7 DQogICAgcmV0dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJh c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAg aXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0K ICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01f ZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2Zp cnN0Ow0KICB9DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3Np emUsIGNvbnN0IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBz aXplKCkpDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k KCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6 ZSAtIHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5 cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9 DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0K DQpwcm90ZWN0ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+DQogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90 eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQg PSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAg ICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBf TV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0K DQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBf TV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygq X19maXJzdCk7DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3Jf dGFnKQ0KICB7DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01f YWxsb2NhdGUoX19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0 YXJ0ICsgX19uOw0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p bnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAg dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09 KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9y PF9UcCwgX0FsbG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9 PSBfX3kuc2l6ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwg X194LmVuZCgpLCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwo Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQo KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4N CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlu bGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQog IHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBi b29sDQpvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f eCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVy biAhKF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAs X0FsbG9jPiYNCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0g dGhpcykgew0KICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6 ZSgpOw0KICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBw b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBf X3guYmVnaW4oKSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3Rh cnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0 LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0 YXJ0ID0gX190bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0 YXJ0ICsgX194bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0g X194bGVuKSB7DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4o KSwgX194LmVuZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwg ZW5kKCkpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJl Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAg ICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9f eC5lbmQoKSwgX01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0g X01fc3RhcnQgKyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24s IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2Fw YWNpdHkoKSkgew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19u LCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0 aGlzKTsNCiAgfQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBm aWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCks IF9fdmFsKTsNCiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2lu KCksIF9fbiwgX192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXI+DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy YXRvcl90YWcpIHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr X19jdXIsICsrX19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQo KSk7DQogIGVsc2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFz dCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3Rvcjxf VHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNp emVfdHlwZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCwgX19sZW4pOw0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAg ICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBf X2ZpcnN0LCBfX2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m aW5pc2gpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7 DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFy dCArIF9fbGVuOw0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg ew0KICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9f bGFzdCwgX01fc3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwg ZW5kKCkpOw0KICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7 DQogIH0NCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19m aXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHko X19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1 bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsN CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0 ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAo X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3Ry dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9m aW5pc2g7DQogICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFj a3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0 ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194 X2NvcHk7DQogIH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9f b2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAg IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQog ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0 cnkgew0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQog ICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAg ICAgICsrX19uZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5p bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zpbmlz aCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19uZXdfZmluaXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0 cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUo X19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAg ZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShf TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAg X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFn ZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3Rv cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbikNCnsNCiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZSkgew0KICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0g MSkpOw0KICAgICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAg ICAgICAgICBpdGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9z aXRpb24gPSBfVHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXpl X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5 cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6 IDE7DQogICAgcG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9f bGVuKTsNCiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0 Ow0KICAgIHRyeSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0 YXJ0KTsNCiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAg KytfX25ld19maW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRp YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l d19maW5pc2gpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3ko X19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25l d19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVn aW4oKSwgZW5kKCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0g X19uZXdfc3RhcnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0K ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsN CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194 KQ0Kew0KICBpZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9N X2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAg IF9UcCBfX3hfY29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p c2gpOw0KICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBf X24sIF9feF9jb3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAg ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxl bXNfYWZ0ZXIsIF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxs KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAg fQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X29sZF9zaXplID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f bGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAg ICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsN CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQog ICAgICB0cnkgew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0K ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf X25ld19maW5pc2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNo DQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg ZW5kKCksIF9fbmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCgu Li4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01f ZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7 IH07DQoNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQog ICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn ZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQu YmFzZSgpOw0KICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFz ZSgpICsgX19sZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPg0Kdm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2Vf aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQo X19wb3MsICpfX2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxs b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpDQp7DQogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVf dHlwZSBfX24gPSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X19uKTsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g X01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p c2gpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlv bik7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19t aWQsIF9fZWxlbXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmlu aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz aCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAg ICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAg IH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUg X19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAg ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7 DQogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0K ICAgICAgdHJ5IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3 X3N0YXJ0KTsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAg ICAgX19uZXdfZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2Nv cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmlu aXNoKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShf X25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3 X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVz dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0K ICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBf TV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAg ICB9DQogIH0NCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0 b3IuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7 DQoNCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVv Zih1bnNpZ25lZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsN CiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFz azsNCiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2ln bmVkIGludCBfX3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7 fQ0KDQpwdWJsaWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBf TV9tYXNrKDApIHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy biAhKCEoKl9NX3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2Um IG9wZXJhdG9yPShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9w IHw9IF9NX21hc2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAg ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJh dG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJu ICp0aGlzID0gYm9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25z dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJv b2woKnRoaXMpID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChj b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJu ICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlw KCkgeyAqX01fcCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBz d2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0K ew0KICBib29sIF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9 IF9fdG1wOw0KfQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVi bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0K ew0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9v ZmZzZXQ7DQoNCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCog X194LCB1bnNpZ25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9v ZmZzZXQoX195KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBp ZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9N X29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZv aWQgX01fYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAw KSB7DQogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAg IC0tX01fcDsNCiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlm Zl90IF9faSkgew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBf TV9vZmZzZXQ7DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAg IF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsN CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09S RF9CSVQ7DQogICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9v ZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9w ZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0 IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQg PT0gX19pLl9NX29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25z dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy biBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01f b2Zmc2V0IDwgX19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog ICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJh dG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0K ICAgIHJldHVybiBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9y PD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAg ICByZXR1cm4gIShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRv cj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog ICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUg cHRyZGlmZl90DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJl dHVybiBfX1dPUkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194 Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9C aXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQog IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVm IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRl cmF0b3IgaXRlcmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9p dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWdu ZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0 ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJh dG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBf TV9vZmZzZXQpOyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAg IF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl cmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9 ICp0aGlzOw0KICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7 DQogIH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVt cF9kb3duKCk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9y IG9wZXJhdG9yLS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp czsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQog IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f aSkgew0KICAgIF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQog IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f aSkgew0KICAgICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0K ICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p KSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBy ZXR1cm4gX190bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y LShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3Ig X190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9 DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9f aSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBf Qml0X2l0ZXJhdG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg X0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0K DQpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0 ZXJhdG9yX2Jhc2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAg dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25z dCBib29sKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0 b3IgY29uc3RfaXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigp IDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3Rf aXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kp DQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9C aXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0K ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zm c2V0KSB7fQ0KDQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z dCB7DQogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9N X29mZnNldCk7DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKyso KSB7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAg fQ0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNv bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgp Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYg b3BlcmF0b3ItLSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1 cm4gKnRoaXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShp bnQpIHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAg IF9NX2J1bXBfZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBj b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19p KSB7DQogICAgX01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAg fQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5 cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRo aXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVu Y2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3Rt cCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAg Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp IGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K ICAgIHJldHVybiBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJl bmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJl dHVybiAqKCp0aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRf Y29uc3RfaXRlcmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25z dCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9f bjsgfQ0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3Is IGJvb2wgX19pc19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz PGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAg IGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0K ICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgp LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJv dGVjdGVkOg0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3Qg X19uKQ0KICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl KChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9p ZCBfTV9kZWFsbG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0K ICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5f TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlw ZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y Ow0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9y IF9NX2ZpbmlzaDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFn ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFz cyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1 YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2ws IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9j YXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVj dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDog X01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp IHt9DQoNCnByb3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf dHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBl DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBf TV9iaXRfYWxsb2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2Nf dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRf QklUKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9N X3N0YXJ0Ll9NX3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf TV9zdGFydC5fTV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQog IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01f ZmluaXNoOw0KICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0K fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9y X2Jhc2UNCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0 czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVk ZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46 Ol9TX2luc3RhbmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoN CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs b2NhdG9yX3R5cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jh c2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0K DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0bF92ZWN0b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1l c3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQog IGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y X2Jhc2U8X0FsbG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJv b2wgdmFsdWVfdHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 DQogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAg IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVk ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3Jl ZmVyZW5jZSogcG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNv bnN0X3BvaW50ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl cmF0b3I7DQogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0 X2l0ZXJhdG9yOw0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy YXRvcjsNCg0KICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxf QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBh bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAg cmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigp Ow0KICAgIH0NCg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0 b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBw cm90ZWN0ZWQ6DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBf X24pIHsNCiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j KF9fbik7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0 YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQg X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkg ew0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y YWdlKSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01f ZmluaXNoLCBfTV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24g PSBfX3g7DQogICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAg ZWxzZSB7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIg KiBzaXplKCkgOiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQq IF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9y IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x LCAwKSk7DQogICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmlu aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAg X01fZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0K ICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9 DQogICAgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y Pg0KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAg ICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0g aXRlcmF0b3IoKTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAg ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAg ICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2lu aXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlw ZSBfX24gPSAwOw0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf X24pOw0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShf X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNl cnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykgew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq X19maXJzdCk7DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0K DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAg dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAo X19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9 IDA7DQogICAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsN CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQog ICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01f ZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNv cHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBf TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0N CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25l ZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAg aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVy YXRvcihfX3EsIDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3Qs IF9fbGFzdCwgX19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9f cG9zaXRpb24sIGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2Nh dGUoKTsNCiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAg IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAg ICAgfQ0KICAgIH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4o KSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJl Z2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRv ciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVy YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAg IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcihlbmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y IHJiZWdpbigpIGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg fQ0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsN CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp Ow0KICAgIH0NCg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1 cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5 cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9 DQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0 dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn ZSwgMCkgLSBiZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNv bnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVy ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVy biAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBj b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25z dA0KICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl KF9fbikpOyB9DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlw ZSBfX24pIGNvbnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgp KQ0KICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4i KTsNCiAgICB9DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikN CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylb X19uXTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19u KSBjb25zdA0KICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g KCp0aGlzKVtfX25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAg ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0 b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo KSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7 DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0 YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAw KTsNCiAgICB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9f bikNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90 eXBlKCkpDQogICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAg ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7 DQogICAgfQ0KDQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9C dmVjdG9yX2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQog ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoN Cg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9N X2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3gsIF9fdHJ1ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7 DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl LCBfX3ggPyB+MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlz cGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAg ICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQog ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J bnRlZ3JhbDsNCiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJz dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3Rv cigpIHsgfQ0KDQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y JiBfX3gpIHsNCiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhp czsNCiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAg ICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUo X194LnNpemUoKSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigp LCBfX3guZW5kKCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVn aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJl dHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9m aWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYg KF9fbiA+IHNpemUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBp bnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAg ICAgIGVsc2Ugew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQo KSk7DQogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0 b3JhZ2UsIF9feCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAg dm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9h c3NpZ24oX19uLCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu dGVncmFsIF9JbnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25f ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl X3R5cGUpDQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwg KGJvb2wpIF9fdmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0K ICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp IHsNCiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr X19jdXIsICsrX19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7 DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNl KF9fY3VyLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChl bmQoKSwgX19maXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2ln bl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQog ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAg IGlmIChfX2xlbiA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2Zp cnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsN CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQog ICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHko X19maXJzdCwgX19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5k KCksIF9fbWlkLCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZv aWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNp dHkoKSA8IF9fbikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJl Z2luKCksIGVuZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01f ZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f cSwgMCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAg IH0NCg0KICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigp OyB9DQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1 cm4gKmJlZ2luKCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNo X2JhY2soYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAh PSBfTV9lbmRfb2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0g X194Ow0KICAgICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgp LCBfX3gpOw0KICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9B bGxvYz4mIF9feCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3gu X01fc3RhcnQpOw0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9N X2ZpbmlzaCk7DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2Us IF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9y IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2wo KSkgew0KICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g LSBiZWdpbigpOw0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2Vu ZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAg ICpfTV9maW5pc2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01f aW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJl Z2luKCkgKyBfX247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFz cyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAg IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQog ICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQg X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShf X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu dGVncmFsOw0KICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24s IF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAg IHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6 ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkg cmV0dXJuOw0KICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u KSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBl KF9fbiksIF9feCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl X3R5cGUoX19uKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBz aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0K ICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xl bik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19w b3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihf X2ksIF9fbiwgX194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bv c2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0K ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S RF9CSVQ7DQogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsN CiAgICAgIH0NCiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAg X01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0N Cg0KICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAg aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAg aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9f cG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0t X01fZmluaXNoOw0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0K ICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y IF9fbGFzdCkgew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVu ZCgpLCBfX2ZpcnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0N CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBf X3ggPSBib29sKCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgp KQ0KICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f bmV3X3NpemUpLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2Vy dChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQog ICAgdm9pZCBmbGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9f cCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsg KytfX3ApDQogICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2 b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsN Cg0KDQp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsN Cg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy IDMNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4NCiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29u c3QgbG9jYWxlJiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2Nv cHkoKnRoaXMpOw0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2Vf ZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICBy ZXR1cm4gX19jb3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg ICBib29sDQogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlw ZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAg ICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNl dDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zj b2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEu bGVuZ3RoKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z Mi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNv bnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv YykNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVj X2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNl dDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9 IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2Fs ZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAo X19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAg IF9fdGhyb3dfYmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2Fz dDxjb25zdCBfRmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBl ZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0K ICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAg ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2Zh Y2V0czsNCiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYm ICgqX19mYWNldClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJU Pg0KICAgIF9Jbkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIg X19zLCBfSW5JdGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJn ZXRzLA0KICAgICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGlu dCYgX19yZW1haW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAg IF9fZW9mID0gZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190 aSA8IF9fbnRhcmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3Rp XSA9IF9fdGk7DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAg c2l6ZV90IF9fcG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAg ICAgICBpbnQgX190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBf X3JlbWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGld XS5zaXplKCkpDQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYg KF9fdGkgPT0gX19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAg ICAgIHJldHVybiBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYg KF9fcyA9PSBfX2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAg ICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZv ciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBf X3RhcmdldCA9IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAg ICAgICAgICAgaWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBf X3RhcmdldFtfX3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBf X21hdGNoZXNbLS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAg Y29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgIF9fbWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAg ICAgIGlmIChfX21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICsrX19zOw0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAg ICAgfQ0KICAgICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBf X3JlbWFpbjspDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf X3BvcyA+IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQog ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVz W19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgKytfX3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg ICAgd2hpbGUgKF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0 X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFs aWQodHJ1ZSksIF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0K ICB0ZW1wbGF0ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1h dF9jYWNoZSgpOw0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hl PHdjaGFyX3Q+OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9D aGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAg ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVt cHVuY3Q8X0NoYXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5j dDxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25w LnRydWVuYW1lKCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNl bmFtZSgpOw0KICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNh bmRzX3NlcCgpOw0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVj aW1hbF9wb2ludCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3Vw aW5nKCk7DQogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5z aXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAg ICAgIF9NX3ZhbGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNo ZTxfQ2hhclQ+OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQg X19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAg IHsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAg ICAgIHN3aXRjaCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlv c19iYXNlOjplcmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGlj X2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAg ICBfX3AgPSAwOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlv c19iYXNlOjpjb3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAg ICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0N CiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAg ICAgICBicmVhazsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZl bnQ6DQogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hh clQ+Kj4oX19wKS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVh azsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+DQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3Jt YXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAg ICB7DQogICAgICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29y ZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3Ag PSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9f cCA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1h dF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hh clQ+KTsNCiAgICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zv cm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAg ICAgX19wID0gX19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9G b3JtYXRfY2FjaGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9y bWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+ X01fdmFsaWQpDQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7 DQoNCiAgICAgIHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0 cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu SXRlcj46Og0KICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBp b3NfYmFzZSYgLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm ICwgY2hhciogLA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25z dA0KICAgIHsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0K ICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+ OjoNCiAgICBfTV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4g X19iZWcsDQogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNo YXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9f YmFzZSwNCiAgICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAg IGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0K ICAgICAgICB7DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNb MzJdID0geydcMCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAg ICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nh bml0eTsNCiAgICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAg ICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh c2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi aXQpDQogICAgICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAg ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm JiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9f bDsNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAg ICAgICAgew0KICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFy X3R5cGU+IF9fZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlw ZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1 ZW5hbWUuY19zdHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f ZmFsc2UgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAg ICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxl bmd0aChfX3RydWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19m YWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7 DQoNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9 IF9fZW5kOyArK19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJv b2wgX190ZXN0ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAg ICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQog ICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz dGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBl bHNlIGlmIChfX3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAg ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAg ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAg IH0NCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAg IF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2Vyciwgc2hvcnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f eHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5p dHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBf X2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAg ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAg ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm JiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAo LTMyNzY3LTEpICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3Rh dGljX2Nhc3Q8c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19i ZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAg IHsNCg0KDQoNCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAg ICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0K ICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkg PSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5p dHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm YWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAq X19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAg ICAgICAgICYmIF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAy MTQ3NDgzNjQ3KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9f bCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm YWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgbG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAg IGNoYXIgX194dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsN CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg X194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nh bml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25n IF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAg ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7 DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3Yp IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7 J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs c2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19f ZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0 cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAo IShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9f c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihf X19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUp DQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf X3VsKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoN Cg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQg X19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNo YXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAg ICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19z YW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl OjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAm JiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0K ICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0K ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwp Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0K ICAgICAgY2hhciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9f YmFzZTsNCiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFy KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2Fu aXR5LCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYg Kl9fc2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQog ICAgICAgIF9fdiA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7 DQogICAgfQ0KIyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVy DQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZs b2F0JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0 cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f YmFzZSwgdHJ1ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg ICAoKihfX19lcnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19m ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0 eSkpOw0KDQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0 KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAg X192ID0gX19mOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZmFpbGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0K DQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBf X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFy KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg ICBkb3VibGUgX19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAg ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7 DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv bnN0DQogICAgew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsN CiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0K DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lv LmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3Qg Y2hhciogX19jb252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i YXNlOjpvY3QpDQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxz ZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAg X19jb252ID0gIiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9 PSAwKQ0KICAgICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAg ICAgICAgX19jb252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUg X19sZDsNCiAgICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYs ICZfX2xkKTsNCiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNf Y2FzdDx0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0K ICAgICAgICAhPSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192 ID0gX19sZDsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh c2U6OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAg ICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAg ICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZs YWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFz ZTo6YmFzZWZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQog ICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNl OjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAg Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQq IF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRy YywgJl9fc2FuaXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYg aW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkp KSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBf X2lvLmZsYWdzKF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4NCiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0 SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQog IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+ DQogICAgX1JhSXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQg X19maWxsLCBpbnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9f ZmlsbCk7DQogICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlciwgdHlwZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFk KF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywg X1RhZykNCiAgICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkg eyAqX19zID0gX19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsN CiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQo X091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0K ICAgIHsNCiAgICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk aW5nLA0KICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfT3V0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0 ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAg ICAgX0NoYXJUICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBj b25zdCogLCBfQ2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9D aGFyVCBjb25zdCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAg fQ0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9z dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRm bGFncyBfX2ZsYWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmls bCwgaW50IF9fd2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBj b25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19w YWRkaW5nID0gX193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAg IGlmIChfX3BhZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0K ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAm IGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0Zmll bGQgPSBfX3BhZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6 bGVmdA0KICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09 IGlvc19iYXNlOjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAh PSBfX21pZGRsZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0 ZmllbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9f cywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRp bmcgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJz dCwgX19taWRkbGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0 ZXIgX19zMiA9IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2Fm bGFncyAhPSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAg IF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBf X3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9f czMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYg KF9fcGFkZGluZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3Bh ZGRpbmcpOw0KICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAg IF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBj b25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9j YWNoZTxfQ2hhclQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6 Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYg KChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAg ICAgew0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAg ICAgICAgICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9f ZmlsbCwgZmFsc2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQog ICAgICAgIHsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7 DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAg ICAgaWYgKF9fdikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19m aXJzdCA9IF9fZm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAg ICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6 ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxz ZW5hbWUuZGF0YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0 ICsgX19mbXQtPl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9 DQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAg ICAgIH0NCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAg X19ncm91cF9kaWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBj aGFyIGNvbnN0KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBj aGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQog ICAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAg IHsNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcp DQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhf X3MsIF9fZ3JzZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9 PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAg ICAgICAgICAgICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3Jv dXBpbmcpOw0KICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91 cGluZzsNCiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9 DQogICAgICBkbw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9f Zmlyc3QrKzsNCiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBl bmFtZSBfVmFsdWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50 ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m aWxsLCBib29sIF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikN CiAgICB7DQoNCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNf bGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0No YXJUIF9fZGlnaXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250 ID0gX19kaWdpdHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZs YWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9y bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxl ID0gX19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0K ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxh Z3MgJiBfX2lvLmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9l bmQgPSBfX2Zyb250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i YXNlOjpoZXgpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAm IGlvc19iYXNlOjp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9 IDE2Ow0KICAgICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0g X190YWJsZVtfX3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49 IDQpICE9IDApOw0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0K ICAgICAgICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0K ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19m bXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAg ICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAx IDogMCldOw0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVsw XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAo X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAg ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf X3YgJiA3XTsNCiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7 DQogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UN CiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQp ICE9IF9fdGFibGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190 YWJsZVswXTsNCiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAg ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBk bw0KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBd Ow0KICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAg ICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChf X25lZyB8fCAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAg ICAgICAgICotLV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQt Pl9TX3BsdXMgLSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAo IV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAg ICAgICAgcmV0dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29t LCBfX3MpOw0KDQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcp DQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywg X19maWxsLCBfX2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jv b20pOw0KDQogICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAg d2hpbGUgKF9fZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysg PSAqX19mcm9udCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10 LT5fTV9ncm91cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91 cF9kaWdpdHMoX19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwN CiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9f c2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4g X19wYWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0 aCgwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBf X3AsIF9fZnJvbnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg bG9uZyBfX3YpIGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBf X3V2ID0gX192Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAg aWYgKF9fdiA8IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRy dWU7DQogICAgICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAg ICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwg X19uZWcsIF9fdXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwN CiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyBy ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs c2UsIF9fdik7IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQo X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwN CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXpl X3QgX19zbGVuKQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+DQogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxf Q2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg ICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRy LCBzaXplX3QgX19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRp bmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAg ICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDog MDsNCiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAg ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm aWVsZDsNCiAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0 ciArIF9fc2xlbjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jh c2U6OmludGVybmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0 ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAn LScpKQ0KICAgICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53 aWRlbigqX19zcHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAg ICAgICArK19fc3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0g X19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3Bh ZGRpbmcgPSAwOw0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmll bGQgIT0gaW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBf X3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAg ICBfX3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19k ZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQp Ow0KICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9 IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAg Zm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAg ICAgICB7DQoNCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9w b2ludCkNCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9p bnQ7DQoNCiAgICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53 aWRlbigqX19zcHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRp bmcpDQogICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0K ICAgICAgX19pby53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg fQ0KDQogIGJvb2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2Um IF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAg ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQog ICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoN CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNo YXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAg ICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1p dHM8ZG91YmxlPjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBf X3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVj ID4gX19tYXhfcHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsN Cg0KICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAg c2l6ZV90IF9fc2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAg ICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwg X19wcmVjKSkNCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9f ZmJ1ZiwgX19wcmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3Ns ZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICBy ZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1 ZiwgX19zbGVuKTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQog ICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAg ICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0 czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNp emUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9f cHJlYyA+IF9fbWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3By ZWM7DQoNCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAg ICAgIHNpemVfdCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsN Cg0KICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1 ZiwgJ0wnLCBfX3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9f c2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAg ICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoN CiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmls bCwgX19zYnVmLCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRl cg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwNCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAg IHsNCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdz Ow0KICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAg ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg aW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJu YWwpOw0KICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChp b3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0 cnkgew0KICAgICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdl cihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs b25nPihfX3YpKTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAg ICAgIHJldHVybiBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikg ew0KICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7 DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0 IF9XZWVrZGF5bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15 Pg0KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAg ICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNo YXIqIGNvbnN0DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+Ojpf U19uYW1lc1sxNF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwN CiAgICAgICJNb24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldl ZCIsICJXZWRuZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJG cmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAx MTM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRo bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0 cnVjdCBfTW9udGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBj b25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQog ICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0K ICAgIHsNCiAgICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVh cnkiLCAiTWFyIiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAi TWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1 bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAg ICAgICJPY3QiLCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVj IiwgIkRlY2VtYmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAz DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6DQogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90 eXBlIF9fZW5kLA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lv LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQog ICAgew0KICAgICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAg ICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+ WzE0XTsNCiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsg KytfX2kpDQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtk YXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQog ICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1h aW4gPSAwOw0KICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVy X3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0 LCBfTV9kYXluYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0K ICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlm IChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAo X19yZW1haW4gPT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYg KF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAg ICAgIF9fdC0+dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAg ZWxzZQ0KICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICBy ZXR1cm4gX19vdXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFt ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAg ICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01f bW9udGhuYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFt ZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAg IGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAg ICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46 Ol9TX25hbWVzW19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9l b2YgPSBmYWxzZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBp bnQgX19tYXRjaGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9f bWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVz LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikg X19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0g MSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1sw XT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1f bW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAg IF9fZXJyIHw9IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsN CiAgICB9DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDIg Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAgc2VudHJ5KGJhc2ljX29z dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQ0KICAgIDogX01fb2soX19v cy5nb29kKCkpLCBfTV9vcyhfX29zKQ0KICAgIHsNCg0KICAgICAgaWYgKF9N X29rICYmIF9fb3MudGllKCkpDQogICAgICAgIF9fb3MudGllKCktPmZsdXNo KCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0 cmVhbV90eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAg dHJ5DQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0K ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93 Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRo aXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw ZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg ICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3Bl cmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAgIHsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2Vy YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyBf X3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikN CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9u ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0 aGlzLT5maWxsKCk7DQogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk Ow0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1 dCkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgYm9v bCBfX2IgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAm IGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAg ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf X24pOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQt PnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsNCiAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7DQogICAgICAgICAgICAgICAg ICBpZiAoX19iKQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcg X19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo X01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQt PnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo KSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg IH0NCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9vc3RyZWFtLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg ICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAg ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg ICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAg ICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0K ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pDQog ICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAo X19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt cHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0 aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0 IHZvaWQqIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbiku ZmFpbGVkKCkpDQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp Ow0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhp czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQ0KICAgIHsNCiAg ICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAgICBfX3N0cmVhbWJ1 Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fc2JpbiAmJiBfX2NlcmIp DQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywg X19zYmluLCBfX3Nib3V0KTsNCiAgICAgIGlmICghX19zYmluIHx8ICFfX3h0 cmN0KQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykNCiAgICB7 DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2Nl cmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJk YnVmKCktPnNwdXRjKF9fYyk7DQogICAgICAgICAgaWYgKF9fcHV0ICE9IHRy YWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKQ0KICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0NCiAg ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1z aXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24p Ow0KICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0N CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1Zigp LT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBv c190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgYm9vbCBfX3Rl c3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190 ZXN0b2spDQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl a29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsNCiAgICAg IHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAg ICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQog ICAgICBpZiAoX190ZXN0b2spDQogICAgICAgIHsNCg0KDQogICAgICAgICAg cG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f cG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJy ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShmYWlsYml0KTsNCg0KICAgICAgICB9DQogICAgICByZXR1 cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNl ZWtkaXIgX19kKQ0KICAgIHsNCiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlz LT5mYWlsKCkgIT0gdHJ1ZTsNCg0KICAgICAgaWYgKF9fdGVzdG9rKQ0KICAg ICAgICB7DQoNCg0KICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+ cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShmYWlsYml0KTsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gKnRoaXM7 DQogICAgfQ0KIyA0NTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgX19w YWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQog ICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBf X29sZHMsDQogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3 bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQ0KICAgIHsNCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1Ry YWl0cyB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh aXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOw0KDQogICAgICBpbnRfdHlw ZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19v bGRsZW4pOw0KICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2Fz dDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5 cGUpICogX19wbGVuKSk7DQogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f cGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOw0KDQogICAgICBjaGFyX3R5 cGUqIF9fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfX2VuZDsNCiAgICAgIHNp emVfdCBfX21vZCA9IDA7DQogICAgICBzaXplX3QgX19iZWdsZW47DQogICAg ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYg aW9zX2Jhc2U6OmFkanVzdGZpZWxkOw0KDQogICAgICBpZiAoX19mbXQgPT0g aW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCg0KICAgICAgICAgIF9fYmVn ID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAgICAgICAg IF9fYmVnbGVuID0gX19vbGRsZW47DQogICAgICAgICAgX19lbmQgPSBfX3Bh ZHM7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19i YXNlOjppbnRlcm5hbCkNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIHR5 cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsNCiAg ICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90 eXBlOjpfU19nZXQoX19pb3MpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRs ZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsNCiAgICAgICAgICBj b25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9f b2xkcywgX19vbGRsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7DQog ICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51cyB8fCBfX3BsdXM7 DQogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAn DQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19vbGRzWzFdID09 ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsNCg0KICAgICAgICAgIGlmIChf X3Rlc3RoZXgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbmV3 c1swXSA9IF9fb2xkc1swXTsNCiAgICAgICAgICAgICAgX19uZXdzWzFdID0g X19vbGRzWzFdOw0KICAgICAgICAgICAgICBfX21vZCArPSAyOw0KICAgICAg ICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRz ICsgX19tb2QpOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVu IC0gX19tb2Q7DQogICAgICAgICAgICAgIF9fZW5kID0gX19wYWRzOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbW9kICs9IF9fcGxlbjsN CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21p bnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7DQogICAgICAgICAgICAg IF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAg ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fc2lnbiAtIF9fb2xkczsNCiAgICAg ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2ln biArIF9fcGxlbik7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fbmV3cyArIF9fYmVnbGVuLCBfX3BhZHMsIF9fcGxlbik7DQogICAgICAg ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQogICAg ICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2Jl Z2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j YXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KDQogICAgICAgICAgX19i ZWcgPSBfX3BhZHM7DQogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQog ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xk cyk7DQogICAgICAgIH0NCg0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19u ZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVn bGVuIC0gX19tb2QpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7 DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0K ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp KTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYg KF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBf X2xlbik7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFk cywgX19sZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1w bGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsNCiAgICAgIHR5 cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f dHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN CiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAg ICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu X2FsbG9jYShfX3cgKyAxKSk7DQogICAgICAgICAgICAgIF9fcGFkc1swXSA9 IF9fYzsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7DQog ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3Bh ZHMsICZfX2MsIF9fdywgX19sZW4pOw0KICAgICAgICAgICAgICAgICAgX19s ZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBf X291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19v dXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQog ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgew0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAg ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7DQogICAg ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJl YW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAgICAgICAg IGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193 LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQog ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOw0K ICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg ICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg IHJldHVybiBfX291dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykN CiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCg0KDQogICAgICB0eXBlZGVmIGNo YXJfdHJhaXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOw0KDQogICAgICB0eXBl bmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90 IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAg ICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1 aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7 DQogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fY2xl bjsgKytfX2kpDQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRl bihfX3NbX19pXSk7DQogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7 DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+ KF9fY2xlbik7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v dXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBz dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf Q2hhclQpICogX193KSk7DQoNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f bGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9f cGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX193cywgX193LCBfX2xlbik7DQog ICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsNCiAgICAgICAgICAg ICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAg ICAgICAgX19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g X19vdXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4N CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJh dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IGNoYXIqIF9fcykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0 eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7 DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5 DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRz ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7 DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2Fz dDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAg ICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9f cywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3Bh ZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s ZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0 LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9fb3V0LA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpDQogICAgew0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRh KCk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgp Ow0KICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykp Ow0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz dHJlYW1zaXplPihfX3N0ci5zaXplKCkpOw0KDQoNCg0KICAgICAgICAgIGlm IChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOw0K ICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f bGVuID0gX193Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHN0cmVhbXNp emUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsN CiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICBpZiAoX19y ZXMgIT0gX19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291 dDsNCiAgICB9DQp9DQojIDI3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzDQojIDQxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl YW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIg Mw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z b2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMNCiMgNDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJh c2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsNCiAg ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCg0KDQogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3Ry ZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+IF9faW9zX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAgICAg IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+ IF9faXN0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7DQogICAg ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOw0KDQogICAg cHJvdGVjdGVkOg0KDQogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsNCg0K ICAgIHB1YmxpYzoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lz dHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikNCiAgICAgIHsNCiAgICAg ICAgdGhpcy0+aW5pdChfX3NiKTsNCiAgICAgICAgX01fZ2NvdW50ID0gc3Ry ZWFtc2l6ZSgwKTsNCiAgICAgIH0NCg0KICAgICAgdmlydHVhbA0KICAgICAg fmJhc2ljX2lzdHJlYW0oKQ0KICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1z aXplKDApOyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAgZnJp ZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9faXN0cmVhbV90eXBl Jg0KICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShf X2lzdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog ICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw ZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRv cj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOw0KDQoNCiAgICAg IF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24p Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4o c2hvcnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg b3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsNCg0KICAgICAgX19p c3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsNCg0K ICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2ln bmVkIGludCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg ICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90 eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOw0K IyAxMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pc3RyZWFtLmgiIDMNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg ICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsNCg0KICAgICAgX19pc3RyZWFt X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsNCg0KICAg ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91 YmxlJiBfX2YpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9w ZXJhdG9yPj4odm9pZComIF9fcCk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBl Jg0KICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsN Cg0KDQogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgICAgZ2NvdW50KHZv aWQpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0NCg0KICAg ICAgaW50X3R5cGUNCiAgICAgIGdldCh2b2lkKTsNCg0KICAgICAgX19pc3Ry ZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOw0KDQogICAg ICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywg c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAg aW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIGdldChfX3Ms IF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0cmVh bV90eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNo YXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90 eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpDQogICAg ICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoN CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsN Cg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGlu ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl dHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0N Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBpZ25vcmUoc3RyZWFt c2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6 OmVvZigpKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHBlZWsodm9pZCk7 DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcmVhZChjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICBzdHJlYW1zaXpl DQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHB1dGJhY2so Y2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg ICAgdW5nZXQodm9pZCk7DQoNCiAgICAgIGludA0KICAgICAgc3luYyh2b2lk KTsNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxnKHZvaWQpOw0KDQog ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKHBvc190eXBlKTsN Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhvZmZfdHlw ZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQog ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBf X2lzdHJlYW1fdHlwZSYpOw0KDQogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0 IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsN CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U cmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAg ICAgIHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0 eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu dF90eXBlIF9faW50X3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBz ZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBi b29sIF9fbm9za2lwd3MgPSBmYWxzZSk7DQoNCiAgICAgIG9wZXJhdG9yIGJv b2woKSB7IHJldHVybiBfTV9vazsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAg IGJvb2wgX01fb2s7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsNCg0K ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08 Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpDQog ICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4o X19jKSk7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJh c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+Pihi YXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hh ciYgX19jKQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhciY+KF9fYykpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOw0KDQogIHRl bXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxjaGFy LF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFy LF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyBy ZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7 IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lz dHJlYW08Y2hhcixfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykN CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIq PihfX3MpKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtDQog ICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LA0K ICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPg0K ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pb3N0 cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikN CiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBl KF9fc2IpDQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh c2ljX2lvc3RyZWFtKCkgeyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgd3MoYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0KDQoNCg0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFt LnRjYyIgMSAzDQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9pc3RyZWFtLnRjYyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMw0K IyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv aXN0cmVhbS50Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzQgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0 JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0 b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0 aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0 KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5 cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7 DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09 IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9 IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190 ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9 IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7 DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291 bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8 IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0 aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5 bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+ cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0 aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5 cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+ PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0 eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7 DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9 IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0 IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7 DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9 PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7 DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190 ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07 DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0 ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K ICBleHRlcm4gaXN0cmVhbSBjaW47DQogIGV4dGVybiBvc3RyZWFtIGNvdXQ7 DQogIGV4dGVybiBvc3RyZWFtIGNlcnI7DQogIGV4dGVybiBvc3RyZWFtIGNs b2c7DQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaW9zdHJlYW0uaCIgMw0KICBzdGF0aWMgaW9zX2Jhc2U6Oklu aXQgX19pb2luaXQ7DQp9DQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMw0KIyAyMyAiYnVmZmVyLmNwcCIg Mg0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNCAiYnVm ZmVyLmNwcCIgMg0KIyAxICJjb21tb24uaCIgMQ0KDQoNCg0KIyAxICJtaXNj LmgiIDENCiMgNSAiY29tbW9uLmgiIDINCg0KZXh0ZXJuIGludCBjdXJyZW50 TGluZU51bWJlcjsNCmV4dGVybiBpbnQgY3VycmVudE5lc3RpbmdMZXZlbDsN CiMgMjUgImJ1ZmZlci5jcHAiIDINCiMgMSAiYnVmZmVyLmgiIDENCg0KDQoN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JhY2t3 YXJkL2ZzdHJlYW0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNr d2FyZF93YXJuaW5nLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9m c3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMw0KDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt LmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEg Mw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMSAzDQojIDM4 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNp Y19maWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu aCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9iYXNpY19maWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMw0KIyA0 MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfZmlsZS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RydWN0IF9f YmFzaWNfZmlsZV9iYXNlOiBwdWJsaWMgX19jX2ZpbGVfdHlwZQ0KICAgIHsN CiAgICAgIHZpcnR1YWwNCiAgICAgIH5fX2Jhc2ljX2ZpbGVfYmFzZSgpIHsg fTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIG92ZXJmbG93KGludCBf X2MgPSAoLTEpKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1 bmRlcmZsb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1 ZmxvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHBiYWNr ZmFpbChpbnQgX19jKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6 ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXpl IF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg IHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0K ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtvZmYoc3RyZWFt b2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAg ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp biB8IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJl YW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLA0KICAgICAg ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6 OmluIHwgaW9zX2Jhc2U6Om91dCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0 cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwgaW50IF9fbGVu KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKCkgPSAw Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0ZSgpID0g MDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfcmVh ZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0KICAgICAg dmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfd3JpdGUoY29uc3QgX0No YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJlYW1vZmYgX19vZmYs IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KSA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgaW50DQogICAgICBzeXNfY2xvc2UoKSA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgaW50DQogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpID0gMDsNCg0KICAg ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpID0gMDsNCg0KICAg ICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpID0gMDsN CiAgICB9Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N Cg0KDQoNCiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGUNCg0KICAgIHsNCg0KICAg ICAgX19jX2ZpbGVfdHlwZSogX01fY2ZpbGU7DQogICAgICBib29sIF9NX2Nm aWxlX2NyZWF0ZWQ7DQoNCg0KDQoNCg0KDQogICAgcHVibGljOg0KICAgICAg X19iYXNpY19maWxlKF9fY19sb2NrKiBfX2xvY2sgPSAwKTsNCg0KICAgICAg dm9pZA0KICAgICAgX01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLA0KICAgICAg ICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKTsNCg0KDQogICAgICBfX2Jh c2ljX2ZpbGUqDQogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOw0K DQoNCg0KDQoNCiAgICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIHN5c19vcGVu KF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f bW9kZSk7DQoNCiAgICAgIF9DaGFyVA0KICAgICAgc3lzX2dldGMoKTsNCg0K ICAgICAgX0NoYXJUDQogICAgICBzeXNfdW5nZXRjKF9DaGFyVCk7DQoNCiAg ICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIGNsb3NlKCk7DQoNCiAgICAgIGJv b2wNCiAgICAgIGlzX29wZW4oKTsNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs DQogICAgICB+X19iYXNpY19maWxlKCk7DQoNCiAgICAgIHZpcnR1YWwgaW50 DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0gKC0xKSk7DQoNCiAgICAgIHZp cnR1YWwgaW50DQogICAgICB1bmRlcmZsb3coKTsNCg0KICAgICAgdmlydHVh bCBpbnQNCiAgICAgIHVmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQog ICAgICBwYmFja2ZhaWwoaW50IF9fYyk7DQoNCg0KDQoNCiAgICAgIHZpcnR1 YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19z LCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZQ0KICAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXpl IF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAg ICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIg X193YXksDQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsNCg0KDQoNCg0K ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFt b2ZmIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCiAg ICAgIHZpcnR1YWwgc3RyZWFtYnVmKg0KICAgICAgc2V0YnVmKF9DaGFyVCog X19iLCBpbnQgX19sZW4pOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg c3luYygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0 ZSgpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg IHN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0K DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRl KGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoN CiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJl YW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KTsNCg0KICAg ICAgdmlydHVhbCBpbnQNCiAgICAgIHN5c19jbG9zZSgpOw0KDQogICAgICB2 aXJ0dWFsIGludA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KTsNCg0KICAg ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpOw0KDQogICAgICB2 aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKHZvaWQqIF9fdik7DQogICAgfTsN Cn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYmFzaWNfZmlsZV9tb2Rl bC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9k ZWwuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6X19iYXNp Y19maWxlKF9fY19sb2NrKiApDQogICAgOiBfTV9jZmlsZShfX251bGwpLCBf TV9jZmlsZV9jcmVhdGVkKDA7KSB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46On5fX2Jhc2lj X2ZpbGUoKQ0KICAgIHsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQog ICAgICAgIHsNCiAgICAgICAgICBmZmx1c2goX01fY2ZpbGUpOw0KICAgICAg ICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2lj X2ZpbGU8X0NoYXJUPjo6X01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9k ZSBfX21vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQmICwgaW50JiAsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyKiBfX2NfbW9kZSkNCiAgICB7DQogICAgICBi b29sIF9fdGVzdGIgPSBfX21vZGUgJiBpb3NfYmFzZTo6YmluYXJ5Ow0KICAg ICAgYm9vbCBfX3Rlc3RpID0gX19tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAg ICAgYm9vbCBfX3Rlc3RvID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAg ICAgIGJvb2wgX190ZXN0dCA9IF9fbW9kZSAmIGlvc19iYXNlOjp0cnVuYzsN CiAgICAgIGJvb2wgX190ZXN0YSA9IF9fbW9kZSAmIGlvc19iYXNlOjphcHA7 DQoNCiAgICAgIGlmICghX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0 ICYmICFfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7 DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm JiBfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJhIik7DQog ICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiBfX3Rlc3R0ICYmICFf X3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7DQogICAg ICBpZiAoX190ZXN0aSAmJiAhX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190 ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiciIpOw0KICAgICAg aWYgKF9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190ZXN0 YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAicisiKTsNCiAgICAgIGlm IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190ZXN0YSkN CiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidysiKTsNCiAgICAgIGlmIChf X3Rlc3RiKQ0KICAgICAgICBzdHJjYXQoX19jX21vZGUsICJiIik7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfX2Jhc2lj X2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz X29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1v ZGUpDQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVs bDsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxlKQ0K ICAgICAgICB7DQogICAgICAgICAgX01fY2ZpbGUgPSBfX2ZpbGU7DQogICAg ICAgICAgX01fY2ZpbGVfY3JlYXRlZCA9IDA7Ow0KICAgICAgICAgIF9fcmV0 ID0gdGhpczsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gX19yZXQ7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hh clQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQ0KICAg IHsNCiAgICAgIHJldHVybiBnZXRjIChfTV9jZmlsZSk7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQNCiAgICBf X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX3VuZ2V0YyhfQ2hhclQgX19zKQ0K ICAgIHsNCiAgICAgIHJldHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19i YXNpY19maWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46 Om9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAp DQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVsbDsN CiAgICAgIGludCBfX3BfbW9kZSA9IDA7DQogICAgICBpbnQgX19yd19tb2Rl ID0gMDsNCiAgICAgIGNoYXIgX19jX21vZGVbNF07DQoNCiAgICAgIF9NX29w ZW5fbW9kZShfX21vZGUsIF9fcF9tb2RlLCBfX3J3X21vZGUsIF9fY19tb2Rl KTsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpDQogICAgICAgIHsN CiAgICAgICAgICBpZiAoKF9NX2NmaWxlID0gZm9wZW4oX19uYW1lLCBfX2Nf bW9kZSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9jZmls ZV9jcmVhdGVkID0gMTs7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsN CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0 Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg Ym9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkgeyBy ZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jh c2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9fYmFz aWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2ZpbGUq PihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYgZmNs b3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0KICAg ICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmls ZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19u KQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29uc3Qg X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3 cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFzaWNf ZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jh c2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVrKF9N X2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2ZpbGUp OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVh bW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0cmVh bW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2ZpbGUs IF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2NmaWxl KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQN CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyByZXR1 cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+ OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBfX2Jh c2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVybiAo LTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAgICB7 IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBiYWNr ZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAgX19i YXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkNCiAg ICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRoaXMp OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50 DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0KICAg IHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9DaGFy VD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAg ICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6 ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29uc3Qg X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3 cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19iYXNp Y19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3BvcywgaW9z X2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWsoX01f Y2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwoX01f Y2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2Ns b3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAgX19i YXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7IHJl dHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dtYW55 YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8X0No YXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDIg Mw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDQz ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf ZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5oIiAx IDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0K ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl IG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7DQog ICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFzaWNf ZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7 DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBfX3N0 YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQogICAg ICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KDQog ICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRlOg0K DQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAgIF9f c3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5cGUg X01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7DQoN Cg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAgIGJv b2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQogICAg ICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1Zihf X2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUs DQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRpY19j YXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg IH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+Y2xv c2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg ICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lkKSBjb25z dCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3BlbigpIDogMDs7 IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBvcGVuKGNvbnN0 IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7DQoNCiAg ICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9pZCk7DQoNCiAg ICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9hbGxvY2F0ZV9p bnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fZGVz dHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAg X01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAgICAgdm9pZA0K ICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAgIHZpcnR1YWwg c3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0KDQoNCg0KDQoN CiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVyZmxvdyh2b2lk KTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgcGJhY2tmYWls KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMgMTQ4ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVh bS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBvdmVyZmxv dyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQojIDE1OCAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJl YW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3JlYWxseV9vdmVy ZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoNCiAgICAg IHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNldGJ1ZihjaGFy X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFs IHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3Nf YmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv dXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9z KHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl bm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7 DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZvaWQpDQogICAg ICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBf TV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYgKF9fdGVzdHB1 dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01fZmlsZS0+c3lu YygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9mZiBfX2N1ciA9 IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAg ICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBfTV9vdXRfYmVn Ow0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7DQogICAgICAg ICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYpOw0KICAgICAg ICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg ICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQN CiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAgICAgIHN0cmVhbXNp emUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0K ICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAm JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsNCiAgICAgICAgICAg ICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsrX19zOw0KICAgICAg ICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAgICAgICB9DQogICAg ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAgICAgICAgfQ0KICAg ICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgX19yZXQgKz0gX19z dHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOw0KICAg ICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwg c3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAgICAgX01fcGJhY2tf ZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlwZTo6 eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAg ICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg Y2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJh aXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90 eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5 cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lz dHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAgICBfX2ZpbGVidWZf dHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0KDQogICAgICBiYXNp Y19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCks IF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVm KTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfaWZzdHJlYW0o Y29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwp LCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgm X01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUp Ow0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJlYW0oKQ0KICAgICAg eyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICByZGJ1Zigp IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90 eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlv c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pDQogICAg ICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUg fCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQoNCiAgICAg IHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7DQogICAgICAgIGlm ICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCiAgICB9Ow0KDQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0K DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5 cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVm PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9f ZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAg ICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19vc3RyZWFtX3R5cGUo X19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9N X2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19v ZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dHxp b3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVs bCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAgICB0aGlzLT5pbml0 KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9k ZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpDQogICAg ICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVm KHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmls ZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAg ICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVu KCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBf X3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0KICAgICAgew0KICAg ICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19i YXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xv c2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNs b3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp Ow0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19m c3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf dHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAg ICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pb3M8 Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsNCiAgICAgIHR5 cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g X19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9fZmls ZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAg IGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19u dWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9NX2Zp bGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19mc3Ry ZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i YXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBf TV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgmX01f ZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOw0K ICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgpDQogICAgICB7IH0N Cg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVmKHZvaWQp IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90 eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsDQog ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz ZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0KICAgICAgICBpZiAo IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQogICAgICAgICAgc2V0 c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KDQogICAgICB2 b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0KICAgICAgICBpZiAo IV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBzZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsNCn0NCg0KDQoNCg0K DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAzDQpuYW1lc3BhY2Ug c3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxlKCkNCiAgICB7DQog ICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9i dWZfdW5pZmllZCA9IDE7Ow0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg eyBfTV9maWxlID0gbmV3IF9fZmlsZV90eXBlKCZfTV9sb2NrKTsgfQ0KICAg ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgZGVsZXRlIF9NX2ZpbGU7DQogICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQog ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9h bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICgh X01fYnVmICYmIF9NX2J1Zl9zaXplX29wdCkNCiAgICAgICAgew0KICAgICAg ICAgIF9NX2J1Zl9zaXplID0gX01fYnVmX3NpemVfb3B0Ow0KDQoNCiAgICAg ICAgICB0cnkgeyBfTV9idWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXpl XTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsNCiAgICAgICAgICAgICAg dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYnVmX2FsbG9j YXRlZCA9IDE7Ow0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQN CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIF9N X2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkNCiAgICB7DQogICAgICBpZiAo X01fYnVmX2FsbG9jYXRlZCkNCiAgICAgICAgew0KICAgICAgICAgIGRlbGV0 ZSBbXSBfTV9idWY7DQogICAgICAgICAgX01fYnVmID0gX19udWxsOw0KICAg ICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSAwOzsNCiAgICAgICAgICB0aGlz LT5zZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOw0KICAgICAgICAgIHRo aXMtPnNldHAoX19udWxsLCBfX251bGwpOw0KICAgICAgICB9DQogICAgfQ0K DQogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZlcigpDQogICAgew0K ICAgICAgaWYgKCFfTV9wYmFjayAmJiBfTV9wYmFja19zaXplKQ0KICAgICAg ICB7DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX01fcGJhY2sg PSBuZXcgY2hhcl90eXBlW19NX3BiYWNrX3NpemVdOyB9DQogICAgICAgICAg Y2F0Y2goLi4uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxl dGUgW10gX01fcGJhY2s7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxl YnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVidWYoKQ0K ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZCgwOyksDQogICAg X01fbGFzdF9vdmVyZmxvd2VkKDA7KQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVi dWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19t b2RlLCBpbnRfdHlwZSBfX3MpDQogICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks IF9NX2ZpbGUoX19udWxsKSwgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgp KSwNCiAgICBfTV9zdGF0ZV9iZWcoX19zdGF0ZV90eXBlKCkpLCBfTV9idWZf YWxsb2NhdGVkKDA7KSwNCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoMDspDQog ICAgew0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KICAgICAgX01fZmls ZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOw0KICAgICAgaWYgKHRoaXMtPmlz X29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vZGUgPSBfX21v ZGU7DQogICAgICAgICAgaWYgKF9fcykNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19zOw0KICAgICAgICAgICAg ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg ICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAg fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy VCwgX1RyYWl0cz46Og0KICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3Nf YmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAgIF9fZmlsZWJ1 Zl90eXBlICpfX3JldCA9IF9fbnVsbDsNCiAgICAgIGlmICghdGhpcy0+aXNf b3BlbigpKQ0KICAgICAgICB7DQogICAgICAgICAgX01fYWxsb2NhdGVfZmls ZSgpOw0KICAgICAgICAgIF9NX2ZpbGUtPm9wZW4oX19zLCBfX21vZGUpOw0K ICAgICAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigp Ow0KICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsN CiAgICAgICAgICAgICAgX01fbW9kZSA9IF9fbW9kZTsNCg0KDQogICAgICAg ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAg IGlmIChfX21vZGUgJiBpb3NfYmFzZTo6YXRlDQogICAgICAgICAgICAgICAg ICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkg PCAwKQ0KICAgICAgICAgICAgICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAg ICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAg ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGNsb3Nl KCkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251 bGw7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7DQog ICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291 dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgICAgIGlmIChfX3Rlc3RwdXQp DQogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3codHJhaXRzX3R5cGU6 OmVvZigpKTsNCg0KDQogICAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOw0K IyAxOTIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2ZzdHJlYW0udGNjIiAzDQogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl OjpvcGVubW9kZSgwKTsNCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFs X2J1ZmZlcigpOw0KDQogICAgICAgICAgaWYgKF9NX3BiYWNrKQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fcGJhY2s7DQog ICAgICAgICAgICAgIF9NX3BiYWNrID0gX19udWxsOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgfQ0KDQoNCg0K ICAgICAgaWYgKF9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBkZWxl dGUgX01fZmlsZTsNCiAgICAgICAgICBfTV9maWxlID0gX19udWxsOw0KICAg ICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAg IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNob3dt YW55YygpDQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOw0K ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47 DQoNCiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAg IGJvb2wgX190ZXN0ZW9mID0gMDs7DQogICAgICAgICAgaWYgKF9NX2luX2N1 ciA+PSBfTV9pbl9lbmQpDQogICAgICAgICAgICBfX3Rlc3Rlb2YgPSB0aGlz LT51bmRlcmZsb3coKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAg ICAgaWYgKCFfX3Rlc3Rlb2YpDQogICAgICAgICAgICBfX3JldCA9IF9NX2lu X2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90 eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICB1bmRlcmZsb3coKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0g dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N X21vZGUgJiBpb3NfYmFzZTo6aW47DQogICAgICBib29sIF9fdGVzdG91dCA9 IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQoNCiAgICAgIGlmIChfX3Rl c3RpbikNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIGlmIChfTV9wYmFj a19pbml0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9wYmFj a19kZXN0cm95KCk7DQogICAgICAgICAgICAgIGlmIChfTV9pbl9jdXIgPCBf TV9pbl9lbmQpDQogICAgICAgICAgICAgICAgcmV0dXJuIHRyYWl0c190eXBl Ojp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCiAgICAgICAgICAgIH0NCg0K ICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2lu X2JlZyA8IF9NX2luX2N1cjsNCiAgICAgICAgICBib29sIF9fdGVzdGluaXQg PSBfTV9pc19pbmRldGVybWluYXRlKCk7DQoNCg0KICAgICAgICAgIGlmIChf X3Rlc3RnZXQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf X3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93 KCk7DQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoKF9NX2luX2N1ciAtIF9N X2luX2JlZykgPT0gMSkNCiAgICAgICAgICAgICAgICBfTV9maWxlLT5zeXNf Z2V0YygpOw0KDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICBfTV9maWxlLT5zZWVrb2ZmKF9NX2luX2N1ciAtIF9NX2luX2JlZywNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpjdXIs IGlvc19iYXNlOjppbik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICBp ZiAoX190ZXN0aW5pdCB8fCBfX3Rlc3RnZXQpDQogICAgICAgICAgICB7DQoN CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3NpemUgPSBfTV9maWxlLT54 c2dldG4oX01faW5fYmVnLCBfTV9idWZfc2l6ZSk7DQogICAgICAgICAgICAg IGlmICgwIDwgX19zaXplKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShfX3NpemUpOw0KICAgICAg ICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAgICAgICAgICAg ICAgX01fb3V0X2N1ciA9IF9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIp Ow0KDQogICAgICAgICAgICAgICAgICBpZiAoX19zaXplID09IDEpDQogICAg ICAgICAgICAgICAgICAgIF9NX2ZpbGUtPnN5c191bmdldGMoKl9NX2luX2N1 cik7DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg ICAgIHsNCg0KICAgICAgICAgICAgICAgICAgc3RyZWFtb2ZmIF9fcCA9IF9N X2ZpbGUtPnNlZWtvZmYoMCAtIF9fc2l6ZSwgaW9zX2Jhc2U6OmN1ciwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlvc19iYXNlOjppbik7DQogICAgICAgICAgICAgICAgICBpZiAoX19w ID09IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAg ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg X01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19pKQ0KICAgIHsNCiAg ICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg ICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47DQoN CiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAgIGJv b2wgX190ZXN0cGIgPSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICAg ICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo X19pKTsNCiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBl OjplcV9pbnRfdHlwZShfX2ksIF9fcmV0KTsNCg0KICAgICAgICAgIGlmIChf X3Rlc3RwYikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgYm9vbCBf X3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAg ICAgICAgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcShfX2MsIHRo aXMtPmdwdHIoKVstMV0pOw0KDQoNCg0KICAgICAgICAgICAgICBpZiAoIV9f dGVzdGVvZiAmJiBfX3Rlc3RlcSkNCiAgICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgICAtLV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg IGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0 X2N1cjsNCiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOw0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9m KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIC0tX01f aW5fY3VyOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAg ICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOw0KICAgICAgICAgICAg ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz dGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAt LV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp DQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAg ICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOw0KICAgICAgICAgICAgICAg ICAgKl9NX2luX2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgIF9fcmV0 ID0gX19pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg ICB0aGlzLT5zZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsNCiAgICAgICAg ICAgICAgdGhpcy0+dW5kZXJmbG93KCk7DQogICAgICAgICAgICAgIGlmICgh X190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9fYywgKl9NX2luX2N1cikpDQog ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBf TV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAqX01f aW5fY3VyID0gX19jOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjpub3RfZW9mKF9faSk7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IDA7Ow0KICAgICAg cmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3ZlcmZsb3coaW50X3R5cGUgX19j KQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYm IF9NX291dF9jdXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsNCiAgICAgIGJv b2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQoNCiAg ICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAo X190ZXN0cHV0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqX01f b3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAg ICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOw0KICAgICAgICAgICAg ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAg ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgX19yZXQgPSB0 aGlzLT5fTV9yZWFsbHlfb3ZlcmZsb3coX19jKTsNCiAgICAgICAgfQ0KDQog ICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAgIHJldHVybiBf X3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf VHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg X1RyYWl0cz46Og0KICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBf X2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7DQogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg JiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7DQogICAgICBib29sIF9fdGVz dHVuYnVmZmVyZWQgPSBfTV9maWxlICYmICFfTV9idWZfc2l6ZTsNCg0KICAg ICAgaWYgKF9fdGVzdHB1dCB8fCBfX3Rlc3R1bmJ1ZmZlcmVkKQ0KICAgICAg ICB7DQoNCiAgICAgICAgICBpbnQgX19wbGVuID0gX01fb3V0X2VuZCAtIF9N X291dF9iZWc7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDA7DQoN CiAgICAgICAgICBpZiAoX19wbGVuKQ0KICAgICAgICAgICAgX19sZW4gPSBf TV9maWxlLT54c3B1dG4oX01fb3V0X2JlZywgX19wbGVuKTsNCg0KICAgICAg ICAgIGlmIChfX2MgIT10cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3BlbmRpbmcgPSB0cmFp dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgIF9f bGVuICs9IF9NX2ZpbGUtPnhzcHV0bigmX19wZW5kaW5nLCAxKTsNCiAgICAg ICAgICAgICAgKytfX3BsZW47DQogICAgICAgICAgICB9DQoNCg0KDQogICAg ICAgICAgX01fZmlsZS0+c3luYygpOw0KICAgICAgICAgIGlmIChfX2xlbiA9 PSBfX3BsZW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX3Nl dF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAgIF9fcmV0ID0gdHJh aXRzX3R5cGU6Om5vdF9lb2YoX19jKTsNCiAgICAgICAgICAgIH0NCiMgNDcy ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3Ry ZWFtLnRjYyIgMw0KICAgICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93 ZWQgPSAxOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJlYW1idWZf dHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K ICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog ICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19zID09IDAg JiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7DQog ICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoNCg0KDQoN Cg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7DQoN Cg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBfTV9idWZf c2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAgICBfTV9z ZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9hbGxvY2F0 ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5 cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f d2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg IHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsNCiAg ICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4oKTsNCiAgICAg IGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6aW4gJiYgX01f bW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190ZXN0b3V0ID0g X19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6 Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNldDxfX2Nv ZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsNCiAgICAg IGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9IDA7DQogICAg ICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9fd2lkdGggPD0g MDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVzdGZhaWwgJiYg KF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsNCg0KICAgICAg ICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAgIGlmIChfX3dh eSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0ZWRfb2ZmID0g X193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJvb2wgX190ZXN0 Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2VuZDsNCiAg ICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9N X291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAgICAgICAgaWYg KF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQogICAgICAgICAg ICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7DQoN CiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0KCk7DQogICAg ICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190 ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQogICAgICAgICAg ICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0gX01faW5fYmVn Ow0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihf X2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAgICAgICAgICAg IF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQoNCg0K ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg X19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3Vy LCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBtYXgoX01fb3V0 X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg ICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfZmlsZWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9zKHBvc190eXBlIF9f cG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg IHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3Bv czsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf YmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9sYXN0X292ZXJmbG93 ZWQgPSAwOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K ICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9p ZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAg aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQogICAgICBib29s IF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBw YmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2Nh bGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9idWZfbG9j YWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g MTs7DQogICAgICAgIH0NCg0KDQoNCg0KDQogICAgICBfTV9sYXN0X292ZXJm bG93ZWQgPSAwOzsNCiAgICB9DQoNCn0NCiMgNDIxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMN CiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNr d2FyZC9mc3RyZWFtLmgiIDIgMw0KDQp1c2luZyBzdGQ6OmZpbGVidWY7DQp1 c2luZyBzdGQ6Omlmc3RyZWFtOw0KdXNpbmcgc3RkOjpvZnN0cmVhbTsNCnVz aW5nIHN0ZDo6ZnN0cmVhbTsNCnVzaW5nIHN0ZDo6c3RyZWFtcG9zOw0KIyA1 ICJidWZmZXIuaCIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u aCIgMSAzIDQNCiMgNiAiYnVmZmVyLmgiIDINCiMgMSAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAxIDMgNA0KIyA3ICJidWZmZXIuaCIgMg0KIyAxICJtaXNj LmgiIDENCiMgOCAiYnVmZmVyLmgiIDINCiMgMSAiZXJyb3IuaCIgMQ0KDQoN Cg0KZXh0ZXJuIGludCBlcnJvckNvdW50Ow0KDQoNCg0KDQoNCg0KZW51bSBU QWJvcnRDb2RlIHsNCiAgICBhYm9ydEludmFsaWRDb21tYW5kTGluZUFyZ3Mg PSAtMSwNCiAgICBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkID0gLTIsDQog ICAgYWJvcnRJRm9ybUZpbGVPcGVuRmFpbGVkID0gLTMsDQogICAgYWJvcnRB c3NlbWJseUZpbGVPcGVuRmFpbGVkID0gLTQsDQogICAgYWJvcnRUb29NYW55 U3ludGF4RXJyb3JzID0gLTUsDQogICAgYWJvcnRTdGFja092ZXJmbG93ID0g LTYsDQogICAgYWJvcnRDb2RlU2VnbWVudE92ZXJmbG93ID0gLTcsDQogICAg YWJvcnROZXN0aW5nVG9vRGVlcCA9IC04LA0KICAgIGFib3J0UnVudGltZUVy cm9yID0gLTksDQogICAgYWJvcnRVbmltcGxlbWVudGVkRmVhdHVyZSA9IC0x MA0KfSA7DQoNCnZvaWQgQWJvcnRUcmFuc2xhdGlvbihUQWJvcnRDb2RlIGFj KTsNCiMgOSAiYnVmZmVyLmgiIDINCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGNo YXIgZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVy biBpbnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBp bnQgbWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNz IFRUZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBm aWxlOw0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRl eHRbbWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0K DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJs aWM6DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxl TmFtZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dElu QnVmZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQog ICAgICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBD aGFyICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFy IEdldENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7 DQp9Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMg VFRleHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9p ZCk7DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIg KnBTb3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA3MyAiYnVmZmVyLmgiDQpjbGFz cyBUVGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRb bWF4SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lk IFB1dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0 IGNoYXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBU ZXh0KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoN Cg0KY2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIg ew0KICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVb MjZdOw0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7 DQoNCiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGlj Og0KICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBT b3VyY2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0 IGNoYXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2 b2lkKTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkN CiAgICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0 KTsNCiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRl eHQsIGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsN CiAgICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1i ZXIsIG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7 DQogICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDI2 ICJidWZmZXIuY3BwIiAyDQojIDM1ICJidWZmZXIuY3BwIg0KY2hhciBlb2ZD aGFyID0gMHg3RjsNCmludCBpbnB1dFBvc2l0aW9uOw0KDQppbnQgbGlzdEZs YWcgPSAxOzsNCiMgNDggImJ1ZmZlci5jcHAiDQpUVGV4dEluQnVmZmVyOjpU VGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1dEZpbGVOYW1lLCBUQWJv cnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5ldyBjaGFyW3N0cmxlbihw SW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAgIHN0cmNweShwRmlsZU5h bWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAgICBmaWxlLm9wZW4ocEZp bGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZpbGUuZ29vZCgpKSBBYm9y dFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzAgImJ1ZmZlci5jcHAiDQpjaGFy IFRUZXh0SW5CdWZmZXI6OkdldENoYXIodm9pZCkNCnsNCiAgICBjb25zdCBp bnQgdGFiU2l6ZSA9IDg7DQogICAgY2hhciBjaDsNCg0KICAgIGlmICgqcENo YXIgPT0gZW9mQ2hhcikgcmV0dXJuIGVvZkNoYXI7DQogICAgZWxzZSBpZiAo KnBDaGFyID09ICdcMCcpIGNoID0gR2V0TGluZSgpOw0KICAgIGVsc2Ugew0K ICAgICAgICArK3BDaGFyOw0KICAgICAgICArK2lucHV0UG9zaXRpb247DQog ICAgICAgIGNoID0gKnBDaGFyOw0KICAgIH0NCg0KDQoNCiAgICBpZiAoY2gg PT0gJ1x0JykgaW5wdXRQb3NpdGlvbiArPSB0YWJTaXplIC0gaW5wdXRQb3Np dGlvbiV0YWJTaXplOw0KDQogICAgcmV0dXJuIGNoOw0KfQ0KIyA5OSAiYnVm ZmVyLmNwcCINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6UHV0QmFja0NoYXIodm9p ZCkNCnsNCiAgICAtLXBDaGFyOw0KICAgIC0taW5wdXRQb3NpdGlvbjsNCg0K ICAgIHJldHVybiAqcENoYXI7DQp9DQojIDEyMSAiYnVmZmVyLmNwcCINClRT b3VyY2VCdWZmZXI6OlRTb3VyY2VCdWZmZXIoY29uc3QgY2hhciAqcFNvdXJj ZUZpbGVOYW1lKQ0KICAgIDogVFRleHRJbkJ1ZmZlcihwU291cmNlRmlsZU5h bWUsIGFib3J0U291cmNlRmlsZU9wZW5GYWlsZWQpDQp7DQoNCiAgICBpZiAo bGlzdEZsYWcpIGxpc3QuSW5pdGlhbGl6ZShwU291cmNlRmlsZU5hbWUpOw0K ICAgIEdldExpbmUoKTsNCn0NCiMgMTM4ICJidWZmZXIuY3BwIg0KY2hhciBU U291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQogICAgZXh0ZXJuIGlu dCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVsOw0KDQoNCiAgICBp ZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsNCg0KDQogICAgZWxz ZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBtYXhJbnB1dEJ1ZmZl clNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoNCiAgICAgICAgaWYg KGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytjdXJyZW50TGluZU51 bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy cmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAgaW5wdXRQb3NpdGlv biA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0KDQoNCg0KDQoNCg0K Y29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgwOw0KY29uc3QgaW50 IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1ZmZlciBsaXN0Ow0K DQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJpbnRQYWdlSGVhZGVy KHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVlZENoYXIgPSAnXGYn Ow0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwgIlBhZ2UgIiA8PCAr K3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8IHBTb3VyY2VGaWxl TmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8PCBlbmRsIDw8IGVu ZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAxOTMgImJ1ZmZlci5j cHAiDQp2b2lkIFRMaXN0QnVmZmVyOjpJbml0aWFsaXplKGNvbnN0IGNoYXIg KnBGaWxlTmFtZSkNCnsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCiAgICBwYWdl TnVtYmVyID0gMDsNCg0KDQogICAgcFNvdXJjZUZpbGVOYW1lID0gbmV3IGNo YXJbc3RybGVuKHBGaWxlTmFtZSkgKyAxXTsNCiAgICBzdHJjcHkocFNvdXJj ZUZpbGVOYW1lLCBwRmlsZU5hbWUpOw0KDQoNCiAgICB0aW1lX3QgdGltZXI7 DQogICAgdGltZSgmdGltZXIpOw0KICAgIHN0cmNweShkYXRlLCBhc2N0aW1l KGxvY2FsdGltZSgmdGltZXIpKSk7DQogICAgZGF0ZVtzdHJsZW4oZGF0ZSkg LSAxXSA9ICdcMCc7DQoNCiAgICBQcmludFBhZ2VIZWFkZXIoKTsNCn0NCg0K DQoNCg0KDQp2b2lkIFRMaXN0QnVmZmVyOjpQdXRMaW5lKHZvaWQpDQp7DQoN CiAgICBpZiAobGlzdEZsYWcgJiYgKGxpbmVDb3VudCA9PSBtYXhMaW5lc1Bl clBhZ2UpKSBQcmludFBhZ2VIZWFkZXIoKTsNCg0KDQogICAgdGV4dFttYXhQ cmludExpbmVMZW5ndGhdID0gJ1wwJzsNCg0KDQogICAgY291dCA8PCB0ZXh0 IDw8IGVuZGw7DQogICAgdGV4dFswXSA9ICdcMCc7DQoNCiAgICArK2xpbmVD b3VudDsNCn0NCg== ---559023410-758783491-1017137114=:8152 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_ok Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: IyAxNyAiYnVmZmVyLmNjIg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMSAzIDQNCiMgMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5o IiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMg NA0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQNCnR5 cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7DQojIDE1 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMzQgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg IkAoIylzdGRpby5oCTEuNjkJOTgvMDcvMTMgU01JIg0KDQojIDEgIi91c3Iv aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxMyAiL3Vz ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNA0KI3ByYWdtYSBp ZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3CTk3LzEyLzA0IFNNSSIN Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj IDkgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0DQojcHJhZ21h IGlkZW50ICJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1IFNNSSINCiMg MTQ4ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KZXh0ZXJu ICJDIiB7DQojIDMzMCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAz IDQNCn0NCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxNzUgIi91c3IvaW5jbHVk ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCn0NCiMgMzcgIi9ob21lL21k ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z LjAvaW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv c3lzL3ZhX2xpc3QuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5cy92 YV9saXN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXZhX2xpc3QuaAkx LjExCTk3LzExLzIyIFNNSSINCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdmFf bGlzdC5oIiAzIDQNCmV4dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiB2b2lk ICpfX3ZhX2xpc3Q7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p bmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRp b190YWcuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5o IiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcuaAkxLjMJOTgv MDQvMjAgU01JIg0KDQoNCmV4dGVybiAiQyIgew0KIyAyMSAiL3Vzci9pbmNs dWRlL3N0ZGlvX3RhZy5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IEZJTEUgX19G SUxFOw0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlv LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEg MyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNA0KI3By YWdtYSBpZGVudCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjgJOTkvMDYvMzAgU01J Ig0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQN CiMgMTIgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDIgMyA0DQoNCg0K ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHNzaXpl X3Q7DQojIDM4ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCnN0 cnVjdCBGSUxFDQp7DQoNCg0KDQoNCiAgICAgICAgc3NpemVfdCBfY250Ow0K ICAgICAgICB1bnNpZ25lZCBjaGFyICpfcHRyOw0KDQogICAgICAgIHVuc2ln bmVkIGNoYXIgKl9iYXNlOw0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9mbGFn Ow0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9maWxlOw0KICAgICAgICB1bnNp Z25lZCBfX29yaWVudGF0aW9uOjI7DQogICAgICAgIHVuc2lnbmVkIF9faW9u b2xvY2s6MTsNCiAgICAgICAgdW5zaWduZWQgX19maWxsZXI6NTsNCn07DQoN Cg0KDQoNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAy IDMgNA0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0K ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCnR5cGVkZWYgX19GSUxFIEZJTEU7DQoN Cg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsNCiMg NzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYg bG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsNCiMgODggIi9ob21lL21kZWlsL2Jp bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j bHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgbG9uZyBvZmZfdDsNCg0KDQoN Cg0KDQoNCg0KdHlwZWRlZiBfX2xvbmdsb25nX3Qgb2ZmNjRfdDsNCg0KDQoN Cg0KDQoNCnR5cGVkZWYgbG9uZyBmcG9zX3Q7DQoNCg0KDQoNCg0KDQoNCnR5 cGVkZWYgX19sb25nbG9uZ190IGZwb3M2NF90Ow0KIyAxMzIgIi9ob21lL21k ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z LjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgX192YV9saXN0IF9f bm90X3ZhX2xpc3RfXzsNCiMgMjAzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMyA0DQpleHRlcm4gRklMRSBfX2lvYlsyMF07DQojIDIxNSAiL2hv bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIHVuc2lnbmVk IGNoYXIgX3NpYnVmW10sIF9zb2J1ZltdOw0KIyAyNDQgIi9ob21lL21kZWls L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv aW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyICpf YnVmZW5kdGFiW107DQpleHRlcm4gRklMRSAqX2xhc3RidWY7DQojIDI3NSAi L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIGludCBy ZW1vdmUoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICp0bXBmaWxl KHZvaWQpOw0KZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOw0KDQpleHRl cm4gY2hhciAqdG1wbmFtX3IoY2hhciAqKTsNCg0KZXh0ZXJuIGludCBmY2xv c2UoRklMRSAqKTsNCmV4dGVybiBpbnQgZmZsdXNoKEZJTEUgKik7DQpleHRl cm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0K ZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICosIEZJTEUgKik7DQpleHRlcm4gdm9pZCBzZXRidWYoRklMRSAqLCBjaGFy ICopOw0KDQoNCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIg Kiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOw0K DQpleHRlcm4gaW50IHNldHZidWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6 ZV90KTsNCg0KZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hh ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hh ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwg Li4uKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNp emVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KDQoNCmV4dGVybiBpbnQgc3By aW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGlu dCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQpl eHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2du dWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAq LCBfX2dudWNfdmFfbGlzdCk7DQoNCg0KDQpleHRlcm4gaW50IHZzbnByaW50 ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlz dCk7DQoNCmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFy ICosIF9fZ251Y192YV9saXN0KTsNCmV4dGVybiBpbnQgZmdldGMoRklMRSAq KTsNCmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsN CmV4dGVybiBpbnQgZnB1dGMoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBm cHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRlcm4gaW50IGdldGMo RklMRSAqKTsNCmV4dGVybiBpbnQgZ2V0Y2hhcih2b2lkKTsNCmV4dGVybiBj aGFyICpnZXRzKGNoYXIgKik7DQpleHRlcm4gaW50IHB1dGMoaW50LCBGSUxF ICopOw0KZXh0ZXJuIGludCBwdXRjaGFyKGludCk7DQpleHRlcm4gaW50IHB1 dHMoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklM RSAqKTsNCmV4dGVybiBzaXplX3QgZnJlYWQodm9pZCAqLCBzaXplX3QsIHNp emVfdCwgRklMRSAqKTsNCmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZv aWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7DQpleHRlcm4gaW50IGZn ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7DQpleHRlcm4gaW50IGZzZWVrKEZJ TEUgKiwgbG9uZywgaW50KTsNCmV4dGVybiBpbnQgZnNldHBvcyhGSUxFICos IGNvbnN0IGZwb3NfdCAqKTsNCmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7 DQpleHRlcm4gdm9pZCByZXdpbmQoRklMRSAqKTsNCmV4dGVybiB2b2lkIGNs ZWFyZXJyKEZJTEUgKik7DQpleHRlcm4gaW50IGZlb2YoRklMRSAqKTsNCmV4 dGVybiBpbnQgZmVycm9yKEZJTEUgKik7DQpleHRlcm4gdm9pZCBwZXJyb3Io Y29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUg Kik7DQpleHRlcm4gaW50IF9fZmxzYnVmKGludCwgRklMRSAqKTsNCiMgMzUz ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklM RSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpj dGVybWlkKGNoYXIgKik7DQpleHRlcm4gaW50IGZpbGVubyhGSUxFICopOw0K IyAzNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVy biB2b2lkIGZsb2NrZmlsZShGSUxFICopOw0KZXh0ZXJuIGludCBmdHJ5bG9j a2ZpbGUoRklMRSAqKTsNCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUg Kik7DQpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsNCmV4dGVy biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsNCmV4dGVybiBpbnQgcHV0 Y191bmxvY2tlZChpbnQsIEZJTEUgKik7DQpleHRlcm4gaW50IHB1dGNoYXJf dW5sb2NrZWQoaW50KTsNCiMgMzc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMyA0DQpleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsN CmV4dGVybiBjaGFyICp0ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsNCmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwg Y29uc3QgY2hhciAqKTsNCg0KDQoNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpl eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gaW50 IGdldHcoRklMRSAqKTsNCmV4dGVybiBpbnQgcHV0dyhpbnQsIEZJTEUgKik7 DQpleHRlcm4gaW50IHBjbG9zZShGSUxFICopOw0KDQoNCg0KDQoNCg0KDQpl eHRlcm4gaW50IGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOw0KZXh0ZXJu IG9mZl90IGZ0ZWxsbyhGSUxFICopOw0KIyA0MDggIi9ob21lL21kZWlsL2Jp bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j bHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBGSUxFICpmb3BlbjY0KGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICpmcmVvcGVu NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRl cm4gRklMRSAqdG1wZmlsZTY0KHZvaWQpOw0KZXh0ZXJuIGludCBmZ2V0cG9z NjQoRklMRSAqLCBmcG9zNjRfdCAqKTsNCmV4dGVybiBpbnQgZnNldHBvczY0 KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZWVr bzY0KEZJTEUgKiwgb2ZmNjRfdCwgaW50KTsNCmV4dGVybiBvZmY2NF90IGZ0 ZWxsbzY0KEZJTEUgKik7DQojIDU4NiAiL2hvbWUvbWRlaWwvYmluLy4uL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0 ZGlvLmgiIDMgNA0KfQ0KIyAxOCAiYnVmZmVyLmNjIiAyDQojIDEgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5nLmgJMS4y Mgk5Ny8xMi8yMiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDQzICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDMgNA0KZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICos IGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiB2b2lkICptZW1tb3Zl KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIg KnN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq c3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCg0KZXh0 ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRl cm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsNCg0KZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICosIHNpemVfdCk7DQpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cmNvbGwoY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBzdHJuY21wKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIHNp emVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K DQpleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl X3QpOw0KZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7 DQpleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hh ciAqLCBpbnQpOw0KZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RydG9rKGNo YXIgKiwgY29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gY2hhciAqc3RydG9r X3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOw0KDQpleHRlcm4g dm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOw0KZXh0ZXJuIGNo YXIgKnN0cmVycm9yKGludCk7DQpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25z dCBjaGFyICopOw0KDQoNCg0KZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAq LCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJu IGNoYXIgKnN0cnNpZ25hbChpbnQpOw0KZXh0ZXJuIGludCBmZnMoaW50KTsN CmV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7DQpleHRlcm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQoNCg0KDQoNCmV4dGVybiBjaGFy ICpzdHJkdXAoY29uc3QgY2hhciAqKTsNCiMgMTQ2ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDMgNA0KfQ0KIyAxOSAiYnVmZmVyLmNjIiAyDQojIDEgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5 OC8wMy8yNyBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy IDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg MyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NA0KI3ByYWdtYSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBT TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMg NA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMg NA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAz IDQNCiMgMjkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz IDQNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5o IiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIg MyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8w OC8wMSBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rl c3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBl cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNs dWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5 c2Fkcl90IHsgaW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBz dHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoN Cg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIv dXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNy L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg IkAoIylpbnRfdHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vz ci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5j bHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVk ZS9zeXMvaW50X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj IDYyICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVk ZWYgY2hhciBpbnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQx Nl90Ow0KdHlwZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBs b25nIGxvbmcgaW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hh ciB1aW50OF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsN CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3Iv aW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90 IGludG1heF90Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDEx MCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVm IGludCBpbnRwdHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJf dDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsN Cg0KDQoNCg0KDQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBl ZGVmIGludCBpbnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcg bG9uZyBpbnRfbGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHVpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVp bnRfbGVhc3QxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFz dDMyX3Q7DQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVp bnRfbGVhc3Q2NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVy biAiQyIgew0KIyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5o IiAzIDQNCnR5cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9t ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25n IHRfc2NhbGFyX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFy X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7 DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVs b25nX3Q7DQoNCnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9u ZyBkYWRkcl90Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVm IHVsb25nX3QgcGFkZHJfdDsNCiMgMTE2ICIvaG9tZS9tZGVpbC9iaW4vLi4v bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQgcHRyZGlmZl90Ow0KIyAx MjUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBl ZGVmIHVsb25nX3QgcGZuX3Q7DQp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsN CnR5cGVkZWYgbG9uZyBzcGdjbnRfdDsNCg0KdHlwZWRlZiB1Y2hhcl90IHVz ZV90Ow0KdHlwZWRlZiBzaG9ydCBzeXNpZF90Ow0KdHlwZWRlZiBzaG9ydCBp bmRleF90Ow0KdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7DQp0eXBlZGVm IHZvaWQgKmJ1ZmNhbGxfaWRfdDsNCiMgMTYzICIvaG9tZS9tZGVpbC9iaW4v Li4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IGlub190Ow0K dHlwZWRlZiBsb25nIGJsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzYmxr Y250X3Q7DQp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRfdDsNCiMgMTgxICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1 X2xvbmdsb25nX3QgaW5vNjRfdDsNCnR5cGVkZWYgbG9uZ2xvbmdfdCBibGtj bnQ2NF90Ow0KdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtjbnQ2NF90Ow0K dHlwZWRlZiB1X2xvbmdsb25nX3QgZnNmaWxjbnQ2NF90Ow0KDQoNCg0KDQoN Cg0KdHlwZWRlZiBsb25nIGJsa3NpemVfdDsNCg0KDQoNCnR5cGVkZWYgZW51 bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90Ow0KIyAyMDggIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGlu dDY0X3QgcGFkNjRfdDsNCnR5cGVkZWYgdWludDY0X3QgdXBhZDY0X3Q7DQoj IDIyMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5 cGVkZWYgbG9uZ2xvbmdfdCBvZmZzZXRfdDsNCnR5cGVkZWYgdV9sb25nbG9u Z190IHVfb2Zmc2V0X3Q7DQp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBsZW5fdDsN CnR5cGVkZWYgbG9uZ2xvbmdfdCBkaXNrYWRkcl90Ow0KIyAyNDIgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIHVuaW9u IHsNCiAgICAgICAgb2Zmc2V0X3QgX2Y7DQogICAgICAgIHN0cnVjdCB7DQog ICAgICAgICAgICAgICAgaW50MzJfdCBfdTsNCiAgICAgICAgICAgICAgICBp bnQzMl90IF9sOw0KICAgICAgICB9IF9wOw0KfSBsbG9mZl90Ow0KIyAyNjIg Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVm IHVuaW9uIHsNCiAgICAgICAgZGlza2FkZHJfdCBfZjsNCiAgICAgICAgc3Ry dWN0IHsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF91Ow0KICAgICAgICAg ICAgICAgIGludDMyX3QgX2w7DQogICAgICAgIH0gX3A7DQp9IGxsZGFkZHJf dDsNCg0KDQp0eXBlZGVmIHVpbnRfdCBrX2ZsdHNldF90Ow0KIyAyODcgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxv bmcgaWRfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdWludF90IHVzZWNvbmRz X3Q7DQoNCg0KDQp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7DQojIDMwOCAi L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYg dWxvbmdfdCBtYWpvcl90Ow0KdHlwZWRlZiB1bG9uZ190IG1pbm9yX3Q7DQoN Cg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBwcmlfdDsNCiMgMzI4ICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1c2hvcnRf dCBvX21vZGVfdDsNCnR5cGVkZWYgc2hvcnQgb19kZXZfdDsNCnR5cGVkZWYg dXNob3J0X3Qgb191aWRfdDsNCnR5cGVkZWYgb191aWRfdCBvX2dpZF90Ow0K dHlwZWRlZiBzaG9ydCBvX25saW5rX3Q7DQp0eXBlZGVmIHNob3J0IG9fcGlk X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7DQoNCg0KDQoNCg0KdHlw ZWRlZiBpbnQga2V5X3Q7DQoNCg0KDQp0eXBlZGVmIHVsb25nX3QgbW9kZV90 Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgdWlkX3Q7DQoNCg0KDQp0 eXBlZGVmIHVpZF90IGdpZF90Ow0KDQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNp Z25lZCBpbnQgcHRocmVhZF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo cmVhZF9rZXlfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXgg ew0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIHVpbnQ4X3Qg X19wdGhyZWFkX211dGV4X2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWlu dDMyX3QgX19wdGhyZWFkX211dGV4X3R5cGU7DQogICAgICAgIH0gX19wdGhy ZWFkX211dGV4X2ZsYWdzOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAg ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgX19wdGhyZWFkX211dGV4X3BhZFs4XTsNCiAgICAgICAgICAgICAgICB9 IF9fcHRocmVhZF9tdXRleF9sb2NrNjQ7DQogICAgICAgICAgICAgICAgdXBh ZDY0X3QgX19wdGhyZWFkX211dGV4X293bmVyNjQ7DQogICAgICAgIH0gX19w dGhyZWFkX211dGV4X2xvY2s7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVh ZF9tdXRleF9kYXRhOw0KfSBwdGhyZWFkX211dGV4X3Q7DQoNCnR5cGVkZWYg c3RydWN0IF9wdGhyZWFkX2NvbmQgew0KICAgICAgICBzdHJ1Y3Qgew0KICAg ICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsN CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29uZF90eXBl Ow0KICAgICAgICB9IF9fcHRocmVhZF9jb25kX2ZsYWdzOw0KICAgICAgICB1 cGFkNjRfdCBfX3B0aHJlYWRfY29uZF9kYXRhOw0KfSBwdGhyZWFkX2NvbmRf dDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsN CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRlcnM7DQog ICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfdHlwZTsNCiAgICAg ICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja19tYWdpYzsNCiAgICAgICAg dXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQxWzNdOw0KICAgICAgICB1 cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDJbMl07DQogICAgICAgIHVw YWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkM1syXTsNCn0gcHRocmVhZF9y d2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfYXR0 ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9hdHRycDsNCn0gcHRocmVh ZF9hdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf bXV0ZXhhdHRyIHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX211dGV4YXR0 cnA7DQp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRl ZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIgew0KICAgICAgICB2b2lkICpf X3B0aHJlYWRfY29uZGF0dHJwOw0KfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQoN Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9vbmNlIHsNCiAgICAgICAgdXBhZDY0 X3QgX19wdGhyZWFkX29uY2VfcGFkWzRdOw0KfSBwdGhyZWFkX29uY2VfdDsN Cg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2thdHRy IHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX3J3bG9ja2F0dHJwOw0KfSBw dGhyZWFkX3J3bG9ja2F0dHJfdDsNCg0KdHlwZWRlZiB1bG9uZ190IGRldl90 Ow0KDQoNCg0KDQoNCnR5cGVkZWYgdWxvbmdfdCBubGlua190Ow0KdHlwZWRl ZiBsb25nIHBpZF90Ow0KIyA0NzYgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmcgdGltZV90Ow0KDQoNCg0KDQp0 eXBlZGVmIGxvbmcgY2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgY2xv Y2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIGludCB0aW1lcl90Ow0KDQoNCg0K DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuY2hhcjsNCnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQg dWludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsNCiMgNTUyICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1 bnNpZ25lZCBjaGFyIHVfY2hhcjsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg dV9zaG9ydDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Ow0KdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsNCnR5cGVkZWYgc3RydWN0IF9xdWFk IHsgaW50IHZhbFsyXTsgfSBxdWFkX3Q7DQp0eXBlZGVmIHF1YWRfdCBxdWFk Ow0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAxIDMgNA0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0 DQojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBT TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgi IDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMg NA0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQoj IDIyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojcHJhZ21hIGlk ZW50ICJAKCMpdGltZS5oCTIuNjIJOTgvMDIvMDQgU01JIg0KDQojIDEgIi91 c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyNSAi L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoN CmV4dGVybiAiQyIgew0KIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi IDMgNA0Kc3RydWN0IHRpbWV2YWwgew0KICAgICAgICB0aW1lX3QgdHZfc2Vj Ow0KICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOw0KfTsNCiMgODIgIi91 c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1lem9uZSB7 DQogICAgICAgIGludCB0el9taW51dGVzd2VzdDsNCiAgICAgICAgaW50IHR6 X2RzdHRpbWU7DQp9Ow0KDQoNCg0KDQoNCn0NCiMgMTAwICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMSAzIDQNCiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxNTUgIi91c3Iv aW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCBpdGltZXJ2YWwgew0K ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsNCiAgICAgICAg c3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7DQp9Ow0KIyAyMDMgIi91c3IvaW5j bHVkZS9zeXMvdGltZS5oIiAzIDQNCnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRp bWVfdDsNCiMgMzE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpp bnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAq KTsNCiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQppbnQg Z2V0aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsNCmludCB1dGlt ZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0K aW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwg c3RydWN0IGl0aW1lcnZhbCAqKTsNCiMgMzY0ICIvdXNyL2luY2x1ZGUvc3lz L3RpbWUuaCIgMyA0DQppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFs ICosIHZvaWQgKik7DQoNCmhydGltZV90IGdldGhydGltZSh2b2lkKTsNCmhy dGltZV90IGdldGhydnRpbWUodm9pZCk7DQojIDM4NCAiL3Vzci9pbmNsdWRl L3N5cy90aW1lLmgiIDMgNA0KaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGlt ZXZhbCAqLCB2b2lkICopOw0KIyA0MDUgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMg NDA2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIv dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDEgMyA0DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5 cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0K IyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVm IGxvbmcgZmRfbWFzazsNCg0KdHlwZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3 MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0 cnVjdCBmZF9zZXQgew0KDQoNCg0KICAgICAgICBsb25nIGZkc19iaXRzWygo KDEwMjQpKygoKHNpemVvZiAoZmRzX21hc2spICogOCkpLTEpKS8oKHNpemVv ZiAoZmRzX21hc2spICogOCkpKV07DQp9IGZkX3NldDsNCiMgOTcgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNA0KZXh0ZXJuIGludCBzZWxlY3Qo aW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGlt ZXZhbCAqKTsNCg0KDQoNCg0KDQoNCn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDU4MSAiL2hvbWUvbWRlaWwv YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCn0NCiMgMjAgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDY0ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzIDQNCnN0cnVjdCB0bSB7DQogICAgICAgIGlu dCB0bV9zZWM7DQogICAgICAgIGludCB0bV9taW47DQogICAgICAgIGludCB0 bV9ob3VyOw0KICAgICAgICBpbnQgdG1fbWRheTsNCiAgICAgICAgaW50IHRt X21vbjsNCiAgICAgICAgaW50IHRtX3llYXI7DQogICAgICAgIGludCB0bV93 ZGF5Ow0KICAgICAgICBpbnQgdG1feWRheTsNCiAgICAgICAgaW50IHRtX2lz ZHN0Ow0KfTsNCg0KDQoNCmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOw0K ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7DQpleHRl cm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7DQpleHRlcm4gdGltZV90 IHRpbWUodGltZV90ICopOw0KZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29uc3Qg c3RydWN0IHRtICopOw0KZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVf dCAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3Qg Kik7DQpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGltZV90 ICopOw0KZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFyICosIHNpemVfdCwg Y29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQpleHRl cm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0 IHRtICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3Qg dGltZV90ICosIHN0cnVjdCB0bSAqKTsNCg0KDQoNCg0KDQpleHRlcm4gY2hh ciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj dCB0bSAqKTsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt ZV9pbXBsLmgiIDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf aW1wbC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lX2ltcGwuaAkx LjMJOTgvMDIvMTMgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lX2ltcGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzYgIi91 c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1 Y3QgdGltZXNwZWMgew0KICAgICAgICB0aW1lX3QgdHZfc2VjOw0KICAgICAg ICBsb25nIHR2X25zZWM7DQp9IHRpbWVzcGVjX3Q7DQojIDYwICIvdXNyL2lu Y2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IHRp bWVzcGVjIHRpbWVzdHJ1Y190Ow0KIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy90 aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVjIHsN CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICAgICAg ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7DQp9IGl0aW1lcnNwZWNfdDsN CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCn0N CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxMTggIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0KdW5pb24gc2lndmFsIHsNCiAgICAg ICAgaW50IHNpdmFsX2ludDsNCiAgICAgICAgdm9pZCAqc2l2YWxfcHRyOw0K fTsNCg0KDQoNCg0Kc3RydWN0IHNpZ2V2ZW50IHsNCiAgICAgICAgaW50IHNp Z2V2X25vdGlmeTsNCiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOw0KICAgICAg ICB1bmlvbiBzaWd2YWwgc2lnZXZfdmFsdWU7DQogICAgICAgIHZvaWQgKCpz aWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7DQogICAgICAg IHB0aHJlYWRfYXR0cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRlczsNCiAg ICAgICAgaW50IF9fc2lnZXZfcGFkMjsNCn07DQoNCg0KZXh0ZXJuIGludCBj bG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpl eHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGlt ZXNwZWMgKik7DQpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90 LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpleHRlcm4gaW50IHRpbWVy X2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCAqLCB0aW1lcl90 ICopOw0KZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7DQpleHRl cm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7DQpleHRlcm4gaW50 IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7 DQpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25z dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLA0KICAgICAgICAgICAgICAgIHN0cnVj dCBpdGltZXJzcGVjICopOw0KZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qg c3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsNCg0KDQoN Cg0KZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7DQoNCmV4dGVybiBjaGFyICp0 em5hbWVbMl07DQoNCg0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCg0K DQoNCg0KDQoNCmV4dGVybiBsb25nIHRpbWV6b25lOw0KZXh0ZXJuIGludCBk YXlsaWdodDsNCiMgMTc2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCmV4 dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsNCg0KDQoN Cg0KDQoNCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7DQojIDI3MiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMyA0DQpzdGF0aWMgY2hhciAqDQphc2N0aW1lX3Io Y29uc3Qgc3RydWN0IHRtICpfX3RtLCBjaGFyICpfX2J1ZikNCnsNCiAgICAg ICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfYXNjdGltZV9yKGNvbnN0IHN0cnVj dCB0bSAqLCBjaGFyICopOw0KICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNj dGltZV9yKF9fdG0sIF9fYnVmKSk7DQp9DQpzdGF0aWMgY2hhciAqDQpjdGlt ZV9yKGNvbnN0IHRpbWVfdCAqX190aW1lLCBjaGFyICpfX2J1ZikNCnsNCiAg ICAgICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfY3RpbWVfcihjb25zdCB0aW1l X3QgKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1l X3IoX190aW1lLCBfX2J1ZikpOw0KfQ0KIyAzMzQgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMgNA0KfQ0KIyAyMCAiYnVmZmVyLmNjIiAyDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAyMSAiYnVmZmVyLmNj IiAyDQojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMjIg ImJ1ZmZlci5jYyIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAxIDMNCiMgMzEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9mc3RyZWFt LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzDQojIDMyICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVh bS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAz DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAzDQoNCiMg MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2lvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAz DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zZndkLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj b25maWcuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0K IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMN Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQw ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJp bmdmd2QuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8 Y2xhc3MgX0NoYXJUPg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsNCg0KICB0 ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+Ow0KDQoNCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFzcyBhbGxvY2F0 b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlw ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNz IGJhc2ljX3N0cmluZzsNCg0KICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFy PiBzdHJpbmc7DQoNCg0KDQp9DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgi IDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvZnBvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8u aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEg Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Nz dGRpbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1z dW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk aW8uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQoj IDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3N0ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2lu ZyA6OnB0cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 ZGlvLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv aW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMg ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jc3RkaW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJ TEU7DQogIHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7 DQogIHVzaW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5n IDo6ZmVycm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0 YzsNCiAgdXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1 c2luZyA6OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6 ZnB1dGM7DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQog IHVzaW5nIDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5n IDo6ZnNlZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVs bDsNCiAgdXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNp bmcgOjpnZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVy cm9yOw0KICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1 c2luZyA6OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpy ZW1vdmU7DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsN CiAgdXNpbmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5n IDo6c2V0dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNz Y2FuZjsNCiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsN CiAgdXNpbmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVz aW5nIDo6dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIg Mw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMN CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy Yy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy aXMyLjcvYml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv Z3Roci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5o IiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAz DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQoj IDE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFn bWEgaWRlbnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoN Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0 DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0K IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyMyAiL2hvbWUv bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDEgMyA0DQojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQu aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2NoZWQuaAkxLjkJOTgvMDEv MTYgU01JIg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMSAzIDQNCiMgMTQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNA0K IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAxNSAiL3Vzci9p bmNsdWRlL3NjaGVkLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0K c3RydWN0IHNjaGVkX3BhcmFtIHsNCiAgICAgICAgaW50IHNjaGVkX3ByaW9y aXR5Ow0KICAgICAgICBpbnQgc2NoZWRfbmljZWxpbTsNCiAgICAgICAgaW50 IHNjaGVkX25pY2U7DQogICAgICAgIGludCBzY2hlZF9wYWRbNl07DQoNCg0K DQp9Ow0KIyA0NCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNA0KaW50IHNj aGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpw YXJhbSk7DQppbnQgc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlkLCBjb25zdCBz dHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsNCmludCBzY2hlZF9nZXRzY2hl ZHVsZXIocGlkX3QgcGlkKTsNCmludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlk X3QgcGlkLCBpbnQgcG9saWN5LA0KICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX3lpZWxkKHZv aWQpOw0KaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7 DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihpbnQgcG9saWN5KTsNCmlu dCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGlt ZXNwZWMgKmludGVydmFsKTsNCiMgNjUgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAzIDQNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgi IDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgOTUgIi9ob21lL21kZWls L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv aW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgX2NsZWFu dXAgew0KICAgICAgICB1aW50cHRyX3QgcHRocmVhZF9jbGVhbnVwX3BhZFs0 XTsNCn0gX2NsZWFudXBfdDsNCg0KDQoNCnZvaWQgX19wdGhyZWFkX2NsZWFu dXBfcHVzaCh2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRk cl90IGZwLCBfY2xlYW51cF90ICppbmZvKTsNCnZvaWQgX19wdGhyZWFkX2Ns ZWFudXBfcG9wKGludCBleCwgX2NsZWFudXBfdCAqaW5mbyk7DQpjYWRkcl90 IF9nZXRmcCh2b2lkKTsNCiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRo cmVhZC5oIiAzIDQNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQocHRo cmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0 cm95KHB0aHJlYWRfYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7DQpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRo cmVhZF9hdHRyX3QgKiwgc2l6ZV90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICosIHZvaWQgKik7 DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3Qg cHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUoY29u c3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfc2V0c2NvcGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsNCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRf YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl dGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJl YWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeShjb25zdCBwdGhy ZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2No ZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJh bSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICos IGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKiAoKikodm9pZCAqKSwgdm9pZCAqKTsNCmV4 dGVybiBpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQg KCopKHZvaWQpKTsNCmV4dGVybiBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRf dCwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJl YWRfdCk7DQpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsNCmV4 dGVybiBpbnQgcHRocmVhZF9jYW5jZWwocHRocmVhZF90KTsNCmV4dGVybiBp bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50LCBjb25z dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRf Z2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRf cGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUo aW50LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw ZShpbnQsIGludCAqKTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNl bCh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qs IHB0aHJlYWRfdCk7DQpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShw dGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOw0KZXh0ZXJuIGlu dCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCk7DQpleHRlcm4g aW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCwgY29uc3Qg dm9pZCAqKTsNCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0 aHJlYWRfa2V5X3QpOw0KZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYo dm9pZCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf aW5pdChwdGhyZWFkX211dGV4YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7 DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRo cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy X3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z ZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sKGNvbnN0IHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4YXR0 cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl dHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t dXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3Qg Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211 dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0 aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90 cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleF9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50 LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2Nl aWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCAqKTsNCmV4dGVybiBpbnQg cHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsN CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRf Y29uZGF0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9z ZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVh ZF9jb25kYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9j b25kX2luaXQocHRocmVhZF9jb25kX3QgKiwgY29uc3QgcHRocmVhZF9jb25k YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShw dGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jy b2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh ZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQg cHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9t dXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0 KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhfdCAqLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCB0aW1lc3BlYyAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1 YXJkc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9h dHRyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25j dXJyZW5jeSh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy ZW5jeShpbnQgbmV3dmFsKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0 dHJfc2V0dHlwZShwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVh ZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAqLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhy ZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19y ZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdHJ5cmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190 ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2socHRo cmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf dW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOw0K ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFk X3J3bG9ja2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th dHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKiwg aW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNo YXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQpOw0KIyAzMDQgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KfQ0KIyAzOCAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh cmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMw0KDQp0eXBlZGVmIHB0 aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Ow0KdHlwZWRlZiBwdGhyZWFk X29uY2VfdCBfX2d0aHJlYWRfb25jZV90Ow0KdHlwZWRlZiBwdGhyZWFkX211 dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7DQoNCg0KDQoNCg0KDQojcHJhZ21h IHdlYWsgcHRocmVhZF9vbmNlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf Y3JlYXRlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlDQojcHJh Z21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0 aHJlYWRfc2V0c3BlY2lmaWMNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0 ZQ0KDQojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrDQojcHJhZ21h IHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrDQojcHJhZ21hIHdlYWsgcHRo cmVhZF9tdXRleF91bmxvY2sNCiMgNzggIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHIt ZGVmYXVsdC5oIiAzDQpzdGF0aWMgdm9pZCAqX19ndGhyZWFkX2FjdGl2ZV9w dHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7DQoNCnN0YXRpYyBpbmxp bmUgaW50DQpfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpDQp7DQogIHJldHVy biBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOw0KfQ0KIyA0MjcgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJp czIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQpzdGF0aWMgaW5saW5lIGlu dA0KX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZv aWQgKCpmdW5jKSAodm9pZCkpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZl X3AgKCkpDQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7 DQogIGVsc2UNCiAgICByZXR1cm4gLTE7DQp9DQoNCnN0YXRpYyBpbmxpbmUg aW50DQpfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpr ZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkNCnsNCiAgcmV0dXJuIHB0aHJl YWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsNCn0NCg0Kc3RhdGljIGlubGlu ZSBpbnQNCl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl eSwgdm9pZCAqcHRyKQ0Kew0KDQogIGlmIChwdHIpDQogICAgcmV0dXJuIHB0 aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7DQogIGVsc2UNCiAgICByZXR1 cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9rZXlf ZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQ0Kew0KICByZXR1cm4gcHRo cmVhZF9rZXlfZGVsZXRlIChrZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIHZv aWQgKg0KX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qg a2V5KQ0Kew0KICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsN Cn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9zZXRzcGVjaWZp YyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQ0Kew0K ICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOw0KfQ0K DQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X2xvY2sgKF9f Z3RocmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrICht dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRf bXV0ZXhfdCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3Ag KCkpDQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgp Ow0KICBlbHNlDQogICAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbmxpbmUg aW50DQpfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhf dCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpDQog ICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7DQogIGVs c2UNCiAgICByZXR1cm4gMDsNCn0NCiMgOTkgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0 aHIuaCIgMiAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAyIDMN Cg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHR5cGVkZWYgbG9uZyBzdHJlYW1v ZmY7DQogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7DQoNCg0KDQog IHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7DQoNCiAgdHlwZWRlZiBf X2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsNCg0KDQoNCiAgdHlwZWRlZiBG SUxFIF9fY19maWxlX3R5cGU7DQoNCg0KICBzdHJ1Y3QgX19pb3NfZmxhZ3MN CiAgew0KICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsNCg0KICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsN CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw MDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFs ID0gMHgwMDEwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xl ZnQgPSAweDAwMjA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf b2N0ID0gMHgwMDQwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3JpZ2h0ID0gMHgwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX3NjaWVudGlmaWMgPSAweDAxMDA7DQogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7DQogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOw0KICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7DQog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAw Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAw eDIwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJj YXNlID0gMHg0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOw0KICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAw MiB8IDB4MDA0MCB8IDB4MDAwODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0Ow0KDQoNCiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOw0K ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7 DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4 MDQ7DQoNCg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9 IDB4MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0g MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAw eDA0Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgw ODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEw Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy MDsNCiAgfTsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL2Zwb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzDQoj IDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3djaGFyLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmln LmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAxIDMgNA0KIyAxOCAiL2hvbWUv bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj KXdjaGFyLmgJMS4zMQk5OC8wNS8wNCBTTUkiDQoNCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIxICIvaG9tZS9t ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv My4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMiAiL2hvbWUvbWRlaWwvYmlu Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs dWRlL3djaGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190 YWcuaCIgMSAzIDQNCiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5o IiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAxIDMg NA0KIyA5ICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAzIDQNCiNwcmFn bWEgaWRlbnQgIkAoIyl3Y2hhcl9pbXBsLmgJMS4yCTk4LzAyLzI3IFNNSSIN Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj IDEyICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAyIDMgNA0KDQoNCmV4 dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KDQoNCg0KICAg ICAgICBpbnQgX19maWxsZXJbNl07DQoNCn0gX19tYnN0YXRlX3Q7DQoNCg0K DQp9DQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQN CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMgMjUgIi9ob21l L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu Ny8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAzMCAiL2hvbWUv bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQojIDEgIi91c3Iv aW5jbHVkZS9jdHlwZS5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWN0eXBlLmgJMS4zMAk5 OC8wMS8xNiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDggIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAzIDQNCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOw0KZXh0ZXJu IGludCBpc2FscGhhKGludCk7DQpleHRlcm4gaW50IGlzY250cmwoaW50KTsN CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOw0KZXh0ZXJuIGludCBpc2dyYXBo KGludCk7DQpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg aXNwcmludChpbnQpOw0KZXh0ZXJuIGludCBpc3B1bmN0KGludCk7DQpleHRl cm4gaW50IGlzc3BhY2UoaW50KTsNCmV4dGVybiBpbnQgaXN1cHBlcihpbnQp Ow0KZXh0ZXJuIGludCBpc3hkaWdpdChpbnQpOw0KZXh0ZXJuIGludCB0b2xv d2VyKGludCk7DQpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsNCg0KDQoNCg0K ZXh0ZXJuIGludCBpc2FzY2lpKGludCk7DQpleHRlcm4gaW50IHRvYXNjaWko aW50KTsNCmV4dGVybiBpbnQgX3RvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg X3RvdXBwZXIoaW50KTsNCg0KDQoNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f Y3R5cGVbXTsNCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGVfbWFzazsN CmV4dGVybiBpbnQgKl9fdHJhbnNfdXBwZXI7DQpleHRlcm4gaW50ICpfX3Ry YW5zX2xvd2VyOw0KIyAxNjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQN Cn0NCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQojIDM1 ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQojIDEg Ii91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNA0KIyAzOCAiL2hv bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJD IiB7DQojIDYxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQp0 eXBlZGVmIGxvbmcgd2ludF90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHdj dHlwZV90Ow0KIyAxMDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz IDQNCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90Ow0KIyAxMTMgIi9o b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAzIDQNCmV4dGVybiBpbnQgaXN3 YWxwaGEod2ludF90KTsNCmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsN CmV4dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsNCmV4dGVybiBpbnQgaXN3 ZGlnaXQod2ludF90KTsNCmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7 DQpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7DQpleHRlcm4gaW50IGlz d3NwYWNlKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRfdCk7 DQpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7DQpleHRlcm4gaW50IGlz d2dyYXBoKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd2NudHJsKHdpbnRfdCk7 DQpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRfdCwgd2N0eXBlX3QpOw0KZXh0 ZXJuIHdpbnRfdCB0b3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCB0 b3d1cHBlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF ICopOw0KZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICosIGludCwg X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBmcHV0d2Mod2ludF90LCBfX0ZJ TEUgKik7DQpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIF9f RklMRSAqKTsNCmV4dGVybiB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklM RSAqKTsNCmV4dGVybiB3aW50X3QgZ2V0d2MoX19GSUxFICopOw0KZXh0ZXJu IHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsNCmV4dGVybiB3aW50X3QgcHV0d2Mo d2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IHB1dHdjaGFyKHdp bnRfdCk7DQpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90ICos IHdjaGFyX3QgKiopOw0KZXh0ZXJuIGxvbmcgd2NzdG9sKGNvbnN0IHdjaGFy X3QgKiwgd2NoYXJfdCAqKiwgaW50KTsNCmV4dGVybiB1bnNpZ25lZCBsb25n IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0K ZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFy X3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3Qg Kiwgd2NoYXJfdCk7DQpleHRlcm4gaW50IHdjc2NtcChjb25zdCB3Y2hhcl90 ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc2NvbGwoY29u c3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0KZXh0ZXJuIHdjaGFy X3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRl cm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh cl90ICopOw0KZXh0ZXJuIHNpemVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAq KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qg d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCB3Y3NuY21wKGNvbnN0 IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJu IHdjaGFyX3QgKndjc25jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hh cl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2Nz cmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOw0KZXh0ZXJuIHNpemVf dCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0K ZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICosIGNvbnN0 IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFy X3QgKiwgc2l6ZV90KTsNCmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90 ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgd2N3 aWR0aChjb25zdCB3Y2hhcl90KTsNCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUo Y29uc3QgY2hhciAqKTsNCiMgMTY5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2No YXIuaCIgMyA0DQpleHRlcm4gd2NoYXJfdCAqX193Y3N0b2tfeHBnNSh3Y2hh cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4g c2l6ZV90IF9fd2NzZnRpbWVfeHBnNSh3Y2hhcl90ICosIHNpemVfdCwgY29u c3Qgd2NoYXJfdCAqLA0KICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7DQoj IDE4MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJu IHdpbnRfdCBidG93YyhpbnQpOw0KZXh0ZXJuIGludCBmd3ByaW50ZihfX0ZJ TEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBmd3Nj YW5mKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4g aW50IGZ3aWRlKF9fRklMRSAqLCBpbnQpOw0KZXh0ZXJuIGludCBtYnNpbml0 KGNvbnN0IG1ic3RhdGVfdCAqKTsNCmV4dGVybiBzaXplX3QgbWJybGVuKGNv bnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6 ZV90IG1icnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwg bWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJf dCAqLCBjb25zdCBjaGFyICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4 dGVybiBpbnQgc3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdj aGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hh cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgdmZ3 cHJpbnRmKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7 DQpleHRlcm4gaW50IHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgX192YV9s aXN0KTsNCmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90 LCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7DQpleHRlcm4gc2l6ZV90 IHdjcnRvbWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7DQpleHRl cm4gc2l6ZV90IHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKios IHNpemVfdCwgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc3N0 cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g aW50IHdjdG9iKHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNocihj b25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7DQpleHRlcm4gaW50 IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNp emVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICosIGNv bnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt bW92ZSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4 dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6 ZV90KTsNCmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hhcl90ICosIC4u Lik7DQpleHRlcm4gaW50IHdzY2FuZihjb25zdCB3Y2hhcl90ICosIC4uLik7 DQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0 ZXJuIHdpbnRfdCBfX2ZnZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3 aW50X3QgX19nZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3Qg X19nZXR3Y2hhcl94cGc1KHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBfX2ZwdXR3 Y194cGc1KHdpbnRfdCwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBfX3B1 dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IF9f cHV0d2NoYXJfeHBnNSh3aW50X3QpOw0KZXh0ZXJuIHdjaGFyX3QgKl9fZmdl dHdzX3hwZzUod2NoYXJfdCAqLCBpbnQsIF9fRklMRSAqKTsNCmV4dGVybiBp bnQgX19mcHV0d3NfeHBnNShjb25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsN CmV4dGVybiB3aW50X3QgX191bmdldHdjX3hwZzUod2ludF90LCBfX0ZJTEUg Kik7DQojIDM1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0K fQ0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMw0KbmFtZXNw YWNlIHN0ZA0Kew0KICB1c2luZyA6Om1ic3RhdGVfdDsNCn0NCiMgNDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBmcG9zDQogICAgew0KICAgIHB1 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsN Cg0KICAgIHByaXZhdGU6DQogICAgICBzdHJlYW1vZmYgX01fb2ZmOw0KICAg ICAgX19zdGF0ZV90eXBlIF9NX3N0Ow0KDQogICAgcHVibGljOg0KICAgICAg X19zdGF0ZV90eXBlDQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9N X3N0OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlw ZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQ0KDQoNCg0KICAgICAgZnBvcygp OiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkg eyB9DQoNCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5 cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQ0KICAgICAgOiBfTV9vZmYoX19v ZmYpLCBfTV9zdChfX3N0KSB7IH0NCg0KICAgICAgb3BlcmF0b3Igc3RyZWFt b2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIGZwb3Mm DQogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg Kz0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zJg0KICAg ICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9f b2ZmOyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgZnBvcw0KICAgICAgb3Bl cmF0b3IrKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAgICAgZnBv cyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgKz0gX19vZmY7DQogICAgICAg IHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGZwb3MNCiAgICAgIG9w ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpDQogICAgICB7DQogICAgICAgIGZw b3MgX190KCp0aGlzKTsNCiAgICAgICAgX190IC09IF9fb2ZmOw0KICAgICAg ICByZXR1cm4gX190Ow0KICAgICAgfQ0KDQogICAgICBib29sDQogICAgICBv cGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQ0KDQogICAgICBib29s DQogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQ0KDQog ICAgICBzdHJlYW1vZmYNCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyBy ZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3Bvc2l0 aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQ0KICAg IH07DQoNCg0KICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7 DQoNCg0KDQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93 X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq IF9fcyk7DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3Rk DQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2lj X2lvczsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi YXNpY19zdHJlYW1idWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQog ICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOw0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgICB0eXBlbmFtZSBf QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNf c3RyaW5nYnVmOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAg ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAg ICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz PF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j YXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFt Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVu YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi YXNpY19zdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ DQogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19m c3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNz IGlzdHJlYW1idWZfaXRlcmF0b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiA+DQogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KDQoNCiAg Y2xhc3MgaW9zX2Jhc2U7DQoNCg0KICB0eXBlZGVmIGJhc2ljX2lvczxjaGFy PiBpb3M7DQogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVh bWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07 DQogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOw0KICB0 eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOw0KICB0eXBl ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7DQogIHR5cGVk ZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOw0K ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0 cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3Ry aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmls ZWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVh bTsNCiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsN CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07DQojIDEy OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2lvc2Z3ZC5oIiAzDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMNCiMg MzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRp b24iIDMNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg Y2xhc3MgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGV4Y2VwdGlv bigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhy b3coKTsNCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0 aHJvdygpOw0KICB9Ow0KDQogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJs aWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9leGNlcHRp b24oKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24o KSB0aHJvdygpOw0KICB9Ow0KDQogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0 ZV9oYW5kbGVyKSAoKTsNCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9o YW5kbGVyKSAoKTsNCg0KICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWlu YXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHRlcm1p bmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICB1 bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9o YW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCiAgYm9vbCB1bmNhdWdodF9l eGNlcHRpb24oKSB0aHJvdygpOw0KfQ0KDQp9DQojIDQxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9j aGFyX3RyYWl0cy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMNCg0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 cmluZy5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0cmluZy5oIiAyIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMg MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyA0MSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcu aCIgMiAzDQojIDY2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3N0cmluZy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog IHVzaW5nIDo6bWVtY3B5Ow0KICB1c2luZyA6Om1lbW1vdmU7DQogIHVzaW5n IDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5jcHk7DQogIHVzaW5nIDo6c3Ry Y2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVtY21wOw0K ICB1c2luZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2lu ZyA6OnN0cm5jbXA7DQogIHVzaW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpz dHJjc3BuOw0KICB1c2luZyA6OnN0cnNwbjsNCiAgdXNpbmcgOjpzdHJ0b2s7 DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6OnN0cmVycm9yOw0KICB1 c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBpbmxp bmUgdm9pZCoNCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90 IF9fbikNCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p ZCo+KF9fcCksIF9fYywgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RyY2hyOw0K DQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9f bikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNv bnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJy azsNCg0KICBpbmxpbmUgY2hhcioNCiAgc3RycGJyayhjaGFyKiBfX3MxLCBj b25zdCBjaGFyKiBfX3MyKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJy ayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0NCg0K ICB1c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJj aHIoY2hhciogX19zMSwgaW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGlu X3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7 IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0KICBpbmxpbmUgY2hhcioNCiAg c3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o X19zMSksIF9fczIpOyB9DQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5o IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7 DQoNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHMNCiAgICB7DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7DQoNCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlw ZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOw0KICAgICAg dHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAg ICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf X2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMg Ym9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7 IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNvbnN0IGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0KICAgICAgeyBy ZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludA0KICAg ICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsNCiAgICAgICAgZm9y IChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkNCiAgICAgICAg ICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkNCiAgICAgICAgICAg IHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7DQog ICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgc2l6 ZV90DQogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpDQogICAg ICB7DQogICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOw0KICAg ICAgICB3aGlsZSAoKl9fcCkgKytfX3A7DQogICAgICAgIHJldHVybiAoX19w IC0gX19zKTsNCiAgICAgIH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXJf dHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVf dCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQ0KICAgICAgew0KICAgICAg ICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19w IC0gX19zKSA8IF9fbjsgKytfX3ApDQogICAgICAgICAgaWYgKCpfX3AgPT0g X19hKSByZXR1cm4gX19wOw0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0N Cg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIG1vdmUoY2hhcl90 eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p DQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBf X3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0NCg0KICAgICAgc3Rh dGljIGNoYXJfdHlwZSoNCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBj b25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJl dHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNp emVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBl Kg0KICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBj aGFyX3R5cGUgX19hKQ0KICAgICAgew0KICAgICAgICBmb3IgKGNoYXJfdHlw ZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQ0KICAgICAg ICAgIGFzc2lnbigqX19wLCBfX2EpOw0KICAgICAgICByZXR1cm4gX19zOw0K ICAgICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19j aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJu IGNoYXJfdHlwZShfX2MpOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0K ICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0 dXJuIGludF90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAg ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp bnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg fQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIGVvZigpIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0NCg0KICAgICAgc3Rh dGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpDQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/ IGludF90eXBlKDApIDogX19jOyB9DQogICAgfTsNCg0KDQoNCiAgdGVtcGxh dGU8Pg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPg0KICAgIHsNCiAg ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGlu dCBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBl Ow0KICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0 eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMg dm9pZA0KICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh cl90eXBlJiBfX2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAg ICBzdGF0aWMgYm9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNv bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0K ICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGlj IGludA0KICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNv bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0 dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9DQoNCiAgICAgIHN0YXRp YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN CiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9DQoNCiAgICAgIHN0YXRp YyBjb25zdCBjaGFyX3R5cGUqDQogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlw ZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkNCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1l bWNocihfX3MsIF9fYSwgX19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJf dHlwZSoNCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy X3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikp OyB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBjb3B5KGNo YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg X19uKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o bWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9DQoNCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVf dCBfX24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9DQoN CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAgIHRvX2NoYXJfdHlwZShj b25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8Y2hhcl90eXBlPihfX2MpOyB9DQoNCg0KDQogICAgICBzdGF0aWMgaW50 X3R5cGUNCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19j KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9DQoNCiAgICAgIHN0YXRp YyBib29sDQogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j MSwgY29uc3QgaW50X3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBl b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0N Cg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0 IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiAoX19jID09IGVvZigp KSA/IDAgOiBfX2M7IH0NCiAgfTsNCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoDQogICAgew0KICAgICAgX0No YXJUIF9NX2M7DQogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNv bnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQ0KDQogICAgICBib29sDQogICAg ICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh aXRzOjplcShfTV9jLCBfX2EpOyB9DQogICAgfTsNCn0NCiMgNDIgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm d2QuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z b2xhcmlzMi43L2JpdHMvYysrbG9jYWxlLmgiIDEgMw0KIyAzNiAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz Mi43L2JpdHMvYysrbG9jYWxlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAg dHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7DQp9DQojIDQxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAz DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jbGltaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0DQojIDExICIvaG9t ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMgNA0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj KWxpbWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIg0KDQojIDEgIi91c3IvaW5j bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUv bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43 LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDI5ICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDQwICIvaG9tZS9tZGVp bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv c3lzL2ludF9saW1pdHMuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5 cy9pbnRfbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWludF9s aW1pdHMuaAkxLjUJOTgvMDEvMDYgU01JIg0KIyA0NCAiL3Vzci9pbmNsdWRl L3N5cy9pbnRfbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lz L2lzYV9kZWZzLmgiIDEgMyA0DQojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2lu dF9saW1pdHMuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTYyICIv dXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQp9DQojIDQxICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQoNCg0KDQpl eHRlcm4gIkMiIHsNCiMgMzA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGlt aXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAx IDMgNA0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0DQoj cHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNgk5OC8wNy8xNiBTTUki DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg MyA0DQojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNA0K DQoNCmV4dGVybiAiQyIgew0KIyAyNjQgIi91c3IvaW5jbHVkZS9zeXMvdW5p c3RkLmgiIDMgNA0KfQ0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNs aW1pdHMuaCIgMiAzIDQNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz bGltaXRzLmgiIDMgNA0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCiMg MzI4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KfQ0K IyAxMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNA0KIyAz OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NsaW1pdHMuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcu aCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0 cy9jKytjb25maWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdm d2QuaCIgMSAzDQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAx IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMNCiMg MzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pdGVyYXRvci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZp Zy5oIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQoj IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KDQpuYW1lc3Bh Y2Ugc3RkDQp7DQoNCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307DQpz dHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBmb3J3YXJk X2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307 DQpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg Zm9yd2FyZF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3QgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcge307DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7DQogIHR5 cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0K ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIF9EaXN0YW5j ZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0K ICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0Kc3RydWN0IG91dHB1 dF9pdGVyYXRvciB7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7 DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KfTsN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1 Y3QgZm9yd2FyZF9pdGVyYXRvciB7DQogIHR5cGVkZWYgZm9yd2FyZF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw ZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiBy ZWZlcmVuY2U7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0K ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1Rw KiBwb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0K dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7DQogIHR5cGVkZWYgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVk ZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Nh dGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZf dCwNCiAgICAgICAgICBjbGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9S ZWZlcmVuY2UgPSBfVHAmPg0Kc3RydWN0IGl0ZXJhdG9yIHsNCiAgdHlwZWRl ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2Vf dHlwZTsNCiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVm IF9SZWZlcmVuY2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz IF9JdGVyYXRvcj4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgew0KICB0eXBl ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOw0K ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVy Ow0KICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl ZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qg aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsNCiAgdHlwZWRlZiByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRl ZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+ DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAgdHlw ZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIGNvbnN0IF9U cCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsN Cn07DQojIDE0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KdGVtcGxhdGUg PGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVn b3J5KGNvbnN0IF9JdGVyJikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdv cnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCl9fZGlzdGFuY2VfdHlwZShjb25z dCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVl X3R5cGUoY29uc3QgX0l0ZXImKQ0Kew0KICByZXR1cm4gc3RhdGljX2Nhc3Q8 dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+ KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv cnkNCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0 dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQ0KDQoNCnRlbXBsYXRl IDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5jZV90eXBlKGNv bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kp OyB9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKg0KdmFsdWVf dHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUo X19pKTsgfQ0KDQp9DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3Mu aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAz NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u Y2VwdF9jaGVjay5oIiAyIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp bmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg X19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl JiBfX24pDQp7DQoNCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQppbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl DQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX19maXJz dDsgKytfX247DQogIH0NCiAgcmV0dXJuIF9fbjsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlm ZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAg ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgcmV0dXJu IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCmRpc3RhbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkN CnsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQogICAgX0NhdGVnb3J5 Ow0KICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRl Z29yeSgpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJ dGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykN CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fbi0tKSAr K19faTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5j ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24s DQogICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQogIGlmIChfX24gPiAwKQ0KICAgIHdoaWxlIChfX24tLSkgKytf X2k7DQogIGVsc2UNCiAgICB3aGlsZSAoX19uKyspIC0tX19pOw0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sDQogICAgICAgICAgICAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIF9faSAr PSBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJ dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogIF9fYWR2YW5j ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7DQp9DQoNCn0N CiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyAz NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUg PGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRv ciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIqIGNvbnRhaW5lcjsNCnB1 YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0K ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZv aWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsN CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBsaWNpdCBiYWNr X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy KCZfX3gpIHt9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs dWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5lci0+cHVzaF9iYWNr KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBiYWNrX2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1 cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg cmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh aW5lcj4NCmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4g YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBmcm9udF9pbnNl cnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0KICBfQ29udGFpbmVyKiBjb250 YWluZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu ZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh dG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCiAg dHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lk IHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7DQoNCiAgZXhw bGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg OiBjb250YWluZXIoJl9feCkge30NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5l ci0+cHVzaF9mcm9udChfX3ZhbHVlKTsNCiAgICByZXR1cm4gKnRoaXM7DQog IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy YXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBmcm9udF9pbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp czsgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0KfTsNCg0KdGVtcGxh dGUgPGNsYXNzIF9Db250YWluZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXIm IF9feCkgew0KICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy Pg0KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0Nv bnRhaW5lciogY29udGFpbmVyOw0KICB0eXBlbmFtZSBfQ29udGFpbmVyOjpp dGVyYXRvciBpdGVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIg Y29udGFpbmVyX3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5 cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVk ZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0K DQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkNCiAgICA6IGNvbnRhaW5lcigm X194KSwgaXRlcihfX2kpIHt9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFp bmVyPiYNCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6 OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsNCiAgICBpdGVyID0gY29udGFpbmVy LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7DQogICAgKytpdGVyOw0KICAgIHJl dHVybiAqdGhpczsNCiAgfQ0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0 aGlzOyB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lDQpp bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5l ciYgX194LCBfSXRlcmF0b3IgX19pKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsNCiAgcmV0dXJuIGluc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNs YXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsDQogICAgICAgICAg Y2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90Pg0KY2xhc3MgcmV2ZXJzZV9i aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByZXZlcnNlX2Jp ZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg X1RwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxmOw0KcHJvdGVjdGVkOg0K ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7DQpwdWJsaWM6DQog IHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVk ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAq IHBvaW50ZXI7DQogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQoN CiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30NCiAgZXhw bGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVj dGlvbmFsSXRlcmF0b3IgX194KQ0KICAgIDogY3VycmVudChfX3gpIHt9DQog IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJu IGN1cnJlbnQ7IH0NCiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7 DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7 DQogICAgcmV0dXJuICotLV9fdG1wOw0KICB9DQogIHBvaW50ZXIgb3BlcmF0 b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQogIF9T ZWxmJiBvcGVyYXRvcisrKCkgew0KICAgIC0tY3VycmVudDsNCiAgICByZXR1 cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsNCiAg ICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgIC0tY3VycmVudDsNCiAgICBy ZXR1cm4gX190bXA7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7DQog ICAgKytjdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2Vs ZiBvcGVyYXRvci0tKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7 DQogICAgKytjdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KfTsN Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X1JlZiwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PSgNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8 X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsDQogICAgY29u c3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9U cCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQ0Kew0KICByZXR1cm4gX194LmJh c2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+ DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KA0KICAgIGNvbnN0IHJldmVyc2Vf YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E aXN0YW5jZT4mIF9feCwNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBf X3kpDQp7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KIyAxOTMgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy YXRvci5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KY2xhc3Mg cmV2ZXJzZV9pdGVyYXRvcg0Kew0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3Ig Y3VycmVudDsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICAg ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0KICAgICAg ICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAg IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcg0KICAgICAgICAgIHBvaW50 ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy YXRvcj46OnJlZmVyZW5jZQ0KICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICB0 eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOw0KICB0eXBlZGVmIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsNCg0KcHVibGljOg0K ICByZXZlcnNlX2l0ZXJhdG9yKCkge30NCiAgZXhwbGljaXQgcmV2ZXJzZV9p dGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30N Cg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3Vy cmVudChfX3guY3VycmVudCkge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy Pg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXI+JiBfX3gpDQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9DQoN CiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu dDsgfQ0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgew0KICAgIF9J dGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgcmV0dXJuICotLV9fdG1w Ow0KICB9DQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu ICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7 DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBf U2VsZiBvcGVyYXRvcisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRo aXM7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0K ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJlbnQ7DQogICAg cmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7 DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICArK2N1cnJlbnQ7DQog ICAgcmV0dXJuIF9fdG1wOw0KICB9DQoNCiAgX1NlbGYgb3BlcmF0b3IrKGRp ZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsNCiAgICByZXR1cm4gX1NlbGYo Y3VycmVudCAtIF9fbik7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlm ZmVyZW5jZV90eXBlIF9fbikgew0KICAgIGN1cnJlbnQgLT0gX19uOw0KICAg IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVy ZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJy ZW50ICsgX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl bmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCArPSBfX247DQogICAgcmV0 dXJuICp0aGlzOw0KICB9DQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24p OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuIF9f eC5iYXNlKCkgPT0gX195LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9JdGVyYXRvcj4NCmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkgew0KICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgYm9vbCBvcGVy YXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBi b29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv cj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX195IDwg X194Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l IGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuICEo X195IDwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4N CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0 dXJuICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVy YXRvcj4NCmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0Kb3BlcmF0b3ItKGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVy biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JdGVyYXRvcj4NCmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4NCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsNCiAgcmV0 dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0g X19uKTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAg IGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LA0KICAgICAgICAgIGNsYXNzIF9EaXN0ID0gcHRyZGlm Zl90Pg0KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQogIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRzIHRy YWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBpbnB1dF9pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOw0K ICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25z dCBfVHAmIHJlZmVyZW5jZTsNCg0KICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf TV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQ0KICBpc3RyZWFtX2l0ZXJh dG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9N X3JlYWQoKTsgfQ0KDQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7 IHJldHVybiBfTV92YWx1ZTsgfQ0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQogIGlzdHJlYW1f aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAgX01fcmVhZCgpOw0KICAg IHJldHVybiAqdGhpczsNCiAgfQ0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJh dG9yKysoaW50KSB7DQogICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0 aGlzOw0KICAgIF9NX3JlYWQoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0N Cg0KICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9f eCkgY29uc3QNCiAgICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAm JiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3guX01fc3RyZWFtKTsgfQ0K DQpwcml2YXRlOg0KICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsNCiAgX1Rw IF9NX3ZhbHVlOw0KICBib29sIF9NX29rOw0KDQogIHZvaWQgX01fcmVhZCgp IHsNCiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0 cnVlIDogZmFsc2U7DQogICAgaWYgKF9NX29rKSB7DQogICAgICAqX01fc3Ry ZWFtID4+IF9NX3ZhbHVlOw0KICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8g dHJ1ZSA6IGZhbHNlOw0KICAgIH0NCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf RGlzdD4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1f aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0K ICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJU LCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgew0KICByZXR1cm4gX194Ll9NX2Vx dWFsKF9feSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9D aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+DQppbmxpbmUgYm9v bA0Kb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwNCiAgICAgICAgICAgY29uc3Qg aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+ JiBfX3kpIHsNCiAgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsNCn0NCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9DaGFy VCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4NCmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igew0KcHVibGljOg0KICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gb3N0cmVhbV90eXBlOw0KDQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZh bHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQog IHR5cGVkZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJl bmNlOw0KDQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Mp IDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30NCiAgb3N0cmVh bV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBf X2MpDQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9 DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U cCYgX192YWx1ZSkgew0KICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsNCiAg ICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsNCiAg ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+ JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBvc3RyZWFtX2l0 ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0K ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJl dHVybiAqdGhpczsgfQ0KcHJpdmF0ZToNCiAgb3N0cmVhbV90eXBlKiBfTV9z dHJlYW07DQogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOw0KfTsNCiMgNDE3 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf aXRlcmF0b3IuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0 eXBlbmFtZSBfQ29udGFpbmVyPg0KY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IN CiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv cj46Oml0ZXJhdG9yX2NhdGVnb3J5LA0KICAgICAgICAgICAgICAgICAgICBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwNCiAgICAg ICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAgICAgICAgICAg ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+DQp7 DQoNCnByb3RlY3RlZDoNCiAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7DQoNCnB1 YmxpYzoNCiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOw0KICB0eXBlZGVm IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7DQog IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0 ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUg X190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KICB0eXBl ZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNf dHlwZTo6cG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9f dHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQoNCiAgX19ub3Jt YWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQ0K DQogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0NCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyPg0KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3Io Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBf X2kpDQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQ0KDQoNCiAg cmVmZXJlbmNlDQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9j dXJyZW50OyB9DQoNCiAgcG9pbnRlcg0KICBvcGVyYXRvci0+KCkgY29uc3Qg eyByZXR1cm4gX01fY3VycmVudDsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90 eXBlJg0KICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAq dGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9y KysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50 KyspOyB9DQoNCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3BlcmF0 b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0NCg0KICBu b3JtYWxfaXRlcmF0b3JfdHlwZQ0KICBvcGVyYXRvci0tKGludCkgeyByZXR1 cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQ0KDQoNCiAg cmVmZXJlbmNlDQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBl JiBfX24pIGNvbnN0DQogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQ0K DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBvcGVyYXRvcis9KGNvbnN0 IGRpZmZlcmVuY2VfdHlwZSYgX19uKQ0KICB7IF9NX2N1cnJlbnQgKz0gX19u OyByZXR1cm4gKnRoaXM7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZQ0K ICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0 DQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBf X24pOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9y LT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVu dCAtPSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRv cl90eXBlDQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f bikgY29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy cmVudCAtIF9fbik7IH0NCg0KICBkaWZmZXJlbmNlX3R5cGUNCiAgb3BlcmF0 b3ItKGNvbnN0IG5vcm1hbF9pdGVyYXRvcl90eXBlJiBfX2kpIGNvbnN0DQog IHsgcmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQ0KDQog IGNvbnN0IF9JdGVyYXRvciYNCiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N X2N1cnJlbnQ7IH0NCn07DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp bmVyPg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf Q29udGFpbmVyPiYgX19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g X19yaHMuYmFzZSgpOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+ DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250 YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9 DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5saW5lIGJv b2wNCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAgY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz KQ0KeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoN CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3Bl cmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D b250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpDQp7IHJl dHVybiBfX3JocyA8IF9fbGhzOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250 YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I8PShjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQog ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs IF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19yaHMgPCBfX2xo cyk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBi b29sDQpvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f cmhzKQ0KeyByZXR1cm4gIShfX2xocyA8IF9fcmhzKTsgfQ0KDQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpp bmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy Pg0Kb3BlcmF0b3IrKF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19pKQ0KeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQ0KDQp9DQojIDM3ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRl cmF0b3IuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi IDEgMw0KIyAxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX21lbW9yeS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMw0K IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29u ZmlnLmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgi IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3BhaXIuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQpzdHJ1Y3QgcGFpciB7DQog IHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7DQogIHR5cGVkZWYgX1QyIHNlY29u ZF90eXBlOw0KDQogIF9UMSBmaXJzdDsNCiAgX1QyIHNlY29uZDsNCg0KDQog IHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9DQoNCg0KDQogIHBhaXIo Y29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSks IHNlY29uZChfX2IpIHt9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh c3MgX1UyPg0KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDog Zmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9DQp9Ow0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9v bCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg PT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJv b2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg PCBfX3kuZmlyc3QgfHwNCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5m aXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVy YXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8 X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBi b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3kg PCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ DQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+ JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJu ICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh c3MgX1QyPg0KDQoNCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo X1QxIF9feCwgX1QyIF9feSkNCg0KDQoNCnsNCiAgcmV0dXJuIHBhaXI8X1Qx LCBfVDI+KF9feCwgX195KTsNCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg Mw0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQoN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAyMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90 cmFpdHMuaCIgMiAzDQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v bCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsNCnR5cGVkZWYgX0Jvb2w8dHJ1 ZT4gX190cnVlX3R5cGU7DQp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNl X3R5cGU7DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBl X3RyYWl0cyB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlf bWVtYmVyX211c3RfYmVfZmlyc3Q7DQojIDgxICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQogICB0 eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRl ZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNp Z25lZCBjaGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsN Cg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj aGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1 Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGlu dD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czx1bnNpZ25lZCBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOw0KfTsNCiMgMTk5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czxkb3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91Ymxl PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxh dGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7DQogIHR5 cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsNCiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf SXNfaW50ZWdlcjxjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 c2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNp Z25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf dD4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoN CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7DQogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8 PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsNCiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVf dHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu ZWQgbG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsN Cn07DQojIDI5NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvdHlwZV90cmFpdHMuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7DQogICB0eXBlZGVmIF9f ZmFsc2VfdHlwZSBfTm9ybWFsOw0KfTsNCg0KDQpuYW1lc3BhY2Ugc3RkIHsN CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7DQp9Ow0KDQp0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ DQpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gew0KICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfTm9ybWFsOw0KfTsNCiMgNDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NsaW1pdHMuaCIgMSAzDQojIDQ0ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkbGliLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy LjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NzdGRkZWYuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMNCiMgNDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkbGliLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o IiAxIDMgNA0KIyAyNSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz IDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWIuaAkxLjQ0CTk4LzAxLzIy IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu aCIgMSAzIDQNCiMgMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIg MiAzIDQNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEg MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0DQojcHJh Z21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01JIg0KDQoj IDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0K IyAxOSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMSAi L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQojIDEgIi91 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQNCiMgMTYgIi91c3Iv aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA KCMpcmVzb3VyY2UuaAkxLjI1CTk4LzA2LzMwIFNNSSINCg0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCg0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIxICIvdXNy L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQojIDEgIi91c3IvaW5j bHVkZS9zeXMvdGltZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5 cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2NyAi L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBybGltX3Q7DQojIDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9y ZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBybGltaXQgew0KICAgICAgICBybGlt X3QgcmxpbV9jdXI7DQogICAgICAgIHJsaW1fdCBybGltX21heDsNCn07DQoN Cg0KDQoNCnR5cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90Ow0KDQoNCg0K DQoNCnN0cnVjdCBybGltaXQ2NCB7DQogICAgICAgIHJsaW02NF90IHJsaW1f Y3VyOw0KICAgICAgICBybGltNjRfdCBybGltX21heDsNCn07DQojIDE0MyAi L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBydXNh Z2Ugew0KICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsNCiAgICAg ICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7DQogICAgICAgIGxvbmcgcnVf bWF4cnNzOw0KICAgICAgICBsb25nIHJ1X2l4cnNzOw0KICAgICAgICBsb25n IHJ1X2lkcnNzOw0KICAgICAgICBsb25nIHJ1X2lzcnNzOw0KICAgICAgICBs b25nIHJ1X21pbmZsdDsNCiAgICAgICAgbG9uZyBydV9tYWpmbHQ7DQogICAg ICAgIGxvbmcgcnVfbnN3YXA7DQogICAgICAgIGxvbmcgcnVfaW5ibG9jazsN CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOw0KICAgICAgICBsb25nIHJ1X21z Z3NuZDsNCiAgICAgICAgbG9uZyBydV9tc2dyY3Y7DQogICAgICAgIGxvbmcg cnVfbnNpZ25hbHM7DQogICAgICAgIGxvbmcgcnVfbnZjc3c7DQogICAgICAg IGxvbmcgcnVfbml2Y3N3Ow0KfTsNCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lz L3Jlc291cmNlLmgiIDMgNA0KZXh0ZXJuIGludCBzZXRybGltaXQoaW50LCBj b25zdCBzdHJ1Y3QgcmxpbWl0ICopOw0KZXh0ZXJuIGludCBnZXRybGltaXQo aW50LCBzdHJ1Y3QgcmxpbWl0ICopOw0KDQoNCg0KDQpleHRlcm4gaW50IHNl dHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOw0KZXh0 ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQ2NCAqKTsN Cg0KDQpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7DQpleHRl cm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsNCmV4dGVybiBp bnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCiMgMjI4ICIv dXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KfQ0KIyAyNSAiL3Vz ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVk ZS9zeXMvc2lnaW5mby5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5 cy9zaWdpbmZvLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8u aAkxLjU0CTk4LzAzLzI3IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lz L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9z eXMvc2lnaW5mby5oIiAyIDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3Np Z2luZm8uaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTI2ICIvdXNy L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk ZS9zeXMvbWFjaHNpZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5 cy9tYWNoc2lnLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKW1hY2hzaWcu aAkxLjE0CTk4LzAyLzA1IFNNSSINCg0KDQojIDEgIi91c3IvaW5jbHVkZS9z eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMCAiL3Vzci9pbmNsdWRl L3N5cy9tYWNoc2lnLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDEx MCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNA0KfQ0KIyAxMjcg Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMDYgIi91 c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQNCiMgMjA3ICIvdXNyL2luY2x1 ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQNCiMgMjE3ICIvdXNyL2luY2x1ZGUv c3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMSAzIDQNCiMgMjE4ICIvdXNyL2luY2x1ZGUvc3lzL3Np Z2luZm8uaCIgMiAzIDQNCg0KDQoNCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8g ew0KDQoNCg0KICAgICAgICBpbnQgc2lfc2lnbm87DQogICAgICAgIGludCBz aV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJybm87DQoNCg0KDQogICAgICAg IHVuaW9uIHsNCg0KICAgICAgICAgICAgICAgIGludCBfX3BhZFsoKDEyOCAv IHNpemVvZiAoaW50KSkgLSAzKV07DQoNCiAgICAgICAgICAgICAgICBzdHJ1 Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7DQog ICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQoNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNp Z3ZhbCBfX3ZhbHVlOw0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IF9fa2lsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVzOw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX19z dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2Ns ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gX19wZGF0YTsNCiAgICAg ICAgICAgICAgICB9IF9fcHJvYzsNCg0KICAgICAgICAgICAgICAgIHN0cnVj dCB7DQogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FkZHI7DQog ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87DQogICAgICAg ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fcGM7DQogICAgICAgICAgICAg ICAgfSBfX2ZhdWx0Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7DQogICAgICAgICAg ICAgICAgICAgICAgICBsb25nIF9fYmFuZDsNCiAgICAgICAgICAgICAgICB9 IF9fZmlsZTsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAg ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fZmFkZHI7DQoNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCiAgICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgX19zeXNhcmdbOF07DQogICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19tc3RhdGVbMTBdOw0KICAgICAgICAgICAgICAg IH0gX19wcm9mOw0KDQogICAgICAgIH0gX19kYXRhOw0KDQp9IHNpZ2luZm9f dDsNCiMgMzU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQp0 eXBlZGVmIHN0cnVjdCBrX3NpZ2luZm8gew0KICAgICAgICBpbnQgc2lfc2ln bm87DQogICAgICAgIGludCBzaV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJy bm87DQoNCg0KDQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBz dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7 DQogICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2ln dmFsIF9fdmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1lOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fY2xkOw0KICAg ICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0KICAgICAgICAgICAg ICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsNCiAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAgICAgICAgICB9IF9f ZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KDQogICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAgICAgIH0gX19maWxl Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAg ICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQoNCiAgICAgICAgICAg ICAgICAgICAgICAgIHRpbWVzdHJ1Y190IF9fdHN0YW1wOw0KDQoNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOw0KICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7DQogICAgICAgICAg ICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7DQoNCg0KDQogICAgICAgICAg ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0ga19z aWdpbmZvX3Q7DQoNCnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsNCiAgICAg ICAgc3RydWN0IHNpZ3F1ZXVlICpzcV9uZXh0Ow0KICAgICAgICBrX3NpZ2lu Zm9fdCBzcV9pbmZvOw0KICAgICAgICB2b2lkICgqc3FfZnVuYykoc3RydWN0 IHNpZ3F1ZXVlICopOw0KICAgICAgICB2b2lkICpzcV9iYWNrcHRyOw0KDQp9 IHNpZ3F1ZXVlX3Q7DQojIDQ1NCAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZv LmgiIDMgNA0KfQ0KIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIg MyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNA0K IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KI3ByYWdt YSBpZGVudCAiQCgjKXByb2NzZXQuaAkxLjE4CTk4LzA2LzMwIFNNSSINCg0K DQpleHRlcm4gIkMiIHsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9w cm9jc2V0LmgiIDIgMyA0DQojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3Byb2Nz ZXQuaCIgMyA0DQp0eXBlZGVmIGVudW0NCg0KICAgICAgICBpZHR5cGUNCg0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgUF9QSUQsDQogICAgICAgIFBf UFBJRCwNCiAgICAgICAgUF9QR0lELA0KDQogICAgICAgIFBfU0lELA0KICAg ICAgICBQX0NJRCwNCiAgICAgICAgUF9VSUQsDQogICAgICAgIFBfR0lELA0K ICAgICAgICBQX0FMTCwNCiAgICAgICAgUF9MV1BJRA0KfSBpZHR5cGVfdDsN CiMgNjQgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQNCnR5cGVk ZWYgZW51bSBpZG9wIHsNCiAgICAgICAgUE9QX0RJRkYsDQoNCg0KICAgICAg ICBQT1BfQU5ELA0KDQoNCiAgICAgICAgUE9QX09SLA0KDQoNCiAgICAgICAg UE9QX1hPUg0KDQoNCn0gaWRvcF90Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVm IHN0cnVjdCBwcm9jc2V0IHsNCiAgICAgICAgaWRvcF90IHBfb3A7DQoNCg0K DQoNCiAgICAgICAgaWR0eXBlX3QgcF9saWR0eXBlOw0KDQoNCiAgICAgICAg aWRfdCBwX2xpZDsNCg0KICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7DQoN Cg0KICAgICAgICBpZF90IHBfcmlkOw0KfSBwcm9jc2V0X3Q7DQojIDEyOSAi L3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KfQ0KIyAyNyAiL3Vz ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMi IHsNCiMgODYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQNCmV4dGVy biBwaWRfdCB3YWl0KGludCAqKTsNCmV4dGVybiBwaWRfdCB3YWl0cGlkKHBp ZF90LCBpbnQgKiwgaW50KTsNCg0KDQpleHRlcm4gaW50IHdhaXRpZChpZHR5 cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7DQpleHRlcm4gcGlkX3Qg d2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCg0KDQoNCg0K ZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3Qg cnVzYWdlICopOw0KIyAxMTggIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAz IDQNCn0NCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIgMiAz IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCnR5cGVkZWYgc3RydWN0IHsN CiAgICAgICAgaW50IHF1b3Q7DQogICAgICAgIGludCByZW07DQp9IGRpdl90 Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIGxvbmcgcXVvdDsNCiAg ICAgICAgbG9uZyByZW07DQp9IGxkaXZfdDsNCg0KDQp0eXBlZGVmIHN0cnVj dCB7DQogICAgICAgIGxvbmcgbG9uZyBxdW90Ow0KICAgICAgICBsb25nIGxv bmcgcmVtOw0KfSBsbGRpdl90Ow0KIyAxNDggIi9ob21lL21kZWlsL2Jpbi8u Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk ZS9zdGRsaWIuaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBl W107DQoNCg0KDQpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsN CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg aW50IGF0b2woY29uc3QgY2hhciAqKTsNCmV4dGVybiBkb3VibGUgc3RydG9k KGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQpleHRlcm4gbG9uZyBpbnQgc3Ry dG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwg aW50KTsNCg0KZXh0ZXJuIGludCByYW5kKHZvaWQpOw0KZXh0ZXJuIHZvaWQg c3JhbmQodW5zaWduZWQgaW50KTsNCg0KDQpleHRlcm4gaW50IHJhbmRfcih1 bnNpZ25lZCBpbnQgKik7DQoNCg0KZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXpl X3QsIHNpemVfdCk7DQpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7DQpleHRl cm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7DQpleHRlcm4gdm9pZCAqcmVhbGxv Yyh2b2lkICosIHNpemVfdCk7DQoNCmV4dGVybiB2b2lkIGFib3J0KHZvaWQp Ow0KZXh0ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOw0KZXh0ZXJu IHZvaWQgZXhpdChpbnQpOw0KZXh0ZXJuIHZvaWQgX2V4aXRoYW5kbGUodm9p ZCk7DQpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7DQpleHRl cm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOw0KDQpleHRlcm4gdm9pZCAq YnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICopKTsNCmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBz aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICopKTsNCg0KZXh0ZXJuIGludCBhYnMoaW50KTsNCmV4dGVybiBkaXZf dCBkaXYoaW50LCBpbnQpOw0KZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7 DQpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7DQoNCmV4dGVybiBp bnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K ZXh0ZXJuIGludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRl cm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOw0KDQpleHRlcm4gc2l6 ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp Ow0KZXh0ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFy X3QgKiwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4 KHZvaWQpOw0KZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0 ICopOw0KZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsN CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7DQpleHRl cm4gbG9uZyBscmFuZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2 b2lkKTsNCmV4dGVybiBsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnQgKik7 DQpleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9y dCAqKTsNCmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7DQpleHRlcm4gaW50 IHB1dGVudihjaGFyICopOw0KZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNo YXIgKik7DQojIDIxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz IDQNCmV4dGVybiBpbnQgbWtzdGVtcChjaGFyICopOw0KDQoNCmV4dGVybiBp bnQgbWtzdGVtcDY0KGNoYXIgKik7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9u ZyBhNjRsKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZWN2dChkb3Vi bGUsIGludCwgaW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpmY3Z0KGRv dWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmdjdnQo ZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gaW50IGdldHN1Ym9wdChj aGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsNCmV4dGVybiBpbnQg Z3JhbnRwdChpbnQpOw0KZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25l ZCwgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7 DQpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7DQpleHRlcm4gY2hhciAq cHRzbmFtZShpbnQpOw0KZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQpOw0KZXh0 ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsNCmV4 dGVybiBjaGFyICpzZXRzdGF0ZShjb25zdCBjaGFyICopOw0KZXh0ZXJuIHZv aWQgc3JhbmRvbSh1bnNpZ25lZCk7DQpleHRlcm4gaW50IHR0eXNsb3Qodm9p ZCk7DQpleHRlcm4gaW50IHVubG9ja3B0KGludCk7DQpleHRlcm4gdm9pZCAq dmFsbG9jKHNpemVfdCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgZHVwMihpbnQs IGludCk7DQpleHRlcm4gY2hhciAqcWVjdnQobG9uZyBkb3VibGUsIGludCwg aW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJs ZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFnY3Z0KGxv bmcgZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0Y3dk KGNoYXIgKiwgc2l6ZV90KTsNCmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVj bmFtZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsNCmV4 dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hh ciAqKTsNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpleHRlcm4gaW50IG9wdGlu ZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25z dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3Qg Y2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7DQpl eHRlcm4gaW50IGlzYXR0eShpbnQpOw0KZXh0ZXJuIHZvaWQgKm1lbWFsaWdu KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7 DQoNCg0KZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOw0K ZXh0ZXJuIGxvbmcgbG9uZyBsbGFicyhsb25nIGxvbmcpOw0KZXh0ZXJuIGxs ZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOw0KZXh0ZXJuIGNo YXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg bG9uZyBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAq LCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2ln bmVkIGxvbmcgbG9uZywgY2hhciAqKTsNCiMgNDEyICIvaG9tZS9tZGVpbC9i aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu Y2x1ZGUvc3RkbGliLmgiIDMgNA0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzDQoj IDczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3N0ZGxpYi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6 ZGl2X3Q7DQogIHVzaW5nIDo6bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJvcnQ7 DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0ZXhpdDsNCiAgdXNpbmcg OjphdG9mOw0KICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsNCiAg dXNpbmcgOjpic2VhcmNoOw0KICB1c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcg OjpkaXY7DQogIHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcgOjpmcmVlOw0KICB1 c2luZyA6OmdldGVudjsNCiAgdXNpbmcgOjpsYWJzOw0KICB1c2luZyA6Omxk aXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6Om1ibGVuOw0KICB1 c2luZyA6Om1ic3Rvd2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcg Ojpxc29ydDsNCiAgdXNpbmcgOjpyYW5kOw0KICB1c2luZyA6OnJlYWxsb2M7 DQogIHVzaW5nIDo6c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9kOw0KICB1c2lu ZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpzdHJ0b3VsOw0KICB1c2luZyA6OnN5 c3RlbTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcgOjp3Y3RvbWI7 DQoNCiAgaW5saW5lIGxvbmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBs YWJzKF9faSk7IH0NCg0KICBpbmxpbmUgbGRpdl90DQogIGRpdihsb25nIF9f aSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9DQp9DQoj IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyA0NiAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvbmV3IiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9uZXciIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMw0KIyAzNSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMw0K IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIg MiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg Y2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQogIHB1 YmxpYzoNCiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1 YWwgfmJhZF9hbGxvYygpIHRocm93KCk7DQogIH07DQoNCiAgc3RydWN0IG5v dGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJv dzsNCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7DQogIG5ld19o YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7DQp9DQoNCg0K dm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpi YWRfYWxsb2MpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qp IHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0 ZSh2b2lkICopIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZv aWQgKikgdGhyb3coKTsNCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCAqb3Bl cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190 JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgY29u c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBk ZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3co KTsNCg0KDQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90 LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KaW5s aW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpw bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KfQ0KIyA0NyAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQojIDQ5ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMw0KIyA1MCAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMN CiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyA1 MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyA1MyAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy MiwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0Zvcndh cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQ0Kew0KICBf VHAgX190bXAgPSAqX19hOw0KICAqX19hID0gKl9fYjsNCiAgKl9fYiA9IF9f dG1wOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xh c3MgX0ZvcndhcmRJdGVyMj4NCmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9y d2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCg0KDQogIF9faXRlcl9zd2FwKF9fYSwgX19i LCBfX3ZhbHVlX3R5cGUoX19hKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf VHA+DQppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3RtcCA9IF9fYTsNCiAgX19h ID0gX19iOw0KICBfX2IgPSBfX3RtcDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVt cGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIG1pbihjb25z dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu IF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25z dCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fYSA8IF9fYikgcmV0 dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29u c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp IHsNCg0KICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Nv bXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsNCg0KICBpZiAo X19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0N CiMgMTM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp bmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopDQp7DQogIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkN CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0 Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX091 dHB1dEl0ZXINCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFu Y2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp cnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQog IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4N CmlubGluZSBfVHAqDQpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmly c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQ0Kew0KICBt ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xh c3QgLSBfX2ZpcnN0KSk7DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3Qg LSBfX2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIgX19j b3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAg ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg X091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQog IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAg ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0K ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgX1RwKiBfX2NvcHlf YXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpDQp7DQog IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAq IF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf X2xhc3QsIF9UcCogX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KfQ0KDQoNCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Rw Pg0KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQ0Kew0K ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFs Ow0KICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwgX1RyaXZpYWwoKSk7DQp9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRw dXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQogIHJldHVy biBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQuYmFzZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsNCn0NCg0KdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsN CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsN CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw dXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9u aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBf X05vcm1hbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIg X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3Jt YWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQoNCiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1h bF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAg IHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs IF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwN CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX0JpZGlyZWN0 aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlKikNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0 KQ0KICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19y ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+ DQppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBf X24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikNCiAgICAq LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0K fQ0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAg ICBjbGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp c3BhdGNoDQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQ0KICAg ICAgICAgIF9DYXQ7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUNCiAg ICAgICAgICBfRGlzdGFuY2U7DQoNCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFs SXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgew0KICAgIHJldHVy biBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7DQogIH0NCn07DQoNCnRlbXBsYXRl IDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBj b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U cCogX19yZXN1bHQpIHsNCiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f bGFzdCAtIF9fZmlyc3Q7DQogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7DQogICAgcmV0dXJuIF9f cmVzdWx0IC0gX051bTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9U cD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1Rw KiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHko Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf X3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0 Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQogICAgICA6OmNvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogIH0NCn07DQoNCnRlbXBsYXRl IDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5 X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkky IF9fcmVzdWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0 czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+ DQogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3INCiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlh bD4NCiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5h bWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICByZXR1cm4g X0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQuYmFzZSgpKSk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSl7DQog IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw ZW5hbWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1 dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsNCiAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs IF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBsYXRlIDx0 eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19j b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly c3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNl X3R5cGUpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0 ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCmlubGluZSBfQkky IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ MiBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46 Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRf aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVy Pg0KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lu cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgZm9yICggOyBfX2NvdW50ID4gMDsg LS1fX2NvdW50KSB7DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg KytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIHBh aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0 KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXpl LCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9SQUl0ZXIsIF9P dXRwdXRJdGVyPg0KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBf X2NvdW50LA0KICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUkFJdGVy IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFpcjxf UkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KX19jb3B5X24oX0lu cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf X3Jlc3VsdCkgew0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3Vu dCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KY29weV9uKF9JbnB1 dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19y ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQs IF9fcmVzdWx0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIGZpbGwoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192 YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQog ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfT3V0cHV0 SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj b25zdCBfVHAmIF9fdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0 KQ0KICAgICpfX2ZpcnN0ID0gX192YWx1ZTsNCiAgcmV0dXJuIF9fZmlyc3Q7 DQp9DQoNCg0KDQppbmxpbmUgdm9pZCBmaWxsKHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQ0Kew0KICB1bnNpZ25lZCBj aGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgdm9pZCBmaWxsKHNpZ25l ZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LA0KICAgICAg ICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBzaWdu ZWQgY2hhciBfX3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz dCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hh ciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpDQp7DQogIGNoYXIgX190bXAg PSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgdW5zaWduZWQgY2hhciogZmls bF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYg X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7 DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1NpemU+DQppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBf X2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBmaWxsKF9fZmlyc3Qs IF9fZmlyc3QgKyBfX24sIF9fYyk7DQogIHJldHVybiBfX2ZpcnN0ICsgX19u Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgY2hhciog ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYg X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7 DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQoNCg0KDQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+DQpw YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0 SXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2Zp cnN0MSA9PSAqX19maXJzdDIpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsr X19maXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9J bnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz cyBfQmluYXJ5UHJlZGljYXRlPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0 SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIx IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp bmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7 DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmlyc3QyOw0KICB9DQogIHJl dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs IF9fZmlyc3QyKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlubGluZSBib29sIGVxdWFsKF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQ0KICAgIGlmICghKCpfX2Zp cnN0MSA9PSAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICBy ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkN CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m aXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg cmV0dXJuIHRydWU7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmJvb2wgbGV4aWNvZ3Jh cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDINCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQog ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiB0 cnVlOw0KICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICBy ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0Nv bXBhcmU+DQpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAg IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0KICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIHRydWU7DQog ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICBy ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KaW5saW5lIGJvb2wN CmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLA0KICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikNCnsN CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsN CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsN CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVybiBfX3Jlc3Vs dCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOw0KfQ0K DQppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQ0Kew0KDQogIHJldHVybiBsZXhp Y29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp cnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dCBzaWduZWQgY2hhciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWdu ZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoNCg0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW50 IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIpDQp7DQogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsNCiAgICBpZiAoKl9f Zmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0dXJuIC0xOw0KICAgIGlm ICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4gMTsNCiAg ICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0NCiAgaWYgKF9f Zmlyc3QyID09IF9fbGFzdDIpIHsNCiAgICByZXR1cm4gIShfX2ZpcnN0MSA9 PSBfX2xhc3QxKTsNCiAgfQ0KICBlbHNlIHsNCiAgICByZXR1cm4gLTE7DQog IH0NCn0NCg0KaW5saW5lIGludA0KX19sZXhpY29ncmFwaGljYWxfY29tcGFy ZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikN CnsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp cnN0MTsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf X2ZpcnN0MjsNCiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmly c3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVy biBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQNCiAgICAgICAgICAgICAgICAg ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19s ZW4yID8gLTEgOiAxKSk7DQp9DQoNCmlubGluZSBpbnQNCl9fbGV4aWNvZ3Jh cGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29u c3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0 MikNCnsNCg0KICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z d2F5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj aGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoN Cg0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyPg0KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2xl eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyLCBfX2xhc3QyKTsNCn0NCg0KfQ0KIyAyMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAy IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsbG9jLmgiIDEgMw0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCiMgMSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAx IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoN CiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoNCg0K ICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAgdm9p ZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAgX190 aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93 X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVudGlt ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJv d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAg X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog IHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog X19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOw0KfQ0KIyAyOSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl Zi5oIiAxIDMNCiMgMzAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAz DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzMiAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs bG9jLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMNCiMgMzcgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0Lmgi IDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNA0KIyAxMSAi L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo Iylhc3NlcnQuaAkxLjkJOTIvMDcvMTQgU01JIg0KDQoNCmV4dGVybiAiQyIg ew0KDQoNCg0KZXh0ZXJuIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIGludCk7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQu aCIgMiAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQoNCg0KDQoNCg0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk cy5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp dHMvZ3Roci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDIgMw0KIyA1MSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh ZHMuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA2NiAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K c3RydWN0IF9SZWZjb3VudF9CYXNlDQp7DQoNCg0KDQoNCiAgdHlwZWRlZiBz aXplX3QgX1JDX3Q7DQoNCg0KDQogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZf Y291bnQ7DQoNCg0KDQoNCiAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2Nv dW50X2xvY2s7DQogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9y ZWZfY291bnQoX19uKQ0KICAgIHsNCg0KICAgICAgX19ndGhyZWFkX211dGV4 X3QgX190bXAgPSB7e3swfSwgMH0sIHt7ezB9fX0sIHswfX07DQogICAgICBf TV9yZWZfY291bnRfbG9jayA9IF9fdG1wOw0KDQoNCg0KDQoNCiAgICB9DQoj IDExMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3RocmVhZHMuaCIgMw0KICB2b2lkIF9NX2luY3IoKSB7DQogICAgX19n dGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICAr K19NX3JlZl9jb3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf TV9yZWZfY291bnRfbG9jayk7DQogIH0NCiAgX1JDX3QgX01fZGVjcigpIHsN CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp Ow0KICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7 DQogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv Y2spOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KIyAxNjMgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDMNCn07DQojIDI4NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KdGVtcGxhdGUgPGludCBfX2lu c3Q+DQpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsNCiAgZW51bSB7IF9fbG93 X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9Ow0KDQoNCiAgc3RhdGlj IHVuc2lnbmVkIF9fbWF4Ow0KICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Ow0K fTsNCg0KdGVtcGxhdGUgPGludCBfX2luc3Q+DQp1bnNpZ25lZCBfU1RMX211 dGV4X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19p bnN0Pjo6X19sb3dfbWF4Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVu c2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xhc3QgPSAwOw0K IyAzMTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0bF90aHJlYWRzLmgiIDMNCnN0cnVjdCBfU1RMX211dGV4X2xvY2sNCnsN Cg0KDQoNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOw0K ICB2b2lkIF9NX2luaXRpYWxpemUoKSB7DQojIDM0MiAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K ICB9DQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgew0KDQoNCg0KICAgIF9f Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KICB2b2lkIF9N X3JlbGVhc2VfbG9jaygpIHsNCg0KDQoNCiAgICBfX2d0aHJlYWRfbXV0ZXhf dW5sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KIyA0NTMgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCn07 DQojIDQ5MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfYXV0b19sb2NrDQp7 DQogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsNCg0KICBfU1RMX2F1dG9f bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9j aykNCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCiAgfl9T VExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9 DQoNCnByaXZhdGU6DQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0 b19sb2NrJik7DQogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s b2NrJik7DQp9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDY4ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu aCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUgPGludCBf X2luc3Q+DQpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7DQoNCnBy aXZhdGU6DQoNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90 KTsNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXpl X3QpOw0KICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlcikoKTsNCg0KcHVibGljOg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0 ZShzaXplX3QgX19uKQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSBtYWxs b2MoX19uKTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBf U19vb21fbWFsbG9jKF9fbik7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9 DQoNCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf dCApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0KICBzdGF0aWMgdm9p ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25l d19zeikNCiAgew0KICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As IF9fbmV3X3N6KTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQg PSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsNCiAgICByZXR1cm4g X19yZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQ0KICB7DQogICAgdm9pZCAo KiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAg IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOw0KICAgIHJldHVy bihfX29sZCk7DQogIH0NCg0KfTsNCg0KDQoNCnRlbXBsYXRlIDxpbnQgX19p bnN0Pg0Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7DQoNCnRlbXBs YXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoNCl9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikNCnsNCiAg ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCog X19yZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFs bG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAg ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9f dGhyb3dfYmFkX2FsbG9jKCk7IH0NCiAgICAgICAgKCpfX215X21hbGxvY19o YW5kbGVyKSgpOw0KICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOw0K ICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAg fQ0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnZvaWQqIF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQq IF9fcCwgc2l6ZV90IF9fbikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9j X2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19yZXN1bHQ7DQoNCiAgICBmb3Ig KDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv Y19hbGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9t YWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0N CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICBf X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOw0KICAgICAgICBpZiAoX19y ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KfQ0KDQp0eXBlZGVm IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsNCg0K dGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpjbGFzcyBzaW1w bGVfYWxsb2Mgew0KDQpwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2Nh dGUoc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6 IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7 IH0NCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQ0KICAgICAgeyBy ZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg fQ0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVf dCBfX24pDQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9j YXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQ0KICAgIHN0YXRpYyB2 b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApDQogICAgICB7IF9BbGxvYzo6ZGVh bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCn07DQoNCg0KDQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgZGVidWdfYWxsb2Mg ew0KDQpwcml2YXRlOg0KDQogIGVudW0ge19TX2V4dHJhID0gOH07DQoNCg0K DQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf X24pDQogIHsNCiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6 OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVf dCopX19yZXN1bHQgPSBfX247DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu dCkgX1NfZXh0cmE7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl KHZvaWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVh bF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOw0KICAgICh2b2lk KSgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgfHwgKF9fYXNzZXJ0KCIq KHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTkwKSwgMCkp Ow0KICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGlu dCkgX1NfZXh0cmEpOw0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z eikNCiAgew0KICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChp bnQpIF9TX2V4dHJhOw0KICAgICh2b2lkKSgoKihzaXplX3QqKV9fcmVhbF9w ID09IF9fb2xkX3N6KSB8fCAoX19hc3NlcnQoIiooc2l6ZV90KilfX3JlYWxf cCA9PSBfX29sZF9zeiIsICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5NyksIDApKTsNCiAgICBjaGFy KiBfX3Jlc3VsdCA9IChjaGFyKikNCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0 ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50 KSBfU19leHRyYSk7DQogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdf c3o7DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7DQog IH0NCg0KfTsNCiMgMjQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGJvb2wgdGhy ZWFkcywgaW50IGluc3Q+DQpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGUgew0KDQpwcml2YXRlOg0KDQoNCiAgZW51bSB7X0FMSUdOID0gOH07DQog IGVudW0ge19NQVhfQllURVMgPSAxMjh9Ow0KICBlbnVtIHtfTkZSRUVMSVNU UyA9IDE2fTsNCiAgc3RhdGljIHNpemVfdA0KICBfU19yb3VuZF91cChzaXpl X3QgX19ieXRlcykNCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXpl X3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9DQoN CiAgdW5pb24gX09iaiB7DQogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVf bGlzdF9saW5rOw0KICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOw0K ICB9Ow0KDQogIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3Rb XTsNCg0KICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf dCBfX2J5dGVzKSB7DQogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChz aXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7DQogIH0NCg0K DQogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7DQoNCg0K ICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwg aW50JiBfX25vYmpzKTsNCg0KDQogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9m cmVlOw0KICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7DQogIHN0YXRpYyBz aXplX3QgX1NfaGVhcF9zaXplOw0KDQoNCiAgICBzdGF0aWMgX1NUTF9tdXRl eF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7DQoNCg0KDQoNCg0KICAg IGNsYXNzIF9Mb2NrOw0KICAgIGZyaWVuZCBjbGFzcyBfTG9jazsNCiAgICBj bGFzcyBfTG9jayB7DQogICAgICAgIHB1YmxpYzoNCiAgICAgICAgICAgIF9M b2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2Nr Ll9NX2FjcXVpcmVfbG9jaygpOyB9OyB9DQogICAgICAgICAgICB+X0xvY2so KSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01f cmVsZWFzZV9sb2NrKCk7IH07IH0NCiAgICB9Ow0KDQpwdWJsaWM6DQoNCg0K ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgew0KICAg IHZvaWQqIF9fcmV0ID0gMDsNCg0KICAgIGlmIChfX24gPiAoc2l6ZV90KSBf TUFYX0JZVEVTKSB7DQogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxs b2NhdGUoX19uKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBfT2JqKiB2 b2xhdGlsZSogX19teV9mcmVlX2xpc3QNCiAgICAgICAgICA9IF9TX2ZyZWVf bGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7DQoNCg0KDQoNCg0KICAg ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOw0KDQogICAgICBfT2JqKiBfX3Jl c3VsdCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgIGlmIChfX3Jlc3VsdCA9 PSAwKQ0KICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChf X24pKTsNCiAgICAgIGVsc2Ugew0KICAgICAgICAqX19teV9mcmVlX2xpc3Qg PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICAgICAgX19y ZXQgPSBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4g X19yZXQ7DQogIH07DQoNCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGlmIChfX24gPiAoc2l6 ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9j YXRlKF9fcCwgX19uKTsNCiAgICBlbHNlIHsNCiAgICAgIF9PYmoqIHZvbGF0 aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1NfZnJlZV9saXN0 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCiAgICAgIF9PYmoqIF9fcSA9 IChfT2JqKilfX3A7DQoNCg0KDQoNCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0 YW5jZTsNCg0KICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9f bXlfZnJlZV9saXN0Ow0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOw0K DQogICAgfQ0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQoN Cn0gOw0KDQp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVl LCAwPiBhbGxvYzsNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOw0KDQp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVy YXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikN CnsNCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0 PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQ0Kew0KICByZXR1 cm4gZmFsc2U7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4NCmNoYXIqDQpfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhz aXplX3QgX19zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQ0K ew0KICAgIGNoYXIqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX3RvdGFsX2J5 dGVzID0gX19zaXplICogX19ub2JqczsNCiAgICBzaXplX3QgX19ieXRlc19s ZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOw0KDQogICAgaWYg KF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7DQogICAgICAgIF9f cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJl ZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQp Ow0KICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgew0K ICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7 DQogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0K ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQogICAgICAgIF9T X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAgcmV0dXJu KF9fcmVzdWx0KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzaXplX3QgX19i eXRlc190b19nZXQgPQ0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsg X1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOw0KDQogICAgICAgIGlm IChfX2J5dGVzX2xlZnQgPiAwKSB7DQogICAgICAgICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgICAgICAg ICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19s ZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAt PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVl Ow0KICAgICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciop bWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nf c3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAg ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsNCiAgICAg ICAgICAgIF9PYmoqIF9fcDsNCg0KDQoNCiAgICAgICAgICAgIGZvciAoX19p ID0gX19zaXplOw0KICAgICAgICAgICAgICAgICBfX2kgPD0gKHNpemVfdCkg X01BWF9CWVRFUzsNCiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3Qp IF9BTElHTikgew0KICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0g X1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAg ICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAgICAg ICAgICAgaWYgKDAgIT0gX19wKSB7DQogICAgICAgICAgICAgICAgICAgICpf X215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7 DQogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf ZnJlZSArIF9faTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2No dW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KDQoNCiAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfU19lbmRfZnJl ZSA9IDA7DQogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1h bGxvY19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOw0KDQoNCg0K ICAgICAgICB9DQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3Rv X2dldDsNCiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsg X19ieXRlc190b19nZXQ7DQogICAgICAgIHJldHVybihfU19jaHVua19hbGxv YyhfX3NpemUsIF9fbm9ianMpKTsNCiAgICB9DQp9DQoNCg0KDQoNCg0KdGVt cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kdm9pZCoNCl9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T X3JlZmlsbChzaXplX3QgX19uKQ0Kew0KICAgIGludCBfX25vYmpzID0gMjA7 DQogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19u b2Jqcyk7DQogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K ICAgIF9PYmoqIF9fcmVzdWx0Ow0KICAgIF9PYmoqIF9fY3VycmVudF9vYmo7 DQogICAgX09iaiogX19uZXh0X29iajsNCiAgICBpbnQgX19pOw0KDQogICAg aWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOw0KICAgIF9fbXlf ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo X19uKTsNCg0KDQogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOw0K ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKiko X19jaHVuayArIF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKysp IHsNCiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7DQogICAg ICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsg X19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgew0KICAg ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9 IDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfSBlbHNlIHsNCiAg ICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsg PSBfX25leHRfb2JqOw0KICAgICAgICB9DQogICAgICB9DQogICAgcmV0dXJu KF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50 IGluc3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19vbGRfc3osDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQ0Kew0KICAg IHZvaWQqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX2NvcHlfc3o7DQoNCiAg ICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3 X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgew0KICAgICAgICByZXR1cm4o cmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7DQogICAgfQ0KICAgIGlmIChfU19y b3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSBy ZXR1cm4oX19wKTsNCiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6 KTsNCiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29s ZF9zeiA6IF9fbmV3X3N6Ow0KICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBf X2NvcHlfc3opOw0KICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7DQog ICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KDQogICAgdGVtcGxhdGUgPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICAgIF9TVExfbXV0ZXhfbG9j aw0KICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sNCiAgICAgICAgPSB7IHt7 ezB9LCAwfSwge3t7MH19fSwgezB9fSB9Ow0KDQoNCg0KdGVtcGxhdGUgPGJv b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl ZSA9IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4NCmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc2l6ZV90IF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9 IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4N CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlDQpfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0Ww0KICAg IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46 Ol9ORlJFRUxJU1RTDQpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07DQojIDUyNiAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRl bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBhbGxvY2F0b3Igew0KICB0eXBl ZGVmIGFsbG9jIF9BbGxvYzsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3Qg c2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0 IF9UcCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j ZTsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8 X1RwMT4gb3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSB7 fQ0KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQ0K ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9j YXRvcjxfVHAxPiYpIHRocm93KCkge30NCiAgfmFsbG9jYXRvcigpIHRocm93 KCkge30NCg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u c3QgeyByZXR1cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3Mo Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0K DQoNCg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZv aWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0 PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0K ICAgICAgICAgICAgICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVh bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9B bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQ0K DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkNCiAgICB7 IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCg0KICB2b2lk IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBu ZXcoX19wKSBfVHAoX192YWwpOyB9DQogIHZvaWQgZGVzdHJveShwb2ludGVy IF9fcCkgeyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxhdGU8Pg0KY2xh c3MgYWxsb2NhdG9yPHZvaWQ+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXpl X3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7DQogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBj b25zdCB2b2lkKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFs dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl YmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7DQog IH07DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4N CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiB0cnVlOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg YWxsb2NhdG9yPF9UMj4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQojIDYw MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsbG9jLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4NCnN0cnVjdCBfX2FsbG9jYXRvciB7DQogIF9BbGxvYyBfX3VuZGVybHlp bmdfYWxsb2M7DQoNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg X1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9p bnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBj b25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl YmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+ IG90aGVyOw0KICB9Ow0KDQogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0K ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp DQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h bGxvYykge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2Nh dG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhy b3coKQ0KICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlp bmdfYWxsb2MpIHt9DQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30NCg0K ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1 cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVm ZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KDQoNCiAgX1Rw KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsN CiAgICByZXR1cm4gX19uICE9IDANCiAgICAgICAgPyBzdGF0aWNfY2FzdDxf VHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9m KF9UcCkpKQ0KICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVhbGxv Y2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9fdW5k ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U cCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3co KQ0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0K DQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95 KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0Fs bG9jPiB7DQogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsNCiAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQq IHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRl cjsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUg PGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgX19h bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCn07DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf X2ExLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRv cjxfVHAsIF9BbGxvYz4mIF9fYTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5k ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu X191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j Ow0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlubGluZSBi b29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 aW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpDQp7DQogIHJldHVybiB0cnVlOw0K fQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYs DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+Jikgew0KICBy ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9j PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9j PF9BbGxvYz4mKSB7DQogIHJldHVybiBmYWxzZTsNCn0NCiMgNzMyICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu aCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4N CnN0cnVjdCBfQWxsb2NfdHJhaXRzDQp7DQogIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOw0KICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxv Y2F0b3JfdHlwZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvY2F0b3I+DQpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOw0KDQoNCg0KdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz PF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJv b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVf YWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgYWxs b2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJh aXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+DQp7 DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9f YWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9U cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0 PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+ID4NCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kc3RydWN0 IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4NCnsN CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsN CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxs b2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQg X19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLA0KICAgICAgICAg ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0Fs bG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9 Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wg X190aHIsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs DQogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+DQp7DQogIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYg c2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0eXBl ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz cyBfQWxsb2M+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2Nh dG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+DQp7DQogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVk ZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B bGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdf YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KfQ0KIyAy MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMNCiMgMzQgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z dHJ1Y3QuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvbmV3IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzDQoNCm5hbWVz cGFjZSBzdGQNCnsNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7DQpuZXcgKCh2b2lkKikg X19wKSBfVDEoX192YWx1ZSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDE+ DQppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7DQogIG5ldyAo KHZvaWQqKSBfX3ApIF9UMSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw Pg0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsNCiAg X19wb2ludGVyLT5+X1RwKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPg0Kdm9pZA0KX19kZXN0cm95X2F1eChfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2Zh bHNlX3R5cGUpDQp7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkNCiAgICBkZXN0cm95KCYqX19maXJzdCk7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgX19k ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9y LCBfX3RydWVfdHlwZSkge30NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcmF0b3IsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3ko X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3INCiAgICAgICAgICBf VHJpdmlhbF9kZXN0cnVjdG9yOw0KICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3Qs IF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBfRGVz dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0KSB7DQogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCmlubGluZSB2b2lkIF9EZXN0 cm95KGNoYXIqLCBjaGFyKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGlu dCosIGludCopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9u ZyopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikg e30NCmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJsZSopIHt9 DQppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9 DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu bGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3Zh bHVlKSB7DQogIF9Db25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9UMT4NCmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEq IF9fcCkgew0KICBfQ29uc3RydWN0KF9fcCk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfVHA+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVy KSB7DQogIF9EZXN0cm95KF9fcG9pbnRlcik7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgZGVzdHJveShf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0KSB7DQogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoNCn0N CiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi IDEgMw0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdGVtcGJ1Zi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRl IDxjbGFzcyBfVHA+DQpwYWlyPF9UcCosIHB0cmRpZmZfdD4NCl9fZ2V0X3Rl bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQ0Kew0KICBp ZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp KSkNCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsNCg0K ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX1RwKiBfX3RtcCA9IChfVHAq KSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsNCiAgICBp ZiAoX190bXAgIT0gMCkNCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRp ZmZfdD4oX190bXAsIF9fbGVuKTsNCiAgICBfX2xlbiAvPSAyOw0KICB9DQoN CiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBwYWlyPF9UcCos IHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9f bGVuKSB7DQogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVu LCAoX1RwKikgMCk7DQp9DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPg0KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9y YXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsNCiAgcmV0dXJu IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnZvaWQgcmV0dXJuX3RlbXBvcmFy eV9idWZmZXIoX1RwKiBfX3ApIHsNCiAgZnJlZShfX3ApOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xh c3MgX1RlbXBvcmFyeV9idWZmZXIgew0KcHJpdmF0ZToNCiAgcHRyZGlmZl90 IF9NX29yaWdpbmFsX2xlbjsNCiAgcHRyZGlmZl90IF9NX2xlbjsNCiAgX1Rw KiBfTV9idWZmZXI7DQoNCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7 DQogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOw0KICAgIF9NX2J1ZmZl ciA9IDA7DQoNCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4 MzY0NyAvIHNpemVvZihfVHApKSkNCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2 NDcgLyBzaXplb2YoX1RwKTsNCg0KICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7 DQogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNp emVvZihfVHApKTsNCiAgICAgIGlmIChfTV9idWZmZXIpDQogICAgICAgIGJy ZWFrOw0KICAgICAgX01fbGVuIC89IDI7DQogICAgfQ0KICB9DQoNCiAgdm9p ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlw ZSkge30NCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAm IHZhbCwgX19mYWxzZV90eXBlKSB7DQogICAgdW5pbml0aWFsaXplZF9maWxs X24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7DQogIH0NCg0KcHVibGljOg0K ICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQ0K ICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBf TV9vcmlnaW5hbF9sZW47IH0NCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N X2J1ZmZlcjsgfQ0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciAr IF9NX2xlbjsgfQ0KDQogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsNCg0K ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yDQogICAgICAgICAgICBfVHJp dmlhbDsNCg0KICAgIHRyeSB7DQogICAgICBfTV9sZW4gPSAwOw0KICAgICAg ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOw0KICAgICAgX01f YWxsb2NhdGVfYnVmZmVyKCk7DQogICAgICBpZiAoX01fbGVuID4gMCkNCiAg ICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFs KCkpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIp OyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsgfTsNCiAgfQ0K DQogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsNCiAgICBkZXN0cm95KF9NX2J1 ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsNCiAgICBmcmVlKF9NX2J1ZmZl cik7DQogIH0NCg0KcHJpdmF0ZToNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihj b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQogIHZvaWQgb3BlcmF0b3I9 KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCn07DQoNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwNCiAgICAgICAgICBjbGFz cyBfVHANCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAgICAg ICAgID4NCnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1w b3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4NCnsNCiAgdGVt cG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0KQ0KICAgIDogX1RlbXBvcmFyeV9idWZmZXI8 X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9DQog IH50ZW1wb3JhcnlfYnVmZmVyKCkge30NCn07DQoNCn0NCiMgMjUgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnku aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMw0KIyAzNCAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgMzUgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxp emVkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4N CmlubGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1 eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCnsNCiAg cmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+DQpfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpDQp7DQogIF9G b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikN CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJl dHVybiBfX2N1cjsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikN CnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omlz X1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgp KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G b3J3YXJkSXRlcj4NCmlubGluZSBfRm9yd2FyZEl0ZXINCiAgdW5pbml0aWFs aXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQpDQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7DQp9DQoNCmlubGluZSBj aGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwg Y29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0 LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVz dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgd2NoYXJf dCoNCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0 LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg d2NoYXJfdCogX19yZXN1bHQpDQp7DQogIG1lbW1vdmUoX19yZXN1bHQsIF9f Zmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7 DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCn0N Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6 ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KcGFpcjxfSW5wdXRJdGVyLCBfRm9y d2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIg X19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQogIF9Gb3J3YXJkSXRlciBf X2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19jb3Vu dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikNCiAgICAg IF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJldHVybiBw YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIp Ow0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19j dXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K aW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4N Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsNCiAgcmV0dXJu IHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oDQogICAg ICAgICAgICAgICAgIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBj bGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf Rm9yd2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0 ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgew0KICByZXR1cm4gX191bmlu aXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5s aW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPg0KdW5pbml0aWFs aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50 LA0KICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3Qs IF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0K DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4N CmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl KQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZA0K X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3 YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICgg OyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0 KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95 KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCmlu bGluZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0K ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP RF90eXBlIF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsNCg0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUg dm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCkNCnsNCiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJz dCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN Cg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6 ZSwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRp YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194LCBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0 LCBfX24sIF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXINCl9f dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQ0Kew0KICBfRm9yd2FyZEl0ZXIg X19jdXIgPSBfX2ZpcnN0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19uID4g MDsgLS1fX24sICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0KCYqX19jdXIs IF9feCk7DQogICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikg eyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh c3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191 bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1Np emUgX19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopDQp7DQogIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz X1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPg0K aW5saW5lIF9Gb3J3YXJkSXRlcg0KdW5pbml0aWFsaXplZF9maWxsX24oX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gp DQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KIyAyMzEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91 bmluaXRpYWxpemVkLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlu bGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHko X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpDQp7DQogIF9Gb3J3YXJkSXRl ciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0 MSwgX19yZXN1bHQpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxp emVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsNCiAgfQ0KICBj YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7 IH07DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4NCmlubGluZSBfRm9yd2Fy ZEl0ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVy IF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0KQ0Kew0KICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlk LCBfX3gpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7DQogIH0NCiAgY2F0Y2goLi4u KSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Ow0KfQ0K DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRp YWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ dGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBf Rm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7DQogIHRyeSB7DQogICAgdW5pbml0 aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsNCiAgfQ0KICBj YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7IHRocm93 OyB9Ow0KfQ0KDQp9DQojIDI2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3Jh Z2VfaXRlci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMNCm5h bWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3IsIGNsYXNzIF9UcD4NCmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9y IHsNCnByb3RlY3RlZDoNCiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOw0K cHVibGljOg0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0 eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQg cG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBs aWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9f eCkgOiBfTV9pdGVyKF9feCkge30NCiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3Im IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIHJhd19zdG9yYWdl X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsN CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOw0KICAgIHJl dHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9y d2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgew0KICAgICsrX01f aXRlcjsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmF3X3N0b3JhZ2Vf aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGlu dCkgew0KICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0 b3IsIF9UcD4gX190bXAgPSAqdGhpczsNCiAgICArK19NX2l0ZXI7DQogICAg cmV0dXJuIF9fdG1wOw0KICB9DQp9Ow0KDQoNCn0NCiMgMjcgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KIHRlbXBsYXRlPGNsYXNzIF9U cDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgew0KICAgX1RwMSogX01fcHRyOw0K ICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQ0K fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgew0K cHJpdmF0ZToNCiAgX1RwKiBfTV9wdHI7DQoNCnB1YmxpYzoNCiAgdHlwZWRl ZiBfVHAgZWxlbWVudF90eXBlOw0KDQogIGV4cGxpY2l0IGF1dG9fcHRyKF9U cCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9DQogIGF1dG9f cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVh c2UoKSkge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIo YXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQ0KICAgIDogX01fcHRyKF9f YS5yZWxlYXNlKCkpIHt9DQoNCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRv X3B0ciYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgp KTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh c3MgX1RwMT4NCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAx PiYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgpKTsN CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KDQoNCg0KDQogIH5hdXRvX3B0 cigpIHsgZGVsZXRlIF9NX3B0cjsgfQ0KDQogIF9UcCYgb3BlcmF0b3IqKCkg Y29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJuICpfTV9wdHI7DQogIH0NCiAg X1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJu IF9NX3B0cjsNCiAgfQ0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgew0K ICAgIHJldHVybiBfTV9wdHI7DQogIH0NCiAgX1RwKiByZWxlYXNlKCkgdGhy b3coKSB7DQogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsNCiAgICBfTV9wdHIg PSAwOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICB2b2lkIHJlc2V0KF9U cCogX19wID0gMCkgdGhyb3coKSB7DQogICAgaWYgKF9fcCAhPSBfTV9wdHIp IHsNCiAgICAgIGRlbGV0ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3A7 DQogICAgfQ0KICB9DQoNCg0KDQoNCg0KcHVibGljOg0KICBhdXRvX3B0cihh dXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKQ0KICAgIDogX01fcHRy KF9fcmVmLl9NX3B0cikge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1 dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsNCiAgICBpZiAoX19y ZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7DQogICAgICBkZWxldGUgX01f cHRyOw0KICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOw0KICAgIH0NCiAg ICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw MT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQ0KICAg IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7 IH0NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRy PF9UcDE+KCkgdGhyb3coKQ0KICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+ KHRoaXMtPnJlbGVhc2UoKSk7IH0NCn07DQoNCn0NCiMgNDQgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIg MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3R5cGVfdHJhaXRzLmgiIDEgMw0KIyA0NSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMg MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2lvc2Z3ZC5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmlu Zy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43 L2JpdHMvYXRvbWljaXR5LmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv YXRvbWljaXR5LmgiIDMNCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsNCg0K c3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19l eGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVt LCBpbnQgX192YWwpDQp7DQogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9j azsNCiAgX0F0b21pY193b3JkIF9fcmVzdWx0LCBfX3RtcDsNCg0KICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCINCiAg ICAgICAgICAgICAgICAgICAgICAgIgljbXAJJTAsIDBcblx0Ig0KICAgICAg ICAgICAgICAgICAgICAgICAiCWJuZQkxYlxuXHQiDQogICAgICAgICAgICAg ICAgICAgICAgICIJIG5vcCINCiAgICAgICAgICAgICAgICAgICAgICAgOiAi PSZyIiAoX190bXApDQogICAgICAgICAgICAgICAgICAgICAgIDogInIiICgm X19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsN CiAgX19yZXN1bHQgPSAqX19tZW07DQogICpfX21lbSArPSBfX3ZhbDsNCiAg X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v cnkiKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQpzdGF0aWMgdm9pZA0K X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19hdG9taWNfYWRkICh2 b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpDQp7DQog IHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgX0F0b21pY193b3Jk IF9fdG1wOw0KDQogIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJ WyUxXSwgJTBcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAkl MCwgMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5c dCINCiAgICAgICAgICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAg ICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAg ICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAg ICAgIDogIm1lbW9yeSIpOw0KICAqX19tZW0gKz0gX192YWw7DQogIF9fYXNt X18gX192b2xhdGlsZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAg ICAgICAgICAgICAgOg0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAo Jl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7 DQp9DQoNCnN0YXRpYyBpbnQNCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f KSkNCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyAqX19wLCBs b25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQ0Kew0KICBzdGF0aWMgdW5z aWduZWQgY2hhciBfX2xvY2s7DQogIGxvbmcgX19yZXQsIF9fdG1wOw0KDQog IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0 Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y eSIpOw0KICBpZiAoKl9fcCAhPSBfX29sZHZhbCkNCiAgICBfX3JldCA9IDA7 DQogIGVsc2UNCiAgICB7DQogICAgICAqX19wID0gX19uZXd2YWw7DQogICAg ICBfX3JldCA9IDE7DQogICAgfQ0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi c3RiCSUlZzAsIFslMF0iDQogICAgICAgICAgICAgICAgICAgICAgIDoNCiAg ICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAg ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOw0KDQogIHJldHVybiBfX3Jl dDsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0K ew0KIyA4MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvYmFzaWNfc3RyaW5nLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg Y2xhc3MgYmFzaWNfc3RyaW5nDQogICAgew0KDQogICAgcHVibGljOg0KICAg ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsNCiAg ICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOw0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBl IGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2lu dGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Bv aW50ZXIgY29uc3RfcG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsNCiAg ICAgIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg YmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYg cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxp dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KICAgIHByaXZhdGU6DQoj IDExOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv YmFzaWNfc3RyaW5nLmgiIDMNCiAgICAgIHN0cnVjdCBfUmVwDQogICAgICB7 DQoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlYmluZDxj aGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsNCiMgMTM2ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu aCIgMw0KICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9z aXplOw0KICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFs Ow0KDQogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7DQogICAgICAgIHNp emVfdHlwZSBfTV9jYXBhY2l0eTsNCiAgICAgICAgX0F0b21pY193b3JkIF9N X3JlZmVyZW5jZXM7DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19s ZWFrZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz IDwgMDsgfQ0KDQogICAgICAgIGJvb2wNCiAgICAgICAgX01faXNfc2hhcmVk KCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7 IH0NCg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX3NldF9sZWFrZWQoKQ0K ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQ0KDQogICAgICAgIHZv aWQNCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkNCiAgICAgICAgeyBfTV9y ZWZlcmVuY2VzID0gMDsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAg X01fcmVmZGF0YSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDxfQ2hhclQqPiAodGhpcyArIDEpOyB9DQoNCiAgICAgICAg X0NoYXJUJg0KICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93 KCkNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9DQoN CiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxv YyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpDQogICAgICAg IHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19h bGxvYzIpID8NCiAgICAgICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25l KF9fYWxsb2MxKTsgfQ0KDQoNCiAgICAgICAgc3RhdGljIF9SZXAqDQogICAg ICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOw0KDQogICAg ICAgIHZvaWQNCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9f YSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9h ZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQ0KICAgICAgICAgICAgX01f ZGVzdHJveShfX2EpOw0KICAgICAgICB9DQoNCiAgICAgICAgdm9pZA0KICAg ICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7DQoNCiAg ICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQ0K ICAgICAgICB7DQogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVu Y2VzLCAxKTsNCiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOw0KICAg ICAgICB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9jbG9uZShj b25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsNCiMgMjA4ICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z dHJpbmcuaCIgMw0KICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wNCiAgICAg ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOw0KDQogICAgICB9 Ow0KDQoNCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MNCiAg ICAgIHsNCiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNv bnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9w KF9fZGF0KSB7IH0NCg0KICAgICAgICBfQ2hhclQqIF9NX3A7DQogICAgICB9 Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IHNp emVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7DQoN CiAgICBwcml2YXRlOg0KDQogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBf TV9kYXRhcGx1czsNCg0KDQoNCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1Nf ZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hh clQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBl KV07DQoNCiAgICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQ0KDQogICAgICBf Q2hhclQqDQogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQ0KICAgICAgeyBy ZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9DQoNCiAgICAgIF9S ZXAqDQogICAgICBfTV9yZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4gJigo cmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0N Cg0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pYmVnaW4oKSBjb25z dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAgICAgIGl0 ZXJhdG9yDQogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0 b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQogICAgICB2b2lk DQogICAgICBfTV9sZWFrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9y ZXAoKS0+X01faXNfbGVha2VkKCkpDQogICAgICAgICAgX01fbGVha19oYXJk KCk7DQogICAgICB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9jaGVj ayhzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgICB7DQogICAgICAgIGlm IChfX3BvcyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOw0KICAgICAg ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0NCg0KDQog ICAgICBpdGVyYXRvcg0KICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX29mZikgY29uc3QNCiAgICAgIHsNCiAgICAgICAgYm9v bCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0K ICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0KICAgICAgICByZXR1cm4gKF9N X2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7DQogICAgICB9DQoNCg0K DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+DQogICAgICAgIHN0 YXRpYyB2b2lkDQogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As IF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikNCiAgICAgICAgew0K ICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3Ap DQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sx KTsNCiAgICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1Nf Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0 b3IgX19rMikNCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFz ZSgpLCBfX2syLmJhc2UoKSk7IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAg ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9y IF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpDQogICAgICB7IF9TX2NvcHlf Y2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9DQoNCiAg ICAgIHN0YXRpYyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog X19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikNCiAgICAgIHsgdHJh aXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0NCg0K ICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2sy KQ0KICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIg LSBfX2sxKTsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9tdXRhdGUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19s ZW4yKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fbGVha19oYXJkKCk7DQoN CiAgICAgIHN0YXRpYyBfUmVwJg0KICAgICAgX1NfZW1wdHlfcmVwKCkNCiAg ICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1w dHlfcmVwX3N0b3JhZ2UpOyB9DQoNCiAgICBwdWJsaWM6DQoNCg0KDQoNCiAg ICAgIGlubGluZQ0KICAgICAgYmFzaWNfc3RyaW5nKCk7DQoNCiAgICAgIGV4 cGxpY2l0DQogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2Ep Ow0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKTsNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsDQogICAgICAgICAgICAgICAg ICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOw0KICAgICAgYmFzaWNfc3RyaW5n KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywN CiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs b2MmIF9fYSk7DQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwNCiAgICAgICAgICAgICAgICAgICBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs b2MoKSk7DQogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0No YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7DQoNCiAg ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi YXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRl cmF0b3IgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs b2MmIF9fYSA9IF9BbGxvYygpKTsNCg0KICAgICAgfmJhc2ljX3N0cmluZygp DQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxv Y2F0b3IoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgb3Bl cmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRo aXMtPmFzc2lnbihfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0 aGlzLT5hc3NpZ24oX19zKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog ICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNz aWduKDEsIF9fYyk7IH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAgYmVn aW4oKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl dHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAgICBj b25zdF9pdGVyYXRvcg0KICAgICAgYmVnaW4oKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQ0KDQogICAgICBp dGVyYXRvcg0KICAgICAgZW5kKCkNCiAgICAgIHsNCiAgICAgICAgIF9NX2xl YWsoKTsNCiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0 aGlzLT5zaXplKCkpOw0KICAgICAgfQ0KDQogICAgICBjb25zdF9pdGVyYXRv cg0KICAgICAgZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0 ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0NCg0KICAgICAg cmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkNCiAgICAgIHsgcmV0 dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAg IGNvbnN0X3JldmVyc2VfaXRlcmF0b3INCiAgICAgIHJiZWdpbigpIGNvbnN0 DQogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMt PmVuZCgpKTsgfQ0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBy ZW5kKCkNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ YmVnaW4oKSk7IH0NCg0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0K ICAgICAgcmVuZCgpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoNCiAgICBwdWJsaWM6 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBl DQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f bGVuZ3RoOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQ0KDQogICAg ICB2b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f Yyk7DQoNCiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u KSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQ0KDQogICAgICBz aXplX3R5cGUNCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01f cmVwKCktPl9NX2NhcGFjaXR5OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHJl c2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOw0KDQogICAgICB2b2lk DQogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwg MCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgZW1wdHkoKSBjb25zdCB7IHJl dHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQ0KDQoNCiAgICAgIGNvbnN0X3Jl ZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBj b25zdA0KICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQ0KDQog ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f cG9zKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl dHVybiBfTV9kYXRhKClbX19wb3NdOw0KICAgICAgfQ0KDQogICAgICBjb25z dF9yZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0DQog ICAgICB7DQogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAg ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0 Iik7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsNCiAgICAgIH0N Cg0KICAgICAgcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5cGUgX19uKQ0K ICAgICAgew0KICAgICAgICBpZiAoX19uID49IHNpemUoKSkNCiAgICAgICAg ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0K ICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClb X19uXTsNCiAgICAgIH0NCg0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg ICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0 dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3Ry aW5nJg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyBy ZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0NCg0KICAgICAgYmFzaWNfc3Ry aW5nJg0KICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0 aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9DQoNCiAgICAgIGJh c2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5k KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg IGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7DQoN CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBfQ2hh clQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRy YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3Ry aW5nJg0KICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Mp Ow0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAg ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhcHBlbmQoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp LCBfX2ZpcnN0LCBfX2xhc3QpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHB1 c2hfYmFjayhfQ2hhclQgX19jKQ0KICAgICAgeyB0aGlzLT5yZXBsYWNlKF9N X2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9DQoNCiAgICAgIGJhc2lj X3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmFz c2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19w b3MsIF9fbikpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog ICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p DQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyBfX24p OyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25z dCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAg ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQ0KDQogICAgICB0 ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNf c3RyaW5nJg0KICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0 aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3Qs IF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5zZXJ0KGl0ZXJh dG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsg dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9DQoNCiAgICAg IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICB2b2lk IGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBf SW5wdXRJdGVyYXRvciBfX2VuZCkNCiAgICAgICAgeyB0aGlzLT5yZXBsYWNl KF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9DQoNCiAgICAgIGJhc2ljX3N0 cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgICAgew0KICAgICAgICBpdGVyYXRv ciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAgICB0aGlzLT5yZXBs YWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVnaW4oKSwgX19zdHIuX01faWVu ZCgpKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAg ICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9z MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICBz aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAg ICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAg ICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9jaGVjayhfX3Bv czIpLA0KICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w b3MyLCBfX24pKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAg ICAgIHsNCiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3Mp Ow0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyAr IF9fbik7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv cywgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVybiB0aGlzLT5p bnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgICAg ew0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24s IF9fYyk7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg ICAgaXRlcmF0b3INCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFy VCBfX2MgPSBfQ2hhclQoKSkNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBl IF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPmlu c2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsNCiAg ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0 dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7DQogICAgICB9DQoNCiAg ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3Bv cyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQ0KICAgICAgew0KICAgICAg ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv bGQoX19wb3MsIF9fbiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgIH0NCg0KICAgICAgaXRl cmF0b3INCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pDQogICAg ICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01f aWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwg X19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAg ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0dXJu IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBpdGVyYXRv cg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s YXN0KQ0KICAgICAgew0KICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJz dCAtIF9NX2liZWdpbigpOw0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmly c3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgICBf TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgIHJldHVybiBfTV9p YmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5n Jg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAg ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f Zm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsNCiAgICAgIH0NCg0K ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg X19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90 eXBlIF9fbjIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBs YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikNCiAg ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsNCiAgICAgIH0NCg0K ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAg ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcykpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNp emVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAgICAgew0KICAgICAgICBy ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo X19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOw0KICAgICAgfQ0KDQogICAgICBi YXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLmJl Z2luKCksIF9fc3RyLmVuZCgpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcm DQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9DQoNCiAgICAgIGJh c2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl cmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVy biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNl KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICByZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsDQogICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19r MikNCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBf X2sxLCBfX2syLA0KICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9 DQoNCiAgICBwcml2YXRlOg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgICAgX01f cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJ dGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7DQoNCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5n Jg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAg IF9Gd2RJdGVyYXRvciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN Cg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBz dGF0aWMgX0NoYXJUKg0KICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0 ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0K ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAg ICAgew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAg ICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9U YWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu SXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29u c3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z dCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ry dWVfdHlwZSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBfU19jb25z dHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBl PihfX2VuZCksIF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAg ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsNCiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1 eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOw0KICAgICAgICB9 DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAgICAgICAg c3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoN Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+DQogICAgICAgIHN0 YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf X2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAg ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQog ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgX1NfY29uc3RydWN0KHNpemVf dHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOw0K DQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNvcHko X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7DQoNCg0KICAg ICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIoKSBjb25zdA0KICAgICAg ew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7DQog ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9S ZXA6Ol9TX3Rlcm1pbmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsN CiAgICAgIH0NCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgZGF0YSgp IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQogICAgICBhbGxvY2F0 b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRh dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90 eXBlDQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAg ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAg ICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+cmZp bmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQog ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQog ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0 aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9D aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQog ICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0 YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5 cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQoNCiAgICAg IHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g MCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bv cyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2Yo Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g bnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0 Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9z LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVf dHlwZQ0KICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5y ZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0 aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBf X3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu ZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p IGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAw KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rf b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K DQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9D aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAg ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19z dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz aXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQogICAgICBzaXplX3R5cGUNCiAg ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz LT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k X2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5w b3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1YnN0 cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykg Y29uc3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6 ZSgpKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z dHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5n KCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQog ICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0 DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6 ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBf X29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv bXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAg ICAgaWYgKCFfX3IpDQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6 ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAgICAgIH0NCg0KICAgICAgaW50 DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f biwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAg IGludA0KICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5 cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0 Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf X3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog X19zKSBjb25zdDsNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z LA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQoNCiAg fTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z dHJpbmcoKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01f cmVmY29weSgpLCBfQWxsb2MoKSkgeyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN CiAgICB7DQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3Jo cyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRv cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U cmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K ICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpDQogICAgew0KICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7DQogICAgICBf X3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X2xocywgX0NoYXJUIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190 eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpz aXplX3R5cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9f c3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgx KSwgX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0 b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsgcmV0 dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29u c3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0N Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg b3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y IT0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w ZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9 IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29s DQogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh dG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo cykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w ZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7 IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog ICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y Pihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykN CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh dG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo cykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0N Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg b3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w ZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQ0KICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAw OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0K ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVy YXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAg ICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg PD0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIHZv aWQNCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLA0KICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyBfX2xocy5zd2FwKF9f cmhzKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry KTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsDQogICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0 cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9f ZGVsaW0pOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry KTsNCn0NCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgi IDEgMw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEg Mw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMN CiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg Mw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj IDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMNCiMgMzQgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2hlYXAuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzDQpuYW1lc3Bh Y2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCnZvaWQN Cl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2Ug X190b3BJbmRleCwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5jZSBfX3Bh cmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgd2hpbGUgKF9faG9s ZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg PCBfX3ZhbHVlKSB7DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g KihfX2ZpcnN0ICsgX19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19w YXJlbnQ7DQogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7 DQogIH0NCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX19w dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs IF9EaXN0YW5jZSosIF9UcCopDQp7DQogIF9fcHVzaF9oZWFwKF9fZmlyc3Qs IF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNl KDApLA0KICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSkpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5s aW5lIHZvaWQNCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQoNCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3Qs IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2 b2lkDQpfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LA0KICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp DQp7DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp IC8gMjsNCiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBf X2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0KICAg ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy ZW50KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Ow0KICAgIF9fcGFy ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB9DQogICooX19maXJz dCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLA0K ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0KaW5saW5l IHZvaWQNCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwNCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgICAgICAg X0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19maXJzdCwg X0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2Uo MCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21w KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19sYXN0LA0KICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9f cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwNCiAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1 ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+ DQp2b2lkDQpfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5j ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3Nl Y29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9f c2Vjb25kQ2hpbGQgPCBfX2xlbikgew0KICAgIGlmICgqKF9fZmlyc3QgKyBf X3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g MSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJzdCAr IF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOw0K ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3NlY29u ZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAgaWYg KF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3QgKyBf X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0KICB9 DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu ZGV4LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpp bmxpbmUgdm9pZA0KX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192 YWx1ZSwgX0Rpc3RhbmNlKikNCnsNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 DQogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlz dGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+ DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs DQogICAgICAgICAgICAgICBfVHAqKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmly c3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsDQogICAgICAgICAgICAgX1Rw KCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0K aW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBf X3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShf X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0KX19hZGp1c3RfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LA0KICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3Zh bHVlLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3RvcElu ZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk ID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9fc2Vjb25kQ2hp bGQgPCBfX2xlbikgew0KICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19z ZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp KSkNCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAqKF9fZmlyc3QgKyBf X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsNCiAg ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7DQogICAgX19zZWNvbmRD aGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0KICB9DQogIGlmIChf X3NlY29uZENoaWxkID09IF9fbGVuKSB7DQogICAgKihfX2ZpcnN0ICsgX19o b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7 DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsNCiAgfQ0K ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl eCwgX192YWx1ZSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy ZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZA0K X19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBh cmUgX19jb21wLA0KICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICAqX19y ZXN1bHQgPSAqX19maXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwNCiAg ICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNs YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQNCl9fcG9wX2hlYXBfYXV4KF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg X19jb21wKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEs IF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLA0KICAg ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9D b21wYXJlPg0KaW5saW5lIHZvaWQNCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19wb3BfaGVhcF9hdXgo X19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29t cCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZA0KX19tYWtl X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlz dGFuY2UqKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy bjsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAg X0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGls ZSAodHJ1ZSkgew0KICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJl bnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7DQogICAg aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAgICBfX3BhcmVudC0tOw0K ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+DQppbmxpbmUgdm9pZA0KbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2Zp cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp cnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh cmUsDQogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2 b2lkDQpfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikNCnsNCiAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47DQogIF9EaXN0YW5jZSBf X2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9EaXN0YW5jZSBfX3BhcmVu dCA9IChfX2xlbiAtIDIpLzI7DQoNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBf X2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCoo X19maXJzdCArIF9fcGFyZW50KSksDQogICAgICAgICAgICAgICAgICBfX2Nv bXApOw0KICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47DQogICAgX19w YXJlbnQtLTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpt YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQoNCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAs DQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0 YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyYXRvcj4NCnZvaWQgc29ydF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19maXJzdCwg X19sYXN0LS0pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQNCnNvcnRfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19m aXJzdCwgX19sYXN0LS0sIF9fY29tcCk7DQp9DQoNCn0NCiMgMzUgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDIgMw0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUg PGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0 IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19hIDwgX19iKQ0KICAg IGlmIChfX2IgPCBfX2MpDQogICAgICByZXR1cm4gX19iOw0KICAgIGVsc2Ug aWYgKF9fYSA8IF9fYykNCiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0K ICAgICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19hIDwgX19jKQ0KICAg IHJldHVybiBfX2E7DQogIGVsc2UgaWYgKF9fYiA8IF9fYykNCiAgICByZXR1 cm4gX19jOw0KICBlbHNlDQogICAgcmV0dXJuIF9fYjsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3Qg X1RwJg0KX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i LCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19jb21w KF9fYSwgX19iKSkNCiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkNCiAgICAg IHJldHVybiBfX2I7DQogICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkN CiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0KICAgICAgcmV0dXJuIF9f YTsNCiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkNCiAgICByZXR1cm4g X19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0KICAgIHJldHVy biBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+DQpfRnVu Y3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikNCnsNCg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQ0KICAgIF9fZigqX19maXJzdCk7DQogIHJldHVybiBfX2Y7DQp9DQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5s aW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy YXRvcl90YWcpDQp7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAh KCpfX2ZpcnN0ID09IF9fdmFsKSkNCiAgICArK19fZmlyc3Q7DQogIHJldHVy biBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsN CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly c3QpKQ0KICAgICsrX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAg ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0KICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19sYXN0IC0g X19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg OyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmICgqX19maXJzdCA9PSBfX3Zh bCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19f Zmlyc3Q7DQoNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9 DQoNCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0K ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQog ICAgKytfX2ZpcnN0Ow0KICBjYXNlIDI6DQogICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh c2UgMToNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp cnN0Ow0KICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0K ICAgIHJldHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX1JhbmRv bUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCiAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudA0KICAgID0gKF9fbGFzdCAt IF9fZmlyc3QpID4+IDI7DQoNCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAw IDsgLS1fX3RyaXBfY291bnQpIHsNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19m aXJzdDsNCg0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAgICBpZiAoX19wcmVkKCpfX2Zp cnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoN CiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0KICAg IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICAr K19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDE6 DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K ICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0KICAgIHJl dHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0 ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9f cHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVy IGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkN CiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g X19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAg aWYgKCpfX2ZpcnN0ID09ICpfX25leHQpDQogICAgICByZXR1cm4gX19maXJz dDsNCiAgICBfX2ZpcnN0ID0gX19uZXh0Ow0KICB9DQogIHJldHVybiBfX2xh c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xh c3QpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgX0ZvcndhcmRJdGVyIF9fbmV4 dCA9IF9fZmlyc3Q7DQogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgew0K ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkNCiAg ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQog IH0NCiAgcmV0dXJuIF9fbGFzdDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+ DQp2b2lkIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgICAgX1NpemUm IF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbHVlKQ0KICAgICAgKytfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4NCnZv aWQgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAgICAgIF9TaXpl JiBfX24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsrX19uOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0K dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl bmNlX3R5cGUNCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbHVlKQ0KICAgICAgKytfX247DQogIHJldHVybiBfX247DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0K dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl bmNlX3R5cGUNCmNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf X24gPSAwOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpDQogICAgICArK19fbjsN CiAgcmV0dXJuIF9fbjsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQpfRm9yd2FyZEl0 ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQoNCiAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikNCiAgICBy ZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f Zmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYgKF9fdG1wID09IF9fbGFzdDIp DQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0 Mik7DQoNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9f cDEgPSBfX2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19j dXJyZW50ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f bGFzdDEpIHsNCiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFz dDEsICpfX2ZpcnN0Mik7DQogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp DQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIF9fcCA9IF9fcDE7DQog ICAgX19jdXJyZW50ID0gX19maXJzdDE7DQogICAgaWYgKCsrX19jdXJyZW50 ID09IF9fbGFzdDEpDQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIHdo aWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsNCiAgICAgIGlmICgrK19fcCA9 PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICBp ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9f bGFzdDE7DQogICAgfQ0KDQogICAgKytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1 cm4gX19maXJzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4N Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGlj YXRlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K DQogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f bGFzdDIpDQogICAgcmV0dXJuIF9fZmlyc3QxOw0KDQoNCiAgX0ZvcndhcmRJ dGVyMiBfX3RtcChfX2ZpcnN0Mik7DQogICsrX190bXA7DQogIGlmIChfX3Rt cCA9PSBfX2xhc3QyKSB7DQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAg ICAgICsrX19maXJzdDE7DQogICAgcmV0dXJuIF9fZmlyc3QxOw0KICB9DQoN Cg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9fcDEgPSBf X2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50 ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp IHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgew0KICAgICAg aWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAg ICAgYnJlYWs7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAgICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmly c3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICBpZiAo X19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0K DQogICAgX19wID0gX19wMTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsN CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz dDE7DQoNCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9f cCkpIHsNCiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICBy ZXR1cm4gX19maXJzdDE7DQogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s YXN0MSkNCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgfQ0KDQogICAg KytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDE7DQp9DQoNCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdl ciwgY2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192 YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19jb3Vu dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICBf X2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9f biA9IF9fY291bnQgLSAxOw0KICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19s YXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsNCiAgICAgICAg KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UN CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsN CiAgICB9DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3Mg X1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4NCl9Gb3J3YXJkSXRlciBzZWFyY2hf bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z dCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ cmVkIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19jb3Vu dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIGlmIChfX2JpbmFy eV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpDQogICAgICAgIGJyZWFrOw0KICAg ICAgKytfX2ZpcnN0Ow0KICAgIH0NCiAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0K ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19f aTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYm IF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7DQogICAgICAgICsrX19p Ow0KICAgICAgICAtLV9fbjsNCiAgICAgIH0NCiAgICAgIGlmIChfX24gPT0g MCkNCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIHsNCiAg ICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsNCiAgICAgICAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpDQogICAgICAgICAgICBicmVh azsNCiAgICAgICAgICArK19faTsNCiAgICAgICAgfQ0KICAgICAgICBfX2Zp cnN0ID0gX19pOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0 Ow0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjIgc3dhcF9y YW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBf X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIyIF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs ICsrX19maXJzdDIpDQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0 Mik7DQogIHJldHVybiBfX2ZpcnN0MjsNCn0NCg0KDQoNCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Vu YXJ5T3BlcmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlv biBfX3VuYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN Cg0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QsICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgq X19maXJzdCk7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg X091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlv bj4NCl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQs DQogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2Jp bmFyeV9vcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCg0KDQoNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz dWx0KQ0KICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBy ZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNv bnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1 ZSkNCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNs YXNzIF9UcD4NCnZvaWQgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfUHJl ZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9f Zmlyc3QpKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25z dCBfVHAmIF9fbmV3X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f cmVzdWx0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3Zh bHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVz dWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4NCl9P dXRwdXRJdGVyIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3 X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19y ZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19m aXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4NCnZvaWQg Z2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICpfX2ZpcnN0ID0g X19nZW4oKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBj bGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4NCl9PdXRwdXRJdGVyIGdl bmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu ZXJhdG9yIF9fZ2VuKQ0Kew0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9fbiA+ IDA7IC0tX19uLCArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX2dlbigp Ow0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPg0K X091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQp7DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpDQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1 ZSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgKytf X3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj bGFzcyBfUHJlZGljYXRlPg0KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf UHJlZGljYXRlIF9fcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCFf X3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1cm4gX19yZXN1 bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9UcD4NCl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBf X2xhc3QsIF9fdmFsdWUpOw0KICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJz dDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwg X19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4NCl9Gb3J3YXJk SXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19maXJzdCA9IGZpbmRf aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOw0KICBfRm9yd2FyZEl0ZXIg X19pID0gX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g X19maXJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOw0KfQ0K DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw dXRJdGVyLCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf VHAqKQ0Kew0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICpfX3Jl c3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0 KQ0KICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7DQogICAgICBf X3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFs dWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5s aW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykN CnsNCg0KICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K X0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90 YWcpDQp7DQoNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogIHdoaWxlICgr K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICghKCpfX3Jlc3VsdCA9PSAq X19maXJzdCkpDQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBy ZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRwdXRJdGVy IHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAg ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1 bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLA0KICAgICAg ICAgIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h cnlfcHJlZCwgX1RwKikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCg0KICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Ow0K ICAqX19yZXN1bHQgPSBfX3ZhbHVlOw0KICB3aGlsZSAoKytfX2ZpcnN0ICE9 IF9fbGFzdCkNCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9f Zmlyc3QpKSB7DQogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAq KytfX3Jlc3VsdCA9IF9fdmFsdWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jl c3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5l IF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy eV9wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0 cHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICByZXR1cm4gX191bmlxdWVfY29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLA0K ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KX0ZvcndhcmRJ dGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQoNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsN CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCFfX2Jp bmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9 ICpfX2ZpcnN0Ow0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz cyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICByZXR1cm4gX191bmlx dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9w cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg X19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsNCiAg cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C aW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQoNCg0KDQogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9f Zmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7DQogIHJldHVybiB1bmlx dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3By ZWQpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcj4NCnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsNCiAgd2hpbGUgKHRy dWUpDQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0g LS1fX2xhc3QpDQogICAgICByZXR1cm47DQogICAgZWxzZQ0KICAgICAgaXRl cl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LA0KICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp IHsNCiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpDQogICAgaXRlcl9zd2Fw KF9fZmlyc3QrKywgLS1fX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K ICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy ZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QpIHsNCiAgICAtLV9fbGFzdDsNCiAgICAqX19yZXN1 bHQgPSAqX19sYXN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJu IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRl YW5SaW5nRWxlbWVudD4NCl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChf RXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pDQp7DQogIHdo aWxlIChfX24gIT0gMCkgew0KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf X3QgPSBfX20gJSBfX247DQogICAgX19tID0gX19uOw0KICAgIF9fbiA9IF9f dDsNCiAgfQ0KICByZXR1cm4gX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIg X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19t aWRkbGUpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBf X21pZGRsZSkNCiAgICByZXR1cm4gX19maXJzdDsNCg0KICBfRm9yd2FyZEl0 ZXIgX19maXJzdDIgPSBfX21pZGRsZTsNCiAgZG8gew0KICAgIHN3YXAoKl9f Zmlyc3QrKywgKl9fZmlyc3QyKyspOw0KICAgIGlmIChfX2ZpcnN0ID09IF9f bWlkZGxlKQ0KICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsNCiAgfSB3aGls ZSAoX19maXJzdDIgIT0gX19sYXN0KTsNCg0KICBfRm9yd2FyZEl0ZXIgX19u ZXdfbWlkZGxlID0gX19maXJzdDsNCg0KICBfX2ZpcnN0MiA9IF9fbWlkZGxl Ow0KDQogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsNCiAgICBzd2Fw ICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICAg IGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkNCiAgICAgIF9fZmlyc3Qy ID0gX19taWRkbGU7DQogIH0NCg0KICByZXR1cm4gX19uZXdfbWlkZGxlOw0K fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs YXNzIF9EaXN0YW5jZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpDQogICAgcmV0 dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkNCiAgICBy ZXR1cm4gX19maXJzdDsNCg0KICBfX3JldmVyc2UoX19maXJzdCwgX19taWRk bGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICBfX3JldmVy c2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcoKSk7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19t aWRkbGUgIT0gX19sYXN0KQ0KICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f bGFzdCk7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsNCiAgICBf X3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KICBlbHNl IHsNCiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0K ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRl ciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz dGFuY2UgKiwgX1RwICopDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0 Ow0KICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0Ow0KICBf RGlzdGFuY2UgX19sID0gX19uIC0gX19rOw0KICBfUmFuZG9tQWNjZXNzSXRl ciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOw0K DQogIGlmIChfX2sgPT0gMCkNCiAgICByZXR1cm4gX19sYXN0Ow0KDQogIGVs c2UgaWYgKF9fayA9PSBfX2wpIHsNCiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0 LCBfX21pZGRsZSwgX19taWRkbGUpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsN CiAgfQ0KDQogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7DQoN CiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykg ew0KICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0Ow0KICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fcCA9IF9fZmlyc3Q7DQoNCiAgICBpZiAoX19rIDwgX19sKSB7 DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k OyBfX2orKykgew0KICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkg ew0KICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7DQogICAgICAgICAg X19wIC09IF9fbDsNCiAgICAgICAgfQ0KDQogICAgICAgICpfX3AgPSAqKF9f cCArIF9fayk7DQogICAgICAgIF9fcCArPSBfX2s7DQogICAgICB9DQogICAg fQ0KDQogICAgZWxzZSB7DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAw OyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7DQogICAgICAgIGlmIChf X3AgPCBfX2xhc3QgLSBfX2spIHsNCiAgICAgICAgICAqX19wID0gKihfX3Ag KyBfX2spOw0KICAgICAgICAgIF9fcCArPSBfX2s7DQogICAgICAgIH0NCg0K ICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsNCiAgICAgICAgX19wIC09 IF9fbDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAqX19wID0gX190bXA7DQog ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3 YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl X3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy b3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUs IF9fbGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9EaXN0YW5jZT4NCmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVt YmVyKF9EaXN0YW5jZSBfX24pIHsNCg0KICByZXR1cm4gbHJhbmQ0OCgpICUg X19uOw0KDQoNCg0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIGl0ZXJf c3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f Zmlyc3QpICsgMSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQp2b2lk IHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg X1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgaXRl cl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkg KyAxKSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KX091dHB1 dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7DQogIGRpc3Rh bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOw0KICBfRGlzdGFu Y2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOw0KDQogIHdoaWxlIChf X20gPiAwKSB7DQogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmlu ZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0KICAgICAg KytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0tX19yZW1h aW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBfX291dDsN Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091 dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf UmFuZG9tTnVtYmVyR2VuZXJhdG9yPg0KX091dHB1dEl0ZXIgcmFuZG9tX3Nh bXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkN CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmlu ZyA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5p bmcpOw0KICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcp Ow0KDQogIHdoaWxlIChfX20gPiAwKSB7DQogICAgaWYgKF9fcmFuZChfX3Jl bWFpbmluZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0K ICAgICAgKytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0t X19yZW1haW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBf X291dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfUmFuZG9t QWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19u KQ0Kew0KICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9 IF9fbjsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBf X247ICsrX19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2Zp cnN0Ow0KDQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsr X190Ow0KICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190 KTsNCiAgICBpZiAoX19NIDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpf X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291 dCArIF9fbTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAgIGNsYXNzIF9SYW5k b21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCl9SYW5kb21B Y2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0 b3ImIF9fcmFuZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K ICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsN CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr X19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0Ow0K DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX190Ow0K ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsNCiAgICBpZiAoX19N IDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0Ow0KICAgICsr X19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291dCArIF9fbTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyPg0KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyDQpyYW5kb21fc2Ft cGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQ0Kew0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xh c3QgLSBfX291dF9maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAg IGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQppbmxpbmUgX1JhbmRv bUFjY2Vzc0l0ZXINCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0 X2xhc3QsDQogICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im IF9fcmFuZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX3JhbmRvbV9z YW1wbGUoX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsDQogICAgICAgICAgICAgICAgICAg ICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+ DQpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g X19maXJzdDsNCg0KICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICBp ZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQoNCiAg X0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQoNCiAgd2hpbGUgKCsr X19uZXh0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7 DQogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsNCiAgICAgICsrX19m aXJzdDsNCiAgICB9DQoNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNh dGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykNCnsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICB3aGlsZSAodHJ1 ZSkNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3Qp KQ0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJy ZWFrOw0KICAgIC0tX19sYXN0Ow0KICAgIHdoaWxlICh0cnVlKQ0KICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm4gX19maXJz dDsNCiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpDQogICAgICAg IC0tX19sYXN0Ow0KICAgICAgZWxzZQ0KICAgICAgICBicmVhazsNCiAgICBp dGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICArK19fZmlyc3Q7DQog IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9G b3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQoNCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19w cmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRl LCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0 YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQ0Kew0K ICBpZiAoX19sZW4gPT0gMSkNCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0 KSA/IF9fbGFzdCA6IF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRs ZSA9IF9fZmlyc3Q7DQogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7 DQogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o X19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpLA0KICAgICAg ICAgICAgICAgIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgIF9faW5wbGFj ZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbiAtIF9fbGVuIC8gMikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0ZSwN CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19z dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNl IF9fbGVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp DQp7DQogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7DQogICAgX1BvaW50ZXIg X19yZXN1bHQyID0gX19idWZmZXI7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdCA7ICsrX19maXJzdCkNCiAgICAgIGlmIChfX3ByZWQoKl9fZmly c3QpKSB7DQogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsNCiAgICAg ICAgKytfX3Jlc3VsdDE7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAg ICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0 MjsNCiAgICAgIH0NCiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f cmVzdWx0MSk7DQogICAgcmV0dXJuIF9fcmVzdWx0MTsNCiAgfQ0KICBlbHNl IHsNCiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAg IGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7DQogICAgcmV0dXJuIHJv dGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoDQogICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpLA0KICAgICAgICAgICAgICAgICAgICBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgICAgX19zdGFibGVfcGFydGl0aW9uX2Fk YXB0aXZlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwg X19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOw0K ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5s aW5lIF9Gb3J3YXJkSXRlcg0KX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9E aXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRl ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19idWYu c2l6ZSgpID4gMCkNCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJl cXVlc3RlZF9zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsNCiAg ZWxzZQ0KICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9z aXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxl X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlDQogICAg cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X192YWx1ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9U cCBfX3Bpdm90KQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxlICgq X19maXJzdCA8IF9fcGl2b3QpDQogICAgICArK19fZmlyc3Q7DQogICAgLS1f X2xhc3Q7DQogICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQ0KICAgICAg LS1fX2xhc3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAg ICByZXR1cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s YXN0KTsNCiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlPg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIHdoaWxlICh0 cnVlKSB7DQogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp DQogICAgICArK19fZmlyc3Q7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUg KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkNCiAgICAgIC0tX19sYXN0Ow0K ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAgcmV0dXJuIF9f Zmlyc3Q7DQogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg KytfX2ZpcnN0Ow0KICB9DQp9DQoNCmNvbnN0IGludCBfX3N0bF90aHJlc2hv bGQgPSAxNjsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQ0Kew0K ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u ZXh0Ow0KICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7DQogICAgKl9fbGFz dCA9ICpfX25leHQ7DQogICAgX19sYXN0ID0gX19uZXh0Ow0KICAgIC0tX19u ZXh0Ow0KICB9DQogICpfX2xhc3QgPSBfX3ZhbDsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0Ow0KICAtLV9fbmV4dDsN CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsNCiAgICAqX19s YXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAgLS1f X25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4NCmlubGlu ZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFz dDsNCiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsNCiAgICBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7DQogICAgKl9fZmly c3QgPSBfX3ZhbDsNCiAgfQ0KICBlbHNlDQogICAgX191bmd1YXJkZWRfbGlu ZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlPg0KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2Nv bXApDQp7DQogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7DQogIGlmIChfX2NvbXAo X192YWwsICpfX2ZpcnN0KSkgew0KICAgIGNvcHlfYmFja3dhcmQoX19maXJz dCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAqX19maXJzdCA9IF9fdmFs Ow0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0 KF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZvaWQgX19pbnNlcnRpb25fc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpDQp7DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOw0K ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf X2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX2xpbmVhcl9pbnNlcnQoX19m aXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJl Pg0Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUo X19maXJzdCksIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9p bnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgZm9yIChfUmFuZG9tQWNj ZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkN CiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kp KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0K aW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7DQogIF9fdW5n dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4N CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBf X2NvbXApDQp7DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgX191bmd1YXJkZWRf bGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t cGFyZT4NCmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApDQp7DQogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9z b3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0 KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZv aWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PiBfX3N0bF90aHJlc2hvbGQpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOw0KICAgIF9fdW5n dWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hv bGQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19maW5h bF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0g X19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19j b21wKTsNCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0 ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7DQogIH0NCiAg ZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUg X1NpemUgX19sZyhfU2l6ZSBfX24pDQp7DQogIF9TaXplIF9fazsNCiAgZm9y IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsNCiAgcmV0 dXJuIF9fazsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPg0Kdm9pZCBfX2ludHJvc29y dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0K ICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpDQp7 DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xk KSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0KICAgICAgcGFy dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsNCiAgICAgIHJl dHVybjsNCiAgICB9DQogICAgLS1fX2RlcHRoX2xpbWl0Ow0KICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9fdW5ndWFyZGVkX3BhcnRp dGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0 IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAgX19pbnRyb3Nv cnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1p dCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9T aXplLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnRyb3NvcnRfbG9vcChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwNCiAgICAgICAg ICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf X2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf dGhyZXNob2xkKSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0K ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBf X2NvbXApOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhf bGltaXQ7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAg X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwg X19jb21wKSksDQogICAgICAgX19jb21wKTsNCiAgICBfX2ludHJvc29ydF9s b29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf X2NvbXApOw0KICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQp9DQoNCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2b2lkIHNv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg IT0gX19sYXN0KSB7DQogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBf X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m aXJzdCksDQogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f Zmlyc3QpICogMik7DQogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBz b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCAhPSBfX2xh c3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwN CiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkg KiAyLA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp bmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsN CiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyPg0Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9f Zmlyc3QgPCAxNSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0KTsNCiAgICByZXR1cm47DQogIH0NCiAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8g MjsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl KTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp Ow0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg LSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAt IF9fbWlkZGxlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnBsYWNlX3N0YWJs ZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D b21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx NSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNjZXNzSXRl ciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy Ow0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUs IF9fY29tcCk7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg X19sYXN0LCBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAg ICAgICBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF9sb29w KF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9E aXN0YW5jZSBfX3N0ZXBfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fdHdvX3N0 ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0ID0gbWVyZ2Uo X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAg ICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190 d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsNCiAg ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCg0KICBfX3N0ZXBfc2l6 ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9z aXplKTsNCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXpl LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAgX19y ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsDQogICAgICAgICAgY2xh c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV9z b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jl c3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3R3 b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOw0KDQogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsNCiAgICBfX3Jlc3VsdCA9IG1l cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg ICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr IF9fdHdvX3N0ZXAsDQogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwN CiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19maXJzdCAr PSBfX3R3b19zdGVwOw0KICB9DQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0 YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOw0KDQogIG1l cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsDQogICAgICAgIF9fcmVz dWx0LA0KICAgICAgICBfX2NvbXApOw0KfQ0KDQpjb25zdCBpbnQgX19zdGxf Y2h1bmtfc2l6ZSA9IDc7DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZCBfX2NodW5rX2luc2Vy dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQ0Kew0KICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOw0KICAg IF9fZmlyc3QgKz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9D b21wYXJlPg0Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJl IF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j aHVua19zaXplKSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOw0KICAgIF9fZmlyc3Qg Kz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlz dGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5j ZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7 DQogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu Ow0KDQogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3Np emU7DQogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX3N0ZXBfc2l6ZSk7DQoNCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s ZW4pIHsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVwX3NpemUgKj0g MjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJf bGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOw0KICAgIF9fc3RlcF9zaXpl ICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAg ICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3NvcnRfd2l0 aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9E aXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9Qb2ludGVy IF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOw0KDQogIF9EaXN0 YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7DQogIF9fY2h1 bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6 ZSwgX19jb21wKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikg ew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19i dWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAgIF9fc3RlcF9zaXpl ICo9IDI7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVm ZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAg IF9fc3RlcF9zaXplICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rp c3RhbmNlPg0Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZl ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i dWZmZXJfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAt IF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk ZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1ZmZl cl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICAgIF9f c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVy Z2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm ZXIsIChfRGlzdGFuY2UqKTApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSop MCk7DQogIH0NCiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwNCiAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUp LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz IF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCnZvaWQg X19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9D b21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz dCAtIF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1 ZmZlcl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIF9fc3RhYmxl X3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2Uq KTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFz dCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p ZGRsZSAtIF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LA0KICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlz dGFuY2UqKQ0Kew0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz SXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKGJ1Zi5i ZWdpbigpID09IDApDQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly c3QsIF9fbGFzdCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0 aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2 b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9U ZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1Zihf X2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAg ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv bXApOw0KICBlbHNlDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp cnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLA0K ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0K ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KDQoNCg0KICBfX3N0YWJsZV9zb3J0X2F1eChfX2Zp cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90 eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfVHA+DQp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLA0KICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U cCopDQp7DQogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogIGZv ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f bGFzdDsgKytfX2kpDQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkNCiAgICAg IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kp LA0KICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Ow0KICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBw YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BhcnRpYWxfc29y dChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fcGFydGlh bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkNCnsN CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOw0KICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBf X2xhc3Q7ICsrX19pKQ0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3Qp KQ0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf VHAoKl9faSksIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgX19kaXN0YW5j ZV90eXBlKF9fZmlyc3QpKTsNCiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgcGFydGlh bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsDQog ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQog IF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f dmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfRGlzdGFuY2UsDQogICAgICAgICAgY2xhc3MgX1RwPg0KX1JhbmRv bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikNCnsN CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVy biBfX3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJz dCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0 X2xhc3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7 DQogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0K ICB9DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh bF9sYXN0KTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQ0KICAgICAgX19hZGp1 c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLA0KICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0g X19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfVHAoKl9f Zmlyc3QpKTsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9f cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOw0KICByZXR1cm4g X19yZXN1bHRfcmVhbF9sYXN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1Jh bmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwNCiAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jl c3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv bXBhcmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+ DQpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fcmVzdWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopDQp7DQogIGlmIChf X3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1 bHRfbGFzdDsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9s YXN0ID0gX19yZXN1bHRfZmlyc3Q7DQogIHdoaWxlKF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7 DQogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Ow0KICAgICsr X19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KICBt YWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg X19jb21wKTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkNCiAgICAg IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwN CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxf bGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAg X1RwKCpfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN CiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9fcmVzdWx0X2Zp cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7DQogIHJldHVybiBf X3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9m aXJzdCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f cmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0 X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX250aF9lbGVt ZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbnRoLA0KICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmly c3QgPiAzKSB7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAg ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAx KSkpKTsNCiAgICBpZiAoX19jdXQgPD0gX19udGgpDQogICAgICBfX2ZpcnN0 ID0gX19jdXQ7DQogICAgZWxzZQ0KICAgICAgX19sYXN0ID0gX19jdXQ7DQog IH0NCiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUg dm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX250aCwNCiAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KDQogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwg X192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl Pg0Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg X19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsN CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQogICAgICBfX3VuZ3Vh cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0 ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIGlm IChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsNCiAg ICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy ZT4NCmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fbnRoX2Vs ZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f Zmlyc3QpLCBfX2NvbXApOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9G b3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlk ZGxlIDwgX192YWwpIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg LSAxOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsN CiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRl ciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21w LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxl IChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAg IF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOw0KICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsN CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsN CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAg ICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsNCiAgfQ0KICByZXR1cm4g X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0 ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX2xv d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAg ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBlcl9i b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQog IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFu Y2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAgd2hp bGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQog ICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRkbGUs IF9faGFsZik7DQogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAg X19sZW4gPSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0g X19taWRkbGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9f bGVuIC0gX19oYWxmIC0gMTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmly c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9UcD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7 DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9i b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0KICAgICAgICAgICAgICAg ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBl cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w KF9fdmFsLCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQog ICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAgICAr K19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsN CiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmU+DQppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsLCBfX2NvbXAsDQogICAgICAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0K cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fZXF1YWxfcmFu Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSop DQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFuY2UgX19oYWxmOw0KICBf Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsNCg0KICB3 aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4gMTsN CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21pZGRs ZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsNCiAg ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAg ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgICBl bHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkNCiAgICAgIF9fbGVuID0gX19o YWxmOw0KICAgIGVsc2Ugew0KICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsNCiAgICAgIGFkdmFuY2UoX19m aXJzdCwgX19sZW4pOw0KICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsr X19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsNCiAgICAgIHJldHVybiBwYWly PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp Ow0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9G b3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBwYWly PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KZXF1YWxfcmFuZ2UoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0 IF9UcCYgX192YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBy ZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0K ICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz dCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpwYWly PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVhbF9yYW5nZShf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f cmlnaHQ7DQoNCiAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9 IF9fbGVuID4+IDE7DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFk dmFuY2UoX19taWRkbGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19t aWRkbGUsIF9fdmFsKSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0K ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs ZiAtIDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9f bWlkZGxlKSkNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgIGVsc2Ugew0K ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs IF9fdmFsLCBfX2NvbXApOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl bik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwg X19maXJzdCwgX192YWwsIF9fY29tcCk7DQogICAgICByZXR1cm4gcGFpcjxf Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsN CiAgICB9DQogIH0NCiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y d2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl Pg0KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpl cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFz dCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19k aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KYm9vbCBiaW5hcnlfc2VhcmNo KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KICBfRm9yd2FyZEl0ZXIgX19pID0gbG93 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7DQogIHJldHVybiBf X2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZT4NCmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICBj b25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0 LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOw0KICByZXR1cm4gX19pICE9IF9f bGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsNCn0NCg0KDQoNCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MiwNCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ug ew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2Zp cnN0MTsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0 MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQog ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBtZXJnZShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN Cg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq X19maXJzdDEpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQog ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg fQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNvcHkoX19maXJz dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikNCnsNCiAgaWYgKF9f bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYg KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKCpfX21pZGRsZSA8 ICpfX2ZpcnN0KQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxl KTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f c2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4xMSA9 IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVuMSA+ IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgIGFk dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25kX2N1 dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s ZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9fbGVuMiAv IDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAg IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs ICpfX3NlY29uZF9jdXQpOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly c3RfY3V0LCBfX2xlbjExKTsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19uZXdfbWlkZGxlDQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk ZGxlLCBfX3NlY29uZF9jdXQpOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7DQogIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsNCn0NCg0KdGVtcGxhdGUgPGNs YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz cyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s ZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGVuMSA9PSAw IHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYgKF9fbGVuMSAr IF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpf X2ZpcnN0KSkNCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7 DQogICAgcmV0dXJuOw0KICB9DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp cnN0X2N1dCA9IF9fZmlyc3Q7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsNCiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw Ow0KICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7DQogIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsNCiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICBfX3NlY29uZF9jdXQg PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQs IF9fY29tcCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9f bGVuMiAvIDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp Ow0KICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19t aWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7DQogICAgZGlzdGFuY2Uo X19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRp cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2Zp cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3 X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu MTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4y MiwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAg ICAgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jv dGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjEgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkNCnsNCiAgX0JpZGlyZWN0aW9u YWxJdGVyMiBfX2J1ZmZlcl9lbmQ7DQogIGlmIChfX2xlbjEgPiBfX2xlbjIg JiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX2J1ZmZlcl9l bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsNCiAgICBj b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAg IHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3Qp Ow0KICB9DQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7 DQogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwg X19idWZmZXIpOw0KICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJz dCk7DQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVm ZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgcmV0dXJuIHJv dGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcjIsDQogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyMz4NCl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s YXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQ0Kew0KICBpZiAoX19maXJz dDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp cnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIgPT0g X19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19sYXN0 MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoKl9fbGFzdDIgPCAqX19s YXN0MSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAg IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gY29w eV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7DQog ICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKi0t X19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0 MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDI7DQog ICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAg IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPg0K X0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVj dGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjMgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19m aXJzdDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf X2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIg PT0gX19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19s YXN0MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoX19jb21wKCpfX2xh c3QyLCAqX19sYXN0MSkpIHsNCiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDE7DQogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAg cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19y ZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgIH0NCiAgICBlbHNlIHsN CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7DQogICAgICBpZiAoX19m aXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOw0KICAgICAgLS1f X2xhc3QyOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2lu dGVyPg0Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAg ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf X2J1ZmZlcl9zaXplKQ0Kew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBf X2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsN CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwg X19sYXN0LCBfX2ZpcnN0KTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0g X19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9 IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVy Z2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZSB7DQogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAg X0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAgIF9EaXN0YW5jZSBfX2xlbjIy ID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICBfX2xl bjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQs IF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQo X19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgIGRpc3Rh bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgIH0N CiAgICBlbHNlIHsNCiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOw0KICAg ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgICAgX19m aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9f c2Vjb25kX2N1dCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0 X2N1dCwgX19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX25ld19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19m aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9f bGVuMTEsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1 ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShf X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0K ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxl LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAg ICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVy LCBfX2J1ZmZlcl9zaXplKTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Q b2ludGVyLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl bjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAgICAgICAg X1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLA0K ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAg aWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3Np emUpIHsNCiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7DQogICAgbWVyZ2UoX19idWZmZXIs IF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19j b21wKTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6 ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk bGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVyZ2VfYmFja3dhcmQo X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogIH0NCiAg ZWxzZSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0g X19maXJzdDsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0 ID0gX19taWRkbGU7DQogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAg IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19s ZW4yKSB7DQogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFk dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRf Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf Y3V0LCBfX2NvbXApOw0KICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj b25kX2N1dCwgX19sZW4yMik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAg X19sZW4yMiA9IF9fbGVuMiAvIDI7DQogICAgICBhZHZhbmNlKF9fc2Vjb25k X2N1dCwgX19sZW4yMik7DQogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXAp Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVu MTEpOw0KICAgIH0NCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk ZGxlID0NCiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBf X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAg ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19m aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwNCiAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBf X2NvbXApOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBf X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLCBfX2NvbXApOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rp c3RhbmNlPg0KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2Ug X19sZW4xID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9f bGVuMSk7DQogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShf X21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVm ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBf X2xhc3QpOw0KICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg X19sZW4xLCBfX2xlbjIpOw0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwN CiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j ZShfX2J1Zi5zaXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9E aXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2lucGxh Y2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSos DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7DQogIGRpc3RhbmNl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOw0KICBfRGlzdGFuY2UgX19s ZW4yID0gMDsNCiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4y KTsNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIs IF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKF9fYnVmLmJl Z2luKCkgPT0gMCkNCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXAp Ow0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwNCiAgICAgICAgICAgICAg ICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkp LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4NCmlubGluZSB2b2lkIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p ZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQ0KICAg IHJldHVybjsNCiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21w YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m aXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpDQogICAg cmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90 eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksDQogICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KDQoNCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+ DQpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgcmV0dXJuIGZhbHNl Ow0KICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAg KytfX2ZpcnN0MTsNCiAgICBlbHNlDQogICAgICArK19fZmlyc3QxLCArK19f Zmlyc3QyOw0KDQogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOw0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfQ29tcGFyZT4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgIHJldHVybiBmYWxz ZTsNCiAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0Mikp DQogICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJz dDEsICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFz dDI7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIg c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr X19maXJzdDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpf X2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAg ICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg KytfX2ZpcnN0MjsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0 ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBz ZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkN CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChf X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAg ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7DQog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19fZmlyc3Qy Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K ICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVybiBjb3B5KF9f Zmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ dGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICsrX19maXJzdDE7 DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAg KytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3Qy Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3Vs dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29t cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAo X19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICsrX19maXJz dDE7DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg KytfX2ZpcnN0MjsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1 cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091 dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7DQogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jl c3VsdDsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICsr X19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJu IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCn0NCg0KdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg Y2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+ DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0K ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0K ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKytfX2ZpcnN0 MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf T3V0cHV0SXRlcj4NCl9PdXRwdXRJdGVyDQpzZXRfc3ltbWV0cmljX2RpZmZl cmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr X19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNl IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgICArK19f cmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICsrX19maXJzdDE7 DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJuIGNvcHkoX19m aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz dWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLA0KICAgICAgICAg IGNsYXNzIF9Db21wYXJlPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKF9fY29tcCgqX19maXJz dDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAg IH0NCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp KSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19f Zmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogICAgZWxzZSB7 DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9 DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1heF9lbGVt ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f Zmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19yZXN1 bHQgPCAqX19maXJzdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAg cmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtYXhfZWxl bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf X2ZpcnN0Ow0KICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0K ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21w KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAoKytfX2Zp cnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQp DQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHJldHVybiBfX3Jlc3Vs dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X0NvbXBhcmU+DQpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsNCiAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgd2hpbGUgKCsrX19m aXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9f cmVzdWx0KSkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJu IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0 KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBf X2xhc3QpDQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQog IC0tX19pOw0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2lpID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmICgqX19pIDwgKl9f aWkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7 DQogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkNCiAgICAgICAge30N CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZlcnNlKF9f aWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAg aWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9fZmlyc3Qs IF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICB9DQp9 DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz IF9Db21wYXJlPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBf X2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBfX2xhc3Qp DQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQogIC0tX19p Ow0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp ID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9f aWkpKSB7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0 Ow0KICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkNCiAgICAg ICAge30NCiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZl cnNlKF9faWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9 DQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9f Zmlyc3QsIF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0K ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+ DQpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQp7DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg IHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f Zmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICBy ZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAg Zm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7 DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2lpIDwgKl9faSkgew0KICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgIHdoaWxl ICghKCotLV9faiA8ICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsN CiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19pID09IF9f Zmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAg ICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+DQpi b29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVy biBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7 DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICByZXR1cm4g ZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7 KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAg LS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsNCiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7DQogICAgICB3aGls ZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19s YXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19p ID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0 KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KDQoN CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+DQpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2Zp cnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9f bGFzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQ0KICAgIGZv ciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0g X19sYXN0MjsgKytfX2l0ZXIpDQogICAgICBpZiAoKl9fZmlyc3QxID09ICpf X2l0ZXIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9f bGFzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfSW5w dXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lu cHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg KytfX2ZpcnN0MSkNCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQ0KICAgICAg aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQ0KICAgICAgICByZXR1 cm4gX19maXJzdDE7DQogIHJldHVybiBfX2xhc3QxOw0KfQ0KIyAzMzkwICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn by5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3Mg X0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9y X3RhZykNCnsNCiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgcmV0 dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlcjEgX19y ZXN1bHQgPSBfX2xhc3QxOw0KICAgIHdoaWxlICgxKSB7DQogICAgICBfRm9y d2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdA0KICAgICAgICA9IHNlYXJjaChfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KICAgICAgaWYg KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19y ZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBfX25l d19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0Ow0K ICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh cmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0K X0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLA0KICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQ0Kew0K ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAgICByZXR1cm4gX19sYXN0 MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9f bGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAgIF9Gb3J3YXJkSXRlcjEg X19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsNCiAgICAgIGlmIChf X25ld19yZXN1bHQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9fcmVz dWx0Ow0KICAgICAgZWxzZSB7DQogICAgICAgIF9fcmVzdWx0ID0gX19uZXdf cmVzdWx0Ow0KICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsNCiAg ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgIH0NCiAgICB9DQogIH0NCn0NCg0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyMj4NCl9CaWRpcmVjdGlvbmFsSXRlcjENCl9f ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGly ZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsDQogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy YXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2 SXRlcjI7DQoNCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAg X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9f cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihf X2xhc3QyKSwgX19ybGFzdDIpOw0KDQogIGlmIChfX3JyZXN1bHQgPT0gX19y bGFzdDEpDQogICAgcmV0dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp Ow0KICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0Miwg X19sYXN0MikpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl ZGljYXRlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMQ0KX19maW5kX2VuZChfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m aXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwNCiAgICAgICAg ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnLA0KICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0 ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7DQoNCiAgX1Jldkl0ZXIx IF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f Zmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2 SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCg0KICBp ZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQ0KICAgIHJldHVybiBfX2xhc3Qx Ow0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0 ID0gX19ycmVzdWx0LmJhc2UoKTsNCiAgICBhZHZhbmNlKF9fcmVzdWx0LCAt ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsNCiAgICByZXR1cm4gX19y ZXN1bHQ7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIF9Gb3J3YXJk SXRlcjENCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fZmluZF9lbmQo X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLA0KICAgICAg ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwN CiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0MikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg Y2xhc3MgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5 UHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlcjENCmZpbmRfZW5kKF9G b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwN CiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl cjIgX19sYXN0MiwNCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBy ZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwNCiAgICAgICAgICAgICAgICAgICAg X19jb21wKTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmJvb2wgX19pc19oZWFw KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pDQp7 DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7DQogIGZvciAoX0Rpc3RhbmNl IF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsNCiAg ICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQ0K ICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgoX19jaGlsZCAmIDEpID09 IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQogIHJldHVybiB0cnVlOw0K fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4NCmJvb2wg X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TdHJpY3RX ZWFrT3JkZXJpbmcgX19jb21wLA0KICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChf RGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGls ZCkgew0KICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly c3RbX19jaGlsZF0pKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgo X19jaGlsZCAmIDEpID09IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQog IHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXI+DQppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7DQoNCg0KICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3Qs IF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4N CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg ICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7DQoNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19j b21wLCBfX2xhc3QgLSBfX2ZpcnN0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KYm9vbCBpc19zb3J0ZWQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiB0cnVlOw0K DQogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KICBmb3IgKCsr X19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCAr K19fbmV4dCkgew0KICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpDQogICAg ICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0K dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdl YWtPcmRlcmluZz4NCmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX1N0 cmljdFdlYWtPcmRlcmluZyBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRydWU7DQoNCiAgX0Zvcndh cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZvciAoKytfX25leHQ7IF9f bmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7 DQogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpDQogICAgICBy ZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KfQ0K IyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj X3N0cmluZy50Y2MiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0KbmFtZXNw YWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjb25zdCBfQ2hh clQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoNCiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOw0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9S ZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6 ZW9mKF9DaGFyVCkpIC0gMSkgLyA0Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K ICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7DQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdl Ww0KICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVv ZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOw0KDQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0luSXRlcj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAgX1NfY29uc3RydWN0 KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg X19hLA0KICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykN CiAgICAgIHsNCiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9 PSBfQWxsb2MoKSkNCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCku X01fcmVmY29weSgpOw0KDQogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOw0K ICAgICAgICBzaXplX3R5cGUgX19pID0gMDsNCiAgICAgICAgd2hpbGUgKF9f YmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2Yo X0NoYXJUKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX2J1ZltfX2kr K10gPSAqX19iZWc7DQogICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAg IH0NCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwg X19hKTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZk YXRhKCksIF9fYnVmLCBfX2kpOw0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9 IF9faTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgew0KDQoNCg0KICAgICAg ICAgICAgZm9yICg7OykNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N X2xlbmd0aDsNCiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsNCiAgICAgICAg ICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5f TV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAg ICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo KTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg ICAgIGlmIChfX3AgPT0gX19sYXN0KQ0KICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7 DQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAg ICAgICB9DQoNCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAgICAgICAgICBfUmVw KiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2Ep Ow0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhl ci0+X01fcmVmZGF0YSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7DQogICAgICAgICAg ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgICAgICAg X19yID0gX19hbm90aGVyOw0KICAgICAgICAgICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQog ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBf X3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+DQog ICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp dHMsX0FsbG9jPjo6DQogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsDQogICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQogICAgICB7DQog ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5 cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOw0KDQogICAgICAgIGlmIChf X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpDQogICAgICAgICAg cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsNCg0KDQogICAg ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7 DQogICAgICAgIHRyeQ0KICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3It Pl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQ0KICAgICAgICBjYXRj aCguLi4pDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yLT5fTV9kZXN0 cm95KF9fYSk7DQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICB9DQog ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3Ow0KDQogICAgICAgIF9f ci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsN CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIF9DaGFyVCoNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9TX2NvbnN0 cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm IF9fYSkNCiAgICB7DQogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9B bGxvYygpKQ0KICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm Y29weSgpOw0KDQoNCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0 ZShfX24sIF9fYSk7DQogICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAg IGlmIChfX24pDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f ci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7DQogICAgICAgIH0NCiAgICAg IGNhdGNoKC4uLikNCiAgICAgICAgew0KICAgICAgICAgIF9fci0+X01fZGVz dHJveShfX2EpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQogICAg ICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsNCiAgICAgIF9fci0+X01fcmVmZGF0 YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAgICAgIHJldHVybiBf X3ItPl9NX3JlZmRhdGEoKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp DQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf QWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwNCiAgICAgICAgICAg ICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQ0KICAgIHsgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm IF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5 cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQ0K ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNr KF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0 ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQ0K ICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms DQogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxv YyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3Ry Ll9NX2NoZWNrKF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpDQog ICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5n KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs b2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3Ms IF9fcyArIF9fbiwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywg Y29uc3QgX0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z dHJ1Y3QoX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9f YSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBi YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo X19uLCBfX2MsIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg IGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9f ZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkNCiAgICB7IH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5f TV9yZXAoKSkNCiAgICAgICAgew0KDQogICAgICAgICAgYWxsb2NhdG9yX3R5 cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOw0KICAgICAgICAgIF9D aGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9f c3RyLmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgX01fcmVwKCktPl9N X2Rpc3Bvc2UoX19hKTsNCiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsNCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fZGVzdHJveShj b25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkNCiAgICB7DQogICAgICBzaXpl X3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsg MSkgKiBzaXplb2YoX0NoYXJUKTsNCiAgICAgIF9SYXdfYnl0ZXNfYWxsb2Mo X19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp LCBfX3NpemUpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2 b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6X01fbGVha19oYXJkKCkNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkt Pl9NX2lzX3NoYXJlZCgpKQ0KICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7 DQogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX01fbXV0YXRlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9f bGVuMikNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRo aXMtPnNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXpl ID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsNCiAgICAgIGNvbnN0 IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsN CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6 ZSAtIF9fcG9zIC0gX19sZW4xOw0KDQogICAgICBpZiAoX01fcmVwKCktPl9N X2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQ0KICAg ICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRf YWxsb2NhdG9yKCk7DQogICAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf Y3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7DQogICAgICAgICAgdHJ5DQogICAg ICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcykNCiAgICAgICAg ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg X01fZGF0YSgpLCBfX3Bvcyk7DQogICAgICAgICAgICAgIGlmIChfX2hvd19t dWNoKQ0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+ X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0 b3IoKSk7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7DQogICAgICAg ICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7DQogICAgICB9DQogICAg ICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpDQog ICAgICAgIHsNCg0KICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2Rh dGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7DQog ICAgICAgIH0NCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsN CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOw0KICAg ICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7 DQoNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2Vy dmUoc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsNCiAgICAgIGlmIChfX3JlcyA+ IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4 X3NpemUoKSkNCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi YXNpY19zdHJpbmc6OnJlc2VydmUiKTsNCiAgICAgICAgICBhbGxvY2F0b3Jf dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJU KiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhp cy0+c2l6ZSgpKTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShf X2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXApOw0KICAgICAgICB9DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJp bmcmIF9fcykNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xl YWtlZCgpKQ0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7 DQogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAg ICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAg IGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0 b3IoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX190bXAgPSBf TV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsN CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCg0K ICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5n IF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9j YXRvcigpKTsNCiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5f TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAg ICAgKnRoaXMgPSBfX3RtcDI7DQogICAgICAgICAgX19zID0gX190bXAxOw0K ICAgICAgICB9DQogICAgfQ0KIyAzNTYgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6X1JlcCoNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfU19jcmVhdGUoc2l6ZV90 IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykNCiAgICB7DQog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4gX19zdHJpbmdfdHlwZTsNCg0KDQogICAgICBpZiAoX19jYXBhY2l0 eSA+IF9TX21heF9zaXplKQ0KDQoNCg0KICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsNCg0KDQoNCg0K ICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsNCg0KDQogICAgICB2b2lkKiBf X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShf X3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw Ow0KICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAg ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOw0KICAgICAgX19wLT5fTV9sZW5n dGggPSAwOw0KICAgICAgcmV0dXJuIF9fcDsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNv bnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsN CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGgg KyBfX3JlcywgX19hbGxvYyk7DQogICAgICBpZiAoX01fbGVuZ3RoKQ0KICAg ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IHRyYWl0c190 eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9N X2xlbmd0aCk7IH0NCiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsN CiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOw0KICAgICAg cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgaW5saW5lIGJvb2wNCg0KDQoNCg0KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9T X2V4Y2Vzc19zbG9wKHNpemVfdCBfX3MsIHNpemVfdCBfX3IpDQoNCiAgICB7 DQogICAgICByZXR1cm4gMiAqIChfX3MgPD0gMTYgPyAxNiA6IF9fcykgPCBf X3I7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNp emUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICBp ZiAoX19uID4gbWF4X3NpemUoKSkNCiAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7DQogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSA8 IF9fbikNCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19j KTsNCiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkNCiAgICAgICAgdGhp cy0+ZXJhc2UoX19uKTsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAg X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5w dXRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19r MiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAgICAgICBiYXNp Y19zdHJpbmcgX19zKF9fazEsIF9fazIpOw0KICAgICAgICByZXR1cm4gdGhp cy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5f TV9pZW5kKCkpOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9N X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Zvcndh cmRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCiAgICAgICAg c2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOw0KICAgICAgICBzaXpl X3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsNCiAgICAgICAgc2l6 ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFu Y2UoX19rMSwgX19rMikpOw0KDQogICAgICAgIGlmIChfX2RtYXggPD0gX19k bmV3KQ0KICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z dHJpbmc6Ol9NX3JlcGxhY2UiKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb2Zm ID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgICBfTV9tdXRhdGUoX19v ZmYsIF9fZG9sZCwgX19kbmV3KTsNCg0KICAgICAgICBpZiAoX19kbmV3KQ0K ICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9f azEsIF9fazIpOw0KDQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsDQogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg X19uMikNCiAgICB7DQogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j aGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIpLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv czIsIF9fbjIpKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVu ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgIHsNCg0KDQoNCiAg ICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBz aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7DQogICAg ICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0aGlz LT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl KF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBhcHBlbmQoY29uc3QgYmFzaWNf c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u KQ0KICAgIHsNCg0KDQoNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf X3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsNCiAg ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRo aXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9z KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQo X19wb3MsIF9fbikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBw ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgIHsN CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsN CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChzaXplX3R5cGUg X19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xl biA9IF9fbiArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRo aXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4p Ow0KICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f aWVuZCgpLCBfX24sIF9fYyk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQog ICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m IF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6 ZV90eXBlOw0KICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjps ZW5ndGgoX19saHMpOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAg ICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOw0KICAg ICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsNCiAgICAg IF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBf X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4mIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f c2l6ZV90eXBlOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAgICAg IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOw0KICAgICAgX19z dHIucmVzZXJ2ZShfX2xlbiArIDEpOw0KICAgICAgX19zdHIuYXBwZW5kKF9f c2l6ZV90eXBlKDEpLCBfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19y aHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46Og0KICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgew0KICAg ICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsNCiAgICAgIHNpemVf dHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICBpZiAo bWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQ0K ICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy ZXBsYWNlIik7DQogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19u Mik7DQoNCiAgICAgIGlmIChfX24yKQ0KICAgICAgICB0cmFpdHNfdHlwZTo6 YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsNCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6DQogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIGlmIChfX3Bv cyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu Z2UoImJhc2ljX3N0cmluZzo6Y29weSIpOw0KDQogICAgICBpZiAoX19uID4g dGhpcy0+c2l6ZSgpIC0gX19wb3MpDQogICAgICAgIF9fbiA9IHRoaXMtPnNp emUoKSAtIF9fcG9zOw0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3Ms IF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOw0KDQogICAgICByZXR1cm4gX19u Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Bv czsNCiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0K ICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z KQ0KICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg X194cG9zLCBfX3MsIF9fbikgPT0gMCkNCiAgICAgICAgICByZXR1cm4gX194 cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5cGUgX19yZXQgPSBu cG9zOw0KICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQ0KICAgICAgICB7DQog ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQog ICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOw0KICAg ICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQo X19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsNCiAgICAgICAgICBpZiAoX19w KQ0KICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7DQogICAgICAg IH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAg IHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQog ICAgICBpZiAoX19uIDw9IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAg IF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uICxfX3Bvcyk7DQogICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQogICAg ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHRy YWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikg PT0gMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAgICAg ICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsNCiAgICAg ICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19z aXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSkNCiAgICAg ICAgew0KICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOw0K ICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykNCiAgICAgICAgICAgIF9f eHBvcyA9IF9fcG9zOw0KDQogICAgICAgICAgZm9yICgrK19feHBvczsgX194 cG9zLS0gPiAwOyApDQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx KF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQ0KICAgICAgICAgICAgICByZXR1 cm4gX194cG9zOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIGZvciAoOyBfX24g JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpDQogICAgICAgIHsN CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpm aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsNCiAgICAgICAgICBp ZiAoX19wKQ0KICAgICAgICAgICAgcmV0dXJuIF9fcG9zOw0KICAgICAgICB9 DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQog ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAg ICAgaWYgKC0tX19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUg PSBfX3BvczsNCiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2Rh dGEoKVtfX3NpemVdKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAh PSAwKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfZmlyc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90IF9feHBv cyA9IF9fcG9zOw0KICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlz LT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBpZiAoIXRyYWl0c190eXBl OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpDQogICAgICAg ICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0 X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQog ICAgew0KICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOw0KICAgICAgZm9y ICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAg IGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2Mp KQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1cm4gbnBv czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg ZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z aXplICYmIF9fbikNCiAgICAgICAgew0KICAgICAgICAgIGlmICgtLV9fc2l6 ZSA+IF9fcG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAg ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0p KQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAg ICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0K ICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Og0KICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K ICAgICAgICB7DQogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpDQog ICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAgICAgICBkbw0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl cShfTV9kYXRhKClbX19zaXplXSwgX19jKSkNCiAgICAgICAgICAgICAgICBy ZXR1cm4gX19zaXplOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxl IChfX3NpemUtLSk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21w YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9f b3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1p bihfX3NpemUgLSBfX3BvcywgX19uKTsNCiAgICAgIHNpemVfdHlwZSBfX2xl biA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIu ZGF0YSgpLCBfX2xlbik7DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19y ID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21wYXJl KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBf X29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zMSA+IF9f c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQ0KICAgICAgICBfX3Rocm93X291 dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7DQoNCiAgICAg IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19u MSk7DQogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAt IF9fcG9zMiwgX19uMik7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o X19yc2l6ZSwgX19yb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRyYWl0c190 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3Bv czIsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf X3JzaXplIC0gX19yb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0N Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGludCBfX3IgPSB0 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsN CiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFp dHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICByZXR1cm4gX19yOw0KICAg IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2lj X3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hh clQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0K ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj b21wYXJlIik7DQoNCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRz X3R5cGU6Omxlbmd0aChfX3MpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUg PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf X3MsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf X3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0cmlu ZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFyZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f cywNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdA0KICAgIHsN CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg ICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6 ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp LCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6 ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNf dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7 DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f b3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+ DQogICAgdm9pZA0KICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLA0KICAgICAg ICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6 c2l6ZV90eXBlIF9fYnVmc2l6KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgc2l6 ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVf dHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsN CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i eXRlcyk7DQogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOw0KICAg IH0NCn0NCiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jY3R5cGUuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMNCiMgMSAiL3Vzci9p bmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMw0KIyA1 NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NjdHlwZS5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6aXNh bG51bTsNCiAgdXNpbmcgOjppc2FscGhhOw0KICB1c2luZyA6OmlzY250cmw7 DQogIHVzaW5nIDo6aXNkaWdpdDsNCiAgdXNpbmcgOjppc2dyYXBoOw0KICB1 c2luZyA6OmlzbG93ZXI7DQogIHVzaW5nIDo6aXNwcmludDsNCiAgdXNpbmcg Ojppc3B1bmN0Ow0KICB1c2luZyA6Omlzc3BhY2U7DQogIHVzaW5nIDo6aXN1 cHBlcjsNCiAgdXNpbmcgOjppc3hkaWdpdDsNCiAgdXNpbmcgOjp0b2xvd2Vy Ow0KICB1c2luZyA6OnRvdXBwZXI7DQp9DQojIDQ0ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmlu ZXMuaCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0 ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0K DQogIHZvaWQNCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lk DQogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAg X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv aWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsN Cg0KICB2b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3Io Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29m X3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93 X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2 b2lkDQogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1 cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNDUgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCg0K bmFtZXNwYWNlIHN0ZA0Kew0KIyA1NiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY2xhc3MgdmVj dG9yOw0KICBjbGFzcyBsb2NhbGU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3NwYWNlKF9DaGFy VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg aW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxl Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu ZSBib29sDQogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v bA0KICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg ICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNw dW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzeGRpZ2l0 KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hh clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZ3JhcGgoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBwZXIoX0NoYXJULCBjb25z dCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog ICAgaW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsNCg0KDQoNCiAgY2xhc3MgY3R5cGVfYmFzZTsNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlOw0KICB0ZW1w bGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGVfYnluYW1lOw0KDQoN CiAgY2xhc3MgY29kZWN2dF9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+ DQogICAgY2xhc3MgY29kZWN2dDsNCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2Rl Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47DQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5h bWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsNCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9 IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgbnVt X2dldDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg Y2xhc3MgbnVtX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj bGFzcyBudW1wdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj bGFzcyBudW1wdW5jdF9ieW5hbWU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgY2xhc3MgY29sbGF0ZTsNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPiBjbGFzcw0KICAgIGNvbGxhdGVfYnluYW1lOw0KDQoN CiAgY2xhc3MgdGltZV9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D aGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3Mg dGltZV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0K ICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsNCg0KDQogIGNsYXNzIG1vbmV5 X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg Y2xhc3MgbW9uZXlfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQ+ID4NCiAgICBjbGFzcyBtb25leV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1v bmV5cHVuY3Q7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf SW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOw0K DQoNCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzOw0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOw0K DQoNCiAgY2xhc3MgbG9jYWxlDQogIHsNCiAgcHVibGljOg0KDQogICAgdHlw ZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7DQoNCg0KICAgIGNsYXNzIGZh Y2V0Ow0KICAgIGNsYXNzIGlkOw0KICAgIGNsYXNzIF9JbXBsOw0KDQogICAg ZnJpZW5kIGNsYXNzIGZhY2V0Ow0KICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsN Cg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVu ZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl Jik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBm cmllbmQgYm9vbA0KICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRo cm93KCk7DQoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUg PSAwOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8 IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8 PCAxOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg PDwgMjsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8 IDM7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwg PDwgNDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAx TCA8PCA1Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29s bGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVz c2FnZXMpOw0KDQoNCiAgICBsb2NhbGUoKSB0aHJvdygpOw0KDQogICAgbG9j YWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsNCg0KICAgIGV4 cGxpY2l0DQogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOw0K DQogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFy KiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsNCg0KICAgIGxvY2FsZShjb25zdCBs b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkg X19jYXQpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAg ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2Yp Ow0KDQogICAgfmxvY2FsZSgpIHRocm93KCk7DQoNCiAgICBjb25zdCBsb2Nh bGUmDQogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhy b3coKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg IGxvY2FsZQ0KICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIp Ow0KDQoNCiAgICBzdHJpbmcNCiAgICBuYW1lKCkgY29uc3Q7DQoNCiAgICBi b29sDQogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNv bnN0IHRocm93ICgpOw0KDQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRv ciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkNCiAg ICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9DQoN CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgICAgYm9vbA0KICAgICAgb3BlcmF0 b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fczEsDQogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7DQoNCg0K ICAgIHN0YXRpYyBsb2NhbGUNCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7 DQoNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJg0KICAgIGNsYXNzaWMoKTsN Cg0KICBwcml2YXRlOg0KDQogICAgX0ltcGwqIF9NX2ltcGw7DQoNCg0KICAg IHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsNCg0KDQogICAgc3RhdGljIF9J bXBsKiBfU19nbG9iYWw7DQoNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9T X251bV9jYXRlZ29yaWVzID0gNjsNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90 IF9TX251bV9mYWNldHMgPSAxMzsNCg0KICAgIGV4cGxpY2l0DQogICAgbG9j YWxlKF9JbXBsKikgdGhyb3coKTsNCg0KICAgIHN0YXRpYyBpbmxpbmUgdm9p ZA0KICAgIF9TX2luaXRpYWxpemUoKQ0KICAgIHsgaWYgKCFfU19jbGFzc2lj KSBjbGFzc2ljKCk7IH0NCg0KICAgIHN0YXRpYyBjYXRlZ29yeQ0KICAgIF9T X25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7DQoNCiAgICB2b2lkDQog ICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxv Y2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsNCiAgfTsNCg0KDQoNCiAg Y2xhc3MgbG9jYWxlOjpfSW1wbA0KICB7DQogIHB1YmxpYzoNCg0KICAgIHR5 cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBfX3Zl Y19mYWNldDsNCg0KDQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBm cmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsNCg0KICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmDQog ICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQoNCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgYm9vbA0KICAgICAg aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7DQoNCiAgcHJpdmF0 ZToNCg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KICAgIF9fdmVjX2Zh Y2V0KiBfTV9mYWNldHM7DQogICAgc3RyaW5nIF9NX25hbWVzW19TX251bV9j YXRlZ29yaWVzXTsNCiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOw0KICAg IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtd Ow0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9u dW1lcmljW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0 IF9TX2lkX2NvbGxhdGVbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp ZCogY29uc3QgX1NfaWRfdGltZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh bGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOw0KICAgIHN0YXRpYyBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOw0KICAg IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFj ZXRfY2F0ZWdvcmllc1tdOw0KDQogICAgaW5saW5lIHZvaWQNCiAgICBfTV9h ZGRfcmVmZXJlbmNlKCkgdGhyb3coKQ0KICAgIHsgKytfTV9yZWZlcmVuY2Vz OyB9DQoNCiAgICBpbmxpbmUgdm9pZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVu Y2UoKSB0aHJvdygpDQogICAgew0KICAgICAgaWYgKF9NX3JlZmVyZW5jZXMt LSA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg ICB7IGRlbGV0ZSB0aGlzOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg ICAgICAgICAgeyB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBfSW1wbChj b25zdCBfSW1wbCYsIHNpemVfdCk7DQogICAgX0ltcGwoc3RyaW5nIF9fbmFt ZSwgc2l6ZV90KTsNCiAgIH5fSW1wbCgpIHRocm93KCk7DQoNCiAgICBib29s DQogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkNCiAgICB7DQogICAgICBib29s IF9fcmV0ID0gdHJ1ZTsNCiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg X1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpDQogICAgICAgIF9fcmV0ICY9 IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kgKyAxXTsNCiAgICAgIHJldHVy biBfX3JldDsNCiAgICB9DQogICAgdm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0 ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsNCg0KICAgIHZvaWQN CiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3Qg bG9jYWxlOjppZCogY29uc3QqKTsNCg0KICAgIHZvaWQNCiAgICBfTV9yZXBs YWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOw0K DQogICAgdm9pZA0KICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxl OjppZCosIGZhY2V0Kik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgX01faW5pdF9mYWNldChf RmFjZXQqIF9fZmFjZXQpDQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G YWNldDo6aWQsIF9fZmFjZXQpOyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZhY2V0Pg0KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2Fs ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpDQogICAgew0KICAgICAgX01faW1w bCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsNCiAgICAgIF9N X2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7DQog ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdv cmllczsgKytfX2kpDQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0g PSAiKiI7DQogICAgfQ0KDQoNCiAgY2xhc3MgbG9jYWxlOjpmYWNldA0KICB7 DQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBmcmllbmQgY2xhc3Mg bG9jYWxlOjpfSW1wbDsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQN CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsNCg0KICAg IHZpcnR1YWwNCiAgICB+ZmFjZXQoKSB7IH07DQoNCiAgICBzdGF0aWMgdm9p ZA0KICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2Ms IGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgICBzdGF0aWMgdm9pZA0KICAgIF9T X2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsNCg0KICBw cml2YXRlOg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KDQogICAgdm9p ZA0KICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAgdm9p ZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAg ZmFjZXQoY29uc3QgZmFjZXQmKTsNCg0KICAgIHZvaWQNCiAgICBvcGVyYXRv cj0oY29uc3QgZmFjZXQmKTsNCiAgfTsNCg0KDQoNCiAgY2xhc3MgbG9jYWxl OjppZA0KICB7DQogIHByaXZhdGU6DQogICAgZnJpZW5kIGNsYXNzIGxvY2Fs ZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsNCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgY29uc3QgX0Zh Y2V0Jg0KICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOw0KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7DQoNCg0K DQoNCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsNCg0KDQogICAgc3Rh dGljIHNpemVfdCBfU19oaWdod2F0ZXI7DQoNCiAgICB2b2lkDQogICAgb3Bl cmF0b3I9KGNvbnN0IGlkJik7DQoNCiAgICBpZChjb25zdCBpZCYpOw0KDQog IHB1YmxpYzoNCg0KDQoNCiAgICBpZCgpIHsgfQ0KICB9Ow0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBjb25zdCBfRmFjZXQmDQogICAg dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7DQp9DQojIDQ0ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9pb3NfYmFzZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMNCg0KbmFtZXNwYWNl IHN0ZA0Kew0KDQoNCg0KDQogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lv c19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9z X0ZtdGZsYWdzDQogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv c19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh dGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg fQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfChfSW9z X0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJu IF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGlj X2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdz DQogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFn cyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8 aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlu bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFn cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g X19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl cmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i KQ0KICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUg X0lvc19GbXRmbGFncw0KICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9f YSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe IF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9y fihfSW9zX0ZtdGZsYWdzIF9fYSkNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn cyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9z X09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07 DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3ImKF9Jb3Nf T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUN CiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2Rl IF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp bnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5s aW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUg X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVu bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+ KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0 b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv c19PcGVubW9kZQ0KICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwg X0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9f YjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yXj0o X0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyBy ZXR1cm4gX19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Bl bm1vZGUNCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQ0KICB7IHJl dHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9 DQoNCg0KICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2Vu ZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBv cGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikN CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19h KSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lv c19Jb3N0YXRlDQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9z X0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGlj X2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0K DQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JeKF9Jb3NfSW9z dGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3Nf SW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxp bnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVy YXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0K ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv c19Jb3N0YXRlDQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9J b3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg fQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JePShfSW9z X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g X19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0K ICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkNCiAgeyByZXR1cm4gX0lv c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCiAgZW51 bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAx NiB9Ow0KDQoNCiAgY2xhc3MgaW9zX2Jhc2UNCiAgew0KICBwdWJsaWM6DQoN Cg0KICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uDQogICAg ew0KICAgIHB1YmxpYzoNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgZmFp bHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOw0KDQogICAgICB2 aXJ0dWFsDQogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7DQoNCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcioNCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygp Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGVudW0geyBfTV9idWZzaXplID0g MjU2IH07DQogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07DQoNCiAg ICB9Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7 DQoNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7DQogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf U19kZWMpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7DQogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19o ZXgpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7DQogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1NfbGVmdCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOw0KICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19y aWdodCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7DQogICAg c3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsNCiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3No b3dwb2ludCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3Mg PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7DQogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19za2lwd3MpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1 bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOw0K ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFn cyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsNCiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFn czo6X1NfYWRqdXN0ZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZp ZWxkKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9 IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsNCg0KDQog ICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsNCiAgICBzdGF0aWMg Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf U19iYWRiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9 IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7DQogICAgc3RhdGlj IGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6 Ol9TX2ZhaWxiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2Ri aXQgPSBpb3N0YXRlKDApOw0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1v ZGUgb3Blbm1vZGU7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9 IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOw0KICAgIHN0YXRpYyBj b25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf YXRlKTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Bl bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7DQogICAgc3RhdGljIGNvbnN0 IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsN CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19p b3NfZmxhZ3M6Ol9TX291dCk7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2Rl IHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsNCg0K DQogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsNCiAgICBzdGF0 aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOw0KICAgIHN0YXRp YyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7DQogICAgc3RhdGlj IGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsNCiMgMjE2ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o IiAzDQogICAgZW51bSBldmVudA0KICAgIHsNCiAgICAgIGVyYXNlX2V2ZW50 LA0KICAgICAgaW1idWVfZXZlbnQsDQogICAgICBjb3B5Zm10X2V2ZW50DQog ICAgfTsNCg0KICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAo ZXZlbnQsIGlvc19iYXNlJiwgaW50KTsNCg0KICAgIHZvaWQNCiAgICByZWdp c3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRl eCk7DQoNCiAgcHJvdGVjdGVkOg0KDQogICAgc3RyZWFtc2l6ZSBfTV9wcmVj aXNpb247DQogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsNCiAgICBmbXRmbGFn cyBfTV9mbGFnczsNCg0KDQoNCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QN CiAgICB7DQoNCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0Ow0KICAg ICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOw0KICAgICAgaW50 IF9NX2luZGV4Ow0KICAgICAgaW50IF9NX3JlZmNvdW50Ow0KDQogICAgICBf Q2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwg aW50IF9faW5kZXgsDQogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tf bGlzdCogX19jYikNCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19m biksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0NCg0K ICAgICAgdm9pZA0KICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9y ZWZjb3VudDsgfQ0KDQogICAgICBpbnQNCiAgICAgIF9NX3JlbW92ZV9yZWZl cmVuY2UoKSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9DQogICAgfTsNCg0K ICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOw0KDQogICAgdm9p ZA0KICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7 DQoNCiAgICB2b2lkDQogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7 DQoNCg0KICAgIHN0cnVjdCBfV29yZHMNCiAgICB7DQogICAgICB2b2lkKiBf TV9wd29yZDsNCiAgICAgIGxvbmcgX01faXdvcmQ7DQogICAgfTsNCg0KICAg IHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4Ow0KICAgIF9X b3JkcyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsNCiAgICBfV29y ZHMgX01fZHVtbXk7DQogICAgX1dvcmRzKiBfTV93b3JkczsNCiAgICBpbnQg X01fd29yZF9saW1pdDsNCg0KICAgIF9Xb3JkcyYNCiAgICBfTV9ncm93X3dv cmRzKGludCBfX2luZGV4KTsNCg0KDQogICAgbG9jYWxlIF9NX2lvc19sb2Nh bGU7DQoNCiAgICB2b2lkDQogICAgX01faW5pdCgpOw0KDQogIHB1YmxpYzoN Cg0KDQoNCg0KDQogICAgY2xhc3MgSW5pdA0KICAgIHsNCiAgICAgIGZyaWVu ZCBjbGFzcyBpb3NfYmFzZTsNCiAgICBwdWJsaWM6DQogICAgICBJbml0KCk7 DQogICAgICB+SW5pdCgpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg X1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7DQoNCiAgICAgIHN0YXRpYyB2 b2lkDQogICAgICBfU19pb3NfZGVzdHJveSgpOw0KDQogICAgcHJpdmF0ZToN CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsNCiAgICAgIHN0 YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOw0KICAgIH07DQoNCg0K ICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZsYWdzKCkgY29uc3QgeyByZXR1 cm4gX01fZmxhZ3M7IH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZs YWdzKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3Mg X19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsN CiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgZm10 ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAg ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdz IHw9IF9fZm10Zmw7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQog ICAgaW5saW5lIGZtdGZsYWdzDQogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZs LCBmbXRmbGFncyBfX21hc2spDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19v bGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7DQog ICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7DQogICAgICBy ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQNCiAgICB1 bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7 IH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKCkg Y29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9DQoNCiAgICBpbmxpbmUg c3RyZWFtc2l6ZQ0KICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykN CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9u Ow0KICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOw0KICAgICAgcmV0dXJu IF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAg d2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQ0KDQogICAgaW5s aW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkN CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7DQog ICAgICBfTV93aWR0aCA9IF9fd2lkZTsNCiAgICAgIHJldHVybiBfX29sZDsN CiAgICB9DQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIHN5bmNfd2l0aF9zdGRp byhib29sIF9fc3luYyA9IHRydWUpOw0KDQoNCiAgICBsb2NhbGUNCiAgICBp bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgIGlubGluZSBsb2Nh bGUNCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxl OyB9DQoNCg0KICAgIHN0YXRpYyBpbnQNCiAgICB4YWxsb2MoKSB0aHJvdygp Ow0KDQogICAgaW5saW5lIGxvbmcmDQogICAgaXdvcmQoaW50IF9faXgpDQog ICAgew0KICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf bGltaXQpDQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19f aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dv cmQuX01faXdvcmQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQqJg0KICAg IHB3b3JkKGludCBfX2l4KQ0KICAgIHsNCiAgICAgIF9Xb3JkcyYgX193b3Jk ID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQ0KICAgICAgICAgICAgICAgICAg ICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7 DQogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOw0KICAgIH0NCg0KDQog ICAgfmlvc19iYXNlKCk7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGlvc19iYXNl KCk7DQoNCg0KICBwcml2YXRlOg0KICAgIGlvc19iYXNlKGNvbnN0IGlvc19i YXNlJik7DQoNCiAgICBpb3NfYmFzZSYNCiAgICBvcGVyYXRvcj0oY29uc3Qg aW9zX2Jhc2UmKTsNCg0KICB9Ow0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jh c2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vYm9vbGFscGhh KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlv c19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0N Cg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3diYXNlKGlvc19iYXNlJiBf X2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jh c2UpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z X2Jhc2UmDQogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsNCiAgICBy ZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBz aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7 DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2hvd3BvaW50KGlv c19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19i YXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0K ICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFz ZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsN CiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNl Jg0KICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9f YmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOw0KICAgIHJldHVybiBf X2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNraXB3cyhp b3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnNraXB3cyk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlu bGluZSBpb3NfYmFzZSYNCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkN CiAgew0KICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7DQog ICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYN CiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19i YXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3VwcGVyY2Fz ZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihp b3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9 DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICB1bml0YnVmKGlvc19iYXNlJiBf X2Jhc2UpDQogIHsNCiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRi dWYpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlv c19iYXNlJg0KICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K ICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAgICAg cmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K ICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZp ZWxkKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp b3NfYmFzZSYNCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3Rm aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp b3NfYmFzZSYNCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVz dGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxp bmUgaW9zX2Jhc2UmDQogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2Vm aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp b3NfYmFzZSYNCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxk KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i YXNlJg0KICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOw0K ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3NfYmFz ZSYNCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQp Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jh c2UmDQogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6 ZmxvYXRmaWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQp9DQoj IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMw0KIyAzOCAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVh bWJ1Zi5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgi IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN CiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQy ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf c3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQzICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFt YnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg ICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz PiYgX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAg ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni b3V0KTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYNCiAgICB7 DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBv c190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRl ZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9f c3RyZWFtYnVmX3R5cGU7DQoNCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19p b3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xh c3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAg ICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJh aXRzX3R5cGU+Ow0KICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRl cmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQg Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190 eXBlPjsNCg0KICAgICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29w eV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5 cGU+JiBfX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQp Ow0KDQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCg0KICAgICAgY2hhcl90 eXBlKiBfTV9idWY7DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemU7 DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemVfb3B0Ow0KDQoNCg0K ICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsNCg0KDQoNCg0KDQoNCiAgICAg IGNoYXJfdHlwZSogX01faW5fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfTV9p bl9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsNCiAgICAgIGNo YXJfdHlwZSogX01fb3V0X2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0 X2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsNCg0KDQogICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsNCg0KDQogICAgICBsb2Nh bGUgX01fYnVmX2xvY2FsZTsNCg0KDQogICAgICBib29sIF9NX2J1Zl9sb2Nh bGVfaW5pdDsNCg0KDQoNCg0KDQoNCiAgICAgIGludF90eXBlIF9NX3BiYWNr X3NpemU7DQogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOw0KICAgICAgY2hh cl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsNCiAgICAgIGNoYXJfdHlwZSog X01fcGJhY2tfZW5kX3NhdmU7DQogICAgICBib29sIF9NX3BiYWNrX2luaXQ7 DQoNCg0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgp DQogICAgICB7DQogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkNCiAgICAg ICAgICB7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9l bmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2xlbiA9 IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOw0KICAgICAgICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOw0K ICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7DQog ICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsNCiAg ICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9w YmFjayArIF9fbGVuKTsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0 cnVlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAgdm9p ZA0KICAgICAgX01fcGJhY2tfZGVzdHJveSgpDQogICAgICB7DQogICAgICAg IGlmIChfTV9wYmFja19pbml0KQ0KICAgICAgICAgIHsNCg0KICAgICAgICAg ICAgaW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7 DQoNCg0KICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0gMDsNCiAg ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0g X01fcGJhY2s7DQogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0g X01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7DQogICAgICAgICAgICBpZiAo X19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQ0KICAgICAgICAgICAgICBfX29m Zl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47DQoNCiAgICAgICAg ICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9f b2ZmX2N1ciwNCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5k X3NhdmUgKyBfX29mZl9lbmQpOw0KICAgICAgICAgICAgX01fcGJhY2tfY3Vy X3NhdmUgPSBfX251bGw7DQogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2 ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxz ZTsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQogICAgICB2b2lkDQog ICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsNCiAgICAgICAg X01faW5fY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBf TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsN CiAgICAgIH0NCiMgMTkzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAgIHZvaWQNCiAg ICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog ICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7DQoNCiAgICAgICAg X01fb3V0X2N1ciArPSBfX247DQogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBf TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19uOw0K ICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpDQogICAgICAg ICAgew0KICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7DQoN CiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgICAgICAgX01f aW5fZW5kICs9IF9fbjsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQoN CiAgICAgIG9mZl90eXBlDQogICAgICBfTV9vdXRfYnVmX3NpemUoKQ0KICAg ICAgew0KICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7DQogICAgICAgIGlm IChfTV9vdXRfY3VyKQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgaWYg KF9NX291dF9iZWcgPT0gX01fYnVmKQ0KICAgICAgICAgICAgICBfX3JldCA9 IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7DQoNCiAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRf ZW5kIC0gX01fb3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVy biBfX3JldDsNCiAgICAgIH0NCiMgMjM2ICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAg IHZvaWQNCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpDQogICAg ICB7DQogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAg ICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7DQog ICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAg ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsNCiAgICAgIH0NCg0KICAg ICAgdm9pZA0KICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9f b2ZmKQ0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9k ZSAmIGlvc19iYXNlOjppbjsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf TV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAgaWYgKF9fdGVzdGlu KQ0KICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1 ZiArIF9fb2ZmKTsNCiAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAg ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOw0KICAgICAg fQ0KDQogICAgICBib29sDQogICAgICBfTV9pc19pbmRldGVybWluYXRlKHZv aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsNCg0K ICAgICAgICBpZiAoX01fYnVmKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAg IGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAgICAgICAgICAgICBf X3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09 IF9NX2luX2VuZDsNCiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jh c2U6Om91dCkNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09 IF9NX291dF9jdXIgJiYgX01fb3V0X2N1ciA9PSBfTV9vdXRfZW5kOw0KICAg ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQog IHB1YmxpYzoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19zdHJlYW1i dWYoKQ0KICAgICAgew0KICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNl Ow0KICAgICAgICBfTV9idWZfc2l6ZSA9IDA7DQogICAgICAgIF9NX2J1Zl9z aXplX29wdCA9IDA7DQogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Bl bm1vZGUoMCk7DQogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNl Ow0KICAgICAgfQ0KDQoNCiAgICAgIGxvY2FsZQ0KICAgICAgcHViaW1idWUo Y29uc3QgbG9jYWxlICZfX2xvYykNCiAgICAgIHsNCiAgICAgICAgbG9jYWxl IF9fdG1wKHRoaXMtPmdldGxvYygpKTsNCiAgICAgICAgdGhpcy0+aW1idWUo X19sb2MpOw0KICAgICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAg ICAgIGxvY2FsZQ0KICAgICAgZ2V0bG9jKCkgY29uc3QNCiAgICAgIHsNCiAg ICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkNCiAgICAgICAgICByZXR1 cm4gX01fYnVmX2xvY2FsZTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJl dHVybiBsb2NhbGUoKTsNCiAgICAgIH0NCg0KDQogICAgICBfX3N0cmVhbWJ1 Zl90eXBlKg0KICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms IF9fbik7IH0NCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtvZmYo b2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LA0KICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0dXJuIHRo aXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9DQoNCiAgICAg IHBvc190eXBlDQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsDQog ICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4g dGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9DQoNCiAgICAgIGludA0K ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQ0KDQoN Cg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAgaW5fYXZhaWwoKQ0KICAgICAg ew0KICAgICAgICBzdHJlYW1zaXplIF9fcmV0Ow0KICAgICAgICBpZiAoX01f aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICB7 DQogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkNCiAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBf TV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAg ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0g X01fcGJhY2s7DQogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVu IC0gX19wYmFja19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAg IGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0g dGhpcy0+Z3B0cigpOw0KICAgICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAg ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7DQogICAgICAgIHJl dHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAg IHNuZXh0YygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICByZXR1cm4gKHRoaXMtPnNi dW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsNCiAg ICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQog ICAgICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAg ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBf TV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsNCiAgICAg ICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7 DQogICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3Ry ZWFtc2l6ZQ0KICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp emUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19u KTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFja2MoY2hh cl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRj KCk7DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlw ZSBfX2MpOw0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBzcHV0bihjb25z dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl dHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90ZWN0 ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYo X19udWxsKSwgX01fYnVmX3NpemUoMCksDQogICAgICBfTV9idWZfc2l6ZV9v cHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDEwMjQpKSwgX01fYnVmX3VuaWZp ZWQoZmFsc2UpLA0KICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCks IF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwN CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5t b2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksDQogICAgICBfTV9i dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9w YmFjayhfX251bGwpLA0KICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxs KSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChm YWxzZSkNCiAgICAgIHsgfQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAg IGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9DQoNCiAgICAg IGNoYXJfdHlwZSoNCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9p bl9jdXI7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgZWdwdHIoKSBj b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAg ICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9DQoNCiAg ICAgIHZvaWQNCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJf dHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpDQogICAgICB7DQog ICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsNCiAgICAgICAgX01faW5fY3Vy ID0gX19nbmV4dDsNCiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOw0KICAg ICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcg JiYgX19nbmV4dCAmJiBfX2dlbmQpDQogICAgICAgICAgX01fbW9kZSA9IF9N X21vZGUgfCBpb3NfYmFzZTo6aW47DQogICAgICB9DQoNCg0KICAgICAgY2hh cl90eXBlKg0KICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf YmVnOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIHBwdHIoKSBjb25z dCB7IHJldHVybiBfTV9vdXRfY3VyOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoN CiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQ0K DQogICAgICB2b2lkDQogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9j dXIgKz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHAoY2hhcl90 eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQ0KICAgICAgew0KICAg ICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsNCiAgICAg ICAgX01fb3V0X2VuZCA9IF9fcGVuZDsNCiAgICAgICAgaWYgKCEoX01fbW9k ZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpDQogICAg ICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0Ow0KICAg ICAgfQ0KDQoNCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZShj b25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgICAgew0KICAgICAgICBfTV9idWZf bG9jYWxlX2luaXQgPSB0cnVlOw0KICAgICAgICBpZiAoX01fYnVmX2xvY2Fs ZSAhPSBfX2xvYykNCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7 DQogICAgICB9DQoNCg0KICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8 Y2hhcl90eXBlLF9UcmFpdHM+Kg0KICAgICAgc2V0YnVmKGNoYXJfdHlwZSos IHN0cmVhbXNpemUpDQogICAgICB7IHJldHVybiB0aGlzOyB9DQoNCiAgICAg IHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv c19iYXNlOjpzZWVrZGlyLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl bm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAg eyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQ0KDQogICAgICB2 aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9zKHBvc190eXBlLA0KICAg ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4g fCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm X3R5cGUoLTEpKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3lu YygpIHsgcmV0dXJuIDA7IH0NCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp emUNCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg dmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dldG4oY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlw ZQ0KICAgICAgdW5kZXJmbG93KCkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190 eXBlOjplb2YoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg ICB1ZmxvdygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fcmV0ID0g dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGVzdGVvZiA9 IHRoaXMtPnVuZGVyZmxvdygpID09IF9fcmV0Ow0KICAgICAgICBib29sIF9f dGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f ZW5kOw0KICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5n KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5 cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAgICAgICAgICAgKytf TV9pbl9jdXI7DQogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYg X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpDQogICAgICAgICAgICAgICsrX01f b3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3JldDsN CiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBw YmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAg ICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0NCg0KDQogICAgICB2 aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu dF90eXBlDQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBl Ojplb2YoKSkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg fQ0KIyA1MTYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgIHByaXZhdGU6DQogICAgICBi YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQog ICAgICBfX3N0cmVhbWJ1Zl90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9fc3RyZWFtYnVmX3R5cGUmKTsNCg0KICAgIH07DQoNCn0NCg0KDQoNCg0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dHJlYW1idWYudGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMNCm5hbWVzcGFj ZSBzdGQgew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPjo6DQogICAgc2J1bXBjKCkNCiAgICB7DQogICAgICBpbnRfdHlw ZSBfX3JldDsNCiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwg X01faW5fZW5kKQ0KICAgICAgICB7DQogICAgICAgICAgY2hhcl90eXBlIF9f YyA9ICpncHRyKCk7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7DQog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19j KTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRo aXMtPnVmbG93KCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5 cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQog ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgaW50 X3R5cGUgX19yZXQ7DQogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1 ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICBib29sIF9fdGVz dG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz LT5ncHRyKClbLTFdKTsNCiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVz dG5lKQ0KICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6 dG9faW50X3R5cGUoX19jKSk7DQogICAgICBlbHNlDQogICAgICAgIHsNCiAg ICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQogICAgICAgICAgX19yZXQg PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7DQog ICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBz dW5nZXRjKCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAg IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQ0KICAg ICAgICB7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOw0KICAgICAg ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9j dXIpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0g dGhpcy0+cGJhY2tmYWlsKCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAg fQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz46Og0KICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpDQogICAg ew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01fb3V0X2J1 Zl9zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICAqX01fb3V0X2N1ciA9 IF9fYzsNCiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7DQogICAgICAg ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsNCiAg ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPm92 ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAg IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgeHNn ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQog ICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3Jl dCA8IF9fbikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2J1Zl9s ZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgaWYgKF9f YnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHNp emVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAg ICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7 DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5f Y3VyLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOw0K ICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAgICAgICAgICAgIF9N X2luX2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAg ICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsNCiAgICAgICAg ICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFz c2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7 DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19y ZXQ7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAg IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB4c3B1 dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgb2ZmX3R5cGUg X19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7DQogICAgICAgICAgaWYg KF9fYnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg IG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg ICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h aW5pbmcpOw0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9v dXRfY3VyLCBfX3MsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0g X19sZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAg ICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0N Cg0KICAgICAgICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3co dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsNCiAgICAgICAgICAg ICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAgICAgICAg ICAgICAgICAgICsrX19zOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAgICBfX2NvcHlfc3RyZWFt YnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQogICAg ICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9fc2JpbiwNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkNCiAgew0KICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw ZTsNCg0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICBzdHJl YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsNCiAgICAg IHN0cmVhbXNpemUgX194dHJjdDsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0g X19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICB0cnkg ew0KICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAt MSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91 dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7DQogICAgICAg ICAgICBfX3JldCArPSBfX3h0cmN0Ow0KICAgICAgICAgICAgX19zYmluLT5f TV9pbl9jdXJfbW92ZShfX3h0cmN0KTsNCiAgICAgICAgICAgIGlmIChfX3h0 cmN0ID09IF9fYnVmc2l6ZSkNCiAgICAgICAgICAgICAgew0KICAgICAgICAg ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsNCiAgICAg ICAgICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQ0KICAgICAg ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg X19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0KICAgICAgICAgICAg ICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKSB7DQogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApDQogICAgICAgICAgdGhyb3c7DQog ICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KfQ0KIyA1MzAg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z dHJlYW1idWYuaCIgMiAzDQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9iYXNpY19pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMNCiMgMzYg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZf aXRlci5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIG9z dHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRw dXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPg0KICAg IHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g c3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgICBwcml2YXRl Og0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7DQogICAgICBib29s IF9NX2ZhaWxlZDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZQ0KICAg ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhy b3cgKCkNCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxl ZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Io c3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkNCiAgICAgIDogX01fc2J1 ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQ0KDQogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2Mp Ow0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0 b3IqKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAg ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoaW50 KSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBv c3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHRocm93 KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGJvb2wNCiAg ICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9N X2ZhaWxlZDsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGlubGluZSBvc3RyZWFtYnVm X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9f YykNCiAgICB7DQogICAgICBpZiAoIV9NX2ZhaWxlZCAmJg0KICAgICAgICAg IF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksX1Ry YWl0czo6ZW9mKCkpKQ0KICAgICAgX01fZmFpbGVkID0gdHJ1ZTsNCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBpc3Ry ZWFtYnVmX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRf aXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90 eXBlLA0KICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+ DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoN CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U cmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsNCg0KICAgIHByaXZhdGU6 DQoNCg0KDQoNCg0KDQoNCiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVm Ow0KICAgICAgaW50X3R5cGUgX01fYzsNCg0KICAgIHB1YmxpYzoNCiAgICAg IGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpDQogICAgICA6IF9NX3Ni dWYoX19udWxsKSwgX01fYygtMikgeyB9DQoNCiAgICAgIGlzdHJlYW1idWZf aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkNCiAgICAgIDog X01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQ0KDQogICAgICBp c3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93 KCkNCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0NCg0KDQoN Cg0KICAgICAgY2hhcl90eXBlDQogICAgICBvcGVyYXRvciooKSBjb25zdA0K ICAgICAgew0KDQogICAgICAgIGNoYXJfdHlwZSBfX3JldDsNCiAgICAgICAg aWYgKF9NX3NidWYgJiYgX01fYyAhPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o LTIpKQ0KICAgICAgICAgIF9fcmV0ID0gX01fYzsNCiAgICAgICAgZWxzZSBp ZiAoX01fc2J1ZikNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0 b19jaGFyX3R5cGUoX01fc2J1Zi0+c2dldGMoKSk7DQogICAgICAgIGVsc2UN CiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJh aXRzX3R5cGU6OmVvZigpKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAg ICAgfQ0KDQogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUmDQogICAgICBv cGVyYXRvcisrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKF9NX3NidWYpDQog ICAgICAgICAgX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9NX2MgPSAt MjsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAgICBf X2lzdHJlYW1idWZpdGVyX3R5cGUNCiAgICAgIG9wZXJhdG9yKysoaW50KQ0K ICAgICAgew0KICAgICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUgX19vbGQg PSAqdGhpczsNCiAgICAgICAgaWYgKF9NX3NidWYpDQogICAgICAgICAgX19v bGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOw0KICAgICAgICBfTV9jID0g LTI7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAg Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl JiBfX2IpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFf TV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAgICAg IGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAgICAgICAg ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAg ICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2Vv ZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCg0KDQoNCiAgICAgIGJvb2wN CiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19i KSBjb25zdA0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRy YWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAh X01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAgICAg ICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1Zg0KICAgICAgICAgICAgICAg ICAgICAgIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAg ICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNl b2YgJiYgIV9fYmVvZikpOw0KICAgICAgfQ0KDQogICAgfTsNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg aW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAgICAg ICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+ JiBfX2IpDQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAg ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+JiBfX2IpDQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9DQp9 DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9iYXNpY19pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzDQojIDQw ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzDQojIDM3ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMg NDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jdGltZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0 DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3RpbWUuaCIgMiAzDQojIDUzICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMw0KbmFtZXNwYWNl IHN0ZA0Kew0KICB1c2luZyA6OmNsb2NrX3Q7DQogIHVzaW5nIDo6dGltZV90 Ow0KICB1c2luZyA6OnRtOw0KDQogIHVzaW5nIDo6Y2xvY2s7DQogIHVzaW5n IDo6ZGlmZnRpbWU7DQogIHVzaW5nIDo6bWt0aW1lOw0KICB1c2luZyA6OnRp bWU7DQogIHVzaW5nIDo6YXNjdGltZTsNCiAgdXNpbmcgOjpjdGltZTsNCiAg dXNpbmcgOjpnbXRpbWU7DQogIHVzaW5nIDo6bG9jYWx0aW1lOw0KICB1c2lu ZyA6OnN0cmZ0aW1lOw0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv cy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KDQoNCg0KDQpu YW1lc3BhY2Ugc3RkDQp7DQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw ZV9iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvY3R5cGVfYmFz ZS5oIiAzDQogIHN0cnVjdCBjdHlwZV9iYXNlDQogIHsNCg0KICAgIHR5cGVk ZWYgaW50KiBfX3RvX3R5cGU7DQoNCg0KDQogICAgdHlwZWRlZiB1bnNpZ25l ZCBpbnQgbWFzazsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IDB4 MDAwMDAwMDE7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDAw MDAwMDAyOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDAw NDAwMDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IDB4MDAwMDAw MDQ7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHgwMDAwMDA4 MDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MDAwMDAwMDg7 DQogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAweDAwMDA4MDAwOw0K ICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMDAwMjAwMDsNCiAg ICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDAwMDAwMjA7DQogICAg c3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAweDAwMDAwMDEwOw0KICAgIHN0 YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gKDB4MDAwMDQwMDAgfCAweDAwMDAw MDA0KTsNCiAgfTsNCiMgNTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgX19jdHlwZV9hYnN0 cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlw ZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOw0KDQogICAgICBib29sDQogICAgICBpcyhtYXNr IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2lzKF9fbSwgX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5 cGUqDQogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNo YXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0DQogICAgICB7IHJl dHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3ZlYyk7IH0NCg0KICAg ICAgY29uc3QgY2hhcl90eXBlKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwg X19sbywgX19oaSk7IH0NCg0KICAgICAgY29uc3QgY2hhcl90eXBlKg0KICAg ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAg ICBjaGFyX3R5cGUNCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsgfQ0K DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b3VwcGVyKGNoYXJf dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQ0K DQogICAgICBjaGFyX3R5cGUNCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9f YykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19j KTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b2xvd2Vy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hp KTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19j KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsg fQ0KDQogICAgICBjb25zdCBjaGFyKg0KICAgICAgd2lkZW4oY29uc3QgY2hh ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBj b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19o aSwgX190byk7IH0NCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93KGNoYXJf dHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVy biB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0NCg0KICAgICAg Y29uc3QgY2hhcl90eXBlKg0KICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg ICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBf X3RvKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAg ICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgdmlydHVhbA0K ICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2 aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg X19jKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksDQogICAgICAgICAgICBtYXNrKiBfX3ZlYykg Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoN CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog X19sbywNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl Kg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw ZSogX19sbywNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0K ICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsNCg0KICAg ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3VwcGVy KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190 b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0K ICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIp IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAg ICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwNCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9 IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAgZG9fbmFycm93KGNo YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOw0KDQogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAg ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj b25zdCA9IDA7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3Ry YWN0X2Jhc2U8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsNCg0KICAgICAgZXhwbGljaXQNCiAg ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJh Y3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9DQoNCiAgICAgIHN0YXRpYyBs b2NhbGU6OmlkIGlkOw0KDQogICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs DQogICAgICB+Y3R5cGUoKSB7IH0NCg0KICAgICAgdmlydHVhbCBib29sDQog ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAg ICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0 IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj b25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hp OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b3Vw cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7 IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk b190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUg X19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19jOyB9DQoNCiAgICAgIHZp cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5 cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gY2hhcl90eXBlKCk7IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBj aGFyKg0KICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3Qg Y2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0DQogICAgICB7 IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9DQoNCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg ICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QNCiAgICAg IHsgcmV0dXJuIF9faGk7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46Omlk Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDog cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPg0KICAgIHsNCiAg ICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQoN CiAgICBwcml2YXRlOg0KDQogICAgICBib29sIF9NX2RlbDsNCiAgICAgIF9f dG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsNCiAgICAgIF9fdG9fdHlwZSBj b25zdCYgX01fdG9sb3dlcjsNCiAgICAgIGNvbnN0IG1hc2sqIGNvbnN0JiBf TV9jdGFibGU7DQogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsNCg0KICAg IHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KICAgICAg c3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19j YXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsNCg0KICAgICAgZXhwbGljaXQNCiAg ICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVs ID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgICAgaW5saW5l IGJvb2wNCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7DQoN CiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgaXMoY29uc3QgY2hh ciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0 Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNjYW5faXMo bWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp IGNvbnN0Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNj YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy KiBfX2hpKSBjb25zdDsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1 YWwNCiAgICAgIH5jdHlwZSgpOw0KDQogICAgICBjb25zdCBtYXNrKg0KICAg ICAgdGFibGUoKSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiBfTV90 YWJsZTsgfQ0KDQogICAgICBjb25zdCBtYXNrKg0KICAgICAgY2xhc3NpY190 YWJsZSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9NX2N0YWJsZTsgfQ0K DQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBj aGFyX3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Nj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29u c3QgY2hhcl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFy X3R5cGUNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsNCg0K ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3Vw cGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj b25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rv bG93ZXIoY2hhcl90eXBlKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmly dHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqDQogICAgICBkb193aWRlbihj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUq IF9fZGVzdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFy cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf X2hpLA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf X2Rlc3QpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNv bnN0IGN0eXBlPGNoYXI+Jg0KICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+ KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KIyAzOTIgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt c3VuLXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzDQojIDM3 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu LXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMw0KICBib29sDQog IGN0eXBlPGNoYXI+OjoNCiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z dA0KICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19tOyB9DQoNCiAgY29u c3QgY2hhcioNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhjb25zdCBjaGFyKiBf X2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QN CiAgew0KICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkNCiAgICAgICpfX3Zl YysrID0gX01fdGFibGVbKl9fbG93KytdOw0KICAgIHJldHVybiBfX2hpZ2g7 DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFy KiBfX2hpZ2gpIGNvbnN0DQogIHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hp Z2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYgX19tKSkNCiAgICAgICsrX19s b3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQoNCiAgY29uc3QgY2hhcioN CiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0K ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaA0KICAgICAgICAgICAmJiAoX01f dGFibGVbKl9fbG93XSAmIF9fbSkgIT0gMCkNCiAgICAgICsrX19sb3c7DQog ICAgcmV0dXJuIF9fbG93Ow0KICB9DQojIDM5MyAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBj dHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPg0KICAgIHsNCiAg ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoN CiAgICAgIGV4cGxpY2l0DQogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hh ciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAg ICAgIHZpcnR1YWwNCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH0NCiAgICB9 Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6 Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7DQoNCg0K DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2NvZGVjdnQuaCIgMSAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiMgMTczICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMN CiAgY2xhc3MgY29kZWN2dF9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVu dW0gcmVzdWx0DQogICAgew0KICAgICAgb2ssDQogICAgICBwYXJ0aWFsLA0K ICAgICAgZXJyb3IsDQogICAgICBub2NvbnYNCiAgICB9Ow0KICB9Ow0KDQoN Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIF9fY29k ZWN2dF9hYnN0cmFjdF9iYXNlDQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNl dCwgcHVibGljIGNvZGVjdnRfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoN CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5 cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICByZXN1bHQNCiAgICAgIG91 dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tLA0KICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg IGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQog ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0DQogICAg ICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19m cm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsNCiAg ICAgIH0NCg0KICAgICAgcmVzdWx0DQogICAgICB1bnNoaWZ0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSog X190b19lbmQsDQogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChf X3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0NCg0KICAgICAg cmVzdWx0DQogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25l eHQsDQogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq IF9fdG9fZW5kLA0KICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0DQogICAgICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihf X3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9f bmV4dCk7DQogICAgICB9DQoNCiAgICAgIGludA0KICAgICAgZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNv ZGluZygpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGFsd2F5c19ub2NvbnYo KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdh eXNfbm9jb252KCk7IH0NCg0KICAgICAgaW50DQogICAgICBsZW5ndGgoY29u c3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwNCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQs IHNpemVfdCBfX21heCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0NCg0K ICAgICAgaW50DQogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9DQoNCiAg ICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAgICAgX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm YWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0NCg0KICAgICAgdmlydHVhbCBy ZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGlu dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f ZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl eHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBy ZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg ZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4dGVybl90 eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 ID0gMDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2luKHN0 YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s DQogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAg IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsDQog ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2RpbmcoKSBj b25zdCB0aHJvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAg ICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7DQoNCiAg ICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgp IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21h eF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsNCiAgICB9Ow0KDQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy blQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dA0KICAg IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBf RXh0ZXJuVCwgX1N0YXRlVD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAg ICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAg IHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7DQogICAgICB0eXBlZGVm IF9FeHRlcm5UIGV4dGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBfU3RhdGVU IHN0YXRlX3R5cGU7DQoNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2RlY3Z0KHNpemVfdCBfX3Jl ZnMgPSAwKQ0KICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50 ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0NCg0KICAgIHBy b3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCkgeyB9 DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgbG9jYWxl OjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46Omlk Ow0KIyA1OTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY29k ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+DQogICAgOiBwdWJsaWMgX19j b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90Pg0K ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl cm5fdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsNCiAg ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCg0KICAgICAg c3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAg ICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3Rl ZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCk7DQoNCiAgICAg IHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAg ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu X3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICBleHRlcm5fdHlw ZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAg IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmly dHVhbCByZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19z dGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9faW4o c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv bSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwN CiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsN Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2VuY29kaW5nKCkgY29u c3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVh bCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29u c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICAgICBjb25z dCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVuZ3RoKCkgY29u c3QgdGhyb3coKTsNCiAgfTsNCiMgNzAwICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt ZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGlj IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsN CiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dF9i eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAg OiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZz KSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+ Y29kZWN2dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KIyA0MTYgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMiAzDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPg0KICAgIGNsYXNzIF9OdW1lcmljX2dldDsNCg0KDQoNCg0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIF9G b3JtYXRfY2FjaGUNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXJfdHJh aXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsNCg0K DQogICAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgICAgIGZy aWVuZCBjbGFzcyBfTnVtZXJpY19nZXQ7DQogICAgICBmcmllbmQgY2xhc3Mg bnVtX2dldDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8 X0NoYXJUPjsNCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDxfQ2hhclQ+ Ow0KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDxfQ2hhclQ+Ow0KICAg ICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47DQogICAgICBmcmll bmQgY2xhc3MgbW9uZXlfcHV0PF9DaGFyVD47DQoNCg0KDQoNCiAgICAgIHN0 YXRpYyBpbnQgX1NfcHdvcmRfaXg7DQoNCg0KDQogICAgICBib29sIF9NX3Zh bGlkOw0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfbGl0ZXJh bHNbXTsNCg0KDQoNCg0KICAgICAgZW51bQ0KICAgICAgew0KICAgICAgICBf U19taW51cywNCiAgICAgICAgX1NfcGx1cywNCiAgICAgICAgX1NfeCwNCiAg ICAgICAgX1NfWCwNCiAgICAgICAgX1NfZGlnaXRzLA0KICAgICAgICBfU19k aWdpdHNfZW5kID0gX1NfZGlnaXRzICsgMTYsDQogICAgICAgIF9TX3VkaWdp dHMgPSBfU19kaWdpdHNfZW5kLA0KICAgICAgICBfU191ZGlnaXRzX2VuZCA9 IF9TX3VkaWdpdHMgKyAxNiwNCiAgICAgICAgX1NfZWUgPSBfU19kaWdpdHMg KyAxNCwNCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQNCiAgICAg IH07DQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50 Ow0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2Vw Ow0KDQoNCg0KICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7DQogICAg ICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7DQoNCg0KDQogICAgICBib29s IF9NX3VzZV9ncm91cGluZzsNCg0KDQoNCiAgICAgIHN0cmluZyBfTV9ncm91 cGluZzsNCg0KICAgICAgX0Zvcm1hdF9jYWNoZSgpOw0KDQogICAgICB+X0Zv cm1hdF9jYWNoZSgpIHRocm93KCkgeyB9DQoNCg0KDQoNCiAgICAgIHN0YXRp YyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qDQogICAgICBfU19nZXQoaW9zX2Jh c2UmIF9faW9zKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fcG9wdWxhdGUo aW9zX2Jhc2UmKTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2Nh bGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2ZW50LCBpb3NfYmFzZSYgX19p b3MsIGludCBfX2l4KSB0aHJvdygpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPg0KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFy VD46Ol9TX3B3b3JkX2l4Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6DQog ICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0 NTY3ODlBQkNERUYiOw0KDQogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8 Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGNs YXNzIF9OdW1lcmljX2dldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0lu SXRlciBpdGVyX3R5cGU7DQoNCg0KICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0KICAgICAgZnJpZW5kIGNsYXNz IG51bV9nZXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlw ZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7 DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0lu SXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0Ow0KICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0K ICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmll bmQgY2xhc3MgdGltZV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3Mg bW9uZXlfcHV0Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGV4cGxpY2l0DQog ICAgICBfTnVtZXJpY19nZXQoKSB7IH0NCg0KICAgICAgdmlydHVhbA0KICAg ICAgfl9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg ICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf X2VuZCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgbnVtX2dldCA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFp dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOw0KDQogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9nZXQo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0NCg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0 JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgaW50JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCg0KICAgICAg aXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJl dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 DQojIDYwNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBk b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAg ICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0 DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KIyA2MjkgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl dHMuaCIgMw0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdl dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv dWJsZSYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5 cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJl dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwg fm51bV9nZXQoKSB7IH0NCg0KDQoNCg0KDQogICAgICB2b2lkDQogICAgICBf TV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICAg IGludCYgX19iYXNlLCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsNCg0KICAg ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUs IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJv b2wmKSBjb25zdDsNCg0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsNCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25z dDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldCAo aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv c3RhdGUmLCBsb25nJikgY29uc3Q7DQoNCg0KDQoNCg0KICAgICAgdmlydHVh bCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAg ICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7DQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7DQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYpIGNvbnN0Ow0KDQoNCg0KDQoN CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90 eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLA0KICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LA0KICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAg ICAgICAgICAgICB2b2lkKiYpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGxv Y2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsNCg0KDQog IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgbnVtX2dldDxjaGFyLCBpc3Ry ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46Og0KICAgIF9NX2V4dHJhY3QoaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywNCiAgICAgICAgICAgICAg IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBf X2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwg Ym9vbCBfX2ZwKSBjb25zdDsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBfTnVtZXJp Y19wdXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5 cGU7DQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9O dW1lcmljX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X051 bWVyaWNfcHV0KCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG51bV9w dXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6 DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5 cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9wdXQo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxs LCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv bmcgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m LCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBw dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f ZmlsbCwNCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QNCiAg ICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9 DQojIDc3MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg X19maWxsLCBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3Yp IGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmls bCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLA0K ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QNCiAgICAgIHsgcmV0 dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICBw cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtX3B1dCgpIHsg fTsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChp dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBf X3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs LCBsb25nIF9fdikgY29uc3Q7DQoNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um LCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsNCg0K DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19w dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRv dWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0K ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg X19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0 Ow0KICAgIH07DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy VCwgX091dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNl dA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy VD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFs X3BvaW50Ow0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7DQog ICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7DQogICAgICBzdHJpbmdfdHlwZSBf TV90cnVlbmFtZTsNCiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsN Cg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBudW1wdW5j dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykN CiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAg IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywg c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQog ICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQ0KDQog ICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0K ICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg ICB7IHJldHVybiBkb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAgICAgc3Ry aW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJldHVybiBk b19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0 cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgp OyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5hbWUoKSBj b25zdA0KICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAg IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1wdW5jdCgp IHsgfQ0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fZGVj aW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kZWNpbWFs X3BvaW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk b190aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Ro b3VzYW5kc19zZXA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmcNCiAgICAg IGRvX2dyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2dyb3Vw aW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRv X3RydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l OyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2Zh bHNlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7 IH0NCg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX251bXB1 bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG51 bXB1bmN0PF9DaGFyVD46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICB2b2lkDQogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01faW5p dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9 DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxjaGFy Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7 DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxf Q2hhclQ+DQogICAgew0KICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9u dW1wdW5jdDsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IHN0cmluZ190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtcHVu Y3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp DQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0K ICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu Y3QsIF9fcyk7DQogICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01f Y19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAgfQ0KDQogICAgcHJvdGVjdGVk Og0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFtZSgpDQog ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu Y3QpOyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQN CiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsN Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBp bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg X0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19o aTIpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0cmFuc2Zvcm0o Y29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19o aSk7IH0NCg0KICAgICAgbG9uZw0KICAgICAgaGFzaChjb25zdCBfQ2hhclQq IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0NCg0KICBwcm90ZWN0 ZWQ6DQogICAgICB+Y29sbGF0ZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGlu dA0KICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25z dCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsNCg0KICAg ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fdHJhbnNmb3JtKGNv bnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsN Cg0KICAgICAgdmlydHVhbCBsb25nDQogICAgICBkb19oYXNoKGNvbnN0IF9D aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsNCiAgICB9 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6 OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQog ICAgaW50DQogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBj aGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2xvMiwgY29uc3QgY2hh ciogX19oaTIpIGNvbnN0Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJpbmcN CiAgICBjb2xsYXRlPGNoYXI+Ojpkb190cmFuc2Zvcm0oY29uc3QgY2hhciog X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoNCiAgdGVtcGxhdGU8 Pg0KICAgIGxvbmcNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0 IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0Ow0KIyAxMDE0 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0No YXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBj b2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDAp Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNv bGxhdGVfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog ICAgY29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0 IGNoYXIqLCBzaXplX3QgX19yZWZzKTsNCg0KDQoNCg0KDQogIGNsYXNzIHRp bWVfYmFzZQ0KICB7DQogIHB1YmxpYzoNCiAgICBlbnVtIGRhdGVvcmRlciB7 IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0gfTsNCiAgfTsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog ICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVi bGljIHRpbWVfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRl ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVm cyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2Rh eW5hbWVzKDApLCBfTV9tb250aG5hbWVzKDApIHsgfQ0KDQogICAgICBkYXRl b3JkZXINCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdA0KICAgICAgeyByZXR1 cm4gZG9fZGF0ZV9vcmRlcigpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19mLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f Z2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQ0KDQog ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3Ms IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRlKF9fcywgX19lbmQsIF9fZiwg X19lcnIsIF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRf d2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2YsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n ZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg ICAgaXRlcl90eXBlDQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBf X3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFtZShfX3Ms X19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQog ICAgICBnZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBk b19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1lX2dldCgp DQogICAgICB7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOw0K ICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7DQogICAgICB9DQoNCiAg ICAgIHZpcnR1YWwgZGF0ZW9yZGVyDQogICAgICBkb19kYXRlX29yZGVyKCkg Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9DQoNCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfdGltZShpdGVy X3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQogICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdA0KICAg ICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl DQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg LCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgLCB0bSogKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoN CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfd2Vla2Rh eShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwN CiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl DQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmLA0KICAgICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0Ow0K DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X3llYXIo aXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLA0KICAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0 DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgbXV0YWJsZSBiYXNp Y19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7DQogICAgICBtdXRhYmxl IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5hbWVzOw0KICAgIH07 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPg0KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1Ymxp YyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+DQogICAgew0KICAgIHB1Ymxp YzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5 cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQog ICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3Jl ZnMgPSAwKQ0KICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9f cmVmcykgeyB9DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAg ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBj bGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg dGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl cl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg ICAgZXhwbGljaXQNCiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9DQoNCg0KICAgICAgaXRl cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmICwg Y2hhcl90eXBlICwNCiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hh clQqICwNCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QNCiAgICAg IHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m aWxsLA0KICAgICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1h dCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJu IGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9f bW9kaWZpZXIpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs DQogICAgICB+dGltZV9wdXQoKSB7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy X3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYs IGNoYXJfdHlwZSwgY29uc3QgdG0qICwNCiAgICAgICAgICAgICBjaGFyICwg Y2hhciApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9Ow0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlcj4NCiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJs aWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4NCiAgICB7DQogICAgcHVi bGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0 DQogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf X3JlZnMgPSAwKQ0KICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy PiAoX19yZWZzKSB7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1 YWwNCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy Pg0KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl Ow0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhw bGljaXQNCiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBs b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v bCBfX2ludGwsDQogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9f ZiwgX19lcnIsIF9fdW5pdHMpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf X2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdA0K ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19m LCBfX2VyciwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfZ2V0KCkgeyB9DQoNCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBsb25nIGRvdWJs ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBzdHJpbmdfdHlw ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQogICAgfTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ DQogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4NCiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxl OjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJf dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQog ICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMg PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRl cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGws IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwg bG9uZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv X3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fdW5pdHMpOyB9DQoN CiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJv b2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLA0KICAgICAgICAgIGNoYXJfdHlw ZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QN CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2Zp bGwsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly dHVhbA0KICAgICAgfm1vbmV5X3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2ws IGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsDQogICAgICAgICAgICAgbG9uZyBk b3VibGUgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f cywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAg ICBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4g X19zOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0 PF9DaGFyVCwgX091dEl0ZXI+OjppZDsNCg0KICBzdHJ1Y3QgbW9uZXlfYmFz ZQ0KICB7DQogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwg c2lnbiwgdmFsdWUgfTsNCiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll bGRbNF07IH07DQoNCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZh dWx0X3BhdHRlcm47DQoNCg0KDQogICAgc3RhdGljIHBhdHRlcm4NCiAgICBf U19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19z cGFjZSwgY2hhciBfX3Bvc24pOw0KICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0 IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlDQog ICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9 IF9JbnRsOw0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICBw cml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7DQog ICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsNCiAgICAgIHN0cmlu ZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190eXBlIF9NX2N1cnJfc3lt Ym9sOw0KICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsNCiAg ICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247DQogICAgICBpbnQg X01fZnJhY19kaWdpdHM7DQogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7 DQogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7DQoNCiAgICBwdWJsaWM6 DQogICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19y ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsgX01f aW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0NCg0KICAgICAgZXhwbGljaXQN CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBf X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgeyBf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQ0KDQogICAgICBj aGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg ICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAg ICAgc3RyaW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJl dHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190 eXBlDQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0DQogICAgICB7IHJldHVy biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9DQoNCiAgICAgIHN0cmluZ190 eXBlDQogICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBzdHJp bmdfdHlwZQ0KICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0DQogICAgICB7 IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0NCg0KICAgICAg aW50DQogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0DQogICAgICB7IHJldHVy biB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9DQoNCiAgICAgIHBhdHRlcm4N CiAgICAgIHBvc19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcG9zX2Zvcm1hdCgpOyB9DQoNCiAgICAgIHBhdHRlcm4NCiAgICAg IG5lZ19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f bmVnX2Zvcm1hdCgpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0 dWFsDQogICAgICB+bW9uZXlwdW5jdCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs IGNoYXJfdHlwZQ0KICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog ICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9DQoNCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlDQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29u c3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0NCg0KICAg ICAgdmlydHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1 YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9DQoNCiAgICAgIHZp cnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj b25zdA0KICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQ0KDQog ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb19uZWdhdGl2ZV9z aWduKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247 IH0NCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2ZyYWNfZGlnaXRz KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9DQoN CiAgICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fcG9zX2Zvcm1hdCgp IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9DQoNCiAg ICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNv bnN0DQogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9DQoNCg0KICAg ICAgdm9pZA0KICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19s b2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBsb2NhbGU6Omlk IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOw0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjb25zdCBib29s IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIHZvaWQNCiAg ICBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21v bmV5cHVuY3QoX19jX2xvY2FsZSApDQogICAgew0KDQogICAgfQ0KDQogIHRl bXBsYXRlPD4NCiAgICB2b2lkDQogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01f aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCg0K DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J bnRsPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1v bmV5cHVuY3Q8X0NoYXJULCBfSW50bD4NCiAgICB7DQogICAgICBfX2NfbG9j YWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7DQogICAgcHVibGljOg0KICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBi YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOw0KDQogICAgICBleHBsaWNp dA0KICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz aXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQs IF9JbnRsPihfX3JlZnMpDQogICAgICB7DQogICAgICAgIF9TX2NyZWF0ZV9j X2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOw0KICAgICAg ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlw dW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0 dWFsDQogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQ0KICAgICAgeyBfU19k ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9DQog ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu dGw+DQogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQs IF9JbnRsPjo6aW50bDsNCg0KDQogIHN0cnVjdCBtZXNzYWdlc19iYXNlDQog IHsNCiAgICB0eXBlZGVmIGludCBjYXRhbG9nOw0KICB9Ow0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1 YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQ0KICAg IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu Z190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg ICAgZXhwbGljaXQNCiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgY2F0YWxv Zw0KICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywg Y29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv X29wZW4oX19zLCBfX2xvYyk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg ICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19tc2dpZCwg Y29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QNCiAgICAgIHsgcmV0dXJu IGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9DQoNCiAgICAgIHZv aWQNCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gZG9fY2xvc2UoX19jKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAg ICAgdmlydHVhbA0KICAgICAgfm1lc3NhZ2VzKCkgeyB9DQoNCg0KDQogICAg ICB2aXJ0dWFsIGNhdGFsb2cNCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNf c3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QNCiAgICAgIHsg cmV0dXJuIDA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg ICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50ICwgY29uc3Qgc3RyaW5nX3R5 cGUmIF9fZGZhdWx0KSBjb25zdA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7 IH0NCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBkb19jbG9zZShjYXRh bG9nKSBjb25zdCB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46Omlk Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBt ZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPg0KICAg IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu Z190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnlu YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7DQoNCiAgICBw cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXNfYnlu YW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgbWVzc2Fn ZXNfYnluYW1lPGNoYXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhcios IHNpemVfdCBfX3JlZnMpOw0KIyAxNTMyICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg aXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh c2U6OnByaW50LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQgX19j LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJs LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGlubGluZSBib29sDQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBs b2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBi b29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j KS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxw aGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw ZV9iYXNlOjphbHBoYSwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZGlnaXQoX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpk aWdpdCwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29u c3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19j KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxp bmUgYm9vbA0KICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s b2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNn cmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsg cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b3VwcGVyKF9D aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2Mp OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu ZSBfQ2hhclQNCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy VD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9DQojIDM3ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNf aW9zIDogcHVibGljIGlvc19iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0K ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m Zl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0K DQoNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7 DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYgbnVt X3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBl Ow0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51 bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlw ZTsNCg0KDQogICAgcHJpdmF0ZToNCiAgICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiogX01fdGllOw0KICAgICAgY2hhcl90eXBlIF9NX2Zp bGw7DQogICAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsNCg0KICAgIHByb3Rl Y3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfTV9zdHJlYW1idWY7DQogICAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9z dGF0ZTsNCg0KDQogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lvc19m Y3R5cGU7DQoNCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1w dXQ7DQoNCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7 DQoNCiAgICBwdWJsaWM6DQogICAgICBpbmxpbmUgY29uc3QgX19jdHlwZV90 eXBlKg0KICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9pZCkNCiAgICAgIHsg cmV0dXJuIF9NX2lvc19mY3R5cGU7IH0NCg0KICAgICAgb3BlcmF0b3Igdm9p ZCooKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6 IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0NCg0KICAgICAgaW5s aW5lIGJvb2wNCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0DQogICAgICB7IHJl dHVybiB0aGlzLT5mYWlsKCk7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN CiAgICAgIHJkc3RhdGUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fc3Ry ZWFtYnVmX3N0YXRlOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBj bGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KQ0KICAgICAgew0KICAg ICAgICBpZiAodGhpcy0+cmRidWYoKSkNCiAgICAgICAgICBfTV9zdHJlYW1i dWZfc3RhdGUgPSBfX3N0YXRlOw0KICAgICAgICBlbHNlDQogICAgICAgICAg X01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsNCiAgICAg ICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkp KQ0KICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6 Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOw0KICAgICAgfQ0K DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBf X3N0YXRlKQ0KICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkg fCBfX3N0YXRlKTsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZ29v ZCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0g MDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZW9mKCkgY29uc3QN CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9 IDA7IH0NCg0KICAgICAgaW5saW5lIGJvb2wNCiAgICAgIGZhaWwoKSBjb25z dA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQg fCBmYWlsYml0KSkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAg ICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRl KCkgJiBiYWRiaXQpICE9IDA7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN CiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f ZXhjZXB0aW9uOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBleGNl cHRpb25zKGlvc3RhdGUgX19leGNlcHQpDQogICAgICB7DQogICAgICAgIF9N X2V4Y2VwdGlvbiA9IF9fZXhjZXB0Ow0KICAgICAgICB0aGlzLT5jbGVhcihf TV9zdHJlYW1idWZfc3RhdGUpOw0KICAgICAgfQ0KDQoNCiAgICAgIGV4cGxp Y2l0DQogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQ0KICAgICAgeyB0aGlzLT5p bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19p b3MoKSB7IH0NCg0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIF9NX3RpZTsgfQ0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Kg0KICAgICAgdGllKGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiogX190aWVzdHIpDQogICAgICB7DQogICAgICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7 DQogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOw0KICAgICAgICByZXR1cm4g X19vbGQ7DQogICAgICB9DQoNCiAgICAgIGlubGluZSBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQ0KDQogICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAg YmFzaWNfaW9zJg0KICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9f cmhzKTsNCg0KICAgICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbCgp IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9maWxsOyB9DQoNCiAgICAgIGlu bGluZSBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpDQog ICAgICB7DQogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7DQog ICAgICAgIF9NX2ZpbGwgPSBfX2NoOw0KICAgICAgICByZXR1cm4gX19vbGQ7 DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBpbWJ1ZShjb25z dCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93 KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0Ow0KDQogICAg ICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsNCg0K ICAgIHByb3RlY3RlZDoNCg0KICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz ZSgpDQogICAgICB7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5pdChiYXNp Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7DQoNCiAgICAg IGJvb2wNCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFj ZXQqIF9fZikNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl Ow0KICAgICAgICBpZiAoX19mKQ0KICAgICAgICAgIF9fcmV0ID0gdHJ1ZTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsN CiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICB2b2lk DQogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7 DQogICAgfTsNCn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzDQojIDMzICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19p b3MudGNjIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9fc2IpDQogICAgew0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOw0KICAgICAg X01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIHRoaXMtPmNsZWFyKCk7DQog ICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh aXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQ0KICAgIHsN Cg0KDQoNCg0KICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dv cmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8NCiAgICAgICAgX01fd29y ZF9hcnJheSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07DQoj IDYzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9i YXNpY19pb3MudGNjIiAzDQogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9 IF9fcmhzLl9NX2NhbGxiYWNrczsNCiAgICAgIGlmIChfX2NiKQ0KICAgICAg ICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7DQogICAgICBfTV9jYWxsX2Nh bGxiYWNrcyhlcmFzZV9ldmVudCk7DQogICAgICBpZiAoX01fd29yZHMgIT0g X01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOw0K ICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAgICAgX01fY2Fs bGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8 IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQ0KICAgICAgICBfX3dvcmRz W19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOw0KICAgICAgaWYgKF9NX3dv cmRzICE9IF9NX3dvcmRfYXJyYXkpDQogICAgICAgIGRlbGV0ZSBbXSBfTV93 b3JkczsNCiAgICAgIF9NX3dvcmRzID0gX193b3JkczsNCiAgICAgIF9NX3dv cmRfbGltaXQgPSBfX3Jocy5fTV93b3JkX2xpbWl0Ow0KDQogICAgICB0aGlz LT5mbGFncyhfX3Jocy5mbGFncygpKTsNCiAgICAgIHRoaXMtPndpZHRoKF9f cmhzLndpZHRoKCkpOw0KICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnBy ZWNpc2lvbigpKTsNCiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7DQog ICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7DQoNCiAgICAgIHRoaXMt PmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsNCg0KICAgICAgX01f Y2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7DQogICAgICByZXR1cm4g KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjaGFyDQogICAgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9f ZGZhdWx0KSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPm5h cnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNv bnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsg fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAg ICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7DQogICAgICBpb3Nf YmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01fY2FjaGVfZmFjZXRzKF9f bG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAgICAg IHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVy biBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpf TV9pbml0KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2Fs ZSk7DQogICAgICBfTV90aWUgPSAwOw0KICAgICAgX01fZmlsbCA9IHRoaXMt PndpZGVuKCcgJyk7DQogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0Ow0K ICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIF9NX3N0cmVhbWJ1 Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0Ow0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgdm9pZA0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpf TV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQog ICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQ0KICAg ICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+ KF9fbG9jKTsNCg0KICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBl PihfX2xvYykpDQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9f bnVtcHV0X3R5cGU+KF9fbG9jKTsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19u dW1nZXRfdHlwZT4oX19sb2MpKQ0KICAgICAgICBfTV9mbnVtZ2V0ID0gJnVz ZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7DQogICAgfQ0KfQ0KIyAy MTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh c2ljX2lvcy5oIiAyIDMNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDQwICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMN CiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy Yy1zdW4tc29sYXJpczIuNy9iaXRzL3N0ZF9saW1pdHMuaCIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv bGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQ2ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy LjcvYml0cy9zdGRfbGltaXRzLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMw0K IyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NmbG9hdC5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAx IDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDMgNA0KI3ByYWdt YSBpZGVudCAiQCgjKWZsb2F0LmgJMS4xNQk5Ny8xMS8yMiBTTUkiDQoNCg0K ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX2ZsdF9yb3Vu ZHModm9pZCk7DQojIDk3ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQp9 DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY2Zsb2F0LmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3Rk X2xpbWl0cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZCB7DQoNCiAgICBlbnVt IGZsb2F0X3JvdW5kX3N0eWxlIHsNCiAgICAgICAgcm91bmRfaW5kZXRlcm1p bmF0ZSA9IC0xLA0KICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsDQog ICAgICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLA0KICAgICAgICByb3VuZF90 b3dhcmRfaW5maW5pdHkgPSAyLA0KICAgICAgICByb3VuZF90b3dhcmRfbmVn X2luZmluaXR5ID0gMw0KICAgIH07DQoNCiAgICBlbnVtIGZsb2F0X2Rlbm9y bV9zdHlsZSB7DQogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEs DQogICAgICAgIGRlbm9ybV9hYnNlbnQgPSAwLA0KICAgICAgICBkZW5vcm1f cHJlc2VudCA9IDENCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgew0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOw0KDQogICAgICAg IHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9DQogICAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3co KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDA7DQoNCiAgICAgICAgc3RhdGljIF9UcCBlcHNp bG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9 DQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsg cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5 bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAg ICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0 YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBxdWll dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7 IH0NCiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICAgIHN0 YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBfVHAgX19saW1pdHNfaW5maW5pdHkoKTsNCiAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWlldF9OYU4oKTsNCiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdf TmFOKCk7DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1p dHNfZGVub3JtX21pbigpOw0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8Ym9vbD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGJv b2wgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBmYWxzZTsgfQ0K ICAgICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHRydWU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDg7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSAyOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9 IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog ICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJy b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K DQogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQ0KICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQ0KICAgICAg ICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRp YyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi b29sIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGJvb2w+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf dG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0 IG51bWVyaWNfbGltaXRzPGNoYXI+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRp YyBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0xMjgp OyB9DQogICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkNCiAgICAg ICAgeyByZXR1cm4gMTI3OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl ciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 DQogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRf ZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp bmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl Ow0KDQogICAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQ0KICAg ICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0 YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp YyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBz dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBz dHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHsNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQog ICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuICgtMTI4KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxMjc7IH0N Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7DQogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHNp Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IDA7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9y KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K ICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygp DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigw KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkg dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQg Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gew0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g MjU1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBz dGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAg ICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9 DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g MDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50 Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZp bml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0 aWMgdW5zaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg fQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkg dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBjaGFyPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf emVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8c2hvcnQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBzaG9y dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMzI3NjctMSk7 IH0NCiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAg ICAgeyByZXR1cm4gMzI3Njc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50 ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDI7DQogICAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyBzaG9ydCBy b3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsN CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsN CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsN CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7 IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkN CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQog ICAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAg ICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KDQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoN CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAg IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNo b3J0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp emVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpDQogICAgICAg IHsgcmV0dXJuIDY1NTM1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSAxNjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGlj IHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAg ICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAg ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o MCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu ZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQoNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0 ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+IHsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0K DQogICAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQ0KICAgICAgICB7 IHJldHVybiAoLTIxNDc0ODM2NDctMSk7IH0NCiAgICAgICAgc3RhdGljIGlu dCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp YyBpbnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsg fQ0KICAgICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k ZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0 aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgcXVp ZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05h TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 PigwKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJv dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0N Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1 ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0 eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln bmVkIGludD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGlu dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpDQogICAgICAg IHsgcmV0dXJuICgyMTQ3NDgzNjQ3ICogMlUgKyAxKTsgfQ0KDQogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7DQogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBp bnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAg ICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9 DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp bnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFs aW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCg0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4gew0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAg ICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl dHVybiAoLTIxNDc0ODM2NDdMLTEpOyB9DQogICAgICAgIHN0YXRpYyBsb25n IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7 IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp YyBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7 IH0NCiAgICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0 YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9u ZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9t aW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv bmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp bWl0czx1bnNpZ25lZCBsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAx KTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg cm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0N Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw Ow0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z aWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7 DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmlu aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9 DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0 aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf Ym91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55 bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl cm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf bGltaXRzPGZsb2F0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgZmxvYXQg bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjE3NTQ5NDM1MUUt MzhGOyB9DQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDY2RSszOEY7IH0NCg0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0Ow0KICAgICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNzsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGZsb2F0IGVw c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEuMTkyMDkyODk2 RS0wN0Y7IH0NCiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkg dGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjBmOyB9DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1Ow0KICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3Ow0KICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsNCiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4Ow0K DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93 KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9 DQogICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KICAg ICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAg ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAg ICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCg0KICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7DQogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl Ow0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91 bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAg dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPiB7DQog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkNCiAg ICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg7IH0NCiAg ICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4OyB9DQoNCiAgICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsNCiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMxMCA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZG91YmxlIGVw c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5 MjUwMzEzMUUtMTY7IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9l cnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4wOyB9DQoNCiAg ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsN CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z MDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g MTAyNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx MCA9IDMwODsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f YWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt X2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIGluZmlu aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxk b3VibGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFO KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91 YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4o KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs ZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1 NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8bG9uZyBkb3VibGU+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBs b25nIGRvdWJsZSBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDMu MzYyMTAzMTQzMTEyMDkzNTA2MjYyNjc3ODE3MzIxNzUyNjAzRS00OTMyTDsg fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQ0K ICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTA4NTc1OTMy NjYyODAwNzAxNkUrNDkzMkw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDExMzsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDM0Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p bnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOw0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigp IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS45MjU5Mjk5NDQzODcyMzU4 NTMwNTU5Nzc5NDI1ODQ5MjczMTlFLTM0TDsgfQ0KICAgICAgICBzdGF0aWMg bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg cmV0dXJuIDEuMEw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IC0xNjM4MTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOw0KICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0Ow0KICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsNCg0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0K ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAg ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpDQog ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsg fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhy b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs ZT4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGxvbmcgZG91YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi bGUgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KfQ0KIyA0MSAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJl YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3Mg YmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOw0K ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19z dHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAg ICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0 cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9nZXQ8 X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsNCiAg ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoNCiAg ICBwcm90ZWN0ZWQ6DQoNCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50Ow0K DQogICAgcHVibGljOg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNf aXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgew0KICAg ICAgICB0aGlzLT5pbml0KF9fc2IpOw0KICAgICAgICBfTV9nY291bnQgPSBz dHJlYW1zaXplKDApOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsDQogICAg ICB+YmFzaWNfaXN0cmVhbSgpDQogICAgICB7IF9NX2djb3VudCA9IHN0cmVh bXNpemUoMCk7IH0NCg0KDQogICAgICBjbGFzcyBzZW50cnk7DQogICAgICBm cmllbmQgY2xhc3Mgc2VudHJ5Ow0KDQoNCg0KICAgICAgX19pc3RyZWFtX3R5 cGUmDQogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp KF9faXN0cmVhbV90eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYN CiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190 eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7DQoNCg0KICAg ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9f bik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+ PihzaG9ydCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg ICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOw0KDQogICAgICBf X2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOw0K DQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5z aWduZWQgaW50JiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAg ICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsNCg0KICAgICAgX19pc3RyZWFt X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7 DQojIDEyNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2lzdHJlYW0uaCIgMw0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog ICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOw0KDQogICAgICBfX2lzdHJl YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOw0KDQog ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4obG9uZyBk b3VibGUmIF9fZik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg b3BlcmF0b3I+Pih2b2lkKiYgX19wKTsNCg0KICAgICAgX19pc3RyZWFtX3R5 cGUmDQogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ip Ow0KDQoNCiAgICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgICBnY291bnQo dm9pZCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQ0KDQog ICAgICBpbnRfdHlwZQ0KICAgICAgZ2V0KHZvaWQpOw0KDQogICAgICBfX2lz dHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7DQoNCiAg ICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAg ICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBl KiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gZ2V0KF9f cywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0NCg0KICAgICAgX19pc3Ry ZWFtX3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwg Y2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAgICBpbmxpbmUgX19pc3RyZWFt X3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikNCiAg ICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0N Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRsaW5lKGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p Ow0KDQogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRs aW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsg cmV0dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsg fQ0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGlnbm9yZShzdHJl YW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlw ZTo6ZW9mKCkpOw0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgcGVlayh2b2lk KTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICByZWFkKGNoYXJf dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHN0cmVhbXNp emUNCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcHV0YmFj ayhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog ICAgICB1bmdldCh2b2lkKTsNCg0KICAgICAgaW50DQogICAgICBzeW5jKHZv aWQpOw0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgdGVsbGcodm9pZCk7DQoN CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgc2Vla2cocG9zX3R5cGUp Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKG9mZl90 eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoN CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX2lzdHJlYW0oY29u c3QgX19pc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K ICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f Y3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6 aW50X3R5cGUgX19pbnRfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAg IHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs IGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsNCg0KICAgICAgb3BlcmF0b3Ig Ym9vbCgpIHsgcmV0dXJuIF9NX29rOyB9DQoNCiAgICBwcml2YXRlOg0KICAg ICAgYm9vbCBfTV9vazsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOw0K DQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykN CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIm PihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBj aGFyJiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRf Y2FzdDxjaGFyJj4oX19jKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7DQoNCiAg dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7 IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Mp KTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNf aXN0cmVhbTxjaGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19z KQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh cio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0N CiAgICA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4s DQogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAg ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1fdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lv c3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni KQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5 cGUoX19zYikNCiAgICAgIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+ YmFzaWNfaW9zdHJlYW0oKSB7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICB3cyhiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOw0KfQ0KDQoNCg0KDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl YW0udGNjIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAz DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbG9jYWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQwICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9j YWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMw0KIyA0MSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMw0KIyAzNSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NlcnJuby5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMw0KIyAx ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5j bHVkZS9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5o CTEuMTUJOTgvMDMvMDIgU01JIg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9lcnJuby5oIiAxIDMgNA0KIyAxMSAiL3Vzci9pbmNsdWRlL3N5 cy9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEu MTkJOTgvMDEvMTQgU01JIg0KIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJu by5oIiAzIDQNCmV4dGVybiAiQyIgew0KIyAxOTEgIi91c3IvaW5jbHVkZS9z eXMvZXJybm8uaCIgMyA0DQp9DQojIDE4ICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzIgIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAzIDQNCmV4dGVybiBpbnQgKl9fX2Vycm5vKCk7DQoNCg0K DQoNCg0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMw0KIyAzNiAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMN CiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNA0KIyA5ICIvdXNy L2luY2x1ZGUvbG9jYWxlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxv Y2FsZS5oCTEuMTgJOTgvMDEvMjIgU01JIg0KIyA0NiAiL3Vzci9pbmNsdWRl L2xvY2FsZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl X3Rlc3RzLmgiIDEgMyA0DQojIDQ3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi IDIgMyA0DQoNCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmlu dGwuaCIgMSAzIDQNCiMgMjAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRs LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxpYmludGwuaAkxLjEyCTk3 LzA4LzIwIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz LmgiIDEgMyA0DQojIDIzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5o IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0NCAiL2hvbWUvbWRlaWwv YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p bmNsdWRlL2xpYmludGwuaCIgMyA0DQpleHRlcm4gY2hhciAqZGNnZXR0ZXh0 KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBpbnQpOw0KZXh0 ZXJuIGNoYXIgKmRnZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsNCmV4dGVybiBjaGFyICpnZXR0ZXh0KGNvbnN0IGNoYXIgKik7DQpleHRl cm4gY2hhciAqdGV4dGRvbWFpbihjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNo YXIgKmJpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsNCg0KDQoNCmV4dGVybiBpbnQgd2Rpbml0KHZvaWQpOw0KZXh0ZXJuIGlu dCB3ZGNoa2luZCh3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2RiaW5kZih3Y2hh cl90LCB3Y2hhcl90LCBpbnQpOw0KZXh0ZXJuIHdjaGFyX3QgKndkZGVsaW0o d2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVybiB3Y2hhcl90IG1jZmls bGVyKHZvaWQpOw0KZXh0ZXJuIGludCBtY3dyYXAodm9pZCk7DQojIDc4ICIv aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCn0NCiMgNTIgIi91 c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIg ew0KDQoNCnN0cnVjdCBsY29udiB7DQogICAgICAgIGNoYXIgKmRlY2ltYWxf cG9pbnQ7DQogICAgICAgIGNoYXIgKnRob3VzYW5kc19zZXA7DQogICAgICAg IGNoYXIgKmdyb3VwaW5nOw0KICAgICAgICBjaGFyICppbnRfY3Vycl9zeW1i b2w7DQogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsNCiAgICAgICAg Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7DQogICAgICAgIGNoYXIgKm1vbl90 aG91c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICptb25fZ3JvdXBpbmc7DQog ICAgICAgIGNoYXIgKnBvc2l0aXZlX3NpZ247DQogICAgICAgIGNoYXIgKm5l Z2F0aXZlX3NpZ247DQogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOw0K ICAgICAgICBjaGFyIGZyYWNfZGlnaXRzOw0KICAgICAgICBjaGFyIHBfY3Nf cHJlY2VkZXM7DQogICAgICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7DQogICAg ICAgIGNoYXIgbl9jc19wcmVjZWRlczsNCiAgICAgICAgY2hhciBuX3NlcF9i eV9zcGFjZTsNCiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsNCiAgICAgICAg Y2hhciBuX3NpZ25fcG9zbjsNCn07DQojIDEwMiAiL3Vzci9pbmNsdWRlL2xv Y2FsZS5oIiAzIDQNCmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25z dCBjaGFyICopOw0KZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udih2 b2lkKTsNCg0KDQoNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDIgMw0KDQoN Cg0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpsY29udjsNCiAg dXNpbmcgOjpzZXRsb2NhbGU7DQogIHVzaW5nIDo6bG9jYWxlY29udjsNCn0N CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzDQoj IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0 ZF9saW1pdHMuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t ZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl ci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o IiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRl aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMNCiMgMzMg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90eXBlaW5mbyIg Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhj ZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5h bWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xhc3NfdHlwZV9p bmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIGNsYXNzIHR5 cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAgIHZpcnR1YWwg fnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0eXBlX2luZm8m IG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0eXBlX2luZm8o Y29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGNvbnN0 IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQg dHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQ0K DQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdA0K ICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAgYm9vbCBiZWZv cmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy biBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29sIG9wZXJhdG9y PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy biBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBib29sIG9wZXJh dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJl dHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1YmxpYzoNCg0K ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0Ow0KDQog ICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0Ow0KDQoN Cg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3Qg dHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNv bnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3Qg X19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBj b25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNl cHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3QoKSB0aHJvdygp IHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsNCiAgfTsN Cg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbg0KICB7 DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9DQog ICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0KICB9Ow0KfQ0K DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAz DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0 ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQu aCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhy b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJv d19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFk X2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF90eXBlaWQo dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29u c3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2lu dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAg dm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3Mp Ow0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X292ZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93 X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9p ZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7DQp9 DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzDQojIDM0 ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1ICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMN CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9i aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0K IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQojIDEgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7 DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoN Cg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAg dm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAg X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Ro cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog IHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq IF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFu Z2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVu dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQN CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K DQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh ciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShj b25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw dF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoNCm5hbWVzcGFj ZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+DQpjbGFzcyBf VmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y X3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf YWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf X2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv cmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9jYXRvcl90eXBl IF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAq IF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBf VHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyByZXR1cm4gX01f ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2Rl YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAgeyBpZiAoX19w KSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQ0K fTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0 b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9y LCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAg ICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRf YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsg fQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw ZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf b2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIF9UcCogX01f c3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9NX2VuZF9vZl9z dG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsNCiAg X1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsgcmV0dXJuIF9B bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQgX01fZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9BbGxvY190eXBl OjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlDQog IDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX1Zl Y3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf aW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0eXBlZGVmIHR5 cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsN Cg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg OiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgew0KICAg IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBfTV9maW5pc2gg PSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0 ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxv Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7 IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j ID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVk IF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K DQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv Yz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0 b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsN CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0eXBlZGVmIGNv bnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgX19u b3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9y Ow0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIs IHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1 ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw ZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCg0K ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv Y2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0K ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KcHJvdGVjdGVk Og0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVzaW5nIF9CYXNl OjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7DQog IHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9CYXNlOjpfTV9l bmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lkIF9NX2luc2Vy dF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOw0K ICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoN CnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRv ciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u c3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9 DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p c2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu IGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAgcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0 b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu KCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQ0KICAgIHsg cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0NCiAgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7IHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoNCiAgc2l6ZV90 eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQo KSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0 DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9 DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAgeyByZXR1cm4g c2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAt IGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0KICAgIHsgcmV0 dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVuY2Ugb3BlcmF0 b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24p OyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf X24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0NCg0KICB2 b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsNCiAg ICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVyZW5jZSBhdChz aXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0 dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6 ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7 IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNpdCB2ZWN0b3Io Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp DQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNpemVfdHlwZSBf X24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jh c2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk X2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0KDQogIGV4cGxp Y2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jhc2UoX19uLCBh bGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9DQoNCiAgdmVj dG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCiAgICA6IF9C YXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyBf TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9f eC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICBjb25zdCBh bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFz ZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9p bml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsN CiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBf TV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs dWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0 ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf X247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f c3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgew0K ICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQogIH52ZWN0b3Io KSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0NCg0KICB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24p IHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgICBwb2ludGVy IF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg X01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz aCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf c3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190bXA7 DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7DQogICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0N CiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u LCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192 YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwg Y29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg X19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh c3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRl Z2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsg X01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7 IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4NCiAgdm9pZCBf TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01fYXNzaWduX2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz dCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN CiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0NCiAg Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu KCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0g MSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVy biAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFjayhjb25zdCBf VHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0 b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f aW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lkIHB1c2hfYmFj aygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdl KSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAgICAgICsrX01f ZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4 KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9j PiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3Rh cnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gp Ow0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2Vu ZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGluc2VydChpdGVy YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0KICAgIHNpemVf dHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01f ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g ZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f aW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsNCiAgICBy ZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRvciBpbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlwZSBfX24gPSBf X3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoICE9IF9N X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsNCiAg ICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytfTV9maW5pc2g7 DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0 b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigpICsgX19uOw0K ICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2 b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh bCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBf X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBs YXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192 YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwg KF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5n ZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGluc2VydCAoaXRl cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQ0K ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQ0KDQog IHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5 cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBwb3BfYmFjaygp IHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7 DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg ew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkNCiAgICAgIGNv cHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsNCiAgICAt LV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7DQogICAgcmV0 dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0 b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAgaXRlcmF0b3Ig X19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0KICAgIGRlc3Ry b3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g KF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICB9 DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0 IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpDQog ICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOw0KICAg IGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo KSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf c2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9DQogIHZvaWQg Y2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0KDQpwcm90ZWN0 ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQog IHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwg X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQgPSBfTV9hbGxv Y2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAgICByZXR1cm4g X19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9j YXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0KDQogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p bml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0 X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7 DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y Pg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRv ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICB7 DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJz dCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUo X19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u Ow0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRl cmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6 ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp LCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwoY29uc3QgdmVj dG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFy ZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSB2 b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7DQp9DQoNCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s DQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwg Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAh KF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNvbnN0IHZlY3Rv cjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j PiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVy YXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feSA8 IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAsX0FsbG9jPiYN CnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3Rvcjxf VHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0gdGhpcykgew0K ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOw0KICAg IGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBwb2ludGVyIF9f dG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4o KSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp bmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRf b2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190 bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194 bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7 DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVu ZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwgZW5kKCkpOw0K ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f eC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAgICB1bmluaXRp YWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg X01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0gX01fc3RhcnQg KyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0KDQp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZlY3RvcjxfVHAs IF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZh bHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2FwYWNpdHkoKSkg ew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwg Z2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0aGlzKTsNCiAg fQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBmaWxsKGJlZ2lu KCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0gdW5pbml0aWFs aXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsN CiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwg X192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQp2b2lk IHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp IHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr X19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7DQogIGVs c2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoN CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3RvcjxfVHAsIF9BbGxv Yz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNpemVfdHlwZSBf X2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p Ow0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAgICBwb2ludGVy IF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf X2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOw0K ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7DQogICAgX01f ZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVu Ow0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgew0KICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f c3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOw0K ICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7DQogIH0NCiAg ZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsNCiAg ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHkoX19maXJzdCwg X19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgfQ0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkDQp2 ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f cG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAoX01fZmluaXNo ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3RydWN0KF9NX2Zp bmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQog ICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9N X2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7DQog IH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUg PSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRf c2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAgIGl0ZXJhdG9y IF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgaXRlcmF0 b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0cnkgew0KICAg ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y KF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQogICAgICBjb25z dHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAgICAgICsrX19u ZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl ZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmlu aXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3 X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3Rh cnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAgZGVzdHJveShi ZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgX01fc3RhcnQg PSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNoID0gX19uZXdf ZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3 X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3RvcjxfVHAsIF9B bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikNCnsN CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAg IGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOw0KICAg ICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg aXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAgICAgICAgICBp dGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9zaXRpb24gPSBf VHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXplX3R5cGUgX19v bGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g PSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7DQogICAg cG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAg ICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRy eSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko aXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsNCiAg ICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAgKytfX25ld19m aW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gp Ow0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3Rh cnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxf X2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5k KCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z dG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh cnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0KICAgIF9NX2Vu ZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsNCiAgfQ0KfQ0K DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBp ZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9z dG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIF9UcCBfX3hf Y29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9j b3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICB1bmluaXRp YWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIs IF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxl bXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9NX2Zp bmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxsKF9fcG9zaXRp b24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAgfQ0KICAgIH0N CiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl ID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19v bGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAgICAgaXRlcmF0 b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsNCiAgICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQogICAgICB0cnkg ew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko YmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAgICAgICBf X25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5p c2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNoDQogICAgICAg ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9f bmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pIHsgKGRl c3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0 ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07DQoNCiAg ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0 YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOw0K ICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICAg IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19s ZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K dm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpf X2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7DQog IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVfdHlwZSBfX24g PSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAg ICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNo KSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7DQogICAg ICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxl bXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQs IF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBjb3B5 KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAgIH0NCiAgICB9 DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6 ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAgICAgIGl0ZXJh dG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgICBp dGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0KICAgICAgdHJ5 IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsN CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAgICAgX19uZXdf ZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmluaXNoKTsNCiAg ICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFy dCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJh c2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVzdHJveShfTV9z dGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgICAgX01f c3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBfTV9maW5pc2gg PSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAgICB9DQogIH0N Cn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAz DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnN0YXRp YyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25l ZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsNCiAgdW5zaWdu ZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFzazsNCiAgX0Jp dF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf X3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQ0KDQpwdWJs aWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDAp IHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhKCEoKl9N X3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9y PShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21h c2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAgICByZXR1cm4g KnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25z dCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJuICp0aGlzID0g Ym9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3Jl ZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJvb2woKnRoaXMp ID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0 X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJuICFib29sKCp0 aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlwKCkgeyAqX01f cCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBzd2FwKF9CaXRf cmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0Kew0KICBib29s IF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9IF9fdG1wOw0K fQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0Kew0KICB1bnNp Z25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7DQoN CiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNp Z25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195 KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zm c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9 IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZvaWQgX01fYnVt cF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7DQogICAg ICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsN CiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkg ew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7 DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAgIF9fbiA9IF9f biAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsNCiAgICAgIF9N X29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7DQog ICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9vZmZzZXQgPSAo dW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9wZXJhdG9yPT0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICBy ZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9N X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0 ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wIDwg X19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwg X19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu ICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJhdG9yPihjb25z dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy biBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9yPD0oY29uc3Qg X0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICByZXR1cm4g IShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0 IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu ICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUgcHRyZGlmZl90 DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJldHVybiBfX1dP UkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9NX29mZnNl dCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9CaXRfaXRlcmF0 b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQogIHR5cGVkZWYg X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9CaXRfcmVm ZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl cmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9i YXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBf X3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0ZXJhdG9yX2Jh c2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp OyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAgIF9NX2J1bXBf dXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRlcmF0b3Igb3Bl cmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K ICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAg aXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVtcF9kb3duKCk7 DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y LS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBf TV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAgaXRl cmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg IF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl cmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg ICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0 ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7 DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190 bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl bmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAq dGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9DQoNCiAgcmVm ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1 cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBfQml0X2l0ZXJh dG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVy YXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0KDQpzdHJ1Y3Qg X0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jh c2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBi b29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25zdCBib29sKiBw b2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf aXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9p dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3RfaXRlcmF0b3Io dW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBf Qml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9CaXRfY29uc3Rf aXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0KICAgIDogX0Jp dF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQ0K DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQogICAg cmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7 DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAg X01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z dF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNvbnN0X2l0ZXJh dG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJl dHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3It LSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gKnRoaXM7 DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsNCiAg ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIF9NX2J1bXBf ZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVy YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7DQogICAg X01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z dF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7 DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBf X2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlz Ow0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAgY29uc3RfaXRl cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsN CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVy biBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh dG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJldHVybiAqKCp0 aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRfY29uc3RfaXRl cmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2Nv bnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQ0KDQoN Cg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19p c19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsNCnB1Ymxp YzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9B bGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRv cl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u c3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfQnZlY3Rv cl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAg OiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5p c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJvdGVjdGVkOg0K ICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQ0KICAg IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBf X1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9pZCBfTV9kZWFs bG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0KICAgICAgX01f ZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3Rv cmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlwZW5hbWUgX0Fs bG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0 b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfQml0 X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9yIF9NX2Zpbmlz aDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFzcyBfQnZlY3Rv cl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1YmxpYzoNCiAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBl Ow0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy ZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVjdG9yX2FsbG9j X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDogX01fc3RhcnQo KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9DQoNCnBy b3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVu c2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlDQogICAgICAg ICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxs b2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxs b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQ0K ICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9N X3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5f TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQogIF9CaXRfaXRl cmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOw0K ICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0KfTsNCg0KdGVt cGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9yX2Jhc2UNCiAg OiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX0J2ZWN0 b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3Rh bmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoNCiAgdHlwZWRl ZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5 cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9C YXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0KDQojIDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0 b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1lc3BhY2Ugc3Rk DQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQogIGNsYXNzIHZl Y3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0Fs bG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJvb2wgdmFsdWVf dHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogICAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgIHR5cGVkZWYg X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVkZWYgYm9vbCBj b25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSog cG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50 ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7DQog ICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y Ow0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojph bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAgcmV0dXJuIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOw0KICAgIH0N Cg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxs b2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf QWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9CdmVjdG9yX2Jh c2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBwcm90ZWN0ZWQ6 DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsNCiAg ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7DQog ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf QklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0 b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlm ZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQgX01faW5zZXJ0 X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgew0KICAgICAg aWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQog ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBf TV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7DQog ICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQog ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXplKCkg OiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQog ICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmluaXNoID0gY29w eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAgX01fZGVhbGxv Y2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICBf TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9DQogICAgfQ0K DQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZv aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAgICAgX01fc3Rh cnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0gaXRlcmF0b3Io KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgcHVz aF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVf cmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX24gPSAw Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAg ICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShfX2ZpcnN0LCBf X2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo aXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg ew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7 DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0KDQogICAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAgdm9pZCBfTV9p bnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAoX19maXJzdCAh PSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAg ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAgICAgICAg aWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAgICAgICAg Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg ZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBfTV9maW5pc2gg Kz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsg bWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9f cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAgaXRlcmF0b3Ig X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es IDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s IGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsNCiAg ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAg IH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy biBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u c3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRvciBlbmQoKSB7 IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVyYXRvciBlbmQo KSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAgIHJldmVyc2Vf aXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl bmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp IGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQ0KICAgIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsNCiAgICAgIHJl dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOw0KICAgIH0N Cg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90 eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5cGUgbWF4X3Np emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9DQogICAgc2l6 ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0dXJuIHNpemVf dHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBi ZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0 dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVyZW5jZSBvcGVy YXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVybiAqKGJlZ2lu KCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBjb25zdF9yZWZl cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdA0KICAgICAg eyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9 DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv bnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAgICAg ICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsNCiAgICB9 DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikNCiAgICAgIHsg X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0K ICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdA0K ICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtf X25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAgICA6IF9CdmVj dG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0b3Ioc2l6ZV90 eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAgICBjb25zdCBh bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAg IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICBf TV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsNCiAgICB9 DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikNCiAgICAg IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpDQog ICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgZmlsbChf TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7DQogICAgfQ0K DQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jh c2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQogICAgICBfTV9p bml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShfX3guYmVnaW4o KSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoNCg0KICAgIHRl bXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luaXRpYWxp emVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1 ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBm aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+ MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp IHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQoNCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdmVjdG9y KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs b2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0 LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3RvcigpIHsgfQ0K DQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsN CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsNCiAgICAg IGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAgICAgICBfTV9k ZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo KSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k KCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRp ZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJldHVybiAqdGhp czsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9maWxsX2Fzc2ln bihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYgKF9fbiA+IHNp emUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBpbnNlcnQoZW5k KCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ug ew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7DQogICAg ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f eCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAgdm9pZCBhc3Np Z24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19u LCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J bnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBf X2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpDQog ICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9f dmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQog ICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgICAgeyBf TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgICAg IGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr X19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNlKF9fY3VyLCBl bmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwgX19m aXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQogICAgICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAgIGlmIChfX2xl biA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xh c3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsNCiAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFk dmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHkoX19maXJzdCwg X19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlk LCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZvaWQgcmVzZXJ2 ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9f bikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv YyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVu ZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01fZGVhbGxvY2F0 ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQog ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09S RF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAgIH0NCg0KICAg IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9DQogICAg Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu KCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkg LSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy ZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNoX2JhY2soYm9v bCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194Ow0KICAg ICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0K ICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9f eCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQp Ow0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7 DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l bmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9yIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAg ICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigp Ow0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y YWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAgICpfTV9maW5p c2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01faW5zZXJ0X2F1 eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJlZ2luKCkgKyBf X247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl cj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAgIF9NX2ZpbGxf aW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQogICAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQgX01faW5zZXJ0 X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19m aXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsN CiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOw0K ICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3Qs IF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAgIHZvaWQgX01f ZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9f biwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOw0K ICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAg ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAgZmlsbChfX3Bv c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9f eCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBzaXplX3R5cGUg X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0KICAgICAgICB1 bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAg ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwg aXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihfX2ksIF9fbiwg X194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBl bmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICBf TV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQog ICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIH0N CiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAgX01fZmlsbF9p bnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0NCg0KICAgIHZv aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAgaXRlcmF0b3Ig ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAgaWYgKF9fcG9z aXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9fcG9zaXRpb24g KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0tX01fZmluaXNo Ow0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0KICAgIGl0ZXJh dG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkg ew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2Zp cnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiAgICB2b2lk IHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29s KCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQ0KICAgICAg ICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUp LCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwg X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQogICAgdm9pZCBm bGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0 YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApDQog ICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2b2lkIGNsZWFy KCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsNCg0KDQp0eXBl ZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsNCg0KfQ0KIyAz OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KDQpu YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4N CiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxl JiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2NvcHkoKnRoaXMp Ow0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19v dGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICByZXR1cm4gX19j b3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBib29sDQog ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBzdGQ6 OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNvbnN0 IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxh dGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21w YXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCks DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNl dCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7 DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9f dmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01f aW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9N X2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2FsZTo6ZmFjZXQq IF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAoX19mcCA9PSAw IHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAgIF9fdGhyb3df YmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBf RmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2Fs ZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6 ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19m YWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAg ICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYmICgqX19mYWNl dClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPg0KICAgIF9J bkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5J dGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLA0KICAg ICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1h aW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAgIF9fZW9mID0g ZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRh cmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7 DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAgc2l6ZV90IF9f cG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICBpbnQg X190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3JlbWFpbiAm JiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkp DQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYgKF9fdGkgPT0g X19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf X3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAgICAgIHJldHVy biBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fcyA9PSBf X2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAgICAgICAgICBi b29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZvciAoaW50IF9f dGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9 IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAgICAgICAgICAg aWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBfX3RhcmdldFtf X3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNb LS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIF9f bWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChf X21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICsrX19z Ow0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjsp DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9f dGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQogICAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9 IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgKytf X3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgd2hpbGUg KF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0X2NhY2hlPF9D aGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFsaWQodHJ1ZSks IF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0 ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgp Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hlPHdjaGFyX3Q+ OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9N X3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAgICAgIGxvY2Fs ZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVtcHVuY3Q8X0No YXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1l KCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNlbmFtZSgpOw0K ICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgp Ow0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVjaW1hbF9wb2lu dCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7DQog ICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0g MCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAgICAgIF9NX3Zh bGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9z X2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAgIHsNCiAgICAg IHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAgICAgIHN3aXRj aCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlvc19iYXNlOjpl cmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zv cm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAgICBfX3AgPSAw Ow0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlvc19iYXNlOjpj b3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7 IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0NCiAgICAgICAg ICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAgICAgICBicmVh azsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZlbnQ6DQogICAg ICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19w KS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVhazsNCiAgICAg ICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog ICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3JtYXRfY2FjaGU8 X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAgICB7DQogICAg ICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29yZF9peCA9IGlv c19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5w d29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9fcCA9PSAwKQ0K ICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxf Q2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsNCiAg ICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNo ZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAgICAgX19wID0g X19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9Gb3JtYXRfY2Fj aGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hl PF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+X01fdmFsaWQp DQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7DQoNCiAgICAg IHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUvbWRlaWwvYmlu Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K ICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYg LA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgY2hhciog LA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25zdA0KICAgIHsN Cg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bV9n ZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoNCiAgICBf TV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsDQog ICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5k LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwNCiAg ICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAgIGlmICghKF9f aW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0KICAgICAgICB7 DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNbMzJdID0geydc MCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAgICAgX01fZXh0 cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz ZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg ICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgICAgIGxvbmcg X19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOw0KICAg ICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAg ICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAgICYmIF9fc2Fu aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l cnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9fbDsNCiAgICAg ICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAgICAgICAgew0K ICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFyX3R5cGU+IF9f ZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlwZSogX19mbXQg PSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19z dHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2UgPSBf X2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Ry dWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7DQoNCiAgICAg ICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9IF9fZW5kOyAr K19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5 cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0 ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAgICAgICAgYm9v bCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQogICAgICAgICAg ICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh aWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19w b3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChf X3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAgICAgICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAgIH0NCg0KICAg ICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXIN CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hv cnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBjaGFyIF9feHRy Y1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9l eHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i YXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg ICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0 b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShf X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2Fu aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l cnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAoLTMyNzY3LTEp ICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8 c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlv c19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAgIHsNCg0KDQoN CiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAgICAgIGludCBf X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hh ciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAg ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFz ZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0K ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkg PT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYm IF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3 KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7DQogICAg ICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0K DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0 ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg bG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAgIGNoYXIgX194 dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAgICAgIF9N X2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf X2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg ICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25nIF9fbCA9IHN0 cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAgICAgIGlmICgh KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7DQogICAgICBl bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQog ICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQog ICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19l bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoN CiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkp ID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194 dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAm IGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9 IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygp KSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpDQogICAgICAg IF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsNCiAg ICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0 ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAg Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2ln bmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9f YmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0 KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAg ICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0KICAgICAgICBf X3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAg ZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0K ICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0K ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0 ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp Z25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hh ciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAg ICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0 eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICB1bnNpZ25l ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh c2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkN CiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5 ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQogICAgICAgIF9f diA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0K IyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3Yp IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7 J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1 ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19l cnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19mID0gc3RhdGlj X2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSkpOw0KDQog ICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAg ICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1ww JyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgX192ID0gX19m Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f eHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0 eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBkb3VibGUg X19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAgICAgIGlmICgh KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7DQogICAgICBl bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9ob21lL21kZWls L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAg ew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGlu dCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBp b3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkg JiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3QgY2hhciogX19j b252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3Qp DQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxzZSBpZiAoX19i YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgX19jb252ID0g IiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQ0KICAg ICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19j b252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUgX19sZDsNCiAg ICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYsICZfX2xkKTsN CiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNfY2FzdDx0eXBl bmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0KICAgICAgICAh PSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192ID0gX19sZDsN CiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAgICAgdHlwZWRl ZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAgICBmbXRmbGFn cyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZsYWdzIF9fZm10 bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZp ZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6 OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQogICAgICBfX2lv LmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBp b3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAgY2hhciBfX3h0 cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f YmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAg ICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQqIF9fdnAgPSBy ZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2Fu aXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6 OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0K ICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2Vy ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBfX2lvLmZsYWdz KF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4N CiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0SXRlciBfX3Ms IF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQogIHRlbXBsYXRl IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+DQogICAgX1Jh SXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBp bnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7DQog ICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0NCg0KICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlw ZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkKF9PdXRJdGVy IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykNCiAg ICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkgeyAqX19zID0g X19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoN CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQoX091dEl0ZXIg X19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0KICAgIHsNCiAg ICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLA0KICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0 SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0NCg0KICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAg ICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBp b3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAgICAgX0NoYXJU ICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogLCBf Q2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25z dCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCiAg dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zs YWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgaW50IF9f d2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAgICAgICAgICAg ICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBjb25zdCogX19s YXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRv cjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19wYWRkaW5nID0g X193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAgIGlmIChfX3Bh ZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0KICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlvc19iYXNl OjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3Bh ZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdA0KICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09IGlvc19iYXNl OjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAhPSBfX21pZGRs ZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxs LCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRpbmcgPSAwOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19taWRk bGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0ZXIgX19zMiA9 IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBp b3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAgIF9fcGFkKF9f czIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRpbmcg PSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5 KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYgKF9fcGFkZGlu ZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3BhZGRpbmcpOw0K ICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m aWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBfRm9y bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg X19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYgKChfX2ZsYWdz ICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAgICAgew0KICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAgICAgICAgICBy ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs c2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7DQogICAgICAg ICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAgICAgaWYgKF9f dikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9f Zm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAgICAgIF9fbGFz dCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6ZSgpOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0 YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQt Pl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAgICAgIH0NCiAg ICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAgX19ncm91cF9k aWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBjaGFyIGNvbnN0 KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0 KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQogICAgICAgICAg ICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAg IGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpDQogICAgICAg IHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhfX3MsIF9fZ3Jz ZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9PSBfX2dyZW5k ID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAgICAgICAgICAg ICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOw0K ICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91cGluZzsNCiAg ICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9DQogICAgICBk bw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsN CiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsN CiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVmFs dWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0 SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29s IF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikNCiAgICB7DQoN CiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNfbGltaXRzPF9W YWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0NoYXJUIF9fZGln aXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdp dHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh Z3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9ybWF0X2NhY2hl PF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19n ZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQt Pl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0KICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxhZ3MgJiBfX2lv LmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zy b250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgp DQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNl Ojp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9IDE2Ow0KICAg ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf X3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9IDAp Ow0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0KICAgICAgICAg IGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xp dGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAgICAgICAgICAg KChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOw0K ICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19iYXNlZmll bGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAgICAgICAgIGRv DQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsN CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7DQogICAgICAg ICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAg ICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQpICE9IF9fdGFi bGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsN CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAgICAgICAgfQ0K ICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBkbw0KICAgICAg ICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBdOw0KICAgICAg ICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAgICAgICBfX3Np Z25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChfX25lZyB8fCAo X19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAgICAgICAgICot LV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3BsdXMg LSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAoIV9fZm10LT5f TV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAgICAgICAgcmV0 dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOw0K DQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpDQogICAgICAg IHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBf X2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOw0KDQog ICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAgd2hpbGUgKF9f ZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysgPSAqX19mcm9u dCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91 cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91cF9kaWdpdHMo X19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwNCiAgICAgICAg X19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQs IF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4gX19wYWRfbnVt ZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBfX3AsIF9fZnJv bnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3Yp IGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192 Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAgaWYgKF9fdiA8 IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRydWU7DQogICAg ICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAgICByZXR1cm4g X19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgX19uZWcsIF9f dXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX19v dXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7 IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVy Pg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQoX091dEl0ZXIg X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwNCiAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVu KQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+DQogICAg X19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U cmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAg ICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3Qg X19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lv LndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAgICAgICAgICAg ICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsNCiAgICAg IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjdHlwZTxf Q2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGpmaWVs ZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAg ICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0ciArIF9fc2xl bjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVy bmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0 ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAnLScpKQ0KICAg ICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z cHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAgICAgICArK19f c3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0gX19wYWQoX19z LCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3BhZGRpbmcgPSAw Ow0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0gaW9z X2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX3Bh ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRp bmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19kZWNpbWFsX3Bv aW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOw0KICAgICAg Y29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRf Y2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAgZm9yICg7IF9f c3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAgICAgICB7DQoN CiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9wb2ludCkNCiAg ICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7DQoNCiAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z cHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRpbmcpDQogICAg ICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgX19p by53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIGJv b2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2UmIF9faW8sIGNo YXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAgICAgICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVtcGxhdGUgPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0 ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf X2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAgICAgY29uc3Qg c3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl Pjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBf X2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVjID4gX19tYXhf cHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsNCg0KICAgICAg Y2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAgc2l6ZV90IF9f c2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAgICAgaWYgKF9f YnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwgX19wcmVjKSkN CiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19w cmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3NsZW4gPSBzcHJp bnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICByZXR1cm4gX19v dXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVu KTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9D aGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAg IGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBz dHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxsb25nIGRv dWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNpemUgX19wcmVj ID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9fcHJlYyA+IF9f bWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3ByZWM7DQoNCiAg ICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAgICAgIHNpemVf dCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsNCg0KICAgICAg aWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBf X3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19m YnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAgIF9fc2xl biA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoNCiAgICAgIHJl dHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVm LCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAg ICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgIHsNCiAgICAg IHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOw0KICAgICAg Zm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAgICBmbXRmbGFn cyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6 OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAg ICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6 aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0cnkgew0KICAg ICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9f aW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3Yp KTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAgICAgIHJldHVy biBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikgew0KICAgICAg ICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7DQogICAgICB9 DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0IF9XZWVrZGF5 bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0 cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAgICB7IHN0YXRp YyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0 DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+OjpfU19uYW1lc1sx NF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwNCiAgICAgICJN b24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldlZCIsICJXZWRu ZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJp ZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAxMTM1ICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj ZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRobmFtZXM7DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0cnVjdCBfTW9u dGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBjb25zdCBjaGFy KiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQogICAgX01vbnRo bmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0KICAgIHsNCiAg ICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVhcnkiLCAiTWFy IiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1h eSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1bHkiLCAiQXVn IiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAgICAgICJPY3Qi LCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVjIiwgIkRlY2Vt YmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf SW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg ZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k LA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgew0KICAg ICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9N X2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzE0XTsNCiAg ICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpDQog ICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxf Q2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQogICAgICBib29s IF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1haW4gPSAwOw0K ICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVyX3R5cGUgX19v dXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBfTV9kYXlu YW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2Vv ZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4g PT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hl c1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+ dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAgZWxzZQ0KICAg ICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICByZXR1cm4gX19v dXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0 bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01fbW9udGhuYW1l cykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFtZXMgPSBuZXcg YmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAgIGZvciAoaW50 IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAgICAgIF9NX21v bnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVz W19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxz ZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBpbnQgX19tYXRj aGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9fbWF0Y2hfcGFy YWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVzLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVz LCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0g X19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fA0KICAg ICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0g KF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9f bWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9 IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQp9 DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMw0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0 cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEg Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX29zdHJlYW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJh c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN Cg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5 cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry ZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5 cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251 bXB1dF90eXBlOw0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5 cGVfdHlwZTsNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfb3N0 cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgeyB0aGlzLT5p bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19v c3RyZWFtKCkgeyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAg ZnJpZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9fb3N0cmVhbV90 eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm KShfX29zdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf dHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVy YXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsNCg0KDQog ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwobG9uZyBf X24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y PDwodW5zaWduZWQgbG9uZyBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlw ZSYNCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOw0KDQogICAgICBfX29z dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQ0KICAg ICAgew0KICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlz LT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgICAgaWYg KF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpo ZXgpDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj X2Nhc3Q8dW5zaWduZWQgbG9uZz4NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikp KTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVy YXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQog ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu ZWQgc2hvcnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8 PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KDQogICAg ICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikN CiAgICAgIHsNCiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0g dGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAg IGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz ZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19u KSkpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7DQogICAgICB9DQoN CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNp Z25lZCBpbnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8 PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KIyAxMzUg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9v c3RyZWFtLmgiIDMNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl cmF0b3I8PChkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikNCiAgICAgIHsgcmV0dXJu IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsg fQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwo bG9uZyBkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQog ICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7DQoNCiAgICAgIF9f b3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiKTsNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg IHB1dChjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm DQogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIGZsdXNo KCk7DQoNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxwKCk7DQoNCiAg ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgc2Vla3AocG9zX3R5cGUpOw0K DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKG9mZl90eXBl LCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoNCiAg ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IF9f b3N0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3Qg X19vc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg ew0KDQogICAgICBib29sIF9NX29rOw0KICAgICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsX1RyYWl0cz4mIF9NX29zOw0KDQogICAgcHVibGljOg0KICAgICAg ZXhwbGljaXQNCiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYgX19vcyk7DQoNCiAgICAgIH5zZW50cnkoKQ0KICAgICAgew0K DQogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRi dWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQ0KICAgICAgICAgIHsNCg0K ICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYo KS0+cHVic3luYygpID09IC0xKQ0KICAgICAgICAgICAgICBfTV9vcy5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICB9DQogICAgICB9 DQoNCiAgICAgIG9wZXJhdG9yIGJvb2woKQ0KICAgICAgeyByZXR1cm4gX01f b2s7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf X2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykp OyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsN Cg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2Mp DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9f YykpOyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNo YXIgX19jKQ0KICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj aGFyPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmDQogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf X291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAo X19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7 IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29z dHJlYW08Y2hhciwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kbChiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4g Zmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBlbmRzKGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJl dHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGZsdXNoKGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJldHVybiBfX29z LmZsdXNoKCk7IH0NCg0KfQ0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAxIDMNCiMg MzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29z dHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDMzICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoNCiAgICBzZW50cnkoYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpDQogICAgOiBfTV9vayhf X29zLmdvb2QoKSksIF9NX29zKF9fb3MpDQogICAgew0KDQogICAgICBpZiAo X01fb2sgJiYgX19vcy50aWUoKSkNCiAgICAgICAgX19vcy50aWUoKS0+Zmx1 c2goKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 Og0KICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v c3RyZWFtX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg ICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0K DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhy b3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAq dGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 Og0KICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190 eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBv cGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpDQogICAg ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7 IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19u KQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1 dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkN CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs b25nIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9 IHRoaXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZs YWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll bGQ7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt cHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBi b29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fZm10 ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpDQog ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+ KF9fbik7DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1 dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAg ICAgIGlmIChfX2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9u ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1 dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl ZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KIyAyNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pDQogICAgew0KICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg ICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAg ICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikN CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29u c3Qgdm9pZCogX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9N X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u KS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0 aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pDQogICAgew0K ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsNCiAgICAgIF9fc3RyZWFt YnVmX3R5cGUqIF9fc2JvdXQgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19zYmluICYmIF9fY2Vy YikNCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlz LCBfX3NiaW4sIF9fc2JvdXQpOw0KICAgICAgaWYgKCFfX3NiaW4gfHwgIV9f eHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0KICAg IHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9f Y2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0g cmRidWYoKS0+c3B1dGMoX19jKTsNCiAgICAgICAgICBpZiAoX19wdXQgIT0g dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpDQogICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0K ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVh bXNpemUgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHN0 cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f bik7DQogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pDQogICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQ0KICAgIHsNCiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVm KCktPnB1YnN5bmMoKSA9PSAtMSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICB9DQogICAgICByZXR1 cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0eXBlbmFtZSBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpDQogICAgew0KICAgICAg cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7DQogICAgICBib29sIF9f dGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoNCiAgICAgIGlmIChf X3Rlc3RvaykNCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz ZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOw0KICAg ICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykNCiAgICB7DQog ICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoN CiAgICAgIGlmIChfX3Rlc3RvaykNCiAgICAgICAgew0KDQoNCiAgICAgICAg ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3Mo X19wb3MsIGlvc19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19l cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGZhaWxiaXQpOw0KDQogICAgICAgIH0NCiAgICAgIHJl dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Og0KICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6 c2Vla2RpciBfX2QpDQogICAgew0KICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo aXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190ZXN0b2spDQog ICAgICAgIHsNCg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlz LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlv c19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9z X3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGZhaWxiaXQpOw0KICAgICAgICB9DQoNCiAgICAgIHJldHVybiAqdGhp czsNCiAgICB9DQojIDQ1NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv ZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBf X3BhZF9jaGFyKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN CiAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQq IF9fb2xkcywNCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19u ZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pDQogICAgew0KICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf VHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0 cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQoNCiAgICAgIGludF90 eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBf X29sZGxlbik7DQogICAgICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19j YXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJf dHlwZSkgKiBfX3BsZW4pKTsNCiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o X19wYWRzLCBfX3BsZW4sIF9faW9zLmZpbGwoKSk7DQoNCiAgICAgIGNoYXJf dHlwZSogX19iZWc7DQogICAgICBjaGFyX3R5cGUqIF9fZW5kOw0KICAgICAg c2l6ZV90IF9fbW9kID0gMDsNCiAgICAgIHNpemVfdCBfX2JlZ2xlbjsNCiAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkg JiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7DQoNCiAgICAgIGlmIChfX2ZtdCA9 PSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KDQogICAgICAgICAgX19i ZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAg ICAgX19iZWdsZW4gPSBfX29sZGxlbjsNCiAgICAgICAgICBfX2VuZCA9IF9f cGFkczsNCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19mbXQgPT0gaW9z X2Jhc2U6OmludGVybmFsKQ0KICAgICAgICB7DQoNCg0KDQogICAgICAgICAg dHlwZWRlZiBfRm9ybWF0X2NhY2hlPF9DaGFyVD4gX19jYWNoZV90eXBlOw0K ICAgICAgICAgIF9fY2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hl X3R5cGU6Ol9TX2dldChfX2lvcyk7DQogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29s ZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfbWludXMpOw0KICAgICAgICAg IGNvbnN0IGNoYXJfdHlwZSogX19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQo X19vbGRzLCBfX29sZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsN CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1 czsNCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAn MCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0g PT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOw0KDQogICAgICAgICAgaWYg KF9fdGVzdGhleCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19u ZXdzWzBdID0gX19vbGRzWzBdOw0KICAgICAgICAgICAgICBfX25ld3NbMV0g PSBfX29sZHNbMV07DQogICAgICAgICAgICAgIF9fbW9kICs9IDI7DQogICAg ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s ZHMgKyBfX21vZCk7DQogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRs ZW4gLSBfX21vZDsNCiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7DQog ICAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19tb2QgKz0gX19wbGVu Ow0KICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fc2lnbiA9IF9f bWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsNCiAgICAgICAgICAg ICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQog ICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19vbGRzOw0KICAg ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19z aWduICsgX19wbGVuKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCiAg ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f YmVnbGVuID0gX19wbGVuOw0KICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0 X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBf X2JlZyA9IF9fcGFkczsNCiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsN CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v bGRzKTsNCiAgICAgICAgfQ0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShf X25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7DQogICAgICB0cmFpdHNfdHlwZTo6 Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0gX19i ZWdsZW4gLSBfX21vZCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQ0KICAg IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+IF9fb3N0cmVhbV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFt X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2Vy YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7 DQogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8 X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f dykpOw0KICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7DQogICAgICAg ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOw0KICAgICAgICAgICAgICBp ZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3cs IF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19w YWRzLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQu c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRl bXBsYXRlIDxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpDQogICAgew0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVh bV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy eSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7DQogICAgICAgICAg ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0 aW5fYWxsb2NhKF9fdyArIDEpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBd ID0gX19jOw0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsN CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9f cGFkcywgJl9fYywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBf X2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg IF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOw0KICAgICAgICAgICAgICBf X291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg ICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsN CiAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICB7DQogICAg ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAg ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+ KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCiAg ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0 cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAgICAgICAg ICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBf X3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsN CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7 DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAg ICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg ICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19z KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYg Y2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7DQoNCiAgICAgIHR5 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsN CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXpl X3QgX19jbGVuID0gX19jdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOw0KICAg ICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkp KTsNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19j bGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0Lndp ZGVuKF9fc1tfX2ldKTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193 czsNCg0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6 ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBf X291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9 IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m KF9DaGFyVCkgKiBfX3cpKTsNCg0KICAgICAgICAgICAgICBpZiAoX193ID4g X19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsN CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOw0KICAgICAgICAg ICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOw0KICAgICAg ICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsN Cg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAg dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy biBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz Pg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg Y29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBjaGFyKiBfX3Bh ZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cp KTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j YXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAg ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywg X19zLCBfX3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9f cGFkczsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf X2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vdXQsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikNCiAgICB7DQogICAg ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRh dGEoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo KCk7DQogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxf Q2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193 KSk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0 PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7DQoNCg0KDQogICAgICAgICAg aWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7 DQogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsNCiAgICAgICAgICAgICAg X19sZW4gPSBfX3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgc3RyZWFt c2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4p Ow0KICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgIGlmIChf X3JlcyAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f b3V0Ow0KICAgIH0NCn0NCiMgMjc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMNCiMgMzQgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0 JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0 b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0 aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0 KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5 cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7 DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09 IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9 IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190 ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9 IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7 DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291 bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291 bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8 IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0 aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5 bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+ cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0 cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0 aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5 cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+ PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0 eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7 DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9 IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0 IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47 DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7 DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193 ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9 PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7 DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190 ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07 DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0 ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy IDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMg NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDEgMw0KIyAzOCAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmls ZS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEg Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp dHMvYmFzaWNfZmlsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMNCiMgNDEgIi9o b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2Zp bGUuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cnVjdCBfX2Jhc2lj X2ZpbGVfYmFzZTogcHVibGljIF9fY19maWxlX3R5cGUNCiAgICB7DQogICAg ICB2aXJ0dWFsDQogICAgICB+X19iYXNpY19maWxlX2Jhc2UoKSB7IH07DQoN CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0g KC0xKSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdW5kZXJm bG93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdWZsb3co KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBwYmFja2ZhaWwo aW50IF9fYykgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAg ICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p ID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dl dG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAg IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBf X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAg IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBp b3NfYmFzZTo6b3V0KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2Zm DQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8 IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1i dWYqDQogICAgICBzZXRidWYoX0NoYXJUKiBfX2IsIGludCBfX2xlbikgPSAw Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3luYygpID0gMDsNCg0K ICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKSA9IDA7DQoN CiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3JlYWQoX0No YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog X19zLCBzdHJlYW1zaXplIF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0 cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2ZmIF9fb2ZmLCBpb3Nf YmFzZTo6c2Vla2RpciBfX3dheSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu dA0KICAgICAgc3lzX2Nsb3NlKCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu dA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KSA9IDA7DQoNCiAgICAgIHZp cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKSA9IDA7DQoNCiAgICAgIHZp cnR1YWwgdm9pZA0KICAgICAgaW1idWUodm9pZCogX192KSA9IDA7DQogICAg fTsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQoNCg0K DQogICAgY2xhc3MgX19iYXNpY19maWxlDQoNCiAgICB7DQoNCiAgICAgIF9f Y19maWxlX3R5cGUqIF9NX2NmaWxlOw0KICAgICAgYm9vbCBfTV9jZmlsZV9j cmVhdGVkOw0KDQoNCg0KDQoNCg0KICAgIHB1YmxpYzoNCiAgICAgIF9fYmFz aWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7DQoNCiAgICAgIHZvaWQN CiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl LCBpbnQmIF9fcF9tb2RlLCBpbnQmIF9fcndfbW9kZSwNCiAgICAgICAgICAg ICAgICAgICBjaGFyKiBfX2NfbW9kZSk7DQoNCg0KICAgICAgX19iYXNpY19m aWxlKg0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX25hbWUsIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUsIGludCBfX3Byb3QgPSAwNjY0KTsNCg0KDQoN Cg0KDQogICAgICBfX2Jhc2ljX2ZpbGUqDQogICAgICBzeXNfb3BlbihfX2Nf ZmlsZV90eXBlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUp Ow0KDQogICAgICBfQ2hhclQNCiAgICAgIHN5c19nZXRjKCk7DQoNCiAgICAg IF9DaGFyVA0KICAgICAgc3lzX3VuZ2V0YyhfQ2hhclQpOw0KDQogICAgICBf X2Jhc2ljX2ZpbGUqDQogICAgICBjbG9zZSgpOw0KDQogICAgICBib29sDQog ICAgICBpc19vcGVuKCk7DQoNCg0KDQoNCg0KICAgICAgdmlydHVhbA0KICAg ICAgfl9fYmFzaWNfZmlsZSgpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAg ICAgb3ZlcmZsb3coaW50IF9fYyA9ICgtMSkpOw0KDQogICAgICB2aXJ0dWFs IGludA0KICAgICAgdW5kZXJmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50 DQogICAgICB1ZmxvdygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg cGJhY2tmYWlsKGludCBfX2MpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0 cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp emUNCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p Ow0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc2Vl a29mZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5 LA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCg0KDQoNCiAgICAg IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBf X3BvcywNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOw0KDQogICAgICB2 aXJ0dWFsIHN0cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwg aW50IF9fbGVuKTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHN5bmMo KTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKTsN Cg0KDQoNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNf cmVhZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQog ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHN5c193cml0ZShjb25z dCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAg ICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2Zm IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSk7DQoNCiAgICAgIHZp cnR1YWwgaW50DQogICAgICBzeXNfY2xvc2UoKTsNCg0KICAgICAgdmlydHVh bCBpbnQNCiAgICAgIHN5c19zdGF0KHZvaWQqIF9fdik7DQoNCiAgICAgIHZp cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKTsNCg0KICAgICAgdmlydHVh bCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpOw0KICAgIH07DQp9DQoN Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9kZWwuaCIg MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9iYXNpY19maWxlX21vZGVsLmgi IDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46Ol9fYmFzaWNfZmls ZShfX2NfbG9jayogKQ0KICAgIDogX01fY2ZpbGUoX19udWxsKSwgX01fY2Zp bGVfY3JlYXRlZChmYWxzZSkgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp+X19iYXNpY19m aWxlKCkNCiAgICB7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAg ICAgICB7DQogICAgICAgICAgZmZsdXNoKF9NX2NmaWxlKTsNCiAgICAgICAg ICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX19iYXNpY19m aWxlPF9DaGFyVD46Ol9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUg X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50JiAsIGludCYgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciogX19jX21vZGUpDQogICAgew0KICAgICAgYm9v bCBfX3Rlc3RiID0gX19tb2RlICYgaW9zX2Jhc2U6OmJpbmFyeTsNCiAgICAg IGJvb2wgX190ZXN0aSA9IF9fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAg IGJvb2wgX190ZXN0byA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAg ICBib29sIF9fdGVzdHQgPSBfX21vZGUgJiBpb3NfYmFzZTo6dHJ1bmM7DQog ICAgICBib29sIF9fdGVzdGEgPSBfX21vZGUgJiBpb3NfYmFzZTo6YXBwOw0K DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm JiAhX190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0K ICAgICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYg X190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiYSIpOw0KICAg ICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190 ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0KICAgICAg aWYgKF9fdGVzdGkgJiYgIV9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVz dGEpDQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIiKTsNCiAgICAgIGlm IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEp DQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIrIik7DQogICAgICBpZiAo X190ZXN0aSAmJiBfX3Rlc3RvICYmIF9fdGVzdHQgJiYgIV9fdGVzdGEpDQog ICAgICAgIHN0cmNweShfX2NfbW9kZSwgIncrIik7DQogICAgICBpZiAoX190 ZXN0YikNCiAgICAgICAgc3RyY2F0KF9fY19tb2RlLCAiYiIpOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19iYXNpY19m aWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19v cGVuKF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7 DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fZmlsZSkNCiAg ICAgICAgew0KICAgICAgICAgIF9NX2NmaWxlID0gX19maWxlOw0KICAgICAg ICAgIF9NX2NmaWxlX2NyZWF0ZWQgPSBmYWxzZTsNCiAgICAgICAgICBfX3Jl dCA9IHRoaXM7DQogICAgICAgIH0NCg0KICAgICAgcmV0dXJuIF9fcmV0Ow0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0No YXJUDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19nZXRjKCkNCiAg ICB7DQogICAgICByZXR1cm4gZ2V0YyAoX01fY2ZpbGUpOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0NoYXJUDQogICAg X19iYXNpY19maWxlPF9DaGFyVD46OnN5c191bmdldGMoX0NoYXJUIF9fcykN CiAgICB7DQogICAgICByZXR1cm4gdW5nZXRjIChfX3MsIF9NX2NmaWxlKTsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIF9f YmFzaWNfZmlsZTxfQ2hhclQ+Kg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+ OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7 DQogICAgICBpbnQgX19wX21vZGUgPSAwOw0KICAgICAgaW50IF9fcndfbW9k ZSA9IDA7DQogICAgICBjaGFyIF9fY19tb2RlWzRdOw0KDQogICAgICBfTV9v cGVuX21vZGUoX19tb2RlLCBfX3BfbW9kZSwgX19yd19tb2RlLCBfX2NfbW9k ZSk7DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7 DQogICAgICAgICAgaWYgKChfTV9jZmlsZSA9IGZvcGVuKF9fbmFtZSwgX19j X21vZGUpKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fY2Zp bGVfY3JlYXRlZCA9IHRydWU7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhp czsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog ICAgYm9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkg eyByZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBf X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9f YmFzaWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2Zp bGUqPihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYg ZmNsb3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0K ICAgICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNf ZmlsZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUg X19uKQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmls ZSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3Ry ZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29u c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFz aWNfZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9z X2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVr KF9NX2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2Zp bGUpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0 cmVhbW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0 cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2Zp bGUsIF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2Nm aWxlKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp bnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyBy ZXR1cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hh clQ+OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBf X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVy biAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog ICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAg ICB7IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBi YWNrZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAg X19iYXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkN CiAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRo aXMpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0K ICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9D aGFyVD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikN CiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29u c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19i YXNpY19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3Bvcywg aW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWso X01fY2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwo X01fY2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz X2Nsb3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAg X19iYXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7 IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dt YW55YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8 X0NoYXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgi IDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQoj IDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o IiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7 DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN Cg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90 eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7 DQogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFz aWNfZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5 cGU7DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBf X3N0YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQog ICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0K DQogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRl Og0KDQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAg IF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5 cGUgX01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7 DQoNCg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAg IGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQog ICAgICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1 ZihfX2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21v ZGUsDQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRp Y19jYXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAg ICAgIH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+ Y2xvc2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7 DQogICAgICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lk KSBjb25zdCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3Blbigp IDogZmFsc2U7IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBv cGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k ZSk7DQoNCiAgICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9p ZCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9h bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAg ICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9p ZA0KICAgICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAg ICAgdm9pZA0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAg IHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0K DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVy Zmxvdyh2b2lkKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAg cGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMg MTQ4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z dGRfZnN0cmVhbS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg ICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoj IDE1OCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2ZzdHJlYW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3Jl YWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7 DQoNCiAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNl dGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAg ICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9f b2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAg aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv c19iYXNlOjpvdXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAg ICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh c2U6Om91dCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZv aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0 X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYg KF9fdGVzdHB1dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01f ZmlsZS0+c3luYygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9m ZiBfX2N1ciA9IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7 DQogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBf TV9vdXRfYmVnOw0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7 DQogICAgICAgICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYp Ow0KICAgICAgICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g ZmFsc2U7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2 aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp Ow0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAg ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9w YmFja19pbml0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChf X3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsN CiAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsr X19zOw0KICAgICAgICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAg ICAgICB9DQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAg ICAgICAgfQ0KICAgICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAg X19yZXQgKz0gX19zdHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0g X19yZXQpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAg ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAg ICAgX01fcGJhY2tfZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJl YW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAg ICAgdm9pZA0KICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0K DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1Ymxp YzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3Nf dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9m Zl90eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmls ZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsN CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0 c190eXBlPiBfX2lzdHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAg ICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0K DQogICAgICBiYXNpY19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90 eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0 KCZfTV9maWxlYnVmKTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFz aWNfaWZzdHJlYW0oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1f dHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAg dGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4o X19zLCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJl YW0oKQ0KICAgICAgeyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQog ICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj aGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz ZTo6aW4pDQogICAgICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4o X19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAg ICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7 DQogICAgICAgIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0N CiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBw dWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQog ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlw ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190 eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf dHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBi YXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1 Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlw ZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0 ZToNCiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBw dWJsaWM6DQoNCiAgICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19v c3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRo aXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQog ICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z X2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVh bV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAg ICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3Bl bihfX3MsIF9fbW9kZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0 cmVhbSgpDQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoN CiAgICAgIHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25z dF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAg ICAgIGJvb2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmls ZWJ1Zi5pc19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihj b25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k ZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0K ICAgICAgew0KICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9f bW9kZSB8IGlvc19iYXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9p ZA0KICAgICAgY2xvc2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFf TV9maWxlYnVmLmNsb3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBj bGFzcyBiYXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFp dHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0 c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAg dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5 cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlw ZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRl ZiBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlw ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0 cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToN CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJs aWM6DQoNCiAgICAgIGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3Ry ZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMt PmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAg ICBiYXNpY19mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlw ZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhp cy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19z LCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgp DQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAg IHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0 PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj aGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0K ICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQog ICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg fQ0KDQogICAgICB2b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0K ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBz ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsN Cn0NCg0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl L2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAz DQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxl KCkNCiAgICB7DQogICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAg ICAgICAgICBfTV9idWZfdW5pZmllZCA9IHRydWU7DQogICAgICAgICAgdHJ5 DQogICAgICAgICAgICB7IF9NX2ZpbGUgPSBuZXcgX19maWxlX3R5cGUoJl9N X2xvY2spOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICBkZWxldGUgX01fZmlsZTsNCiAgICAgICAgICAg ICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpDQogICAg ew0KICAgICAgaWYgKCFfTV9idWYgJiYgX01fYnVmX3NpemVfb3B0KQ0KICAg ICAgICB7DQogICAgICAgICAgX01fYnVmX3NpemUgPSBfTV9idWZfc2l6ZV9v cHQ7DQoNCg0KICAgICAgICAgIHRyeSB7IF9NX2J1ZiA9IG5ldyBjaGFyX3R5 cGVbX01fYnVmX3NpemVdOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg ICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0K ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg ICBfTV9idWZfYWxsb2NhdGVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0N Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoNCiAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpDQog ICAgew0KICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0ZWQpDQogICAgICAgIHsN CiAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0KICAgICAgICAgIF9NX2J1 ZiA9IF9fbnVsbDsNCiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFs c2U7DQogICAgICAgICAgdGhpcy0+c2V0ZyhfX251bGwsIF9fbnVsbCwgX19u dWxsKTsNCiAgICAgICAgICB0aGlzLT5zZXRwKF9fbnVsbCwgX19udWxsKTsN CiAgICAgICAgfQ0KICAgIH0NCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9wYmFj a19idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICghX01fcGJhY2sgJiYgX01f cGJhY2tfc2l6ZSkNCiAgICAgICAgew0KDQogICAgICAgICAgdHJ5DQogICAg ICAgICAgICB7IF9NX3BiYWNrID0gbmV3IGNoYXJfdHlwZVtfTV9wYmFja19z aXplXTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAg ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg ICBiYXNpY19maWxlYnVmKCkNCiAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwg X01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkp LA0KICAgIF9NX3N0YXRlX2JlZyhfX3N0YXRlX3R5cGUoKSksIF9NX2J1Zl9h bGxvY2F0ZWQoZmFsc2UpLA0KICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZChmYWxz ZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U cmFpdHM+OjoNCiAgICBiYXNpY19maWxlYnVmKF9fY19maWxlX3R5cGUqIF9f ZiwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50X3R5cGUgX19zKQ0K ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksDQog ICAgX01fbGFzdF9vdmVyZmxvd2VkKGZhbHNlKQ0KICAgIHsNCiAgICAgIF9N X2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgIF9NX2ZpbGUtPnN5c19vcGVuKF9f ZiwgX19tb2RlKTsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAg ICAgIHsNCiAgICAgICAgICBfTV9tb2RlID0gX19tb2RlOw0KICAgICAgICAg IGlmIChfX3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX2J1 Zl9zaXplX29wdCA9IF9fczsNCiAgICAgICAgICAgICAgX01fYWxsb2NhdGVf aW50ZXJuYWxfYnVmZmVyKCk7DQogICAgICAgICAgICAgIF9NX3NldF9pbmRl dGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYWxs b2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVm X3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoN CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbW9kZSkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQg PSBfX251bGw7DQogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkNCiAgICAg ICAgew0KICAgICAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgICAg ICBfTV9maWxlLT5vcGVuKF9fcywgX19tb2RlKTsNCiAgICAgICAgICBpZiAo dGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg ICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgICAgICAg IF9NX21vZGUgPSBfX21vZGU7DQoNCg0KICAgICAgICAgICAgICBfTV9zZXRf aW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBpZiAoX19tb2RlICYg aW9zX2Jhc2U6OmF0ZQ0KICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+c2Vl a29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkNCiAgICAgICAg ICAgICAgICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9 IHRoaXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy biBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU LCBfVHJhaXRzPjo6X19maWxlYnVmX3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBjbG9zZSgpDQogICAgew0KICAg ICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOw0KICAgICAgaWYg KHRoaXMtPmlzX29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIGJvb2wg X190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0 X2VuZDsNCiAgICAgICAgICBpZiAoX190ZXN0cHV0KQ0KICAgICAgICAgICAg X01fcmVhbGx5X292ZXJmbG93KHRyYWl0c190eXBlOjplb2YoKSk7DQoNCg0K ICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCiMgMTkyICIvaG9tZS9t ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3RyZWFtLnRjYyIg Mw0KICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7 DQogICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0K ICAgICAgICAgIGlmIChfTV9wYmFjaykNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAgICAgICBf TV9wYmFjayA9IF9fbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBf X3JldCA9IHRoaXM7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfTV9m aWxlKQ0KICAgICAgICB7DQogICAgICAgICAgZGVsZXRlIF9NX2ZpbGU7DQog ICAgICAgICAgX01fZmlsZSA9IF9fbnVsbDsNCiAgICAgICAgfQ0KICAgICAg X01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gX19y ZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXplDQogICAgYmFzaWNfZmls ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzaG93bWFueWMoKQ0KICAg IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsNCiAgICAgIGJvb2wg X190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQogICAgICBp ZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29sIF9fdGVz dGVvZiA9IGZhbHNlOw0KICAgICAgICAgIGlmIChfTV9pbl9jdXIgPj0gX01f aW5fZW5kKQ0KICAgICAgICAgICAgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJm bG93KCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgIGlmICgh X190ZXN0ZW9mKQ0KICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBf TV9pbl9jdXI7DQogICAgICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dl ZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdW5k ZXJmbG93KCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0 c190eXBlOjplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2Rl ICYgaW9zX2Jhc2U6OmluOw0KICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9t b2RlICYgaW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpZiAoX190ZXN0aW4p DQogICAgICAgIHsNCg0KDQoNCiAgICAgICAgICBpZiAoX01fcGJhY2tfaW5p dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fcGJhY2tfZGVz dHJveSgpOw0KICAgICAgICAgICAgICBpZiAoX01faW5fY3VyIDwgX01faW5f ZW5kKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAgICB9DQoNCiAgICAg ICAgICBib29sIF9fdGVzdGdldCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg PCBfTV9pbl9jdXI7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rpbml0ID0gX01f aXNfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBpZiAoX190ZXN0 Z2V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX190ZXN0 b3V0KQ0KICAgICAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdygpOw0K DQogICAgICAgICAgICAgIGVsc2UgaWYgKChfTV9pbl9jdXIgLSBfTV9pbl9i ZWcpID09IDEpDQogICAgICAgICAgICAgICAgX01fZmlsZS0+c3lzX2dldGMo KTsNCg0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX01f ZmlsZS0+c2Vla29mZihfTV9pbl9jdXIgLSBfTV9pbl9iZWcsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Y3VyLCBpb3Nf YmFzZTo6aW4pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKF9f dGVzdGluaXQgfHwgX190ZXN0Z2V0KQ0KICAgICAgICAgICAgew0KDQogICAg ICAgICAgICAgIHN0cmVhbXNpemUgX19zaXplID0gX01fZmlsZS0+eHNnZXRu KF9NX2luX2JlZywgX01fYnVmX3NpemUpOw0KICAgICAgICAgICAgICBpZiAo MCA8IF9fc2l6ZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUoX19zaXplKTsNCiAgICAgICAgICAg ICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIF9N X291dF9jdXIgPSBfTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBfX3Jl dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCg0K ICAgICAgICAgICAgICAgICAgaWYgKF9fc2l6ZSA9PSAxKQ0KICAgICAgICAg ICAgICAgICAgICBfTV9maWxlLT5zeXNfdW5nZXRjKCpfTV9pbl9jdXIpOw0K ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7 DQoNCiAgICAgICAgICAgICAgICAgIHN0cmVhbW9mZiBfX3AgPSBfTV9maWxl LT5zZWVrb2ZmKDAgLSBfX3NpemUsIGlvc19iYXNlOjpjdXIsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW4pOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSAt MSkNCiAgICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAg ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIF9NX2xh c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkNCiAgICB7DQogICAg ICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAg IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQog ICAgICBpZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29s IF9fdGVzdHBiID0gX01faW5fYmVnIDwgX01faW5fY3VyOw0KICAgICAgICAg IGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f aSk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7DQoNCiAgICAgICAgICBpZiAoX190 ZXN0cGIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGJvb2wgX190 ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICAgICAg ICAgIGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz LT5ncHRyKClbLTFdKTsNCg0KDQoNCiAgICAgICAgICAgICAgaWYgKCFfX3Rl c3Rlb2YgJiYgX190ZXN0ZXEpDQogICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgLS1fTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBp ZiAoX190ZXN0b3V0KQ0KICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9j dXI7DQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikN CiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAtLV9NX2lu X2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAg ICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAgICAgICAg ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsNCiAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rl b2YpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgLS1f TV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQ0K ICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7DQogICAgICAgICAg ICAgICAgICBfTV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAg ICpfTV9pbl9jdXIgPSBfX2M7DQogICAgICAgICAgICAgICAgICBfX3JldCA9 IF9faTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg dGhpcy0+c2Vla29mZigtMSwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAgICAg ICAgIHRoaXMtPnVuZGVyZmxvdygpOw0KICAgICAgICAgICAgICBpZiAoIV9f dGVzdGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICBpZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpfTV9pbl9jdXIpKQ0KICAg ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgX01f cGJhY2tfY3JlYXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgKl9NX2lu X2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICAgICAgX19yZXQgPSBfX2k7DQogICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAg IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG92ZXJmbG93KGludF90eXBlIF9f YykNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl Ojplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAm JiBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7DQogICAgICBi b29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQog ICAgICBpZiAoX190ZXN0b3V0KQ0KICAgICAgICB7DQogICAgICAgICAgaWYg KF9fdGVzdHB1dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9N X291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQog ICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAgICAgICAgICAg ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fcmV0ID0g dGhpcy0+X01fcmVhbGx5X292ZXJmbG93KF9fYyk7DQogICAgICAgIH0NCg0K ICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1 cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFy VCwgX1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5 cGUgX19jKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRz X3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgYm9vbCBf X3Rlc3R1bmJ1ZmZlcmVkID0gX01fZmlsZSAmJiAhX01fYnVmX3NpemU7DQoN CiAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX190ZXN0dW5idWZmZXJlZCkNCiAg ICAgICAgew0KDQogICAgICAgICAgaW50IF9fcGxlbiA9IF9NX291dF9lbmQg LSBfTV9vdXRfYmVnOw0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAw Ow0KDQogICAgICAgICAgaWYgKF9fcGxlbikNCiAgICAgICAgICAgIF9fbGVu ID0gX01fZmlsZS0+eHNwdXRuKF9NX291dF9iZWcsIF9fcGxlbik7DQoNCiAg ICAgICAgICBpZiAoX19jICE9dHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAg ICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5cGUgX19wZW5kaW5nID0g dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOw0KICAgICAgICAgICAg ICBfX2xlbiArPSBfTV9maWxlLT54c3B1dG4oJl9fcGVuZGluZywgMSk7DQog ICAgICAgICAgICAgICsrX19wbGVuOw0KICAgICAgICAgICAgfQ0KDQoNCg0K ICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsNCiAgICAgICAgICBpZiAoX19s ZW4gPT0gX19wbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf TV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9 IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAgICAgICB9DQoj IDQ3MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv ZnN0cmVhbS50Y2MiIDMNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVy Zmxvd2VkID0gdHJ1ZTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJl YW1idWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf X24pDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19z ID09IDAgJiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9 IDA7DQogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoN Cg0KDQoNCg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVy KCk7DQoNCg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBf TV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAg ICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9h bGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01f bGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gdGhpczsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz Pjo6cG9zX3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz ZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAg IHsNCiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUo LTEpKTsNCiAgICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4o KTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6 aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190 ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYg aW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9m YWNldDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2Rpbmco KTsNCiAgICAgIGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9 IDA7DQogICAgICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9f d2lkdGggPD0gMDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVz dGZhaWwgJiYgKF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsN Cg0KICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAg IGlmIChfX3dheSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQog ICAgICAgICAgICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0 ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJv b2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu X2VuZDsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAg ICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQog ICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5z eW5jKCk7DQoNCiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0 KCk7DQogICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxz ZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQog ICAgICAgICAgICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0g X01faW5fYmVnOw0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+ c2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAg ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAg ICB9DQoNCg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgX19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf YmFzZTo6Y3VyLCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBt YXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g ZmFsc2U7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi YXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAg YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9z KHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0K ICAgIHsNCiAgICAgIHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUg X19vZmYgPSBfX3BvczsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2Zm KF9fb2ZmLCBpb3NfYmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9s YXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAgIHJldHVybiBfX3JldDsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy VCwgX1RyYWl0cz46Og0KICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7 IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf VHJhaXRzPjo6DQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAg ICB7DQogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygp ICYmIHBwdHIoKSA9PSBwYmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVn ICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAg ICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVm X2xvY2FsZV9pbml0ID0gdHJ1ZTsNCiAgICAgICAgfQ0KDQoNCg0KDQoNCiAg ICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgIH0NCg0KfQ0K IyA0MjEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQoNCnVz aW5nIHN0ZDo6ZmlsZWJ1ZjsNCnVzaW5nIHN0ZDo6aWZzdHJlYW07DQp1c2lu ZyBzdGQ6Om9mc3RyZWFtOw0KdXNpbmcgc3RkOjpmc3RyZWFtOw0KdXNpbmcg c3RkOjpzdHJlYW1wb3M7DQojIDIzICJidWZmZXIuY2MiIDINCg0KIyAxICIv aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEg Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv c3RyZWFtIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21k ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o IiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0K IyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2lvc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v aW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgNDEg Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p b3N0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDQyICIvaG9t ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgZXh0ZXJuIGlzdHJl YW0gY2luOw0KICBleHRlcm4gb3N0cmVhbSBjb3V0Ow0KICBleHRlcm4gb3N0 cmVhbSBjZXJyOw0KICBleHRlcm4gb3N0cmVhbSBjbG9nOw0KIyA1NyAiL2hv bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3Ry ZWFtLmgiIDMNCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Ow0K fQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv c3RyZWFtIiAyIDMNCiMgMjUgImJ1ZmZlci5jYyIgMg0KDQojIDEgImNvbW1v bi5oIiAxDQoNCg0KDQpleHRlcm4gaW50IGN1cnJlbnRMaW5lTnVtYmVyOw0K ZXh0ZXJuIGludCBjdXJyZW50TmVzdGluZ0xldmVsOw0KIyAyNyAiYnVmZmVy LmNjIiAyDQojIDEgIm1pc2MuaCIgMQ0KIyAyOCAiYnVmZmVyLmNjIiAyDQoj IDEgImVycm9yLmgiIDENCg0KDQoNCmV4dGVybiBpbnQgZXJyb3JDb3VudDsN Cg0KDQoNCg0KDQoNCmVudW0gVEFib3J0Q29kZSB7DQogICAgYWJvcnRJbnZh bGlkQ29tbWFuZExpbmVBcmdzID0gLTEsDQogICAgYWJvcnRTb3VyY2VGaWxl T3BlbkZhaWxlZCA9IC0yLA0KICAgIGFib3J0SUZvcm1GaWxlT3BlbkZhaWxl ZCA9IC0zLA0KICAgIGFib3J0QXNzZW1ibHlGaWxlT3BlbkZhaWxlZCA9IC00 LA0KICAgIGFib3J0VG9vTWFueVN5bnRheEVycm9ycyA9IC01LA0KICAgIGFi b3J0U3RhY2tPdmVyZmxvdyA9IC02LA0KICAgIGFib3J0Q29kZVNlZ21lbnRP dmVyZmxvdyA9IC03LA0KICAgIGFib3J0TmVzdGluZ1Rvb0RlZXAgPSAtOCwN CiAgICBhYm9ydFJ1bnRpbWVFcnJvciA9IC05LA0KICAgIGFib3J0VW5pbXBs ZW1lbnRlZEZlYXR1cmUgPSAtMTANCn0gOw0KDQp2b2lkIEFib3J0VHJhbnNs YXRpb24oVEFib3J0Q29kZSBhYyk7DQojIDI5ICJidWZmZXIuY2MiIDINCiMg MSAiYnVmZmVyLmgiIDENCiMgMTAgImJ1ZmZlci5oIg0KZXh0ZXJuIGNoYXIg ZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVybiBp bnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBpbnQg bWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNzIFRU ZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBmaWxl Ow0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRleHRb bWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0KDQog ICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJsaWM6 DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxlTmFt ZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dEluQnVm ZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQogICAg ICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBDaGFy ICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFyIEdl dENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7DQp9 Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMgVFRl eHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCk7 DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIgKnBT b3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA2NyAiYnVmZmVyLmgiDQpjbGFzcyBU VGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRbbWF4 SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lkIFB1 dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0IGNo YXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBUZXh0 KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoNCg0K Y2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIgew0K ICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVbMjZd Ow0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7DQoN CiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGljOg0K ICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBTb3Vy Y2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0IGNo YXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2b2lk KTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkNCiAg ICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0KTsN CiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRleHQs IGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsNCiAg ICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1iZXIs IG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7DQog ICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDMwICJi dWZmZXIuY2MiIDINCg0KdXNpbmcgbmFtZXNwYWNlIHN0ZCA7DQoNCg0KDQoN Cg0KDQoNCmNoYXIgZW9mQ2hhciA9IDB4N0Y7DQppbnQgaW5wdXRQb3NpdGlv bjsNCg0KaW50IGxpc3RGbGFnID0gMTs7DQojIDUyICJidWZmZXIuY2MiDQpU VGV4dEluQnVmZmVyOjpUVGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1 dEZpbGVOYW1lLCBUQWJvcnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5l dyBjaGFyW3N0cmxlbihwSW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAg IHN0cmNweShwRmlsZU5hbWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAg ICBmaWxlLm9wZW4ocEZpbGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZp bGUuZ29vZCgpKSBBYm9ydFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzQgImJ1 ZmZlci5jYyINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6R2V0Q2hhcih2b2lkKQ0K ew0KICAgIGNvbnN0IGludCB0YWJTaXplID0gODsNCiAgICBjaGFyIGNoOw0K DQogICAgaWYgKCpwQ2hhciA9PSBlb2ZDaGFyKSByZXR1cm4gZW9mQ2hhcjsN CiAgICBlbHNlIGlmICgqcENoYXIgPT0gJ1wwJykgY2ggPSBHZXRMaW5lKCk7 DQogICAgZWxzZSB7DQogICAgICAgICsrcENoYXI7DQogICAgICAgICsraW5w dXRQb3NpdGlvbjsNCiAgICAgICAgY2ggPSAqcENoYXI7DQogICAgfQ0KDQoN Cg0KICAgIGlmIChjaCA9PSAnXHQnKSBpbnB1dFBvc2l0aW9uICs9IHRhYlNp emUgLSBpbnB1dFBvc2l0aW9uJXRhYlNpemU7DQoNCiAgICByZXR1cm4gY2g7 DQp9DQojIDEwMyAiYnVmZmVyLmNjIg0KY2hhciBUVGV4dEluQnVmZmVyOjpQ dXRCYWNrQ2hhcih2b2lkKQ0Kew0KICAgIC0tcENoYXI7DQogICAgLS1pbnB1 dFBvc2l0aW9uOw0KDQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCiMgMTI1ICJi dWZmZXIuY2MiDQpUU291cmNlQnVmZmVyOjpUU291cmNlQnVmZmVyKGNvbnN0 IGNoYXIgKnBTb3VyY2VGaWxlTmFtZSkNCiAgICA6IFRUZXh0SW5CdWZmZXIo cFNvdXJjZUZpbGVOYW1lLCBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkKQ0K ew0KDQogICAgaWYgKGxpc3RGbGFnKSBsaXN0LkluaXRpYWxpemUocFNvdXJj ZUZpbGVOYW1lKTsNCiAgICBHZXRMaW5lKCk7DQp9DQojIDE0MiAiYnVmZmVy LmNjIg0KY2hhciBUU291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQog ICAgZXh0ZXJuIGludCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVs Ow0KDQoNCiAgICBpZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsN Cg0KDQogICAgZWxzZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBt YXhJbnB1dEJ1ZmZlclNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoN CiAgICAgICAgaWYgKGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytj dXJyZW50TGluZU51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VycmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAg aW5wdXRQb3NpdGlvbiA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0K DQoNCg0KDQoNCg0KY29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgw Ow0KY29uc3QgaW50IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1 ZmZlciBsaXN0Ow0KDQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJp bnRQYWdlSGVhZGVyKHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVl ZENoYXIgPSAnXGYnOw0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwg IlBhZ2UgIiA8PCArK3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8 IHBTb3VyY2VGaWxlTmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8 PCBlbmRsIDw8IGVuZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAx OTcgImJ1ZmZlci5jYyINCnZvaWQgVExpc3RCdWZmZXI6OkluaXRpYWxpemUo Y29uc3QgY2hhciAqcEZpbGVOYW1lKQ0Kew0KICAgIHRleHRbMF0gPSAnXDAn Ow0KICAgIHBhZ2VOdW1iZXIgPSAwOw0KDQoNCiAgICBwU291cmNlRmlsZU5h bWUgPSBuZXcgY2hhcltzdHJsZW4ocEZpbGVOYW1lKSArIDFdOw0KICAgIHN0 cmNweShwU291cmNlRmlsZU5hbWUsIHBGaWxlTmFtZSk7DQoNCg0KICAgIHRp bWVfdCB0aW1lcjsNCiAgICB0aW1lKCZ0aW1lcik7DQogICAgc3RyY3B5KGRh dGUsIGFzY3RpbWUobG9jYWx0aW1lKCZ0aW1lcikpKTsNCiAgICBkYXRlW3N0 cmxlbihkYXRlKSAtIDFdID0gJ1wwJzsNCg0KICAgIFByaW50UGFnZUhlYWRl cigpOw0KfQ0KDQoNCg0KDQoNCnZvaWQgVExpc3RCdWZmZXI6OlB1dExpbmUo dm9pZCkNCnsNCg0KICAgIGlmIChsaXN0RmxhZyAmJiAobGluZUNvdW50ID09 IG1heExpbmVzUGVyUGFnZSkpIFByaW50UGFnZUhlYWRlcigpOw0KDQoNCiAg ICB0ZXh0W21heFByaW50TGluZUxlbmd0aF0gPSAnXDAnOw0KDQoNCiAgICBj b3V0IDw8IHRleHQgPDwgZW5kbDsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCg0K ICAgICsrbGluZUNvdW50Ow0KfQ0K ---559023410-758783491-1017137114=:8152--