From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14557 invoked by alias); 20 Jun 2002 11:56:13 -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 14428 invoked by uid 71); 20 Jun 2002 11:56:07 -0000 Resent-Date: 20 Jun 2002 11:56:06 -0000 Resent-Message-ID: <20020620115606.14424.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, brd@paradise.net.nz Received: (qmail 13848 invoked by uid 61); 20 Jun 2002 11:54:57 -0000 Message-Id: <20020620115457.13847.qmail@sources.redhat.com> Date: Thu, 20 Jun 2002 07:26:00 -0000 From: brd@paradise.net.nz Reply-To: brd@paradise.net.nz To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7086: g++ -O2 locks up X-SW-Source: 2002-06/txt/msg00454.txt.bz2 List-Id: >Number: 7086 >Category: c++ >Synopsis: g++ -O2 locks up >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Jun 20 04:56:04 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Tony Bryant >Release: CVS 20062002 mainline >Organization: >Environment: i686-pc-linux-gnu >Description: built from today's CVS: gcc -v Using built-in specs. Configured with: ../gcc/configure --enable-languages=c,c++ --prefix=/usr --exec-prefix=/usr Thread model: single gcc version 3.2 20020619 (experimental) occurs with both native i686-pc-linux-gnu and cross compiler for target sh-elf. >How-To-Repeat: g++ -O2 -c broken.cc >Fix: Out of my depth, I'm afraid >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-c++src; name="broken.cc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="broken.cc" IyAxICJjb25maWcuY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx ICJjb25maWcuY2MiCiMgMSAiaTRlbmdpbmUuaCIgMQojIDEgImVuZ2luZS5oIiAxCgoKCiMgMSAi c3RkY3h4L2xvY2Fsc2xpc3QuaCIgMQoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3Ns aXN0IiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2crKy12My9leHQvc2xpc3QiIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L3NoLWVsZi9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9z aC1lbGYvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc2gtZWxm L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYv Yml0cy9jKytjb25maWcuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAxIDMKIyA0 OCAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMwoKIyAx ICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAx NDcgIi91c3IvbGliL2djYy1saWIvc2gtZWxmLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlw ZWRlZiBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91 c3IvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6 OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYz L2NzdHJpbmciIDIgMwoKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAx MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gIkMiIHsKCgojIDEgIi91 c3Ivc2gtZWxmL2luY2x1ZGUvX2Fuc2kuaCIgMSAzCiMgMTUgIi91c3Ivc2gtZWxmL2luY2x1ZGUv X2Fuc2kuaCIgMwojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAxIDMKIyAx MzMgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAzCnR5cGVkZWYgc2hvcnQgaW50 IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKIyAxNjcg Ii91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAzCnR5cGVkZWYgaW50IF9faW50MzJf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCgoKCgoKX19leHRlbnNpb25fXyB0 eXBlZGVmIGxvbmcgbG9uZyBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgX191aW50NjRfdDsKIyAxNiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9fYW5zaS5o IiAyIDMKIyAxNSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9z aC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMSAzCiMgOSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9z eXMvcmVlbnQuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9z eXMvX3R5cGVzLmgiIDEgMwojIDEyICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9fdHlwZXMuaCIg Mwp0eXBlZGVmIGxvbmcgX29mZl90Owp0eXBlZGVmIGxvbmcgX3NzaXplX3Q7CiMgMTUgIi91c3Iv c2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDIgMwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IF9fVUxvbmc7CiMgMzYgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0 IF9nbHVlCnsKICBzdHJ1Y3QgX2dsdWUgKl9uZXh0OwogIGludCBfbmlvYnM7CiAgc3RydWN0IF9f c0ZJTEUgKl9pb2JzOwp9OwoKc3RydWN0IF9CaWdpbnQKewogIHN0cnVjdCBfQmlnaW50ICpfbmV4 dDsKICBpbnQgX2ssIF9tYXh3ZHMsIF9zaWduLCBfd2RzOwogIF9fVUxvbmcgX3hbMV07Cn07CgoK c3RydWN0IF9fdG0KewogIGludCBfX3RtX3NlYzsKICBpbnQgX190bV9taW47CiAgaW50IF9fdG1f aG91cjsKICBpbnQgX190bV9tZGF5OwogIGludCBfX3RtX21vbjsKICBpbnQgX190bV95ZWFyOwog IGludCBfX3RtX3dkYXk7CiAgaW50IF9fdG1feWRheTsKICBpbnQgX190bV9pc2RzdDsKfTsKIyA3 MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX2F0ZXhpdCB7CiAg ICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0OwogICAgICAgIGludCBfaW5kOwogICAgICAgIHZv aWQgKCpfZm5zWzMyXSkodm9pZCk7CiAgICAgICAgdm9pZCAqX2ZuYXJnc1szMl07CiAgICAgICAg X191aW50MzJfdCBfZm50eXBlczsKfTsKIyA5NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVl bnQuaCIgMwpzdHJ1Y3QgX19zYnVmIHsKICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsKICAg ICAgICBpbnQgX3NpemU7Cn07CgoKCgoKCnR5cGVkZWYgbG9uZyBfZnBvc190OwojIDE1NSAiL3Vz ci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX19zRklMRSB7CiAgdW5zaWdu ZWQgY2hhciAqX3A7CiAgaW50IF9yOwogIGludCBfdzsKICBzaG9ydCBfZmxhZ3M7CiAgc2hvcnQg X2ZpbGU7CiAgc3RydWN0IF9fc2J1ZiBfYmY7CiAgaW50IF9sYmZzaXplOwoKCgoKCgogIHZvaWQg KiBfY29va2llOwoKICBpbnQgKCpfcmVhZCkgKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBp bnQgX24pOwogIGludCAoKl93cml0ZSkgKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVm LCBpbnQgX24pOwoKICBfZnBvc190ICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBf b2Zmc2V0LCBpbnQgX3doZW5jZSk7CiAgaW50ICgqX2Nsb3NlKSAodm9pZCAqIF9jb29raWUpOwoK CiAgc3RydWN0IF9fc2J1ZiBfdWI7CiAgdW5zaWduZWQgY2hhciAqX3VwOwogIGludCBfdXI7CgoK ICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwogIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CgoKICBz dHJ1Y3QgX19zYnVmIF9sYjsKCgogIGludCBfYmxrc2l6ZTsKICBpbnQgX29mZnNldDsKCgogIHN0 cnVjdCBfcmVlbnQgKl9kYXRhOwoKfTsKIyAyMTkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3Jl ZW50LmgiIDMKc3RydWN0IF9yYW5kNDggewogIHVuc2lnbmVkIHNob3J0IF9zZWVkWzNdOwogIHVu c2lnbmVkIHNob3J0IF9tdWx0WzNdOwogIHVuc2lnbmVkIHNob3J0IF9hZGQ7CgoKCgp9OwojIDQ0 NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX3JlZW50CnsKICBp bnQgX2Vycm5vOwoKCgoKICBzdHJ1Y3QgX19zRklMRSAqX3N0ZGluLCAqX3N0ZG91dCwgKl9zdGRl cnI7CgogIGludCBfaW5jOwogIGNoYXIgX2VtZXJnZW5jeVsyNV07CgogIGludCBfY3VycmVudF9j YXRlZ29yeTsKICBjb25zdCBjaGFyICpfY3VycmVudF9sb2NhbGU7CgogIGludCBfX3NkaWRpbml0 OwoKICB2b2lkICgqX19jbGVhbnVwKSAoc3RydWN0IF9yZWVudCAqKTsKCgogIHN0cnVjdCBfQmln aW50ICpfcmVzdWx0OwogIGludCBfcmVzdWx0X2s7CiAgc3RydWN0IF9CaWdpbnQgKl9wNXM7CiAg c3RydWN0IF9CaWdpbnQgKipfZnJlZWxpc3Q7CgoKICBpbnQgX2N2dGxlbjsKICBjaGFyICpfY3Z0 YnVmOwoKICB1bmlvbgogICAgewogICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICB1bnNp Z25lZCBpbnQgX3VudXNlZF9yYW5kOwogICAgICAgICAgY2hhciAqIF9zdHJ0b2tfbGFzdDsKICAg ICAgICAgIGNoYXIgX2FzY3RpbWVfYnVmWzI2XTsKICAgICAgICAgIHN0cnVjdCBfX3RtIF9sb2Nh bHRpbWVfYnVmOwogICAgICAgICAgaW50IF9nYW1tYV9zaWduZ2FtOwogICAgICAgICAgX19leHRl bnNpb25fXyB1bnNpZ25lZCBsb25nIGxvbmcgX3JhbmRfbmV4dDsKICAgICAgICAgIHN0cnVjdCBf cmFuZDQ4IF9yNDg7CiAgICAgICAgICBpbnQgX21ibGVuX3N0YXRlOwogICAgICAgICAgaW50IF9t YnRvd2Nfc3RhdGU7CiAgICAgICAgICBpbnQgX3djdG9tYl9zdGF0ZTsKICAgICAgICAgIGNoYXIg X2w2NGFfYnVmWzhdOwogICAgICAgICAgY2hhciBfc2lnbmFsX2J1ZlsyNF07CiAgICAgICAgfSBf cmVlbnQ7CgoKCiAgICAgIHN0cnVjdAogICAgICAgIHsKCiAgICAgICAgICB1bnNpZ25lZCBjaGFy ICogX25leHRmWzMwXTsKICAgICAgICAgIHVuc2lnbmVkIGludCBfbm1hbGxvY1szMF07CiAgICAg ICAgfSBfdW51c2VkOwogICAgfSBfbmV3OwoKCiAgc3RydWN0IF9hdGV4aXQgKl9hdGV4aXQ7CiAg c3RydWN0IF9hdGV4aXQgX2F0ZXhpdDA7CgoKICB2b2lkICgqKihfc2lnX2Z1bmMpKShpbnQpOwoK CgoKICBzdHJ1Y3QgX2dsdWUgX19zZ2x1ZTsKICBzdHJ1Y3QgX19zRklMRSBfX3NmWzNdOwp9Owoj IDYxNCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpleHRlcm4gc3RydWN0IF9y ZWVudCAqX2ltcHVyZV9wdHIgOwoKdm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9yZWVudCAq KTsKIyA2MzIgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKfQojIDE2ICIvdXNy L3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvc2gt ZWxmLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE5ICIvdXNyL3NoLWVsZi9pbmNsdWRl L3N0cmluZy5oIiAyIDMKCgoKCgp2b2lkICogbWVtY2hyIChjb25zdCB2b2lkICosIGludCwgc2l6 ZV90KTsKaW50IG1lbWNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZv aWQgKiBtZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICogbWVtbW92 ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBtZW1zZXQgKHZvaWQgKiwg aW50LCBzaXplX3QpOwpjaGFyICpzdHJjYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAq c3RyY2hyIChjb25zdCBjaGFyICosIGludCk7CmludCBzdHJjbXAgKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKTsKaW50IHN0cmNvbGwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hh ciAqc3RyY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKik7CnNpemVfdCBzdHJjc3BuIChjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cmVycm9yIChpbnQpOwpzaXplX3Qgc3RybGVu IChjb25zdCBjaGFyICopOwpjaGFyICpzdHJuY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90KTsKaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpj aGFyICpzdHJuY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqc3RycGJy ayAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJyY2hyIChjb25zdCBjaGFy ICosIGludCk7CnNpemVfdCBzdHJzcG4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hh ciAqc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKY2hhciAqc3RydG9rIChj aGFyICosIGNvbnN0IGNoYXIgKik7CgoKc2l6ZV90IHN0cnhmcm0gKGNoYXIgKiwgY29uc3QgY2hh ciAqLCBzaXplX3QpOwoKCmNoYXIgKnN0cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hh ciAqKik7CgppbnQgYmNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZv aWQgYmNvcHkgKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwp2b2lkIGJ6ZXJvICh2b2lk ICosIHNpemVfdCk7CmludCBmZnMgKGludCk7CmNoYXIgKmluZGV4IChjb25zdCBjaGFyICosIGlu dCk7CnZvaWQgKiBtZW1jY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpj aGFyICpyaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqc3RyZHVwIChjb25zdCBjaGFyICopOwpjaGFyICpf c3RyZHVwX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqc3RyZXJyb3Jf ciAoaW50LCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBzdHJsY2F0IChjaGFyICosIGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKc2l6ZV90IHN0cmxjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl X3QpOwppbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp OwpzaXplX3Qgc3RybmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpzdHJzZXAgKGNo YXIgKiosIGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cmx3ciAoY2hhciAqKTsKY2hhciAqc3RydXBy IChjaGFyICopOwojIDk4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAi L3Vzci9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2crKy12 My9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6 bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpz dHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3Ry Y21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4 ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRv azsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVu OwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwg aW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2 b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hh cioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ry cGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBf X3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+ KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0 cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihj b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsK CiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAg eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg X19zMik7IH0KfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2xpbWl0cyIgMSAzCiMgNDggIi91c3IvaW5j bHVkZS9nKystdjMvY2xpbWl0cyIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIv aW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9jbGltaXRz IiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRsaWIuaCIg MSAzCiMgOSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gIkMiIHsKCgoK CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg MyA0CiMgMTggIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgMSAiL3Vzci9z aC1lbGYvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMKIyAyMSAiL3Vzci9zaC1lbGYvaW5j bHVkZS9zdGRsaWIuaCIgMiAzCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvYWxsb2NhLmgiIDEg MwojIDIzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IHF1b3Q7CiAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0CnsKICBs b25nIHF1b3Q7CiAgbG9uZyByZW07Cn0gbGRpdl90OwojIDQ2ICIvdXNyL3NoLWVsZi9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgX19tYl9jdXJfbWF4OwoKCgp2b2lkIGFib3J0ICh2b2lk KSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKaW50IGFicyAoaW50KTsKaW50IGF0ZXhpdCAo dm9pZCAoKl9fZnVuYykodm9pZCkpOwpkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqX19ucHRyKTsK CmZsb2F0IGF0b2ZmIChjb25zdCBjaGFyICpfX25wdHIpOwoKaW50IGF0b2kgKGNvbnN0IGNoYXIg Kl9fbnB0cik7CmxvbmcgYXRvbCAoY29uc3QgY2hhciAqX19ucHRyKTsKdm9pZCAqIGJzZWFyY2gg KGNvbnN0IHZvaWQgKiBfX2tleSwgY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUsIGludCAoKiBfY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk ICopKTsKCgoKCnZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKTsK ZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pOwp2b2lkIGV4aXQgKGludCBfX3N0 YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CnZvaWQgZnJlZSAodm9pZCAqKTsKY2hh ciAqIGdldGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOwpjaGFyICogX2dldGVudl9yIChzdHJ1 Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKY2hhciAqIF9maW5kZW52IChjb25z dCBjaGFyICosIGludCAqKTsKY2hhciAqIF9maW5kZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqLCBpbnQgKik7CmxvbmcgbGFicyAobG9uZyk7CmxkaXZfdCBsZGl2IChsb25nIF9f bnVtZXIsIGxvbmcgX19kZW5vbSk7CnZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpOwppbnQg bWJsZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9tYmxlbl9yIChzdHJ1Y3QgX3JlZW50 ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBpbnQgKik7CmludCBtYnRvd2MgKHdjaGFyX3QgKiwg Y29uc3QgY2hhciAqLCBzaXplX3QpOwppbnQgX21idG93Y19yIChzdHJ1Y3QgX3JlZW50ICosIHdj aGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGludCAqKTsKaW50IHdjdG9tYiAoY2hhciAq LCB3Y2hhcl90KTsKaW50IF93Y3RvbWJfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHdjaGFy X3QsIGludCAqKTsKc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90KTsKc2l6ZV90IF9tYnN0b3djc19yIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiwgY29u c3QgY2hhciAqLCBzaXplX3QsIGludCAqKTsKc2l6ZV90IHdjc3RvbWJzIChjaGFyICosIGNvbnN0 IHdjaGFyX3QgKiwgc2l6ZV90KTsKc2l6ZV90IF93Y3N0b21ic19yIChzdHJ1Y3QgX3JlZW50ICos IGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QsIGludCAqKTsKCgppbnQgbWtzdGVtcCAo Y2hhciAqKTsKY2hhciAqIG1rdGVtcCAoY2hhciAqKTsKCgp2b2lkIHFzb3J0ICh2b2lkICogX19i YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2 b2lkICosIGNvbnN0IHZvaWQgKikpOwppbnQgcmFuZCAodm9pZCk7CnZvaWQgKiByZWFsbG9jICh2 b2lkICogX19yLCBzaXplX3QgX19zaXplKTsKdm9pZCBzcmFuZCAodW5zaWduZWQgX19zZWVkKTsK ZG91YmxlIHN0cnRvZCAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsKZG91Ymxl IF9zdHJ0b2RfciAoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5k X1BUUik7CgpmbG9hdCBzdHJ0b2RmIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIp OwoKbG9uZyBzdHJ0b2wgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9f YmFzZSk7CmxvbmcgX3N0cnRvbF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBj aGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBzdHJ0b3VsIChjb25z dCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25lZCBsb25n IF9zdHJ0b3VsX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu ZF9QVFIsIGludCBfX2Jhc2UpOwoKaW50IHN5c3RlbSAoY29uc3QgY2hhciAqX19zdHJpbmcpOwoK CmxvbmcgYTY0bCAoY29uc3QgY2hhciAqX19pbnB1dCk7CmNoYXIgKiBsNjRhIChsb25nIF9faW5w dXQpOwpjaGFyICogX2w2NGFfciAoc3RydWN0IF9yZWVudCAqLGxvbmcgX19pbnB1dCk7CmludCBv bl9leGl0ICh2b2lkICgqX19mdW5jKShpbnQsIHZvaWQgKiksdm9pZCAqIF9fYXJnKTsKaW50IHB1 dGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOwppbnQgX3B1dGVudl9yIChzdHJ1Y3QgX3JlZW50 ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKaW50IHNldGVudiAoY29uc3QgY2hhciAqX19zdHJp bmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX292ZXJ3cml0ZSk7CmludCBfc2V0ZW52X3Ig KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFs dWUsIGludCBfX292ZXJ3cml0ZSk7CgpjaGFyICogZ2N2dCAoZG91YmxlLGludCxjaGFyICopOwpj aGFyICogZ2N2dGYgKGZsb2F0LGludCxjaGFyICopOwpjaGFyICogZmN2dCAoZG91YmxlLGludCxp bnQgKixpbnQgKik7CmNoYXIgKiBmY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsKY2hhciAq IGVjdnQgKGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpjaGFyICogZWN2dGJ1ZiAoZG91YmxlLCBp bnQsIGludCosIGludCosIGNoYXIgKik7CmNoYXIgKiBmY3Z0YnVmIChkb3VibGUsIGludCwgaW50 KiwgaW50KiwgY2hhciAqKTsKY2hhciAqIGVjdnRmIChmbG9hdCxpbnQsaW50ICosaW50ICopOwpj aGFyICogZHRvYSAoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIqKik7CmludCBy YW5kX3IgKHVuc2lnbmVkICpfX3NlZWQpOwoKZG91YmxlIGRyYW5kNDggKHZvaWQpOwpkb3VibGUg X2RyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsKZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo b3J0IFszXSk7CmRvdWJsZSBfZXJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNo b3J0IFszXSk7CmxvbmcganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgWzNdKTsKbG9uZyBfanJhbmQ0 OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7CnZvaWQgbGNvbmc0OCAo dW5zaWduZWQgc2hvcnQgWzddKTsKdm9pZCBfbGNvbmc0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVu c2lnbmVkIHNob3J0IFs3XSk7CmxvbmcgbHJhbmQ0OCAodm9pZCk7CmxvbmcgX2xyYW5kNDhfciAo c3RydWN0IF9yZWVudCAqKTsKbG9uZyBtcmFuZDQ4ICh2b2lkKTsKbG9uZyBfbXJhbmQ0OF9yIChz dHJ1Y3QgX3JlZW50ICopOwpsb25nIG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7Cmxvbmcg X25yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOwp1bnNpZ25l ZCBzaG9ydCAqCiAgICAgICBzZWVkNDggKHVuc2lnbmVkIHNob3J0IFszXSk7CnVuc2lnbmVkIHNo b3J0ICoKICAgICAgIF9zZWVkNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBb M10pOwp2b2lkIHNyYW5kNDggKGxvbmcpOwp2b2lkIF9zcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQg KiwgbG9uZyk7CmxvbmcgbG9uZyBzdHJ0b2xsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu ZF9QVFIsIGludCBfX2Jhc2UpOwpsb25nIGxvbmcgX3N0cnRvbGxfciAoc3RydWN0IF9yZWVudCAq LCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25l ZCBsb25nIGxvbmcgc3RydG91bGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwg aW50IF9fYmFzZSk7CnVuc2lnbmVkIGxvbmcgbG9uZyBfc3RydG91bGxfciAoc3RydWN0IF9yZWVu dCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOwoKCnZv aWQgY2ZyZWUgKHZvaWQgKik7CiMgMTY4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGxpYi5oIiAz CmNoYXIgKiBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAq LCBpbnQqLCBjaGFyKiopOwp2b2lkICogX21hbGxvY19yIChzdHJ1Y3QgX3JlZW50ICosIHNpemVf dCk7CnZvaWQgKiBfY2FsbG9jX3IgKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90LCBzaXplX3QpOwp2 b2lkIF9mcmVlX3IgKHN0cnVjdCBfcmVlbnQgKiwgdm9pZCAqKTsKdm9pZCAqIF9yZWFsbG9jX3Ig KHN0cnVjdCBfcmVlbnQgKiwgdm9pZCAqLCBzaXplX3QpOwp2b2lkIF9tc3RhdHNfciAoc3RydWN0 IF9yZWVudCAqLCBjaGFyICopOwppbnQgX3N5c3RlbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0 IGNoYXIgKik7Cgp2b2lkIF9fZXByaW50ZiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVu c2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMv Y3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMwpuYW1lc3Bh Y2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFi b3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1 c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6 OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwog IHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcg OjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6 bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxv YzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwog IHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwog IHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4g bGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7 IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgNjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMK IyA0MiAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4 dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7 CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2Vw dGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRo cm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgog IHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh bCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p bmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAo KTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIp IHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu X18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hh bmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19u b3JldHVybl9fKSk7CiMgOTggIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgYm9v bCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsK IyAxMTEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2Vf dGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9uZXci IDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9j IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygp IHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBu b3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVk ZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIo bmV3X2hhbmRsZXIpOwp9CiMgNzkgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAzCnZvaWQqIG9w ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3Bl cmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3Bl cmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq KSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90 aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0 IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNv bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lk KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRv ciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5s aW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkg eyByZXR1cm4gX19wOyB9Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDEgMwojIDQzICIv dXNyL2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmlu Z2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAg IHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hh cj47CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+ IHN0cmluZzsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYg Ii91c3IvaW5jbHVkZS9nKystdjMvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDEgMwojIDM1 ICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGlv IiAzCgoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjggIi91c3Iv c2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKIyAzNyAiL3Vzci9zaC1lbGYv aW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzggIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3RkaW8uaCIgMiAz CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAz IDQKIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMg NAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDQxICIvdXNyL3No LWVsZi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDUwICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0ZGlv LmgiIDMKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9zdGRpby5oIiAxIDMKIyA1MSAiL3Vz ci9zaC1lbGYvaW5jbHVkZS9zdGRpby5oIiAyIDMKCnR5cGVkZWYgX2Zwb3NfdCBmcG9zX3Q7Cgp0 eXBlZGVmIHN0cnVjdCBfX3NGSUxFIEZJTEU7CiMgMTU4ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N0 ZGlvLmgiIDMKRklMRSAqIHRtcGZpbGUgKHZvaWQpOwpjaGFyICogdG1wbmFtIChjaGFyICopOwpp bnQgZmNsb3NlIChGSUxFICopOwppbnQgZmZsdXNoIChGSUxFICopOwpGSUxFICogZnJlb3BlbiAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CnZvaWQgc2V0YnVmIChGSUxFICos IGNoYXIgKik7CmludCBzZXR2YnVmIChGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwppbnQg ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBmc2NhbmYgKEZJTEUgKiwg Y29uc3QgY2hhciAqLCAuLi4pOwppbnQgcHJpbnRmIChjb25zdCBjaGFyICosIC4uLik7CmludCBz Y2FuZiAoY29uc3QgY2hhciAqLCAuLi4pOwppbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgLi4uKTsKaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVj X3ZhX2xpc3QpOwppbnQgdnByaW50ZiAoY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7Cmlu dCB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IGZn ZXRjIChGSUxFICopOwpjaGFyICogZmdldHMgKGNoYXIgKiwgaW50LCBGSUxFICopOwppbnQgZnB1 dGMgKGludCwgRklMRSAqKTsKaW50IGZwdXRzIChjb25zdCBjaGFyICosIEZJTEUgKik7CmludCBn ZXRjIChGSUxFICopOwppbnQgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBnZXRzIChjaGFyICopOwpp bnQgcHV0YyAoaW50LCBGSUxFICopOwppbnQgcHV0Y2hhciAoaW50KTsKaW50IHB1dHMgKGNvbnN0 IGNoYXIgKik7CmludCB1bmdldGMgKGludCwgRklMRSAqKTsKc2l6ZV90IGZyZWFkICh2b2lkICos IHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgZndyaXRlIChjb25zdCB2 b2lkICogLCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAqKTsKaW50IGZnZXRwb3MgKEZJ TEUgKiwgZnBvc190ICopOwppbnQgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsKaW50IGZzZXRw b3MgKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpsb25nIGZ0ZWxsICggRklMRSAqKTsKdm9pZCBy ZXdpbmQgKEZJTEUgKik7CnZvaWQgY2xlYXJlcnIgKEZJTEUgKik7CmludCBmZW9mIChGSUxFICop OwppbnQgZmVycm9yIChGSUxFICopOwp2b2lkIHBlcnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUg KiBmb3BlbiAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsKaW50IHNwcmlu dGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgcmVtb3ZlIChjb25zdCBjaGFyICop OwppbnQgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKaW50IHZmaXByaW50 ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IGlwcmludGYgKGNv bnN0IGNoYXIgKiwgLi4uKTsKaW50IGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4u KTsKaW50IHNpcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKY2hhciAqIHRlbXBu YW0gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IHZzbnByaW50ZiAoY2hhciAqLCBz aXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgdmZzY2FuZiAoRklMRSAq LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IHZzY2FuZiAoY29uc3QgY2hhciAq LCBfX2dudWNfdmFfbGlzdCk7CmludCB2c3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg KiwgX19nbnVjX3ZhX2xpc3QpOwoKaW50IHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3Qg Y2hhciAqLCAuLi4pOwojIDIyMiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zdGRpby5oIiAzCkZJTEUg KiBmZG9wZW4gKGludCwgY29uc3QgY2hhciAqKTsKCmludCBmaWxlbm8gKEZJTEUgKik7CmludCBn ZXR3IChGSUxFICopOwppbnQgcGNsb3NlIChGSUxFICopOwpGSUxFICogcG9wZW4gKGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKaW50IHB1dHcgKGludCwgRklMRSAqKTsKdm9pZCBzZXRidWZm ZXIgKEZJTEUgKiwgY2hhciAqLCBpbnQpOwppbnQgc2V0bGluZWJ1ZiAoRklMRSAqKTsKaW50IGdl dGNfdW5sb2NrZWQgKEZJTEUgKik7CmludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKTsKdm9pZCBm bG9ja2ZpbGUgKEZJTEUgKik7CmludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKik7CnZvaWQgZnVubG9j a2ZpbGUgKEZJTEUgKik7CmludCBwdXRjX3VubG9ja2VkIChpbnQsIEZJTEUgKik7CmludCBwdXRj aGFyX3VubG9ja2VkIChpbnQpOwoKCgoKCgpGSUxFICogX2Zkb3Blbl9yIChzdHJ1Y3QgX3JlZW50 ICosIGludCwgY29uc3QgY2hhciAqKTsKRklMRSAqIF9mb3Blbl9yIChzdHJ1Y3QgX3JlZW50ICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9mc2NhbmZfciAoc3RydWN0IF9yZWVu dCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9nZXRjaGFyX3IgKHN0cnVjdCBf cmVlbnQgKik7CmNoYXIgKiBfZ2V0c19yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBf aXByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9ta3N0 ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKY2hhciAqIF9ta3RlbXBfciAoc3RydWN0 IF9yZWVudCAqLCBjaGFyICopOwp2b2lkIF9wZXJyb3JfciAoc3RydWN0IF9yZWVudCAqLCBjb25z dCBjaGFyICopOwppbnQgX3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwg Li4uKTsKaW50IF9wdXRjaGFyX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50KTsKaW50IF9wdXRzX3Ig KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9yZW1vdmVfciAoc3RydWN0IF9y ZWVudCAqLCBjb25zdCBjaGFyICopOwppbnQgX3JlbmFtZV9yIChzdHJ1Y3QgX3JlZW50ICosIGNv bnN0IGNoYXIgKl9vbGQsIGNvbnN0IGNoYXIgKl9uZXcpOwoKaW50IF9zY2FuZl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50IF9zcHJpbnRmX3IgKHN0cnVjdCBfcmVl bnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfc25wcmludGZfciAoc3RydWN0 IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQgX3NzY2Fu Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpj aGFyICogX3RlbXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CkZJTEUgKiBfdG1wZmlsZV9yIChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICogX3RtcG5h bV9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmludCBfdmZwcmludGZfciAoc3RydWN0IF9y ZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3Zwcmlu dGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50 IF92c3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2du dWNfdmFfbGlzdCk7CmludCBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBz aXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX3Zmc2NhbmZfciAoc3Ry dWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQg X3ZzY2FuZl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3Qp OwppbnQgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKCgoKCmludCBfX3NyZ2V0IChGSUxFICopOwppbnQgX19z d2J1ZiAoaW50LCBGSUxFICopOwoKCgoKCgpGSUxFICpmdW5vcGVuIChjb25zdCB2b2lkICogX2Nv b2tpZSwgaW50ICgqcmVhZGZuKSh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKSwg aW50ICgqd3JpdGVmbikodm9pZCAqIF9jb29raWUsIGNvbnN0IGNoYXIgKl9idWYsIGludCBfbiks IGZwb3NfdCAoKnNlZWtmbikodm9pZCAqIF9jb29raWUsIGZwb3NfdCBfb2ZmLCBpbnQgX3doZW5j ZSksIGludCAoKmNsb3NlZm4pKHZvaWQgKiBfY29va2llKSk7CiMgMzg2ICIvdXNyL3NoLWVsZi9p bmNsdWRlL3N0ZGlvLmgiIDMKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMiAz CiMgOTcgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2lu ZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpm Zmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0 czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwog IHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNp bmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcg OjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRj aGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsK ICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2lu ZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6 OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNw cmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1w bmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJp bnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAzNiAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1l bGYvYml0cy9jKytpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0 cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0cy9ndGhy LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgi IDMKdHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvdXNyL2luY2x1ZGUvZysr LXYzL3NoLWVsZi9iaXRzL2d0aHItc2luZ2xlLmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhy ZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9 CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211 dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211 dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQojIDEwMyAi L3Vzci9pbmNsdWRlL2crKy12My9zaC1lbGYvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL3NoLWVsZi9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsK CgoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9t dXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9f aW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw MDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2ll bnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2Ug PSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0 MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Owog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAw NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4 MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0g MHgyMDsKICB9Owp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2cr Ky12My9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAxIDMKIyA0 OCAiL3Vzci9pbmNsdWRlL2crKy12My9jdGltZSIgMwoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyAxNCAiL3Vzci9zaC1lbGYvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJu ICJDIiB7CgoKCgoKCgojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvbWFjaGluZS90aW1lLmgiIDEg MwojIDIzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMzEgIi91c3Ivc2gtZWxm L2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9zaC1lbGYvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3Ivc2gtZWxmL2luY2x1ZGUvdGltZS5oIiAyIDMK CiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzEgIi91c3Ivc2gt ZWxmL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL3NoLWVsZi8z LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMiAzCiMgMSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEg MwojIDkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvbWFjaGluZS90eXBlcy5oIiAzCnR5cGVkZWYgbG9u ZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl ZiBsb25nIGxvbmcgaW50IF9fbG9mZl90OwojIDMzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKIyA1NCAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25n OwoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dWludDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNsb2NrX3Q7CgoKCgp0eXBlZGVmIGxvbmcg dGltZV90OwoKCgoKc3RydWN0IHRpbWVzcGVjIHsKICB0aW1lX3QgdHZfc2VjOwogIGxvbmcgdHZf bnNlYzsKfTsKCnN0cnVjdCBpdGltZXJzcGVjIHsKICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2 YWw7CiAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwp9OwoKCnR5cGVkZWYgbG9uZyBkYWRkcl90 Owp0eXBlZGVmIGNoYXIgKiBjYWRkcl90OwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp bm9fdDsKIyAxMjkgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBz aG9ydCBkZXZfdDsKCgoKCnR5cGVkZWYgbG9uZyBvZmZfdDsKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgZ2lkX3Q7CgoKdHlwZWRlZiBpbnQgcGlk X3Q7CnR5cGVkZWYgbG9uZyBrZXlfdDsKdHlwZWRlZiBsb25nIHNzaXplX3Q7CiMgMTU1ICIvdXNy L3NoLWVsZi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IG1vZGVf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBubGlua190OwojIDE4MSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCIg Mwp0eXBlZGVmIGxvbmcgZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF90eXBlc19mZF9z ZXQgewogICAgICAgIGZkX21hc2sgZmRzX2JpdHNbKCgoNjQpKygoKHNpemVvZiAoZmRfbWFzaykg KiA4KSktMSkpLygoc2l6ZW9mIChmZF9tYXNrKSAqIDgpKSldOwp9IF90eXBlc19mZF9zZXQ7CiMg MzQgIi91c3Ivc2gtZWxmL2luY2x1ZGUvdGltZS5oIiAyIDMKCnN0cnVjdCB0bQp7CiAgaW50IHRt X3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0 bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50 IHRtX2lzZHN0Owp9OwoKY2xvY2tfdCBjbG9jayAodm9pZCk7CmRvdWJsZSBkaWZmdGltZSAodGlt ZV90IF90aW1lMiwgdGltZV90IF90aW1lMSk7CnRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX3Rp bWVwdHIpOwp0aW1lX3QgdGltZSAodGltZV90ICpfdGltZXIpOwoKY2hhciAqYXNjdGltZSAoY29u c3Qgc3RydWN0IHRtICpfdGJsb2NrKTsKY2hhciAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWUp OwpzdHJ1Y3QgdG0gKmdtdGltZSAoY29uc3QgdGltZV90ICpfdGltZXIpOwpzdHJ1Y3QgdG0gKmxv Y2FsdGltZSAoY29uc3QgdGltZV90ICpfdGltZXIpOwoKc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpf cywgc2l6ZV90IF9tYXhzaXplLCBjb25zdCBjaGFyICpfZm10LCBjb25zdCBzdHJ1Y3QgdG0gKl90 KTsKCmNoYXIgKmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7CmNoYXIgKmN0 aW1lX3IgKGNvbnN0IHRpbWVfdCAqLCBjaGFyICopOwpzdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25z dCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0 aW1lX3QgKiwgc3RydWN0IHRtICopOwoKCmNoYXIgKnN0cnB0aW1lIChjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwp2b2lkIHR6c2V0ICh2b2lkKTsKdm9pZCBfdHpzZXRf ciAoc3RydWN0IF9yZWVudCAqKTsKCgpleHRlcm4gdGltZV90IF90aW1lem9uZTsKZXh0ZXJuIGlu dCBfZGF5bGlnaHQ7CmV4dGVybiBjaGFyICpfdHpuYW1lWzJdOwojIDk1ICIvdXNyL3NoLWVsZi9p bmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3Ivc2gtZWxmL2luY2x1ZGUvc3lzL2ZlYXR1cmVzLmgi IDEgMwojIDI1ICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAzCmV4dGVybiAi QyIgewojIDkzICIvdXNyL3NoLWVsZi9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oIiAzCn0KIyA5NiAi L3Vzci9zaC1lbGYvaW5jbHVkZS90aW1lLmgiIDIgMwojIDE5NSAiL3Vzci9zaC1lbGYvaW5jbHVk ZS90aW1lLmgiIDMKfQojIDUyICIvdXNyL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAyIDMKIyA2NCAi L3Vzci9pbmNsdWRlL2crKy12My9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNs b2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsK ICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1 c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2lu ZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi91c3IvaW5jbHVkZS9n KystdjMvY3djaGFyIiAyIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9jd2NoYXIiIDMKZXh0 ZXJuICJDIgp7CiAgdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX19maWxsWzZdOwogIH0gbWJz dGF0ZV90Owp9CgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyA0NiAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgog ICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVi bGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9z dDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9 IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0 YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBl IF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0 KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg fQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm ICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0o c3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAg ICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBm cG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7 CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAg ICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAg ICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0 IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2Zm OyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9m ZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9p ZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0K ICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoKCn0KIyA0NyAi L3Vzci9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2lvc2Z3ZCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+LAogICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5h bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0 cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAg ICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh c2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAg dHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNo YXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3Ry ZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmlu Z2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp Y19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBp ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKICB0eXBlZGVmIGJhc2ljX2lvczx3Y2hh cl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdzdHJlYW1idWY7 CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdj aGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PiB3c3Ry aW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0cmluZ3N0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29zdHJpbmdzdHJl YW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmluZ3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlwZWRlZiBiYXNp Y19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTx3 Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+IHdmc3Ry ZWFtOwp9CiMgNzEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy IHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihj b25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikg e30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8 X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z ZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg X195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3ku Zmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu ICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U MSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194 KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0 b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGlu ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVy biBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv dHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry YWl0cy5oIiAzCiMgOTAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAz CnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoK Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNo YXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxp bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu c2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFp dHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFy PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVk IHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBs b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3Jt YWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVz cGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUg X0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0 b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoj IDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg MwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0 b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRf aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBw dWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0 YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5 cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yIHsKCiAgICAgIHR5 cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAg IHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZl cmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBz dHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6 Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAg dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAg ICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAm IHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBp dGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk ZWYgY29uc3QgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNl OwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2Uo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy YXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAg fQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf dGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9f ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK ICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg aW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBp bnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0K CnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0 YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBf X2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwog ICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lk CiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAog ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSAr PSBfX247CiAgfQojIDE2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1l IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwg X0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0 b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVyc2Vf aXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg X0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRvciBp dGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpw b2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkg eyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5 cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoY29u c3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsg fQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1cnJl bnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2UoKSBj b25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy YXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK ICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgogICAg ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoKICAg ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICAt LWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVy biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVy YXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKICAg ICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICArK2N1 cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2Vf aXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAg IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAgICAg cmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQog ICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZlcmVu Y2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVu dCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3It PShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247CiAg ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv cGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBf X24pOyB9CiAgICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyBy ZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy biAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9f eSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1l IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRv ci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3ku YmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg ICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5h bWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAg ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMg MzI3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoK ICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194 KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7 CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y KigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyAzODQg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh aW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFj a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRh aW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0 b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAg IHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAg ICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBm cm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7 IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAg ICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFp bmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+ cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAg ICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz OyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyBy ZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1MyAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5l cj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250 X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xh c3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3Jf dGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBf Q29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y IGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90 eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIo X19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAz CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9D b250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgaXRlciA9 IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgICAgICsraXRlcjsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg ICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA1NDQgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9y IF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRh aW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoK CgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs YXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAg ewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl cjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7 IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFz ZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1 cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0 IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3Jt YWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJh dG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3Bl cmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv cihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRb X19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3Qg ZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAq dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRp ZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv cihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAt PSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3Bl cmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBf X25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgZGlmZmVyZW5jZV90 eXBlCiAgICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvciYgX19pKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgICAgIGNvbnN0 IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAg IH07CiMgNjQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFt ZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyBy ZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv cj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhz LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg eyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy YXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwg dHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl cmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg eyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu YW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7 IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh dG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K ICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogIG9wZXJh dG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9CiMgNzYgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7 CiMgOTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBp bmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIy IF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOwoK CiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7 CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9CiMgMTE4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7 CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwogICAgICBfX2EgPSBfX2I7CiAgICAgIF9f YiA9IF9fdG1wOwogICAgfQojIDE0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYK ICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAg ICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNv bnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBf X2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2Ep KSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21w KF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg ICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJz dCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rp c3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1 bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBf X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVt bW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkp OwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs c2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg X19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJu IF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAg X19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9U cCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw KiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg IHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg aW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry dWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihf X2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlf bmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAg ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl VHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFs OwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3Jt YWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4g X19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9y bWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICBy ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK ICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg aW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9y bWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUg X0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRl cjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBf X2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsK ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAw OyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9C b29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAgIHsKICAgICAg c3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0 cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAg ICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNvbnN0IHB0cmRp ZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1cm4gX19yZXN1 bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBz dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90 eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1 cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAg ICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIK ICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBf X3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsKICAg ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4K ICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAg fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBf QkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly c3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkkyKF9fY29weV9i YWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg dHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRf bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h bF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkx IF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAg ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0 LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1h bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRl cmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAg IHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIs IHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9u KF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAg ewoKICAgICAKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAg ICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlu bGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBf X2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9f dG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsK ICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNo YXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBf X3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNo YXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIg X190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T aXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciog X19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAg IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3Qg KyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25l ZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVk IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2Mp OwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBf X24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsg X19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEs IF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAg ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAg ICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1 dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0MCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAg ewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmlu YXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBf SW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlm ICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBf SW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAg ICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0g X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3By ZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBy ZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg IAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz dDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGxleGljb2dyYXBo aWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3Qy KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAg ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGlj b2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsK ICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBz aXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0 ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgICBy ZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9 CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19m aXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCiAgewoKICAgIHJldHVybiBs ZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh ciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgogIH0KCn0KIyA1NCAiL3Vzci9pbmNsdWRlL2cr Ky12My9leHQvc2xpc3QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs b2MuaCIgMSAzCiMgODQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9n KystdjMvY2Fzc2VydCIgMwoKIyAxICIvdXNyL3NoLWVsZi9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK CgoKCgpleHRlcm4gIkMiIHsKIyAyNSAiL3Vzci9zaC1lbGYvaW5jbHVkZS9hc3NlcnQuaCIgMwp2 b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKTsKCgp9CiMgNDkg Ii91c3IvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgODYgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90 aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAgewoKICAg IHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7 CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9SZWZjb3Vu dF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhy ZWFkX211dGV4X3QgX190bXAgPSAwOwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoK CgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9t dXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAg ICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAg X1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01f cmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2Nv dW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAg ICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBf U3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9s b2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAg ICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2NrID0gMDsKCgoKICBpbmxp bmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNp Z25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9ja19z dHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9f cDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9sb2Nr X3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiMgMTUx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RM X211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAg dm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9j aygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0K CiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRf bXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAg ICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly ZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9s b2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19s b2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9 CiMgODcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKIyA5OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiAg Y2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxv Y2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAg IHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9w ZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGUKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBf U19vb21fbWFsbG9jKHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2 b2lkKiwgc2l6ZV90KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7 CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9Cgog ICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNp emVfdCBfX25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhf X3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19v b21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg IH0KCiAgICAgIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2Yp KCkpKSgpCiAgICAgIHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nf b29tX2hhbmRsZXI7CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAg ICAgICAgcmV0dXJuKF9fb2xkKTsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19p bnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxv Y19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAg dm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Mo c2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwog ICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAg X19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAg ICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93 X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAg ICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAg ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQg X19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9T X29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBf X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAo OzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikK ICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21h bGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsK ICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg ICAgICB9CiAgICB9CgoKCgoKCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7 CiMgMjE5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0 ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBw dWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp KTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxs b2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxv Y2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9j YXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkp OyB9CiAgfTsKIyAyNTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwog IHRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19kZWJ1Z19hbGxvYwogIHsKICBwcml2 YXRlOgogICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9p ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh ciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90 KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7 CiAgICB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p CiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJh OwogICAgICAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gKHZvaWQpMCA6IF9fYXNzZXJ0 KCIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzAsICIqKHNpemVfdCop X19yZWFsX3AgPT0gX19uIikpOwogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9f biArIChpbnQpIF9TX2V4dHJhKTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2 b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAgewogICAgICBj aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKCgqKHNp emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gKHZvaWQpMCA6IF9fYXNzZXJ0KCIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcsICIqKHNpemVfdCopX19yZWFsX3Ag PT0gX19vbGRfc3oiKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9B bGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0 cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9f cmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9f aW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0ZToKICAg IGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVt IHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9uIF9PYmoKICAg IHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNoYXIgX01fY2xp ZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xp c3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICAgIHN0 YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK ICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsKCiAgICBz dGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJu ICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAx KSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19i eXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVf dClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZpbGwoc2l6ZV90 IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np emUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAgcHVibGljOgog ICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9h Y3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVf YWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1dGVfXyAo KF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoKICAgIHN0 YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCogX19y ZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgICAgX19y ZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QK ICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAgX0xvY2sg X19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVzdWx0ID0g Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgICAg IF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxzZQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01f ZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3RhdGljIHZv aWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBpZiAo X19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxs b2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9s YXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl ZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCiAg ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01fZnJlZV9s aXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBf X3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0ZSh2b2lk KiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAgdGVtcGxh dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwK ICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNv bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyBy ZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCiAg ICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9f c2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAt IF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMp CiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3Rh cnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAg IH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAg ICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3Rv dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3Rh cnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0 ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0 ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxp c3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9m cmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg ICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQog ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjphbGxvY2F0 ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2JqKiB2 b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAg ICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChzaXpl X3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl ZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0 OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlz dF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7 CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7 CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25v YmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh ciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAg ICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAg X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICBy ZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQogICAgfQoK CgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNp emVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1 bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJl bnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYg KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9T X2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAo X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p KSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAg ICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+ IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50IGlu c3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+ OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQog ICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsKCiAgICAg IGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90 KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwog ICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19u ZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7 CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdf c3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9j YXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKICB0ZW1w bGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sKICBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRv cl9sb2NrCiAgPSB7IDAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf c3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog IGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2Vu ZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6 ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBf c2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVu YW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZv bGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf ZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxm YWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRv cgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl ZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwog IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9j YXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7 fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+ JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVz cyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBh ZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBf VHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJu IF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl b2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0 ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRo cm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192 YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0 ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy biBmYWxzZTsKfQojIDY5NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yCnsK ICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiBy ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm IF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7 CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19h bGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f YSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxv Yykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9j YXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9j KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoK ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g MCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3Vu ZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsK ICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7 IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9 CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2 b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCgp0ZW1wbGF0 ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50IF9f aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsK ICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA4 NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGlj IGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBib29sIF9BbGxv Y190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9y PF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVk ZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxs b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0 PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVk ZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAg ICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAg c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2lt cGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlw ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90 eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4K c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRv cjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNv bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g YWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9v bCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAg ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0 YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBs ZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAg ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVj dCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19hbGxvYzxfQWxs b2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRv cjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwoKCgog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD47 Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0 cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0 PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U MT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0 YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQojIDk4ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQoj IDExMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJv eV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAg ICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9E ZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1 ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0 b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAg IF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcigp KTsKICAgIH0KfQojIDU2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4dC9zbGlzdCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9h dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y ZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7 CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7 CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAg ICAgICAgfQogICAgfQojIDEwNiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRp YWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y d2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVz dWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJu IF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNf UE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg Y2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAg ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVy biBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90Kgog IHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90 KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAg IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBf X2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg dm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f Zmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19j dXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0 Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAg ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxNjQgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxs KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f eCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0 aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0K CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls bF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICBy ZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zvcndh cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz dDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQog ICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsK ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19m aXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omlz X1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1 eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAg ewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFs aXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2go Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAg ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9G b3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19y ZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmls bChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5p dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRj aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAg ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg dm9pZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBf SW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQy ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAg IHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsK ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19m aXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTcg Ii91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAyIDMKCgpuYW1lc3BhY2UgX19nbnVfY3h4 CnsKdXNpbmcgc3RkOjpzaXplX3Q7CnVzaW5nIHN0ZDo6cHRyZGlmZl90Owp1c2luZyBzdGQ6Ol9B bGxvY190cmFpdHM7CnVzaW5nIHN0ZDo6X0NvbnN0cnVjdDsKdXNpbmcgc3RkOjpfRGVzdHJveTsK dXNpbmcgc3RkOjphbGxvY2F0b3I7CgpzdHJ1Y3QgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1NsaXN0 X25vZGVfYmFzZSogX01fbmV4dDsKfTsKCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3NsaXN0 X21ha2VfbGluayhfU2xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSwKICAgICAgICAgICAgICAg ICAgX1NsaXN0X25vZGVfYmFzZSogX19uZXdfbm9kZSkKewogIF9fbmV3X25vZGUtPl9NX25leHQg PSBfX3ByZXZfbm9kZS0+X01fbmV4dDsKICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV3X25v ZGU7CiAgcmV0dXJuIF9fbmV3X25vZGU7Cn0KCmlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgpfX3Ns aXN0X3ByZXZpb3VzKF9TbGlzdF9ub2RlX2Jhc2UqIF9faGVhZCwKICAgICAgICAgICAgICAgICBj b25zdCBfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICB3aGlsZSAoX19oZWFkICYmIF9faGVh ZC0+X01fbmV4dCAhPSBfX25vZGUpCiAgICBfX2hlYWQgPSBfX2hlYWQtPl9NX25leHQ7CiAgcmV0 dXJuIF9faGVhZDsKfQoKaW5saW5lIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqCl9fc2xpc3RfcHJl dmlvdXMoY29uc3QgX1NsaXN0X25vZGVfYmFzZSogX19oZWFkLAogICAgICAgICAgICAgICAgIGNv bnN0IF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKewogIHdoaWxlIChfX2hlYWQgJiYgX19oZWFk LT5fTV9uZXh0ICE9IF9fbm9kZSkKICAgIF9faGVhZCA9IF9faGVhZC0+X01fbmV4dDsKICByZXR1 cm4gX19oZWFkOwp9CgppbmxpbmUgdm9pZCBfX3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9k ZV9iYXNlKiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NsaXN0X25v ZGVfYmFzZSogX19iZWZvcmVfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2xhc3QpCnsKICBpZiAoX19wb3MgIT0gX19iZWZv cmVfZmlyc3QgJiYgX19wb3MgIT0gX19iZWZvcmVfbGFzdCkgewogICAgX1NsaXN0X25vZGVfYmFz ZSogX19maXJzdCA9IF9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0OwogICAgX1NsaXN0X25vZGVfYmFz ZSogX19hZnRlciA9IF9fcG9zLT5fTV9uZXh0OwogICAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQg PSBfX2JlZm9yZV9sYXN0LT5fTV9uZXh0OwogICAgX19wb3MtPl9NX25leHQgPSBfX2ZpcnN0Owog ICAgX19iZWZvcmVfbGFzdC0+X01fbmV4dCA9IF9fYWZ0ZXI7CiAgfQp9CgppbmxpbmUgdm9pZApf X3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgX1NsaXN0X25vZGVf YmFzZSogX19oZWFkKQp7CiAgX1NsaXN0X25vZGVfYmFzZSogX19iZWZvcmVfbGFzdCA9IF9fc2xp c3RfcHJldmlvdXMoX19oZWFkLCAwKTsKICBpZiAoX19iZWZvcmVfbGFzdCAhPSBfX2hlYWQpIHsK ICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fYWZ0ZXIgPSBfX3Bvcy0+X01fbmV4dDsKICAgIF9fcG9z LT5fTV9uZXh0ID0gX19oZWFkLT5fTV9uZXh0OwogICAgX19oZWFkLT5fTV9uZXh0ID0gMDsKICAg IF9fYmVmb3JlX2xhc3QtPl9NX25leHQgPSBfX2FmdGVyOwogIH0KfQoKaW5saW5lIF9TbGlzdF9u b2RlX2Jhc2UqIF9fc2xpc3RfcmV2ZXJzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICBf U2xpc3Rfbm9kZV9iYXNlKiBfX3Jlc3VsdCA9IF9fbm9kZTsKICBfX25vZGUgPSBfX25vZGUtPl9N X25leHQ7CiAgX19yZXN1bHQtPl9NX25leHQgPSAwOwogIHdoaWxlKF9fbm9kZSkgewogICAgX1Ns aXN0X25vZGVfYmFzZSogX19uZXh0ID0gX19ub2RlLT5fTV9uZXh0OwogICAgX19ub2RlLT5fTV9u ZXh0ID0gX19yZXN1bHQ7CiAgICBfX3Jlc3VsdCA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IF9fbmV4 dDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgppbmxpbmUgc2l6ZV90IF9fc2xpc3Rfc2l6ZShf U2xpc3Rfbm9kZV9iYXNlKiBfX25vZGUpCnsKICBzaXplX3QgX19yZXN1bHQgPSAwOwogIGZvciAo IDsgX19ub2RlICE9IDA7IF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dCkKICAgICsrX19yZXN1bHQ7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX1NsaXN0 X25vZGUgOiBwdWJsaWMgX1NsaXN0X25vZGVfYmFzZQp7CiAgX1RwIF9NX2RhdGE7Cn07CgpzdHJ1 Y3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0 eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBzdGQ6OmZvcndhcmRf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9u b2RlOwoKICBfU2xpc3RfaXRlcmF0b3JfYmFzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX3gpIDogX01f bm9kZShfX3gpIHt9CiAgdm9pZCBfTV9pbmNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4 dDsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NsaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7CiAgfQogIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBfU2xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1NsaXN0X2l0ZXJhdG9yIDogcHVibGljIF9T bGlzdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIF9UcCYs IF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29uc3QgX1Rw JiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8 X1RwLCBfUmVmLCBfUHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Ns aXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgX1NsaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpIDogX1Ns aXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9TbGlzdF9pdGVyYXRvcigpIDogX1NsaXN0X2l0 ZXJhdG9yX2Jhc2UoMCkge30KICBfU2xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkg OiBfU2xpc3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkge30KCiAgcmVmZXJlbmNlIG9wZXJh dG9yKigpIGNvbnN0IHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQogIHBv aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9T ZWxmJiBvcGVyYXRvcisrKCkKICB7CiAgICBfTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KQogIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg ICBfTV9pbmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDIxMyAiL3Vzci9pbmNsdWRl L2crKy12My9leHQvc2xpc3QiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv ciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9TbGlzdF9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX1NsaXN0X2FsbG9j X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2Ep IHt9Cgpwcm90ZWN0ZWQ6CiAgX1NsaXN0X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyBy ZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2Rl KF9TbGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0 ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfU2xpc3Rf bm9kZTxfVHA+LF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVf YWxsb2NhdG9yOwogIF9TbGlzdF9ub2RlX2Jhc2UgX01faGVhZDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfU2xpc3RfYWxsb2NfYmFzZTxfVHAsX0Fs bG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz PF9UcCxfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0 b3JfdHlwZSgpOyB9CgogIF9TbGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikg e30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1NsaXN0X25v ZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsK ICBfU2xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjph bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1NsaXN0X25vZGU8X1RwPiogX19wKSB7 IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICBfU2xpc3Rf bm9kZV9iYXNlIF9NX2hlYWQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PgpzdHJ1Y3QgX1NsaXN0X2Jhc2UKICA6IHB1YmxpYyBfU2xpc3RfYWxsb2NfYmFzZTxfVHAsIF9B bGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfU2xpc3RfYWxsb2NfYmFzZTxfVHAs IF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1NsaXN0X2Jhc2Uo Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSB7IHRoaXMtPl9NX2hl YWQuX01fbmV4dCA9IDA7IH0KICB+X1NsaXN0X2Jhc2UoKSB7IF9NX2VyYXNlX2FmdGVyKCZ0aGlz LT5fTV9oZWFkLCAwKTsgfQoKcHJvdGVjdGVkOgoKICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9lcmFz ZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcykKICB7CiAgICBfU2xpc3Rfbm9kZTxfVHA+ KiBfX25leHQgPSAoX1NsaXN0X25vZGU8X1RwPiopIChfX3Bvcy0+X01fbmV4dCk7CiAgICBfU2xp c3Rfbm9kZV9iYXNlKiBfX25leHRfbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgIF9fcG9zLT5f TV9uZXh0ID0gX19uZXh0X25leHQ7CiAgICBfRGVzdHJveSgmX19uZXh0LT5fTV9kYXRhKTsKICAg IF9NX3B1dF9ub2RlKF9fbmV4dCk7CiAgICByZXR1cm4gX19uZXh0X25leHQ7CiAgfQogIF9TbGlz dF9ub2RlX2Jhc2UqIF9NX2VyYXNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqLCBfU2xpc3Rfbm9k ZV9iYXNlKik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cl9TbGlzdF9u b2RlX2Jhc2UqCl9TbGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpfTV9lcmFzZV9hZnRlcihfU2xpc3Rf bm9kZV9iYXNlKiBfX2JlZm9yZV9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fbGFzdF9ub2RlKSB7CiAgX1NsaXN0X25vZGU8 X1RwPiogX19jdXIgPSAoX1NsaXN0X25vZGU8X1RwPiopIChfX2JlZm9yZV9maXJzdC0+X01fbmV4 dCk7CiAgd2hpbGUgKF9fY3VyICE9IF9fbGFzdF9ub2RlKSB7CiAgICBfU2xpc3Rfbm9kZTxfVHA+ KiBfX3RtcCA9IF9fY3VyOwogICAgX19jdXIgPSAoX1NsaXN0X25vZGU8X1RwPiopIF9fY3VyLT5f TV9uZXh0OwogICAgX0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9f dG1wKTsKICB9CiAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQgPSBfX2xhc3Rfbm9kZTsKICByZXR1 cm4gX19sYXN0X25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFs bG9jYXRvcjxfVHA+ID4KY2xhc3Mgc2xpc3QgOiBwcml2YXRlIF9TbGlzdF9iYXNlPF9UcCxfQWxs b2M+CnsKCiAKCnByaXZhdGU6CiAgdHlwZWRlZiBfU2xpc3RfYmFzZTxfVHAsX0FsbG9jPiBfQmFz ZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBl KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0 eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUm IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAs IF9UcCYsIF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29u c3QgX1RwJiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgdHlwZW5hbWUg X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpw cml2YXRlOgogIHR5cGVkZWYgX1NsaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIF9TbGlz dF9ub2RlX2Jhc2UgX05vZGVfYmFzZTsKICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcl9iYXNlIF9J dGVyYXRvcl9iYXNlOwoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYg X194KSB7CiAgICBfTm9kZSogX19ub2RlID0gdGhpcy0+X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7 CiAgICAgIF9Db25zdHJ1Y3QoJl9fbm9kZS0+X01fZGF0YSwgX194KTsKICAgICAgX19ub2RlLT5f TV9uZXh0ID0gMDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIHRoaXMtPl9N X3B1dF9ub2RlKF9fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIHJldHVybiBfX25v ZGU7CiAgfQoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoKSB7CiAgICBfTm9kZSogX19ub2RlID0g dGhpcy0+X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIF9Db25zdHJ1Y3QoJl9fbm9kZS0+ X01fZGF0YSk7CiAgICAgIF9fbm9kZS0+X01fbmV4dCA9IDA7CiAgICB9CiAgICBjYXRjaCguLi4p CiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOwogICAgICAgIHRocm93 OwogICAgICB9CiAgICByZXR1cm4gX19ub2RlOwogIH0KCnB1YmxpYzoKICBleHBsaWNpdCBzbGlz dChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShf X2EpIHt9CgogIHNsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCwKICAg ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFz ZShfX2EpCiAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKCZ0aGlzLT5fTV9oZWFkLCBfX24sIF9f eCk7IH0KCiAgZXhwbGljaXQgc2xpc3Qoc2l6ZV90eXBlIF9fbikgOiBfQmFzZShhbGxvY2F0b3Jf dHlwZSgpKQogICAgeyBfTV9pbnNlcnRfYWZ0ZXJfZmlsbCgmdGhpcy0+X01faGVhZCwgX19uLCB2 YWx1ZV90eXBlKCkpOyB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHNs aXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShf X2EpCiAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZSgmdGhpcy0+X01faGVhZCwgX19maXJzdCwg X19sYXN0KTsgfQoKICBzbGlzdChjb25zdCBzbGlzdCYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxs b2NhdG9yKCkpCiAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZSgmdGhpcy0+X01faGVhZCwgX194 LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgc2xpc3QmIG9wZXJhdG9yPSAoY29uc3Qgc2xpc3Qm IF9feCk7CgogIH5zbGlzdCgpIHt9CgpwdWJsaWM6CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5 cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQogICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFs KTsgfQoKICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192 YWwpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRj aChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmls bF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZhbHNlX3R5cGUpOwoKcHVibGljOgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu IGl0ZXJhdG9yKChfTm9kZSopdGhpcy0+X01faGVhZC5fTV9uZXh0KTsgfQogIGNvbnN0X2l0ZXJh dG9yIGJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKChfTm9kZSopdGhp cy0+X01faGVhZC5fTV9uZXh0KTt9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9y KDApOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0 b3IoMCk7IH0KIyA0MTkgIi91c3IvaW5jbHVkZS9nKystdjMvZXh0L3NsaXN0IiAzCiAgaXRlcmF0 b3IgYmVmb3JlX2JlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgJnRoaXMtPl9NX2hl YWQpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVmb3JlX2JlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJu IGNvbnN0X2l0ZXJhdG9yKChfTm9kZSopICZ0aGlzLT5fTV9oZWFkKTsgfQoKICBzaXplX3R5cGUg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fc2xpc3Rfc2l6ZSh0aGlzLT5fTV9oZWFkLl9NX25leHQp OyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7 IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9 PSAwOyB9CgogIHZvaWQgc3dhcChzbGlzdCYgX194KQogICAgeyBzdGQ6OnN3YXAodGhpcy0+X01f aGVhZC5fTV9uZXh0LCBfX3guX01faGVhZC5fTV9uZXh0KTsgfQoKcHVibGljOgoKICByZWZlcmVu Y2UgZnJvbnQoKSB7IHJldHVybiAoKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01f ZGF0YTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0CiAgICB7IHJldHVybiAoKF9O b2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01fZGF0YTsgfQogIHZvaWQgcHVzaF9mcm9u dChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIF9fc2xpc3RfbWFrZV9saW5rKCZ0aGlzLT5f TV9oZWFkLCBfTV9jcmVhdGVfbm9kZShfX3gpKTsKICB9CiAgdm9pZCBwdXNoX2Zyb250KCkgeyBf X3NsaXN0X21ha2VfbGluaygmdGhpcy0+X01faGVhZCwgX01fY3JlYXRlX25vZGUoKSk7IH0KICB2 b2lkIHBvcF9mcm9udCgpIHsKICAgIF9Ob2RlKiBfX25vZGUgPSAoX05vZGUqKSB0aGlzLT5fTV9o ZWFkLl9NX25leHQ7CiAgICB0aGlzLT5fTV9oZWFkLl9NX25leHQgPSBfX25vZGUtPl9NX25leHQ7 CiAgICBfRGVzdHJveSgmX19ub2RlLT5fTV9kYXRhKTsKICAgIHRoaXMtPl9NX3B1dF9ub2RlKF9f bm9kZSk7CiAgfQoKICBpdGVyYXRvciBwcmV2aW91cyhjb25zdF9pdGVyYXRvciBfX3Bvcykgewog ICAgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hl YWQsIF9fcG9zLl9NX25vZGUpKTsKICB9CiAgY29uc3RfaXRlcmF0b3IgcHJldmlvdXMoY29uc3Rf aXRlcmF0b3IgX19wb3MpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUq KSBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3MuX01fbm9kZSkpOwogIH0KCnByaXZh dGU6CiAgX05vZGUqIF9NX2luc2VydF9hZnRlcihfTm9kZV9iYXNlKiBfX3BvcywgY29uc3QgdmFs dWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9saW5rKF9f cG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKSk7CiAgfQoKICBfTm9kZSogX01faW5zZXJ0X2FmdGVy KF9Ob2RlX2Jhc2UqIF9fcG9zKSB7CiAgICByZXR1cm4gKF9Ob2RlKikgKF9fc2xpc3RfbWFrZV9s aW5rKF9fcG9zLCBfTV9jcmVhdGVfbm9kZSgpKSk7CiAgfQoKICB2b2lkIF9NX2luc2VydF9hZnRl cl9maWxsKF9Ob2RlX2Jhc2UqIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBmb3IgKHNpemVfdHlwZSBf X2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAgICBfX3BvcyA9IF9fc2xpc3RfbWFrZV9saW5r KF9fcG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu SXRlcj4KICB2b2lkIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9Jbkl0ZXIgX19sYXN0 KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwg X0ludGVncmFsOwogICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xh c3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lk IF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywgX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsK ICAgIF9NX2luc2VydF9hZnRlcl9maWxsKF9fcG9zLCBfX24sIF9feCk7CiAgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0luSXRlcj4KICB2b2lkIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNl KiBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5JdGVyIF9fZmlyc3QsIF9J bkl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg ewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9fcG9zID0gX19zbGlzdF9t YWtlX2xpbmsoX19wb3MsIF9NX2NyZWF0ZV9ub2RlKCpfX2ZpcnN0KSk7CiAgICAgICsrX19maXJz dDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGluc2VydF9hZnRlcihpdGVyYXRvciBf X3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gaXRlcmF0b3IoX01faW5z ZXJ0X2FmdGVyKF9fcG9zLl9NX25vZGUsIF9feCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0X2Fm dGVyKGl0ZXJhdG9yIF9fcG9zKSB7CiAgICByZXR1cm4gaW5zZXJ0X2FmdGVyKF9fcG9zLCB2YWx1 ZV90eXBlKCkpOwogIH0KCiAgdm9pZCBpbnNlcnRfYWZ0ZXIoaXRlcmF0b3IgX19wb3MsIHNpemVf dHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0X2FmdGVyX2Zp bGwoX19wb3MuX01fbm9kZSwgX19uLCBfX3gpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu SXRlcj4KICB2b2lkIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcywgX0luSXRlciBfX2ZpcnN0 LCBfSW5JdGVyIF9fbGFzdCkgewogICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLl9NX25v ZGUsIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19w b3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2luc2Vy dF9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zLl9NX25vZGUpLAogICAg ICAgICAgICAgICAgICAgIF9feCkpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zKSB7CiAgICByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fc2xpc3RfcHJldmlv dXMoJnRoaXMtPl9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbHVlX3R5cGUoKSkpOwogIH0KCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19w b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgX01faW5zZXJ0 X2FmdGVyX2ZpbGwoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9k ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICBfX24sIF9feCk7CiAgfQoKCgogIHRlbXBsYXRl IDxjbGFzcyBfSW5JdGVyPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5JdGVyIF9f Zmlyc3QsIF9Jbkl0ZXIgX19sYXN0KSB7CiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19zbGlz dF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19maXJzdCwgX19sYXN0KTsKICB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJh c2VfYWZ0ZXIoaXRlcmF0b3IgX19wb3MpIHsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSB0 aGlzLT5fTV9lcmFzZV9hZnRlcihfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVyYXNl X2FmdGVyKGl0ZXJhdG9yIF9fYmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHJl dHVybiBpdGVyYXRvcigoX05vZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2JlZm9yZV9maXJz dC5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGFzdC5fTV9ub2RlKSk7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv cykgewogICAgcmV0dXJuIChfTm9kZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fc2xpc3RfcHJl dmlvdXMoJnRoaXMtPl9NX2hlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Bvcy5fTV9ub2RlKSk7CiAgfQogIGl0ZXJhdG9yIGVy YXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgcmV0dXJuIChfTm9k ZSopIHRoaXMtPl9NX2VyYXNlX2FmdGVyKAogICAgICBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5f TV9oZWFkLCBfX2ZpcnN0Ll9NX25vZGUpLCBfX2xhc3QuX01fbm9kZSk7CiAgfQoKICB2b2lkIHJl c2l6ZShzaXplX3R5cGUgbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShz aXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNs ZWFyKCkgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faGVhZCwgMCk7IH0KCnB1Ymxp YzoKCgogIHZvaWQgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg ICAgIGl0ZXJhdG9yIF9fYmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2JlZm9yZV9sYXN0KQogIHsK ICAgIGlmIChfX2JlZm9yZV9maXJzdCAhPSBfX2JlZm9yZV9sYXN0KQogICAgICBfX3NsaXN0X3Nw bGljZV9hZnRlcihfX3Bvcy5fTV9ub2RlLCBfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2JlZm9yZV9sYXN0Ll9NX25vZGUpOwogIH0KCgoKICB2b2lk IHNwbGljZV9hZnRlcihpdGVyYXRvciBfX3BvcywgaXRlcmF0b3IgX19wcmV2KQogIHsKICAgIF9f c2xpc3Rfc3BsaWNlX2FmdGVyKF9fcG9zLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX3ByZXYuX01fbm9kZSwgX19wcmV2Ll9NX25vZGUtPl9NX25leHQpOwogIH0KCgoKCgogIHZv aWQgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194KQogIHsKICAgIF9fc2xp c3Rfc3BsaWNlX2FmdGVyKF9fcG9zLl9NX25vZGUsICZfX3guX01faGVhZCk7CiAgfQoKCiAgdm9p ZCBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBfX3gpIHsKICAgIGlmIChfX3guX01faGVh ZC5fTV9uZXh0KQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0 aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Jl9feC5fTV9oZWFkLCBfX3NsaXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgMCkpOwogIH0KCgog IHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194LCBpdGVyYXRvciBfX2kpIHsK ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQs IF9fcG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgX19zbGlzdF9wcmV2aW91 cygmX194Ll9NX2hlYWQsIF9faS5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f aS5fTV9ub2RlKTsKICB9CgoKCiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3MsIHNsaXN0JiBf X3gsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBpZiAoX19maXJz dCAhPSBfX2xhc3QpCiAgICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMo JnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3NsaXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgX19maXJzdC5fTV9ub2RlKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zbGlzdF9wcmV2aW91cyhfX2ZpcnN0Ll9NX25vZGUsIF9f bGFzdC5fTV9ub2RlKSk7CiAgfQoKcHVibGljOgogIHZvaWQgcmV2ZXJzZSgpIHsKICAgIGlmICh0 aGlzLT5fTV9oZWFkLl9NX25leHQpCiAgICAgIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IF9fc2xp c3RfcmV2ZXJzZSh0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogIH0KCiAgdm9pZCByZW1vdmUoY29u c3QgX1RwJiBfX3ZhbCk7CiAgdm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdlKHNsaXN0JiBfX3gp OwogIHZvaWQgc29ydCgpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KICB2b2lkIHJl bW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJl ZGljYXRlPgogIHZvaWQgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKTsKCiAgdGVtcGxh dGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CiAgdm9pZCBtZXJnZShzbGlzdCYsIF9TdHJp Y3RXZWFrT3JkZXJpbmcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K ICB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzbGlzdDxfVHAsX0FsbG9jPiYgc2xpc3Q8X1RwLF9BbGxv Yz46Om9wZXJhdG9yPShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3gg IT0gdGhpcykgewogICAgX05vZGVfYmFzZSogX19wMSA9ICZ0aGlzLT5fTV9oZWFkOwogICAgX05v ZGUqIF9fbjEgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CiAgICBjb25zdCBfTm9k ZSogX19uMiA9IChjb25zdCBfTm9kZSopIF9feC5fTV9oZWFkLl9NX25leHQ7CiAgICB3aGlsZSAo X19uMSAmJiBfX24yKSB7CiAgICAgIF9fbjEtPl9NX2RhdGEgPSBfX24yLT5fTV9kYXRhOwogICAg ICBfX3AxID0gX19uMTsKICAgICAgX19uMSA9IChfTm9kZSopIF9fbjEtPl9NX25leHQ7CiAgICAg IF9fbjIgPSAoY29uc3QgX05vZGUqKSBfX24yLT5fTV9uZXh0OwogICAgfQogICAgaWYgKF9fbjIg PT0gMCkKICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19wMSwgMCk7CiAgICBlbHNlCiAgICAg IF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3AxLCBjb25zdF9pdGVyYXRvcigoX05vZGUqKV9fbjIp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IoMCkpOwog IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCBzbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNv bnN0IF9UcCYgX192YWwpIHsKICBfTm9kZV9iYXNlKiBfX3ByZXYgPSAmdGhpcy0+X01faGVhZDsK ICBfTm9kZSogX19ub2RlID0gKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGZvciAo IDsgX19ub2RlICE9IDAgJiYgX19uID4gMCA7IC0tX19uKSB7CiAgICBfX25vZGUtPl9NX2RhdGEg PSBfX3ZhbDsKICAgIF9fcHJldiA9IF9fbm9kZTsKICAgIF9fbm9kZSA9IChfTm9kZSopIF9fbm9k ZS0+X01fbmV4dDsKICB9CiAgaWYgKF9fbiA+IDApCiAgICBfTV9pbnNlcnRfYWZ0ZXJfZmlsbChf X3ByZXYsIF9fbiwgX192YWwpOwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJl diwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXI+CnZvaWQKc2xpc3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0 Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX05vZGVfYmFzZSogX19w cmV2ID0gJnRoaXMtPl9NX2hlYWQ7CiAgX05vZGUqIF9fbm9kZSA9IChfTm9kZSopIHRoaXMtPl9N X2hlYWQuX01fbmV4dDsKICB3aGlsZSAoX19ub2RlICE9IDAgJiYgX19maXJzdCAhPSBfX2xhc3Qp IHsKICAgIF9fbm9kZS0+X01fZGF0YSA9ICpfX2ZpcnN0OwogICAgX19wcmV2ID0gX19ub2RlOwog ICAgX19ub2RlID0gKF9Ob2RlKikgX19ub2RlLT5fTV9uZXh0OwogICAgKytfX2ZpcnN0OwogIH0K ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoX19wcmV2 LCBfX2ZpcnN0LCBfX2xhc3QpOwogIGVsc2UKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJl diwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wK b3BlcmF0b3I9PShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1Rw LF9BbGxvYz4mIF9TTDIpCnsKICB0eXBlZGVmIHR5cGVuYW1lIHNsaXN0PF9UcCxfQWxsb2M+Ojpj b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBf U0wxLmVuZCgpOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMiA9IF9TTDIuZW5kKCk7CgogIGNvbnN0 X2l0ZXJhdG9yIF9faTEgPSBfU0wxLmJlZ2luKCk7CiAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9T TDIuYmVnaW4oKTsKICB3aGlsZSAoX19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYg Kl9faTEgPT0gKl9faTIpIHsKICAgICsrX19pMTsKICAgICsrX19pMjsKICB9CiAgcmV0dXJuIF9f aTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3Qgc2xpc3Q8X1RwLF9BbGxv Yz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCxfQWxsb2M+JiBfU0wyKQp7CiAgcmV0dXJuIHN0ZDo6 bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX1NMMS5iZWdpbigpLCBfU0wxLmVuZCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TTDIuYmVnaW4oKSwgX1NMMi5lbmQoKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0 b3IhPShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxv Yz4mIF9TTDIpIHsKICByZXR1cm4gIShfU0wxID09IF9TTDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBzbGlzdDxfVHAs X0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4g X1NMMiA8IF9TTDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wKb3BlcmF0b3I8PShjb25zdCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xp c3Q8X1RwLF9BbGxvYz4mIF9TTDIpIHsKICByZXR1cm4gIShfU0wyIDwgX1NMMSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25z dCBzbGlzdDxfVHAsX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLF9BbGxvYz4mIF9TTDIp IHsKICByZXR1cm4gIShfU0wxIDwgX1NMMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChzbGlzdDxfVHAsX0FsbG9jPiYgX194LCBzbGlzdDxf VHAsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVzaXplKHNpemVfdHlw ZSBfX2xlbiwgY29uc3QgX1RwJiBfX3gpCnsKICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5f TV9oZWFkOwogIHdoaWxlIChfX2N1ci0+X01fbmV4dCAhPSAwICYmIF9fbGVuID4gMCkgewogICAg LS1fX2xlbjsKICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CiAgfQogIGlmIChfX2N1ci0+X01f bmV4dCkKICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyLCAwKTsKICBlbHNlCiAgICBfTV9p bnNlcnRfYWZ0ZXJfZmlsbChfX2N1ciwgX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9U cCYgX192YWwpCnsKICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxl IChfX2N1ciAmJiBfX2N1ci0+X01fbmV4dCkgewogICAgaWYgKCgoX05vZGUqKSBfX2N1ci0+X01f bmV4dCktPl9NX2RhdGEgPT0gX192YWwpCiAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3Vy KTsKICAgIGVsc2UKICAgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6dW5pcXVl KCkKewogIF9Ob2RlX2Jhc2UqIF9fY3VyID0gdGhpcy0+X01faGVhZC5fTV9uZXh0OwogIGlmIChf X2N1cikgewogICAgd2hpbGUgKF9fY3VyLT5fTV9uZXh0KSB7CiAgICAgIGlmICgoKF9Ob2RlKilf X2N1ciktPl9NX2RhdGEgPT0KICAgICAgICAgICgoX05vZGUqKShfX2N1ci0+X01fbmV4dCkpLT5f TV9kYXRhKQogICAgICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgICAgZWxzZQog ICAgICAgIF9fY3VyID0gX19jdXItPl9NX25leHQ7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46Om1lcmdlKHNsaXN0 PF9UcCxfQWxsb2M+JiBfX3gpCnsKICBfTm9kZV9iYXNlKiBfX24xID0gJnRoaXMtPl9NX2hlYWQ7 CiAgd2hpbGUgKF9fbjEtPl9NX25leHQgJiYgX194Ll9NX2hlYWQuX01fbmV4dCkgewogICAgaWYg KCgoX05vZGUqKSBfX3guX01faGVhZC5fTV9uZXh0KS0+X01fZGF0YSA8CiAgICAgICAgKChfTm9k ZSopIF9fbjEtPl9NX25leHQpLT5fTV9kYXRhKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihf X24xLCAmX194Ll9NX2hlYWQsIF9feC5fTV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEt Pl9NX25leHQ7CiAgfQogIGlmIChfX3guX01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9u ZXh0ID0gX194Ll9NX2hlYWQuX01fbmV4dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHNsaXN0PF9UcCxf QWxsb2M+Ojpzb3J0KCkKewogIGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01f aGVhZC5fTV9uZXh0LT5fTV9uZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19j b3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAg ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0aGlzLT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAg ICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19f aV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAg ICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgKytfX2k7CiAgICAgIH0K ICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2Zp bGwpCiAgICAgICAgKytfX2ZpbGw7CiAgICB9CgogICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwg X19maWxsOyArK19faSkKICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0x XSk7CiAgICB0aGlzLT5zd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9p ZCBzbGlzdDxfVHAsX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQp7CiAgX05v ZGVfYmFzZSogX19jdXIgPSAmdGhpcy0+X01faGVhZDsKICB3aGlsZSAoX19jdXItPl9NX25leHQp IHsKICAgIGlmIChfX3ByZWQoKChfTm9kZSopIF9fY3VyLT5fTV9uZXh0KS0+X01fZGF0YSkpCiAg ICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKICAgIGVsc2UKICAgICAgX19jdXIgPSBf X2N1ci0+X01fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g dGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46 OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCkKewogIF9Ob2RlKiBfX2N1ciA9IChfTm9k ZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKICBpZiAoX19jdXIpIHsKICAgIHdoaWxlIChfX2N1 ci0+X01fbmV4dCkgewogICAgICBpZiAoX19wcmVkKCgoX05vZGUqKV9fY3VyKS0+X01fZGF0YSwK ICAgICAgICAgICAgICAgICAoKF9Ob2RlKikoX19jdXItPl9NX25leHQpKS0+X01fZGF0YSkpCiAg ICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIpOwogICAgICBlbHNlCiAgICAgICAgX19j dXIgPSAoX05vZGUqKSBfX2N1ci0+X01fbmV4dDsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+ CnZvaWQgc2xpc3Q8X1RwLF9BbGxvYz46Om1lcmdlKHNsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7 CiAgX05vZGVfYmFzZSogX19uMSA9ICZ0aGlzLT5fTV9oZWFkOwogIHdoaWxlIChfX24xLT5fTV9u ZXh0ICYmIF9feC5fTV9oZWFkLl9NX25leHQpIHsKICAgIGlmIChfX2NvbXAoKChfTm9kZSopIF9f eC5fTV9oZWFkLl9NX25leHQpLT5fTV9kYXRhLAogICAgICAgICAgICAgICAoKF9Ob2RlKikgX19u MS0+X01fbmV4dCktPl9NX2RhdGEpKQogICAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX24xLCAm X194Ll9NX2hlYWQsIF9feC5fTV9oZWFkLl9NX25leHQpOwogICAgX19uMSA9IF9fbjEtPl9NX25l eHQ7CiAgfQogIGlmIChfX3guX01faGVhZC5fTV9uZXh0KSB7CiAgICBfX24xLT5fTV9uZXh0ID0g X194Ll9NX2hlYWQuX01fbmV4dDsKICAgIF9feC5fTV9oZWFkLl9NX25leHQgPSAwOwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmlj dFdlYWtPcmRlcmluZz4Kdm9pZCBzbGlzdDxfVHAsX0FsbG9jPjo6c29ydChfU3RyaWN0V2Vha09y ZGVyaW5nIF9fY29tcCkKewogIGlmICh0aGlzLT5fTV9oZWFkLl9NX25leHQgJiYgdGhpcy0+X01f aGVhZC5fTV9uZXh0LT5fTV9uZXh0KSB7CiAgICBzbGlzdCBfX2NhcnJ5OwogICAgc2xpc3QgX19j b3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAg ICAgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKCZfX2NhcnJ5Ll9NX2hlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0aGlzLT5fTV9oZWFkLCB0aGlzLT5fTV9oZWFkLl9NX25leHQpOwogICAg ICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUgKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19f aV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29t cCk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgICArK19faTsK ICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICBpZiAoX19p ID09IF9fZmlsbCkKICAgICAgICArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAx OyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50 ZXJbX19pLTFdLCBfX2NvbXApOwogICAgdGhpcy0+c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsK ICB9Cn0KCn0KCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CmNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6OnNsaXN0PF9UcCwgX0FsbG9j PiA+IHsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX19nbnVfY3h4OjpzbGlzdDxfVHAsIF9BbGxvYz4g X0NvbnRhaW5lcjsKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNl cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv ciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSB7CiAgICBpZiAoX19pID09IF9feC5iZWdpbigp KQogICAgICBpdGVyID0gX194LmJlZm9yZV9iZWdpbigpOwogICAgZWxzZQogICAgICBpdGVyID0g X194LnByZXZpb3VzKF9faSk7CiAgfQoKICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp IHsKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydF9hZnRlcihpdGVyLCBfX3ZhbHVlKTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv ciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3Bl cmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCn0KIyA1ICJzdGRjeHgvbG9j YWxzbGlzdC5oIiAyCgoKIyAxICJoZWFwLmgiIDEKCgoKIyAxICJsbGlzdC5oIiAxCgoKCgoKCnRl bXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBub2RlCiAgICAgICAgewogICAgICAgIHByaXZhdGU6 CiAgICAgICAgICAgICAgICBub2RlIDxUPiAqbmV4dDsKICAgICAgICAgICAgICAgIG5vZGUgPFQ+ ICpwcmV2OwogICAgICAgIHB1YmxpYzoKICAgICAgICBUIGRhdGE7CiAgICAgICAgbm9kZSgpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgIG5vZGUobm9kZSA8VD4gKm4sbm9kZSA8 VD4gKnApCiAgICAgICAgICAgIDoKICAgICAgICAgICAgbmV4dChuKSwKICAgICAgICAgICAgcHJl dihwKQogICAgICAgICAgICB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZvaWQgcmVt b3ZlKCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBw cmV2LT5uZXh0PW5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtPnByZXY9cHJldjsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbm9kZSA8VD4gKnN1Y2Mo KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmICghbmV4dC0+bmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g MEw7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgbm9kZSA8VD4gKnByZWQoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldi0+cHJldikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gMEw7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgdm9pZCBhZGRhZnRlcihub2RlIDxUPiAqbmV3YWRk KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld2Fk ZC0+cHJldj10aGlzOwogICAgICAgICAgICAgICAgICAgICAgICBuZXdhZGQtPm5leHQ9bmV4dDsK ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC0+cHJldj1uZXdhZGQ7CiAgICAgICAgICAgICAg ICAgICAgICAgIG5leHQ9bmV3YWRkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB2b2lkIGFkZGJlZm9yZShub2RlIDxUPiAqbmV3YWRkKQogICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgIG5ld2FkZC0+cHJldj1wcmV2OwogICAgICAgICAgICBuZXdh ZGQtPm5leHQ9dGhpczsKICAgICAgICAgICAgcHJldi0+bmV4dD1uZXdhZGQ7CiAgICAgICAgICAg IHByZXY9bmV3YWRkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCnRlbXBs YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBsbGlzdAogICAgICAgIHsKICAgICAgICBwcml2YXRlOgog ICAgICAgICAgICAgICAgVCBoZWFkbjsKICAgICAgICAgICAgICAgIFQgdGFpbG47CiAgICAgICAg cHVibGljOgogICAgICAgICAgICAgICAgbGxpc3QoKQogICAgICAgICAgICA6CiAgICAgICAgICAg IGhlYWRuKCZ0YWlsbiwwKSwKICAgICAgICAgICAgdGFpbG4oMCwmaGVhZG4pCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAg ICBib29sIGVtcHR5KCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKGhlYWRuLnN1Y2MoKSE9MCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIH07CgogICAgICAgICAgICAgICAgVCAqaGVhZCgpIGNvbnN0CiAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBoZWFkbi5zdWNjKCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgVCAqdGFpbCgpIGNvbnN0CiAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0YWlsbi5wcmVkKCk7 CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgdm9pZCBhcHBlbmQo VCAqbmV3YWRkKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgIHRhaWxuLmFk ZGJlZm9yZShuZXdhZGQpOwogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg ICAgIHZvaWQgcHJlcGVuZChUICpuZXdhZGQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgaGVhZG4uYWRkYWZ0ZXIobmV3YWRkKTsKICAgICAgICAgICAgICAgICAgICAgICAg fTsKICAgICAgICB9OwojIDUgImhlYXAuaCIgMgoKCgpjbGFzcyB0aGVhcAogICAgICAgIHsKICAg ICAgICBwcml2YXRlOgogICAgICAgIGludCBmdG90YWxzcGFjZTsKICAgICAgICB0eXBlZGVmIG5v ZGU8c2l6ZV90PiBmcmVlbWVtaGRyOwogICAgICAgICAgICAgICAgbGxpc3Q8ZnJlZW1lbWhkcj4g ZnJlZWxpc3Q7CgogICAgICAgICAgICAgICAgdm9pZCBtZXJnZShmcmVlbWVtaGRyICpsb2NhdGlv bik7CiAgICAgICAgdm9pZCBpbnNlcnRmcmVlYmxvY2soZnJlZW1lbWhkciAqbG9jYXRpb24pOwoK ICAgICAgICBmcmVlbWVtaGRyICogcGxhY2Vmb3JuZXh0ZnJlZWhkcihmcmVlbWVtaGRyICpmcmVl bWVtYmxrKQogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0 PGZyZWVtZW1oZHIgKj4oICZyZWludGVycHJldF9jYXN0PGNoYXIgKj4oZnJlZW1lbWJsaylbZnJl ZW1lbWJsay0+ZGF0YV0pOwogICAgICAgICAgICB9CgogICAgICAgIHNpemVfdCBzaXplb2ZmcmVl YmxvY2sodm9pZCAqZnJlZW1lbWJsayx2b2lkICptZW1lbmQpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIgKj4obWVtZW5kKS1zdGF0aWNfY2FzdDxjaGFy ICo+KGZyZWVtZW1ibGspOwogICAgICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZp cnR1YWwgdm9pZCB0aHJlYWRwcm90ZWN0KCk9MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgdGhyZWFk dW5wcm90ZWN0KCk9MDsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0aGVhcCh2b2lk ICptZW0sc2l6ZV90IHNpemUpOwogICAgICAgICAgICAgICAgdGhlYXAoKTsKICAgICAgICB2b2lk ICphbGxvY2F0ZShzaXplX3Qgc2l6ZSk7CiAgICAgICAgdm9pZCBkZWFsbG9jYXRlKHZvaWQgKm1l bSxzaXplX3Qgc2l6ZSk7CgogICAgICAgICAgICAgICAgdm9pZCBkdW1wKCk7CiAgICAgICAgaW50 IHRvdGFsZnJlZXNwYWNlKCk7CiAgICAgICAgaW50IHRvdGFsc3BhY2UoKSB7cmV0dXJuIGZ0b3Rh bHNwYWNlO30KICAgIH07CgoKZXh0ZXJuIHRoZWFwICZkZWZhdWx0aGVhcDsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpjbGFzcyB0aGVhcGFsbG9jYXRvcgogICAgewogICAgcHVibGljOgogICAgICAg IHRoZWFwICZoZWFwOwoKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAg dHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICB0eXBlZGVmIF9UcCYgcmVmZXJl bmNlOwogICAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYg X1RwIHZhbHVlX3R5cGU7CgogICAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgICBzdHJ1Y3QgcmVi aW5kCiAgICAgICAgewogICAgICAgIHR5cGVkZWYgdGhlYXBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7 CiAgICAgICAgfTsKCiAgICB0aGVhcGFsbG9jYXRvcigpCiAgICAgICAgOgogICAgICAgIGhlYXAo ZGVmYXVsdGhlYXApCiAgICAgICAgewogICAgICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgT1RI RVI+CiAgICB0aGVhcGFsbG9jYXRvcih0aGVhcGFsbG9jYXRvcjxPVEhFUj4gY29uc3QgJiBvdGhl cikKICAgICAgICA6CiAgICAgICAgaGVhcChvdGhlci5oZWFwKQogICAgICAgIHsKICAgICAgICB9 CgogICAgYm9vbCBvcGVyYXRvcj09KHRoZWFwYWxsb2NhdG9yPF9UcD4gY29uc3QgJiBvdGhlcikg Y29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuICZoZWFwPT0mKG90aGVyLmhlYXApOwogICAg ICAgIH0KCiAgICB0aGVhcGFsbG9jYXRvcih0aGVhcCAmYWhlYXApCiAgICAgICAgOgogICAgICAg IGhlYXAoYWhlYXApCiAgICAgICAgewogICAgICAgIH0KCiAgICBfVHAqIGFsbG9jYXRlKHNpemVf dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgICB7CiAgICAgICAgcmV0dXJuCiAgICAg ICAgX19uICE9IDAgPwogICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X1RwKj4oaGVhcC5hbGxv Y2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgIDogMDsKICAgICAgICB9CiAgICB2 b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICAgICAgewogICAg ICAgIGhlYXAuZGVhbGxvY2F0ZShfX3AsX19uICogc2l6ZW9mKF9UcCkpOwogICAgICAgIH0KICAg IH07CiMgOCAic3RkY3h4L2xvY2Fsc2xpc3QuaCIgMgoKCm5hbWVzcGFjZSBsb2NhbAogICAgewoK ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogICAgICAgICAgICAgICAgdHlwZW5hbWUgQUxMT0M9 dGhlYXBhbGxvY2F0b3I8VD4gPgogICAgY2xhc3Mgc2xpc3QgOiBwdWJsaWMgX19nbnVfY3h4Ojpz bGlzdDxULEFMTE9DPgogICAgICAgIHsKICAgICAgICB9OwoKCgogICAgfTsKIyA1ICJlbmdpbmUu aCIgMgojIDEgInN0ZGN4eC9sb2NhbGxpc3QuaCIgMQoKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvbGlzdCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvbGlzdCIgMwoKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9l eGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2 NyAiL3Vzci9pbmNsdWRlL2crKy12My9saXN0IiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2xpc3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgc3RydWN0IF9MaXN0X25vZGVfYmFzZQog IHsKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbmV4dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX01f cHJldjsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX0xpc3Rfbm9k ZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UKICAgIHsKICAgICAgX1RwIF9NX2RhdGE7CiAgICB9 OwoKICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3JfYmFzZQogIHsKICAgIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVk ZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgX0xp c3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoKICAgIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9k ZV9iYXNlKiBfX3gpCiAgICA6IF9NX25vZGUoX194KQogICAgeyB9CgogICAgX0xpc3RfaXRlcmF0 b3JfYmFzZSgpCiAgICB7IH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsgX01fbm9kZSA9 IF9NX25vZGUtPl9NX25leHQ7IH0KCiAgICB2b2lkCiAgICBfTV9kZWNyKCkKICAgIHsgX01fbm9k ZSA9IF9NX25vZGUtPl9NX3ByZXY7IH0KCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9M aXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194 Ll9NX25vZGU7IH0KCiAgICBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9MaXN0X2l0ZXJhdG9y X2Jhc2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0K ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9Q dHI+CiAgICBzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFz ZQogICAgewogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJh dG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9U cCo+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfUmVm LF9QdHI+IF9TZWxmOwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRl ZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgICAgIHR5cGVk ZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICAgICAgX0xpc3RfaXRlcmF0b3IoX05vZGUqIF9f eCkKICAgICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkKICAgICAgeyB9CgogICAgICBfTGlz dF9pdGVyYXRvcigpCiAgICAgIHsgfQoKICAgICAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0 b3ImIF9feCkKICAgICAgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKQogICAgICB7 IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVy biAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3Bl cmF0b3ItPigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBf U2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9pbmNyKCk7 CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRv cisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhp cy0+X01faW5jcigpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX1NlbGYm CiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAgICAgICAgdGhpcy0+X01fZGVjcigpOwogICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShp bnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIHRoaXMtPl9N X2RlY3IoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07CiMgMTg1ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CiAgICBjbGFzcyBfTGlzdF9h bGxvY19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgIGFs bG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICAgICAgX0xpc3RfYWxs b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9Ob2RlX2FsbG9jYXRv cihfX2EpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+Kgog ICAgICBfTV9nZXRfbm9kZSgpCiAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvci5hbGxvY2F0 ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9f cCkKICAgICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJv dGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0Fs bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsK CiAgICAgIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY2xhc3MgX0xpc3RfYWxsb2NfYmFz ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog ICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg Z2V0X2FsbG9jYXRvcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K CiAgICAgIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgICB7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlz dF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgICAgIF9BbGxv Y190eXBlOwoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpCiAgICAg IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBf TV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfQWxsb2NfdHlwZTo6ZGVh bGxvY2F0ZShfX3AsIDEpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBfTGlzdF9ub2RlPF9UcD4q IF9NX25vZGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNsYXNzIF9MaXN0X2Jhc2UKICAgICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxf VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgcHVibGljOgogICAgICB0 eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog ICAgICAgICAgICAgIF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAgICBfTV9ub2RlID0g X01fZ2V0X25vZGUoKTsKICAgICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgICAg ICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgICAgfQoKICAgICAgfl9MaXN0X2Jhc2Uo KQogICAgICB7CiAgICAgICAgY2xlYXIoKTsKICAgICAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsK ICAgICAgfQoKICAgICAgdm9pZCBjbGVhcigpOwogICAgfTsKIyAyODkgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CiAgICBjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9M aXN0X2Jhc2U8X1RwLCBfQWxsb2M+CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiBfTGlzdF9i YXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZWRlZiB2b2lk KiBfVm9pZF9wb2ludGVyOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw ZTsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0 IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVm ZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsK ICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90 IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7 CgogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwog ICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNv bnN0X2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgogICAgICB1c2lu ZyBfQmFzZTo6X01fbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1 c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CgogICAgcHJvdGVjdGVkOgogICAgICBfTm9kZSoKICAg ICAgX01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAgICBfTm9kZSog X19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX0NvbnN0cnVjdCgm X19wLT5fTV9kYXRhLCBfX3gpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg ewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K ICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgICBfTm9kZSoKICAgICAgX01fY3JlYXRl X25vZGUoKQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICAg ICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAgICAgICAgfQog ICAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9wdXRfbm9kZShfX3ApOwog ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX3A7CiAgICAgIH0KCiAg ICBwdWJsaWM6CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25z dAogICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgICBleHBsaWNp dAogICAgICBsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdp bigpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7 IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKICAgICAgaXRlcmF0 b3IKICAgICAgZW5kKCkKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAgY29uc3RfaXRl cmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAg cmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVn aW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg fQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog ICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNp emUoKSBjb25zdAogICAgICB7IHJldHVybiBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSk7IH0KCiAg ICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHNpemVf dHlwZSgtMSk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBmcm9udCgpCiAgICAgIHsgcmV0dXJu ICpiZWdpbigpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgZnJvbnQoKSBjb25zdAog ICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGJhY2soKQog ICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAg YmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgICAgIHZvaWQKICAg ICAgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICB7IHN0ZDo6c3dhcChfTV9ub2Rl LCBfX3guX01fbm9kZSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgICAgewogICAgICAgIF9Ob2RlKiBfX3RtcCA9 IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICAgICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9u Ll9NX25vZGU7CiAgICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9N X3ByZXY7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX190 bXA7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICAgICAg cmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0 b3IgX19wb3NpdGlvbikKICAgICAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsg fQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAg ICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVn ZXIgX194LCBfX3RydWVfdHlwZSkKICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6 ZV90eXBlKSBfX24sIChfVHApIF9feCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0 b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19m YWxzZV90eXBlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg ICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBf SW50ZWdyYWwoKSk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3Ig X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgICB7IF9NX2ZpbGxfaW5z ZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmlsbF9pbnNlcnQo aXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKCiAgICAgIHZv aWQKICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNlcnQoYmVnaW4o KSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2Zyb250KCkKICAgICAgeyBpbnNlcnQo YmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQog ICAgICB7IGluc2VydChlbmQoKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2so KQogICAgICB7IGluc2VydChlbmQoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0 ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fbmV4 dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgICAgIF9MaXN0X25vZGVf YmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICAgICAg X05vZGUqIF9fbiA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3NpdGlvbi5fTV9ub2RlKTsKICAg ICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgICAgIF9fbmV4dF9u b2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgICAgX0Rlc3Ryb3koJl9fbi0+X01fZGF0 YSk7CiAgICAgICAgX01fcHV0X25vZGUoX19uKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3Ioc3Rh dGljX2Nhc3Q8X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgog ICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoKICAgICAgdm9p ZAogICAgICBjbGVhcigpCiAgICAgIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgICAgIHZvaWQKICAg ICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CgogICAgICB2 b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkKICAgICAgeyB0aGlzLT5yZXNp emUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9mcm9udCgpCiAg ICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcG9wX2JhY2soKQogICAg ICB7CiAgICAgICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgICBlcmFzZSgtLV9fdG1w KTsKICAgICAgfQoKICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUs CiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp CiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9fdmFsdWUp OyB9CgogICAgICBleHBsaWNpdAogICAgICBsaXN0KHNpemVfdHlwZSBfX24pCiAgICAgIDogX0Jh c2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfVHAoKSk7 IH0KCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIGxpc3Qo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C YXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAg ICAgbGlzdChjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICA6IF9CYXNlKF9feC5n ZXRfYWxsb2NhdG9yKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3gu ZW5kKCkpOyB9CgogICAgICB+bGlzdCgpCiAgICAgIHsgfQoKICAgICAgbGlzdDxfVHAsIF9BbGxv Yz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCiAgICBw dWJsaWM6CgoKCgoKICAgICAgdm9pZAogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg X1RwJiBfX3ZhbCkKICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQoKICAgICAg dm9pZAogICAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQK ICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01fYXNzaWduX2Rp c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCiAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25f ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAg ICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAg IF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogICAg cHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX3RyYW5zZmVyKGl0ZXJhdG9yIF9fcG9zaXRp b24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewogICAgICAgIGlm IChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9w cmV2LT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgICAgX19maXJzdC5fTV9u b2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICAgICBfX3Bvc2l0 aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAgICAg ICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7 CiAgICAgICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+ X01fcHJldjsKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19maXJzdC5fTV9u b2RlLT5fTV9wcmV2OwogICAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7 CiAgICAgICAgfQogICAgICB9CgogICAgcHVibGljOgogICAgICB2b2lkCiAgICAgIHNwbGljZShp dGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCiAgICAgIHsKICAgICAgICBpZiAoIV9feC5l bXB0eSgpKQogICAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX194LmJlZ2lu KCksIF9feC5lbmQoKSk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3BsaWNlKGl0ZXJhdG9y IF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpCiAgICAgIHsKICAgICAgICBpdGVyYXRv ciBfX2ogPSBfX2k7CiAgICAgICAgKytfX2o7CiAgICAgICAgaWYgKF9fcG9zaXRpb24gPT0gX19p IHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIo X19wb3NpdGlvbiwgX19pLCBfX2opOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIHNwbGljZShp dGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s YXN0KQogICAgICB7CiAgICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgICAgdGhp cy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKICAgICAgfQoKICAg ICAgdm9pZAogICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKCiAgICAgIHZvaWQKICAg ICAgdW5pcXVlKCk7CgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmIF9feCk7CgogICAgICB2 b2lkCiAgICAgIHJldmVyc2UoKTsKCiAgICAgIHZvaWQKICAgICAgc29ydCgpOwoKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAgcmVtb3ZlX2lm KF9QcmVkaWNhdGUpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K ICAgICAgICB2b2lkCiAgICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwoKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAg bWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAgc29ydChfU3RyaWN0 V2Vha09yZGVyaW5nKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0Fs bG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0 b3I7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAgICAgY29uc3Rf aXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0b3IgX19pMSA9 IF9feC5iZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAg ICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAq X19pMikgewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf X3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o KSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl Z2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAs X0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAh KF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf X3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlz dDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxs b2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChsaXN0PF9U cCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChf X3kpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2 b2lkIF9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OgogICAgY2xlYXIoKQogICAgewogICAgICBfTGlz dF9ub2RlPF9UcD4qIF9fY3VyID0gc3RhdGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+Kj4oX01fbm9k ZS0+X01fbmV4dCk7CiAgICAgIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAgICAgICAgX0xp c3Rfbm9kZTxfVHA+KiBfX3RtcCA9IF9fY3VyOwogICAgICAgIF9fY3VyID0gc3RhdGljX2Nhc3Q8 X0xpc3Rfbm9kZTxfVHA+Kj4oX19jdXItPl9NX25leHQpOwogICAgICAgIF9EZXN0cm95KCZfX3Rt cC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICB9CiAgICAgIF9N X25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9k ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9j Pjo6CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2VydChfX3Bvc2l0aW9u LCAqX19maXJzdCk7CgogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2luc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsK ICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBpbnNlcnQoX19wb3NpdGlvbiwg X194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6 CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2ZpcnN0KyspOwogICAg ICByZXR1cm4gX19sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVzaXplKHNpemVfdHlw ZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19pID0g YmVnaW4oKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZm9yICggOyBfX2kgIT0g ZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgICAgICA7CiAg ICAgIGlmIChfX2xlbiA9PSBfX25ld19zaXplKQogICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOwog ICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgbGlz dDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG9wZXJhdG9yPShjb25zdCBs aXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KSB7CiAg ICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFz dDEgPSBlbmQoKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigp OwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAg ICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs bG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXpl X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2lu KCk7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikK ICAgICAgICAqX19pID0gX192YWw7CiAgICAgIGlmIChfX24gPiAwKQogICAgICAgIGluc2VydChl bmQoKSwgX19uLCBfX3ZhbCk7CiAgICAgIGVsc2UKICAgICAgICBlcmFzZShfX2ksIGVuZCgpKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6 CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVy IF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3Qx ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsrX19maXJz dDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgICAgICAg aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0 MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh c3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1 ZSkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9y IF9fbGFzdCA9IGVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAg ICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0OwogICAgICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgICAgICBfX2ZpcnN0ID0g X19uZXh0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICB1bmlxdWUoKQogICAgewog ICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3IgX19sYXN0ID0g ZW5kKCk7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBpdGVyYXRv ciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAg ICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICBlcmFzZShfX25leHQpOwog ICAgICAgIGVsc2UKICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAgX19uZXh0ID0g X19maXJzdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgbWVyZ2UobGlzdDxfVHAs IF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwog ICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0g X194LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0g X19maXJzdDI7CiAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u ZXh0KTsKICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgX01f dHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgfQoKICBpbmxpbmUgdm9p ZAogIF9fTGlzdF9iYXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAgewogICAgX0xp c3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpzd2FwKF9fdG1w LT5fTV9uZXh0LCBfX3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7 CiAgICB9IHdoaWxlIChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogIHJl dmVyc2UoKQogIHsgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlzLT5fTV9ub2RlKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9B bGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf TV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgICAg IGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICAgICAgbGlzdDxfVHAsIF9BbGxvYz4gX19j b3VudGVyWzY0XTsKICAgICAgICBpbnQgX19maWxsID0gMDsKICAgICAgICB3aGlsZSAoIWVtcHR5 KCkpIHsKICAgICAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJl Z2luKCkpOwogICAgICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2Zp bGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICAgICAgX19jb3VudGVyW19f aV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p KytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7 CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAg ICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3Vu dGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICAgICAgc3dhcChfX2NvdW50ZXJb X19maWxsLTFdKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgICB2b2lk IGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQog ICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAgaXRlcmF0 b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg ICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX25leHQ7CiAg ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAgICAgICAgICBf X2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQmluYXJ5UHJlZGlj YXRlPgogICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgdW5pcXVlKF9CaW5hcnlQ cmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3Qg PSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmly c3Q7CiAgICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9f YmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgICBlcmFzZShfX25leHQp OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgICAg X19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtP cmRlcmluZz4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIG1lcmdlKGxpc3Q8 X1RwLCBfQWxsb2M+JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgICB7CiAg ICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFz dDEgPSBlbmQoKTsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAg ICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9f Zmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u ZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgICB9CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QyICE9IF9f bGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6 CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgewoKICAgICAgaWYgKF9N X25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9 IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgICAgIGxp c3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmlsbCA9IDA7CiAg ICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5 LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAwOwogICAgICAg ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg ICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgICAg IF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9f Y2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkg KytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2Zp bGw7ICsrX19pKQogICAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0x XSwgX19jb21wKTsKICAgICAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogICAgICB9CiAg ICB9Cgp9CiMgNzIgIi91c3IvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAzCiMgNSAic3RkY3h4L2xv Y2FsbGlzdC5oIiAyCgoKCgoKbmFtZXNwYWNlIGxvY2FsCiAgICB7CgogICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQsCiAgICAgICAgICAgICAgICB0eXBlbmFtZSBBTExPQz10aGVhcGFsbG9jYXRvcjxU PiA+CiAgICBjbGFzcyBsaXN0IDogcHVibGljIHN0ZDo6bGlzdDxULEFMTE9DPgogICAgICAgIHsK ICAgICAgICB9OwoKCgogICAgfTsKIyA2ICJlbmdpbmUuaCIgMgojIDEgInN0ZGN4eC9sb2NhbHZl Y3Rvci5oIiAxCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDY1ICIv dXNyL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5j dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o IiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL3Vzci9pbmNsdWRlL2cr Ky12My92ZWN0b3IiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Zl Y3Rvci5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9f dGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2 b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJv d19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3Jhbmdl X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciog X19zKTsKfQojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMK CgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UKewpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFs bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgYWxsb2NhdG9yX3R5cGUK ICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAg X1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2Rh dGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9z dG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9j YXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29m X3N0b3JhZ2U7CgogIF9UcCoKICBfTV9hbGxvY2F0ZShzaXplX3QgX19uKSB7IHJldHVybiBfTV9k YXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CgogIHZvaWQKICBfTV9kZWFsbG9jYXRlKF9U cCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFs bG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Y2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+CnsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CgogIGFsbG9jYXRvcl90 eXBlCiAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVk OgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3Rv cmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46 Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwoKICBfVHAqCiAgX01fYWxsb2NhdGUoc2l6ZV90IF9f bikgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KCiAgdm9pZAogIF9NX2Rl YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo X19wLCBfX24pO30KfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K c3RydWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9B bGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9B bGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9U cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5 cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9i YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSkge30KICBfVmVj dG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jh c2UoX19hKQogIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2Zpbmlz aCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9 CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z dG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07CiMgMTg1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9j YXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9B bGxvYz4KewoKIAoKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAg dHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwoKcHVibGljOgogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVk ZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlw ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0 b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0 ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNl OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Cgpw cm90ZWN0ZWQ6CgoKCgoKCgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFz ZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6 Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6 CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194 KTsKCgoKCnB1YmxpYzoKCgoKCgogIGV4cGxpY2l0CiAgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CiMgMjQ2ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdmVjdG9yKHNpemVfdHlw ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9m aW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoj IDI1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGV4cGxpY2l0 CiAgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg X1RwKCkpOyB9CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICAgIDogX0Jhc2UoX194 LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs aXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQojIDI4OCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICB7CgogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsKICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7 CiAgICB9Cgpwcm90ZWN0ZWQ6CiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg ICBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1 ZV90eXBlKQogICAgewogICAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9NX2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0 ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemVfYXV4KF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsX0lucHV0SXRlcmF0b3IgX19sYXN0LF9fZmFsc2VfdHlwZSkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICAgICAgICAgICAgIF9JdGVyQ2F0ZWdv cnk7CiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVn b3J5KCkpOwogICAgfQoKcHVibGljOgoKCgoKCgoKICB+dmVjdG9yKCkgeyBfRGVzdHJveShfTV9z dGFydCwgX01fZmluaXNoKTsgfQojIDMzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92 ZWN0b3IuaCIgMwogIHZlY3RvcjxfVHAsIF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IHZlY3Rv cjxfVHAsIF9BbGxvYz4mIF9feCk7CiMgMzQ4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X3ZlY3Rvci5oIiAzCiAgdm9pZAogIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f dmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9Cgpwcm90ZWN0ZWQ6CiAgdm9pZAog IF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKcHVibGlj OgojIDM2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7 CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICAgIH0KCnByb3RlY3RlZDoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAg ICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl X3R5cGUpCiAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs KTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZAogICAgX01fYXNzaWdu X2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2Vf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICAgICAgICAgICAgICAgX0l0ZXJDYXRl Z29yeTsKICAgICAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnko KSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAg IF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9hdXgoX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHVibGljOgoKICBhbGxvY2F0b3JfdHlwZQog IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9 CgoKCgoKCiAgaXRlcmF0b3IKICBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7 IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yCiAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9p dGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBpdGVyYXRvcgogIGVuZCgpIHsgcmV0dXJuIGl0 ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvcgogIGVuZCgpIGNvbnN0 IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICByZXZlcnNlX2l0 ZXJhdG9yCiAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCgoK CgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IKICBy ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCgogIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IKICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcihiZWdpbigpKTsgfQoKCgogIHNpemVfdHlwZQogIHNpemUoKSBjb25zdCB7IHJldHVy biBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQoKCiAgc2l6ZV90eXBlCiAgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KIyA0ODQgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgcmVzaXplKHNp emVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBpZiAoX19uZXdfc2l6 ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgpKTsKICAg IGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogIH0K IyA1MDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAg cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7 IH0KCgoKCgogIHNpemVfdHlwZQogIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVf dHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQoKCgoK ICBib29sCiAgZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CiMgNTM0 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZAogIHJlc2Vy dmUoc2l6ZV90eXBlIF9fbikKICB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBj b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9 IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9E ZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0 LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsK ICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3Rv cmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KIyA1NTggIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKHNpemVfdHlw ZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KIyA1NzAgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25zdF9yZWZlcmVuY2UKICBvcGVyYXRvcltd KHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCnByb3Rl Y3RlZDoKCiAgdm9pZAogIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgewog ICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2 ZWN0b3IgW10gYWNjZXNzIG91dCBvZiByYW5nZSIpOwogIH0KCnB1YmxpYzoKIyA1OTMgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2UKICBhdChzaXpl X3R5cGUgX19uKSB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0K IyA2MDYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25zdF9y ZWZlcmVuY2UKICBhdChzaXplX3R5cGUgX19uKSBjb25zdCB7IF9NX3JhbmdlX2NoZWNrKF9fbik7 IHJldHVybiAoKnRoaXMpW19fbl07IH0KCgoKCgogIHJlZmVyZW5jZQogIGZyb250KCkgeyByZXR1 cm4gKmJlZ2luKCk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZQogIGZyb250KCkgY29uc3QgeyBy ZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5jZQogIGJhY2soKSB7IHJldHVybiAqKGVu ZCgpIC0gMSk7IH0KCgoKCgogIGNvbnN0X3JlZmVyZW5jZQogIGJhY2soKSBjb25zdCB7IHJldHVy biAqKGVuZCgpIC0gMSk7IH0KIyA2NDcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVj dG9yLmgiIDMKICB2b2lkCiAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQogIHsKICAgIGlmIChf TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgX0NvbnN0cnVjdChfTV9maW5p c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KIyA2NjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgcG9wX2JhY2soKQogIHsKICAgIC0tX01fZmluaXNoOwog ICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjg0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBi ZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0 aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICAr K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf X3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KIyA3MzkgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgaW5zZXJ0IChp dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2Zp bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCnByb3RlY3RlZDoKICB2b2lkCiAgX01fZmls bF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7 CgpwdWJsaWM6CiMgNzYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBpbnNlcnQoaXRl cmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCkKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0 ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go X19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICB9Cgpwcm90ZWN0ZWQ6 CiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAg ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9f cG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGF0aWNfY2FzdDxfVHA+KF9fdmFsKSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f cG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAg ICAgICAgICAgICAgICAgICAgICAgX0l0ZXJDYXRlZ29yeTsKICAgICAgX01fcmFuZ2VfaW5zZXJ0 KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICB9CgpwdWJsaWM6 CiMgODA0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0 b3IKICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIGlmIChfX3Bvc2l0aW9uICsg MSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24p OwogICAgLS1fTV9maW5pc2g7CiAgICBfRGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9f cG9zaXRpb247CiAgfQojIDgzMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3Iu aCIgMwogIGl0ZXJhdG9yCiAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0 KQogIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAg IF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFz dCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQojIDg0OCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBzd2FwKHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCkKICB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAg ICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dhcChfTV9l bmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgoKCgoKCgogIHZvaWQK ICBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlcgogICAgX01fYWxsb2NhdGVfYW5k X2NvcHkoc2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBf X3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkKICAgICAgewogICAgICAgIHVuaW5p dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2RlYWxs b2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkCiAgICBfTV9yYW5nZV9pbml0aWFsaXpl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRp YWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAg c2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9 IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u OwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f c3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01f cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsK IyA5MjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7 CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KIyA5NDUgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194 LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYg X194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kg PCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s Cm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7 CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAg ICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBj YXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShf X3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBfRGVzdHJveShfTV9zdGFydCwg X01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh Z2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0g X194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IGJlZ2luKCkpKTsKICAgICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsK ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCks IF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9 CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZv aWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3Qg dmFsdWVfdHlwZSYgX192YWwpCnsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9y PF9UcCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190 bXAuc3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChi ZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxs X24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2Uo ZmlsbF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9y PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAg Kl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19j dXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewog ICAgcG9pbnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19s YXN0KSk7CiAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQg PSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBf X2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25l d19maW5pc2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBfRGVzdHJveShf X25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7 CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFu Y2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAg ICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNo KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8 X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9U cCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgX0Nv bnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAg ICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJh dG9yKF9NX2ZpbmlzaCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0 aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0 ZShfX2xlbikpOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgIHRy eSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z dGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX25ld19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194 KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4u LikKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAg ICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pOwogICAgICAgIHRo cm93OwogICAgICB9CiAgICBfRGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9j YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0 ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo KTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAg fQp9CiMgMTE0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6 X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlm IChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zp bmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9y IF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikg ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwg X01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dh cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAg IGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAg ICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0g X19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2Vs ZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9m aW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAg ICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQog ICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgp OwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3Np emUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7 CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAg ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRp b24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp bGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAg ICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gp OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf X25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19z dGFydC5iYXNlKCksX19sZW4pOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfRGVz dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh cnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24p IHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRp b247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19l bGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2gg LSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwog ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29s ZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAg ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJz dDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRp YWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg Kz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2Vs ZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAg ICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19v bGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s ZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5 IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01f c3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0 aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gK ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp bmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK ICAgICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBf TV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSwgX19sZW4pOwogICAgICAgICAgdGhyb3c7 CiAgICAgICAgfQogICAgICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg IF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19m aW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2Uo KSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDcyICIvdXNyL2luY2x1ZGUvZysrLXYzL3ZlY3Rv ciIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwoj IDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0JpdF90eXBlOwogIGVudW0geyBfTV93b3Jk X2JpdCA9IGludCg4ICogc2l6ZW9mKF9CaXRfdHlwZSkpIH07CgpzdHJ1Y3QgX0JpdF9yZWZlcmVu Y2UgewoKICBfQml0X3R5cGUgKiBfTV9wOwogIF9CaXRfdHlwZSBfTV9tYXNrOwogIF9CaXRfcmVm ZXJlbmNlKF9CaXRfdHlwZSAqIF9feCwgX0JpdF90eXBlIF9feSkKICAgIDogX01fcChfX3gpLCBf TV9tYXNrKF9feSkge30KCnB1YmxpYzoKICBfQml0X3JlZmVyZW5jZSgpIDogX01fcCgwKSwgX01f bWFzaygwKSB7fQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgqX01fcCAmIF9N X21hc2spOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBp ZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAg IHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0 X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29s IG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJu IGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRf cmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChf X3gpOyB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9p ZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBf X3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0 ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcs IGJvb2w+CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7Cgog IF9CaXRfaXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg ICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewog ICAgaWYgKF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQg PSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAg aWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAx OwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkg ewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0g X19uIC8gX01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChf X24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRf Yml0OwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVk IGludCkgX19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFz ZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQg PT0gX19pLl9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRv cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3Ag PT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJu ICEoKnRoaXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRv cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBv cGVyYXRvcjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1 cm4gIShfX2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJh dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsK CmlubGluZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194 LCBjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAq IChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9 CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0 eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNl KiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVy YXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0 X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShf X3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVy ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7 CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJh dG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgp OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9N X2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0t KGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5 cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh dG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5 cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9f dG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp IGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g X19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyBy ZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9y KyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCAr IF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0 b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3Rf cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRf Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6 IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoX0JpdF90 eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194 LCBfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gp CiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3guX01fcCwgX194Ll9NX29mZnNldCkge30KCiAg Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0 b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3Rf aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJh dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRv ciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg IF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w ZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJl dHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw ZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1 cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5j ZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRp ZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsKICB9Cn07Cgpp bmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg X0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgoKCgoKdGVt cGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9y X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7 CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf YWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNo KCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX0JpdF90eXBlICogX01f Yml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxv Y2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2Rl YWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0 b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFt ZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg ICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9C aXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9NX2VuZF9vZl9zdG9yYWdlOwp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl PF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry YWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRv cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh bGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2Uo MCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90 eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBf Qml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190 eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2 b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9j X3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRl cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICog X01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZl Y3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2lu c3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1Nf aW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFz ZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsK CnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4g OiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg Ym9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSBy ZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBf Qml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9p bnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9C aXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRl ZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAg IHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAg cHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7 CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2lu ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N X2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6 ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsK ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9f TV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9m aW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBf TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChf TV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dh cmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3Np dGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/ IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAg ICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9y IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg ICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5k KCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9y YWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAg ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0 ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAg ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9f cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewog ICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsK ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAg ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBf X24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0 LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz aXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01f Yml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwg X19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmly c3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwg ZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRf b2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7 CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9 CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7 IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0K ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0 b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRv ciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsg cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXpl X3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg eyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qg ewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl LCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJl Z2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19u KQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAg IGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsg cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01f cmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMt PnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAg ICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hl Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq dGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19h KSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAg ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24p OwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8g fjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAg OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01f aW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y YWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShf X3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7 CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRp YWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7 CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9l bmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9f Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8 X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lu cHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rp c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3Io KSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBp ZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2Fw YWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXpl KF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwg YmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194 LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmls bF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkg ewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4w IDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0K ICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAg IGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAg ICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9m aWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVy YXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2Zp cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu dGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2Vy IF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24s IChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZv aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0 ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz dCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQo ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2Zp cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29w eShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAg IF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQs IHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAg aW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVz ZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAg ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNo ID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVh bGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRf Yml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu KCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigp OyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29u c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZv aWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9l bmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAg ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rv cjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01f c3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAg c3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAg fQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9v bCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsK ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRp b24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAg ICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSAr IF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01f aW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2Zp bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5 cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRl Z3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2Zp cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlm IChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24p IHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBk aWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9u ICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZl cmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBf X2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgX0JpdF90eXBlICogX19x ID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2lu KCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9f biwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kg KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93 b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAg IH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBi b29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAg ICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVy YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVu ZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAg ICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVy YXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01f ZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmly c3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3gg PSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2Uo YmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgICBlbHNl CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQog ICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IF9NX3N0YXJ0Ll9N X3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19w OwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07 CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3ZlY3RvcjsKCn0KIyA3MyAiL3Vz ci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDIgMwojIDUgInN0ZGN4eC9sb2NhbHZlY3Rvci5oIiAy CgoKCgoKbmFtZXNwYWNlIGxvY2FsCiAgICB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAg ICAgICAgICAgICAgICB0eXBlbmFtZSBBTExPQz10aGVhcGFsbG9jYXRvcjxUPiA+CiAgICBjbGFz cyB2ZWN0b3IgOiBwdWJsaWMgc3RkOjp2ZWN0b3I8VCxBTExPQz4KICAgICAgICB7CiAgICAgICAg fTsKCgoKICAgIH07CiMgNyAiZW5naW5lLmgiIDIKIyAxICJlbmdwcm9mLmgiIDEKCgoKIyAxICJh bmdsZS5oIiAxCgoKCnR5cGVkZWYgaW50IHRhbmdsZTsKIyAzMyAiYW5nbGUuaCIKZXh0ZXJuIHRh bmdsZSBhbmdsZWFkZCh0YW5nbGUgYSx0YW5nbGUgYix0YW5nbGUgbW9kKTsKZXh0ZXJuIHRhbmds ZSBhbmdsZXN1Yih0YW5nbGUgYSx0YW5nbGUgYix0YW5nbGUgbW9kKTsKIyA1ICJlbmdwcm9mLmgi IDIKCiMgMSAiaGFyZGF0dHIuaCIgMQoKCgoKIyAxICJzdGRjeHgvbG9jYWxzdHJpbmcuaCIgMQoK CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl L2crKy12My9zdHJpbmciIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90 cmFpdHMuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5o IiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoK ICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVh bXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5 cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3Np Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9 IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19j MSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0K CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3Qg Y2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3Rh dGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90 eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0g MDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19f aV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAx OwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxl bmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4g KF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg X19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6 ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSBy ZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90 eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz aXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3My LCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg ICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf X24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICog c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3Np Z24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAg ICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQog ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoK ICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUm IF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRf dHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50 X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3Qg aW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShf X2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1w b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBl ZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWdu KGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBf X2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEs IGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRp YyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9f bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog X19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJf dHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf dCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19z MSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hh cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsg fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBz aXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy X3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl CiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAg ICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAg ICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBj b25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAg ICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5 cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBp bnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0K ICB9OwojIDI2OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0No YXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90cmFp dHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9vbAog ICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjplcShf TV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvaW5jbHVk ZS9nKystdjMvbWVtb3J5IiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9p dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVy YXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3Jh Z2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAg ICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7 IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1Rw JiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVt ZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0 ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7 CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg cmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRv cisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRl cmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0 dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvaW5jbHVkZS9nKystdjMvbWVt b3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgog IHBhaXI8X1RwKiwgcHRyZGlmZl90PgogIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90 IF9fbGVuLCBfVHAqKQogIHsKICAgIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8g c2l6ZW9mKF9UcCkpKQogICAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxs b2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX190bXAgIT0g MCkKICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg ICAgIF9fbGVuIC89IDI7CiAgICB9CgogICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90Pigo X1RwKikwLCAwKTsKICB9CiMgMTAyICIvdXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMwogIHRl bXBsYXRlIDxjbGFzcyBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVt cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3Jh cnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDExNCAiL3Vzci9pbmNsdWRlL2crKy12 My9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogIHZvaWQgcmV0dXJuX3RlbXBvcmFy eV9idWZmZXIoX1RwKiBfX3ApIHsKICAgIHN0ZDo6ZnJlZShfX3ApOwogIH0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4KICBzdHJ1Y3QgYXV0b19wdHJfcmVmCnsKICAgX1RwMSogX01fcHRyOwogICBh dXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3ApIHt9Cn07CgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsKCnB1 YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9fcHRyKF9U cCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19wdHIm IF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICB0ZW1wbGF0ZSA8Y2xh c3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBfTV9w dHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0ciYgX19h KSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwog IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0 cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0 dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoKICBf VHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7CiAgfQog IF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9 CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9U cCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAgIF9NX3B0 ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3AgPSAwKSB0 aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAg ICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgYXV0b19wdHIoYXV0b19wdHJf cmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAg YXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKSB7CiAg ICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7 CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0 aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwPih0aGlzLT5yZWxlYXNlKCkpOyB9 CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3co KQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQp9OwoKfQoj IDQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBj bGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1 bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCgoKCnRlbXBsYXRl IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlf ZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlw ZTsKfTsKIyAxMjcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0 aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4K ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9 Cn07CiMgMTczICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0 IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+ CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z dCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBf X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9 OwojIDIyMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9 Cn07CiMgMjcxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVu YXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsK cHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5 X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3Qg X1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihf X3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdh dGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3Rf YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRp Y2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0 IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQog IGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu dF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6 OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVk KF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBi aW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7 CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf T3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg X09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl IHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAg ICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195 KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy ZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwog IH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBl bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv biwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3Qg X09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9P cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVy MXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6 CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf dHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAg ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl JiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp b246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpm aXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVl KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCko dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29u c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJp bmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9B cmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAo Kl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30K ICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9Bcmcp KSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7 IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBf UmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBw dHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlf ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg Y2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0 aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJv dGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAg cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19i aW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9w dHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBj b25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVy X3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQg KCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp b248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYg b3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBs YXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6 OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f eC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9y KCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFt ZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAg cmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlw ZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNl Y29uZDsKICB9Cn07CiMgNTI4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9u LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt X2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0 b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBf VHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6 OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3Qg X1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1Jl dCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0 PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkp IDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1 cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZf dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w Zikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChf X3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK ICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19w Zikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVy biAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9Bcmcp Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz IGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0Fy ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6 Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29u c3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9f eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9y ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihf X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0 dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJn KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz cyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcs X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw OjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7 IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChf VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3Ap IGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBf VHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19w LT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu X3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0 b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAo X1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f ZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsK cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y KSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp IGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m dW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJn LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko X0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBf X3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBj b25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZv aWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9N X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2 b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B cmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194 KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m KShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z dF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Jl Zl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lk IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2Yp KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQs X1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1Jl dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBj b25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0 KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1l bV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9S ZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUg Y29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m KSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBt ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkK ICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90 PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7 IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZf dDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsg cmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9y ZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7 IH0KCgoKfQojIDUzICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv c2gtZWxmL2JpdHMvYXRvbWljaXR5LmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYzL3No LWVsZi9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRp YyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNo YW5nZV9hbmRfYWRkIChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfQXRvbWlj X3dvcmQgX19yZXN1bHQgPSAqX19tZW07CiAgKl9fbWVtICs9IF9fdmFsOwogIHJldHVybiBfX3Jl c3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK X19hdG9taWNfYWRkIChfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICAqX19tZW0g Kz0gX192YWw7Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz aWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1 YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxv YyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw ZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5 cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJl bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVy ZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2lu dGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVy IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv cjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4 eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9y PiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAg ICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hh cj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21h eF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAg IHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAg ICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01f aXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoK ICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVy biBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtl ZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAg IF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAg ICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBy ZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAg ICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01f cmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0 IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAg ICAgICAgICAgICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAg ICAgIH0KCgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNv bnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxs b2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9y ZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAg IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3co KTsKCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAg ewogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJl dHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f Y2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAg ICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hp ZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9f YSksIF9NX3AoX19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAg cHVibGljOgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2Fz dDxzaXplX3R5cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlk ZXIgX01fZGF0YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0 b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkg LSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAg ICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9w ID0gX19wKTsgfQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1 cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAg ICAgaXRlcmF0b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01f ZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJu IGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAg X01fbGVhaygpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkK ICAgICAgICAgIF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBf TV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3Mg PiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjpfTV9jaGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAg ICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX29mZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYg PCB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rl c3RvZmYgPyBfX29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01f aWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxj bGFzcyBfSXRlcmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJz KF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewog ICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAg dHJhaXRzX3R5cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGlj IHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRl cmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIu YmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq IF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBf U19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3Rh dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBf Q2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0g X19rMSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf X3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0 c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAg IF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBf X2xlbjIpOwoKICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBf UmVwJgogICAgICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2Fz dDxfUmVwKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAg IGlubGluZQogICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj X3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f biA9IG5wb3MpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg X0FsbG9jJiBfX2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo KSk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBf X2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQg X19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2Jl ZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxv YyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVw KCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4g dGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv cj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz LT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAg ewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsK ICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7 IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAg ICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJh dG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJh dG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2Rh dGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJl Z2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAg ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVy c2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io dGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu ZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVn aW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBs ZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsg fQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7Cgog ICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24s IF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyBy ZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUo c2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01f bXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBj b25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5j ZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNp emVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4g X01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0 KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNp emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7 CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UK ICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgp KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAg ICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBw ZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQg X19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4g dGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg ICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf X2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19j KQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19w b3MgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjphc3NpZ24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNp emUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/ IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19z dHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAg ICB7CiAgICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93 X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVw KCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEo KSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMt PnNpemUoKSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2lu KCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsK CiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAg ICAgICAgICAgaWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w eShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAg ICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAg ICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25d ID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg IH0KICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJU KiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5n dGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBf X24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCks IF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5y ZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAg IHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f YykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRl bXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9y IF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAg IHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9f c3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlw ZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5 cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBl IF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXpl KQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7 CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwog ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJz aXplIC0gX19wb3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5f TV9kYXRhKCkgKyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0 aGlzLT5tYXhfc2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQo KSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8 IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAg ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigp ICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19u KTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAw LCBfX24pOwogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAg X0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9f biA8PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7 CiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5 cGU6OmNvcHkoX19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0g X19zKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3Mp LCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQo X01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9 CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0g X0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVn aW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSks IF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4g dGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAg ICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9s ZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9N X2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9f cG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9N X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiAr IDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtl ZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRl cmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAg ICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAg ICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwog ICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2lu KCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBf X3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90 eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAg ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEs IGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7 CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBp ZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBf X3NpemUgLSBfX3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3Ru MSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEg PiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y KCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3No YXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAg ICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAg ICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4x LCBfX3MsIF9fcyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBf TV9yZXBsYWNlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2Zv bGRuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+ OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog X19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJU IF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv bGQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5f TV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhp cy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf X2kxLCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXpl X3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs IGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5w dXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwg X19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEs IF9DaGFyVCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx LCBfX2syIC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFy VCogX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4o KSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2sy IC0gX19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAg IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7 CiAgICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9f azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9f azIgLSBfX2sxKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7Cgog ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg X0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMg X0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBf X2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1Nf Y29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRl bXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19j b25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg X19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAg ICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19l bmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAg ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg ICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdy YWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg c3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAg c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJ dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0 KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1 YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0 IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBf X24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClb X19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAg IH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2Rh dGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0 IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg ICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0 YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g MCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp emVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBv cykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3Bvcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf Zmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgp LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFz dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBf X3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZp bmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg ICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv cyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsg fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9f Yywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Mg PSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3Ry LmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3Mg PSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywg X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv bnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAw LCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+ IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBf X24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBz aXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9 IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAg ICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAg IHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7Cgog ICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwg Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3My LCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBf Q2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGlu dAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZj b3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k KF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xo cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j PiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+ CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U cmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9f c3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAg ICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90 eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0 IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo cykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg PT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUo X19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp ID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJU KiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBf X2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMu Y29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v cywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jgog ICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQg X19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+ JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAg ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQoj IDU0ICIvdXNyL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYWxnb3JpdGht IiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2 NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+ CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5k ZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xl SW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYg KihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9f aG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9 IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAg ICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAg ICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAg IAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFz dCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9W YWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAg ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29t cCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy OwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmly c3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k ZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJl bnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAg ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu bGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1 c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBf RGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0g MSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19h ZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9s ZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQog ICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlz dGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChf X3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRD aGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vj b25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3Qg KyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAg ICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAg ICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19o b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19o b2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChf X2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9o ZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBf X3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y PgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0 YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3Rh bmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf X3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4 ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9s ZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAg IGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3Nl Y29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9f Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAg ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIg KiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09 IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg KF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxk IC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190 b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg aW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2Uo X19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9W YWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVu IC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2Zp cnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7 CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwog ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAg ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VU eXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFu Y2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAg ICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAg ICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAg ICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAg IHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxl IChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qt LSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m aXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAg ICB9Cgp9CiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVy CnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwog IF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9v cmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4g PiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAy MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAg X01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlm IChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0K CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30K ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUp IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0K CnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAg cHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVu OyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7 IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAg ICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwg X1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9N X2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAg ICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVz dHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7 CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZm ZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsK Cn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1l c3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7Cgog ICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAg ICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVy biBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAo X19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykK ICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0K IyAxMTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAg ICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19j LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19i KSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAg ICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAg ICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9f YSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBf X2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwog ICAgfQojIDE1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rp b24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9G dW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVy YXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2Zp cnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVk aWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBy ZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK ICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3Qp ID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkg ewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0 OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1 cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBz d2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2Zp cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNh c2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3Zh bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAg IGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgog ICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl ZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAg Zm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2Zp cnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19m aXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy biBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0 dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAK ICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19s YXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBf X2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJu IF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g X19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291 bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192 YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQxMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAg ICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICsrX19uOwog ICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIy IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAg IAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0 MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChf X2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAg ICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogICAgICBf Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoK ICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBf X2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAg ICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJy ZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkg ewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2Zp cnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy ZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcjEK ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAgewoKICAgICAKICAgICAK ICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f bGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190 bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0Mikg ewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19m aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIHJldHVybiBf X2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAg IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQg PSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlmIChfX3ByZWRpY2F0ZSgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9f cHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsK CiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAg ICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdo aWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICAgICAgaWYgKCsrX19w ID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgr K19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg ICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwog ICAgfQojIDU5NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBf VHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3Qg X1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQg PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJz dCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAg ICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAg ICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAg IGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAg fQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1l IF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291 bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9w cmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291 bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICAr K19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmlu YXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAt LV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBf X2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAgICAgfQog ICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBy ZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAg IAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m aXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVy biBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zv cm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7Cgog ICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs ICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBf QmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9w ZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jl c3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0 Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBj b25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJz dCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9 CiMgODI1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1Rw PgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp CiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1NiAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIK ICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAg IAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFs dWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9 CiMgODg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBs YWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdf dmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dl bikKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091 dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1 dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu ZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9f biwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEo Kl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg IH0KIyAxMDAzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg KCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg ICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9 CiMgMTAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgog ICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9Gb3J3 YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBf X2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19p LCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmVfaWYoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5k X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19m aXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6 dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7 CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKF9fdmFsdWUg PT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAgICAq KytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsK ICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7 CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgICAgICor K19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEx NDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1 dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRw dXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMTcwICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAg ICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0g Kl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJz dCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0 ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEx OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5 UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg CgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9 IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkp ICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoj IDEyMzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h cnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlf cHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9f dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0 ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVy CiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAg ICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9m aW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3Qg PSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJl dHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQp OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAg ICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAg ICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBpdGVyX3N3 YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAo X19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xh c3QpOwogICAgfQojIDEzNDkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQK ICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwg X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAg ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEz OTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAg ICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQg X19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmlu Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24g PSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIg X19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp CiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19t aWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsK ICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19m aXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0 MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAg IHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9f bWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChf X2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAg dm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQog ICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3Qg PT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBf X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShf X21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBz d2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk bGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9f Zmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQog ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9p ZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7Cgog ICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21p ZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp cnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlz dGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBz d2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsK ICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZv ciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVU eXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19m aXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2Ug X19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9f Zmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAg ICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9f cCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoK ICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f ay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykg ewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9 IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAg ICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19w ID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTU2MSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAg IAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6 aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg CiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRk bGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu bGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoK CgogICAgICByZXR1cm4gcmFuZCgpICUgX19uOwoKICAgIH0KIyAxNjM0ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0 ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsg MSkpOwogICAgfQojIDE2NjAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21O dW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2Zp cnN0KSkKICAgICAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7Cgog ICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4 dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dh cCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVy CiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg ICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0 cnVlKSB7CiAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVk KCpfX2ZpcnN0KSkKICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAg ICAgICBicmVhazsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsK ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVy CiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAg ICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg X0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChf X2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19m aXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5j ZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lu cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAy KTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2Jl Z2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9f bWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRl cgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZl cl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAg ICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7 CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3Vs dDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9 ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBj b3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVz dWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUg PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAg X0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2Fk YXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxl LCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19l bmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFi bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1Zh bHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgp ID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz dCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNp emUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkp OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9w YXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3 aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAg ICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAq X19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv dCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUg KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlm ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg ICB9CiMgMTkyOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVt IHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg ICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19s YXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3Vu Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFs LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9 IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25l eHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0 OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9f dmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBf X2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAg ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJk KF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAg ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f aSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9t QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAg ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAg ICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBf X2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0 LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9T aXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsK ICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s ZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxf c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAg fQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1 dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50 cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0 ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2Rl cHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1f X2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAg IF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7 CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBf X2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp IHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3Qg LSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmly c3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs IF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19p bnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47 CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9f bGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3Qs IF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp OwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewog ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAg IHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmly c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChf X21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19t aWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVy Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl cjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVz dWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19z dGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g X190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCAr IF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9z aXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3Rl cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog ICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0 ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIy LAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9 IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdv X3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0 ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg X19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3 b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3Qg LSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCAr IF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwK ICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0g eyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7 CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAg ICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK ICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xh c3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0 ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhf YnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19s YXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg X19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAg ICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoK ICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRf bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19z dGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZm ZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7 CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf c29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoK ICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIg X19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVw X3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3Np emUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg X19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7 CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly c3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0 X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0 YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0 IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf X2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAg ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i dWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19s YXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7 CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh cmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j ZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZm ZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRk bGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xh c3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0 aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9f bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21w KTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAog ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+ IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAg ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAg ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwg X0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVm ZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsK ICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3Nv cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShi dWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9 CiMgMjUwMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtl X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f aSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9f Zmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1 ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQoj IDI1NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFw KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAo Kl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwg X19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5w dXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBpZiAo X19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0 OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0g X19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsK ICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K ICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAg ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19y ZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlz dGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVz dWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg ICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAg cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21B Y2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y ZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl c3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVf dHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoK ICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3Vs dF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jl c3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVh bF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0g Kl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s YXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBp ZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3Rf aGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCks CiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg ICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXAp OwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMp IHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRl ZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMg MjcyOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUg KF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg PQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQog ICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9 IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOwogICAgfQojIDI3NjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAgIAoKICAg ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg IF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAg ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsK ICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl ciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAg bG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAg ICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qp OwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7 CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9f aGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAg X19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4g PSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9f bGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVy X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9 IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg ICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19t aWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAg IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19m aXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g MCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29t cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVs c2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAg ICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFu Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5 cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlz dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAg IF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9f bGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUg PSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYg KCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xl biA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9f bGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0 LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl cj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8 X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMw MDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp Z2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs IF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAg ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19s ZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29t cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVs c2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9f dmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAg ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29t cCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19s ZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0Zvcndh cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0Zv cndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAg ICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s CiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f aSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFy ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5 cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8 IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9 PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5j ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBf X2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4y Mik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg Kl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly c3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJz dF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19z ZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEx LCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9f c2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAt IF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAgICAgcmV0 dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBf X21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u ZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlz dGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBf X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx KTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq X19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxl LCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBf X2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAg ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRf Y3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0 X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv bmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3Rf Y3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj b25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3Rf Y3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwg X19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xl bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICBy ZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsK ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs CiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRpcmVjdGlv bmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAgICB7CiAg ICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJk KF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1 ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAqLS1fX3Jl c3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0 KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs IF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAgX19tZXJn ZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m aXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICBy ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogICAgICBp ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0 MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19s YXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAo X19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAg IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAg ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFj a3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3Qy OwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAg IHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg ICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAg ICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsK ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg KF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21l cmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf X2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f bGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAg IGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVu MSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwog ICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2Uo X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7 CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAg ICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmly c3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwog ICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQp OwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRk bGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19t aWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog ICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBf X2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQogICAg fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUg X0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAg ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBpZiAoX19s ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBf UG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7 CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xh c3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xl bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9i YWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog ICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw OwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xl bjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAg ICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAg ICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m aXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShf X21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAg IGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJz dF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19j b21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly c3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u ZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9j dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwg X19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9f Y29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAg ICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAg ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk ZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu MSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl bjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVy PF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsK ICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVm ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxz ZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s ZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlz dGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlCiAg ICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg X19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBl IF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9i dWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xh c3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91 dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29t cCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19idWYu YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAg ICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy MSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAK CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgIHJl dHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAg ICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2Zp cnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAK CgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAg ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxz ZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly c3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2Zp cnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg ICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0 MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAg IAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx KQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg CgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIK ICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3Qx IDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxz ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg ICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAK CiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmly c3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAg cmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uo X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVs c2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAg ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19m aXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29w eShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRl ciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRf c3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBp ZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAg ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsr X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNv cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7 CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk SXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19yZXN1bHQgPCAq X19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0 LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy biBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3 aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1 bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf X2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19y ZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAg IGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19p OwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7 CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCpfX2kgPCAq LS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAg ICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAg ICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAg ICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAg ICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgq X19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19q KTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVl OwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVy c2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAg Ym9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFz dCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7 CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK ICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKi0tX19qIDwg Kl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAg ICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg ICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAg ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAg ICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAg ICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCot LV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2op OwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7 CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJz ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAg ICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBf X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAg ICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0 MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAg ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0 SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAg ICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0 MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAg ICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CiMg NDIwMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zvcndh cmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3 YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZv cndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK ICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy MSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3 YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9f bGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2UgewogICAg ICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJzdDEgPSBf X25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAgICAgICAg fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4K ICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg IHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVz dWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJdGVy MSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9f Zmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBf X2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAg ICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0g X19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAg IH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEK ICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg ICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ dGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0 aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3Qx KTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9f cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoK ICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsK ICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl c3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3Qy LCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0 MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAg IAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl cjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv bmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7 CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3Jy ZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAgICBpZiAoX19ycmVz dWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAg ICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAg ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBf X2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAg ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAg ICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl cjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAg ICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFz dDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9 Cgp9CiMgNzAgIi91c3IvaW5jbHVkZS9nKystdjMvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9p bmNsdWRlL2crKy12My9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i YXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj X3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXpl ID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0 IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw ZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1w dHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXpl b2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19i ZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYm IF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZj b3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kg PSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYp IC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9 ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBf X3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5 KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9 IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0 YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAo OzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0g X19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f ci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAg ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5 cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAq IF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAg ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9f YW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAg ICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAg ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAg fQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5k LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVf dHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4 cGVjdChfX2JlZyA9PSBfSW5JdGVyKDApLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJy b3IoImF0dGVtcHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKICAgICAg ICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJu IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6 Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlf Y2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCgu Li4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsK CiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFy VCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29u c3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg ewogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJldHVybiBf U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf Y3JlYXRlKF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikK ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBf X2MpOwogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9fci0+ X01fZGVzdHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfX3ItPl9N X2xlbmd0aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rl cm1pbmFsOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVw KCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAg ICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0Fs bG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0No YXJUKCksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMo X1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkp CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MsCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2Ep CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBf X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf X3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU KiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo X19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOiAwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90 eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVz KF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1 Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAg ICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAg YWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0No YXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9j YXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBf TV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVw OjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNp emVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWlu dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQo KQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211 dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNp emVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+ c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBf X2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBf X3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9z aXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp IHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19o ZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAgICAgICBjb25zdCBzaXplX3R5 cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVw KSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1JlcCogX19yOwogICAgICAgICAg aWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNp dHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIqY2Fw YWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDog MipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlm IChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9y ZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4u KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0 b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3Jl cCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgp KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIp CiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9z ICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+ X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXpl OwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMt PmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAg ICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVu Z3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19yZXMg PCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAgICAg ICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJU KiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsK ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9f dG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBp ZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hh cmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg X19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxv Y2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy VCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwog ICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAg ICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCks IF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3Mu X01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAg ICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBf X2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAg IGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXpl ID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwojIDQy MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29u c3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdl c2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAq IHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXpl KSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAg ICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUg X19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNp dHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2Fw YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAg ICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBz aXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBf X21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1 YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFy VCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkg KyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19i eXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBu ZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5Owog ICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAg ICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxs b2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVf dHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hl YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f cGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6 ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFy VCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFj aXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0g X1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBf X2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVl c3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEo KSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVz aXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhf c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6 ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19z aXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAg IGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0K CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf X2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9f cyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIs IF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p MiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0g X19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7 CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAgX190aHJvd19sZW5ndGhf ZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAgIHNpemVfdHlwZSBfX29m ZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUoX19vZmYsIF9fZG9sZCwg X19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9N X2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwK ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3Bv czIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu Zzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6 ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBf X24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3Bv czEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9f cG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBz aXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkp CiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo X19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgp LCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z dHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog ICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlm IChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7 CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywg X19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3Np emVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7CiAgICAgIF9fc3RyaW5nX3R5 cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOwogICAg ICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwogICAgICBfX3N0ci5hcHBlbmQo X19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu Z190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBf X3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zaXplX3R5cGUg X19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyAxKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu ZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs IHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19uMSA9 IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19pMSAtIF9NX2liZWdpbigp OwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQog ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg ICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAgaWYgKF9fbjIpCiAgICAg ICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f biwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29weSIp OwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9fbiA9IHRo aXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRh KCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBv cyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAg Zm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFp dHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAg ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJU IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAo X19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEg PSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9f cG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9f cCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf X24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXpl IC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo KTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAg ICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+ IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBf X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAg ICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9yICgrK19feHBvczsgX194cG9z LS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBv c10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgICB9CiAgICAgIHJl dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIGZvciAoOyBfX24g JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAgICAgewogICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f cG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19u KQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBf X3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAg ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf X3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k X2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv ciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRz X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVy biBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihf Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hw b3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3Mp CiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAg ICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5 cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s YXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9z KQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo X19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAg ICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAgICAg ICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf X3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBf X3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFy ZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsK ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRhdGEo KSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6 ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3Mx LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19z dHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUp CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsKICAg ICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAg ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQgX19y ID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7CiAg ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAgcmV0 dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAg ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBfX3Ig PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAgaWYg KCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog ICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBz aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6 ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5 cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNf dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICgh X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z dCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAg ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9f c2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl Iik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3Bvcywg X19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAg ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3Ms IF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7 CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNz IF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAg ICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZz aXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90 eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXpl X3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFp dHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0 ZXNdID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z dHJpbmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jgog ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p c3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwg Y2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0 bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19p c3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg d3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5l KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3Ry ZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwp9CiMgNTggIi91c3IvaW5jbHVkZS9nKystdjMvc3Ry aW5nIiAyIDMKIyA1ICJzdGRjeHgvbG9jYWxzdHJpbmcuaCIgMgoKCgoKCm5hbWVzcGFjZSBsb2Nh bAogICAgewoKCiAgICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc3RkOjpiYXNpY19zdHJpbmc8Y2hh cixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHRoZWFwYWxsb2NhdG9yPGNoYXI+ID47CgogICAgdHlw ZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sdGhlYXBh bGxvY2F0b3I8Y2hhcj4gPiBzdHJpbmc7CgoKCiAgICB9OwojIDYgImhhcmRhdHRyLmgiIDIKIyAx ICJhdHRyLmgiIDEKCgoKIyAxICJzZXJpYWxpc2UuaCIgMQoKCgpjbGFzcyB0d3JpdGVzZXJpYWxz dHJlYW0KICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdmlydHVhbCB2 b2lkIGJlZ2lud3JpdGUoKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Z3Jv dXAodW5zaWduZWQgaW50IGdyb3VwbmFtZWNyYyxpbnQgbSxpbnQgdmVyc2lvbm51bSk9MDsKICAg ICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGRhdGFzZXQodm9pZCBjb25zdCAqcGhkcixp bnQgbik9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZSh2b2lkIGNvbnN0ICpw LGludCBuKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZGRhdGFzZXQoKT0wOwog ICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGVuZGdyb3VwKCk9MDsKICAgICAgICAgICAgICAg IHZpcnR1YWwgdm9pZCBlbmR3cml0ZSgpPTA7CiAgICAgICAgfTsKCmNsYXNzIHRyZWFkc2VyaWFs c3RyZWFtCiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwg Ym9vbCBiZWdpbnJlYWQoKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIHJlYWQodm9p ZCAqcCxpbnQgbik9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBzdGFydHJlYWRkYXRh c2V0KHZvaWQgKnBoZHIsaW50IG4pPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIGludCBmaW5k Z3JvdXAodW5zaWduZWQgaW50IGdyb3VwbmFtZWNyYyxpbnQgbSk9MDsKICAgICAgICB9OwoKY2xh c3MgdG1lbW9yeXN0cmVhbSA6IHB1YmxpYyB0d3JpdGVzZXJpYWxzdHJlYW0sIHB1YmxpYyB0cmVh ZHNlcmlhbHN0cmVhbQogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg dm9pZCAqYXJlYXN0YXJ0OwogICAgICAgICAgICAgICAgaW50IGFyZWFzaXplOwoKICAgICAgICB1 bnNpZ25lZCBpbnQgZW5kbWFya2VyOwoKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp3 cml0ZXB0cjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmxhc3RkYXRhZ3JvdXA7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpsYXN0ZGF0YXNldDsKICAgICAgICAgICAgICAg IGludCBncm91cHNpemU7CiAgICAgICAgICAgICAgICBpbnQgZGF0YXNldHNpemU7CiAgICAgICAg ICAgICAgICBpbnQgd3JpdGVuZXN0Y291bnQ7CgoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKnJlYWRwdHI7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpuZXh0ZGF0YXNldDsK ICAgICAgICAgICAgICAgIGludCBncm91cGxlZnQ7CiAgICAgICAgICAgICAgICBpbnQgZGF0YXNl dGxlZnQ7CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRtZW1vcnlzdHJlYW0odm9p ZCAqZGF0YWFyZWEsaW50IHNpemUpOwoKCiAgICAgICAgICAgICAgICB2b2lkIGJlZ2lud3JpdGUo KTsKICAgICAgICAgICAgICAgIHZvaWQgc3RhcnRncm91cCh1bnNpZ25lZCBpbnQgZ3JvdXBuYW1l Y3JjLGludCBtLGludCB2ZXJzaW9ubnVtKTsKICAgICAgICAgICAgICAgIHZvaWQgc3RhcnRkYXRh c2V0KHZvaWQgY29uc3QgKnBoZHIsaW50IG4pOwogICAgICAgICAgICAgICAgdm9pZCB3cml0ZSh2 b2lkIGNvbnN0ICpwLGludCBuKTsKICAgICAgICAgICAgICAgIHZvaWQgZW5kZGF0YXNldCgpOwog ICAgICAgICAgICAgICAgdm9pZCBlbmRncm91cCgpOwogICAgICAgICAgICAgICAgdm9pZCBlbmR3 cml0ZSgpOwoKCiAgICAgICAgICAgICAgICBib29sIGJlZ2lucmVhZCgpOwogICAgICAgICAgICAg ICAgYm9vbCByZWFkKHZvaWQgKnAsaW50IG4pOwogICAgICAgICAgICAgICAgYm9vbCBzdGFydHJl YWRkYXRhc2V0KHZvaWQgKnBoZHIsaW50IG4pOwogICAgICAgICAgICAgICAgaW50IGZpbmRncm91 cCh1bnNpZ25lZCBpbnQgZ3JvdXBuYW1lY3JjLGludCBtKTsKICAgICAgICB9OwojIDUgImF0dHIu aCIgMgojIDEgInN0cmNvbnYuaCIgMQoKCgoKCmNsYXNzIHRzdHJjb252cmVzdWx0CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgICAgZW51bSByZWFkdmFsdWVyZXN1bHRzCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgIG9rPTAsCiAgICAgICAgICAgICAgICAgICAgICAgIGJhZGZvcm1hdD0xLAog ICAgICAgICAgICAgICAgICAgICAgICBvdXRvZnJhbmdlPTIKICAgICAgICAgICAgICAgICAgICAg ICAgfTsKICAgIH07CgpjbGFzcyB0c3RyY29udmdlbmVyaWMKICAgIHsKICAgIHB1YmxpYzoKICAg ICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsdmFsdWVzdHJpbmdmcm9tdm9pZChsb2NhbDo6 c3RyaW5nICZzLHZvaWQgKnYpIGNvbnN0PTA7CiAgICB9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IGNsYXNzIHRzdHJpbmdjb252ZXJ0b3IgOiBwdWJsaWMgdHN0cmNvbnZnZW5lcmljLCBwdWJsaWMg dHN0cmNvbnZyZXN1bHQKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg dmlydHVhbCBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q9MDsKICAgICAgICAgICAgICAgIHZp cnR1YWwgdm9pZCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyAmcyxUIGNvbnN0ICYpIGNv bnN0PTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIHJlYWR2YWx1ZXJlc3VsdHMgcmVhZHZhbHVl c3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsVCAmKSBjb25zdD0wOwogICAgICAgICAgICAg ICAgdmlydHVhbCBib29sIGluYyhib29sIGxvdHMsVCAmKSBjb25zdD0wOwogICAgICAgICAgICAg ICAgdmlydHVhbCBib29sIGRlYyhib29sIGxvdHMsVCAmKSBjb25zdD0wOwogICAgICAgIHZpcnR1 YWwgaW50IHZhbHVlZmllbGRsZW5ndGgoKSBjb25zdD0wOwoKICAgICAgICBib29sIGZpbGx2YWx1 ZXN0cmluZ2Zyb212b2lkKGxvY2FsOjpzdHJpbmcgJnMsdm9pZCAqdikgY29uc3QKICAgICAgICAg ICAgewogICAgICAgICAgICBmaWxsdmFsdWVzdHJpbmcocywqc3RhdGljX2Nhc3Q8VCAqPih2KSk7 CiAgICAgICAgICAgIH0KICAgICAgICB9OwojIDYgImF0dHIuaCIgMgoKCmNsYXNzIHRhdHRycHJv Y2Vzc29yCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yKCko bG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSxib29sIHN1YmRpcik9MDsKICAgIH07Cgp0eXBlZGVm IHRzdHJjb252Z2VuZXJpYyB0YXR0cnZhbHVlcHJpbnRlcjsKCgpjbGFzcyB0d2l0aGF0dHIKICAg ICAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgZW51bSByZWFkdmFsdWVyZXN1bHRzCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBvaz0wLAogICAgICAgICAgICAgICAgYmFkZm9ybWF0 PTEsCiAgICAgICAgICAgICAgICBvdXRvZnJhbmdlPTIsCiAgICAgICAgICAgICAgICBhdHRycmVh ZG9ubHk9MywKICAgICAgICAgICAgbm90Zm91bmQ9NAogICAgICAgICAgICAgICAgfTsKCiAgICAg ICAgdmlydHVhbCBib29sIGZvcmVhY2gobG9jYWw6OnN0cmluZyBjb25zdCAmZGlybmFtZSx0YXR0 cnByb2Nlc3NvciAmZG90aGlzKT0wOwoKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxs dmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsbG9jYWw6OnN0cmluZyAm cyxsb2NhbDo6c3RyaW5nICZ1bml0cyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgcmVhZHZh bHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUs bG9jYWw6OnN0cmluZyBjb25zdCAmcyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBy ZWFkb25seShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSk9MDsKICAgICAgICAgICAgICAg IHZpcnR1YWwgYm9vbCBkaXJ0eShib29sIHJlc2V0KT0wOwogICAgICAgICAgICAgICAgdmlydHVh bCB2b2lkIGluYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpPTA7CiAg ICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJu YW1lLGJvb2wgbG90cyk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBhZGRuYW1lZGF0 dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0 ICZ2YWx1ZSk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCByZW1vdmVuYW1lZGF0dHJp YnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSk9MDsKCiAgICAgICAgICAgICAgICB2 aXJ0dWFsIHZvaWQgc2F2ZSh0d3JpdGVzZXJpYWxzdHJlYW0gKndyaXRlc3RyZWFtLHVuc2lnbmVk IGludCBvYmpuYW1lY3JjKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIGxv YWQodHJlYWRzZXJpYWxzdHJlYW0gKnJlYWRzdHJlYW0sdW5zaWduZWQgaW50IG9iam5hbWVjcmMp PTA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFmdGVybG9hZCgpPTA7CgogICAgICAgIHZpcnR1YWwg Ym9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIg Y29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh bDo6c3RyaW5nICZ1bml0cykgY29uc3Q9MDsKICAgIH07CiMgNyAiaGFyZGF0dHIuaCIgMgoKY2xh c3MgdGhhcmRhdHRyaWJ1dGUKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg ICAgIGxvY2FsOjpzdHJpbmcgZm5hbWU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAg dGhhcmRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpCiAgICAgICAgICAg ICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUoYXR0cm5hbWUpCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAg ICAgICAgICAgIHRoYXJkYXR0cmlidXRlKHRoYXJkYXR0cmlidXRlIGNvbnN0ICZvdGhlcikKICAg ICAgICAgICAgOgogICAgICAgICAgICBmbmFtZShvdGhlci5mbmFtZSkKICAgICAgICAgICAgewog ICAgICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgfnRoYXJkYXR0cmlidXRlKCkKICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAg ICAgIHZpcnR1YWwgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0PTA7CiAgICAgICAgdmlydHVh bCBib29sIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZzKSBjb25zdD0wOwogICAgICAg IHZpcnR1YWwgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2Nh bDo6c3RyaW5nIGNvbnN0ICZzKT0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBib29sIHNhdmUo dHdyaXRlc2VyaWFsc3RyZWFtICpzKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCBi b29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFs IGJvb2wgcmVhZG9ubHkoKSBjb25zdD0wOwogICAgICAgICAgICAgICAgdmlydHVhbCB2b2lkIGlu Yyhib29sIGxvdHMpPTA7CiAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjKGJvb2wgbG90 cyk9MDsKICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xh dGlsZSAqICZhdHRycHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgJnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdHRy dmFsdWVwcmludGVyIGNvbnN0IComc3RyY29udikgY29uc3Q9MDsKCiAgICAgICAgdmlydHVhbCBi b29sIHdvcnRoc2F2aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICBsb2NhbDo6 c3RyaW5nIG5hbWUoKSB7cmV0dXJuIGZuYW1lO30gY29uc3QKICAgICAgICBib29sIG9wZXJhdG9y PT0gKHRoYXJkYXR0cmlidXRlIGNvbnN0ICZvdGhlcikgY29uc3QKICAgICAgICAgICAgewogICAg ICAgICAgICByZXR1cm4gKHRoaXM9PSZvdGhlcik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoK CgpjbGFzcyB0d2l0aGhhcmRhdHRyIDogcHVibGljIHR3aXRoYXR0cgogICAgICAgIHsKICAgICAg ICBwcml2YXRlOgogICAgICAgICAgICAgICAgdHlwZWRlZiBsb2NhbDo6dmVjdG9yPHRoYXJkYXR0 cmlidXRlICo+IHZhbHVlc3R5cGU7CiAgICAgICAgICAgICAgICB2YWx1ZXN0eXBlIHZhbHVlczsK CiAgICAgICAgc3RydWN0IHRzdWJkaXIKICAgICAgICAgICAgewogICAgICAgICAgICBsb2NhbDo6 c3RyaW5nIG5hbWU7CiAgICAgICAgICAgIHR3aXRoYXR0ciAqc3ViOwogICAgICAgICAgICBib29s IHNhdmU7CiAgICAgICAgICAgIHRzdWJkaXIobG9jYWw6OnN0cmluZyBjb25zdCAmYSx0d2l0aGF0 dHIgKmIsYm9vbCBjKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgbmFtZShhKSwK ICAgICAgICAgICAgICAgIHN1YihiKSwKICAgICAgICAgICAgICAgIHNhdmUoYykKICAgICAgICAg ICAgICAgIHt9CiAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSh0c3ViZGlyIGNvbnN0ICZvKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHN1Yj09by5zdWIgJiYKICAg ICAgICAgICAgICAgICAgICAobmFtZS5lbXB0eSgpIHx8IHN0cmNhc2VjbXAobmFtZS5jX3N0cigp LG8ubmFtZS5jX3N0cigpKT09MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGJvb2wg b3BlcmF0b3IhPSh0c3ViZGlyIGNvbnN0ICZvKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuICFvcGVyYXRvcj09KG8pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgfTsKICAgICAgICAgICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3Rvcjx0c3ViZGlyPiBzdWJj b2xsZWN0aW9uc3R5cGU7CiAgICAgICAgICAgICAgICBzdWJjb2xsZWN0aW9uc3R5cGUgc3ViY29s bGVjdGlvbnM7CiAgICAgICAgYm9vbCBpc2RpcnR5OwoKICAgICAgICB2YWx1ZXN0eXBlOjppdGVy YXRvciBmaW5kdmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CiAgICAgICAgdmFsdWVz dHlwZTo6Y29uc3RfaXRlcmF0b3IgZmluZGNvbnN0dmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAm bmFtZSkgY29uc3Q7CiAgICAgICAgc3ViY29sbGVjdGlvbnN0eXBlOjpjb25zdF9pdGVyYXRvciBm aW5kc3ViY29sbGVjdGlvbihsb2NhbDo6c3RyaW5nIGNvbnN0ICZuYW1lLGxvY2FsOjpzdHJpbmcg JnJlc3RvZm5hbWUpIGNvbnN0OwogICAgcHJvdGVjdGVkOgogICAgICAgIHZvaWQgYWRkYXR0cmli dXRlKHRoYXJkYXR0cmlidXRlICphKTsKICAgICAgICB2b2lkIHJlbW92ZWF0dHJpYnV0ZSh0aGFy ZGF0dHJpYnV0ZSAqYSk7CiAgICAgICAgdm9pZCBhZGRvdGhlcnNhdHRyaWJ1dGVzKHR3aXRoaGFy ZGF0dHIgJm90aGVyKTsKICAgICAgICB2b2lkIGFkZGNvbGxlY3Rpb24obG9jYWw6OnN0cmluZyBj b25zdCAmbmFtZSx0d2l0aGF0dHIgKmEsYm9vbCBzYXZlKTsKICAgICAgICB2b2lkIHJlbW92ZWNv bGxlY3Rpb24odHdpdGhhdHRyICphKTsKCiAgICAgICAgdmlydHVhbCB2b2lkIGNoYW5nZWQodGhh cmRhdHRyaWJ1dGUgKmEpIHt9OwogICAgICAgIHB1YmxpYzoKICAgICAgICB0d2l0aGhhcmRhdHRy KCk7CiAgICAgICAgdHdpdGhoYXJkYXR0cih0d2l0aGhhcmRhdHRyIGNvbnN0ICZvdGhlcik7CiAg ICAgICAgdHdpdGhoYXJkYXR0ciAmb3BlcmF0b3I9KHR3aXRoaGFyZGF0dHIgY29uc3QgJik7CiAg ICAgICAgYm9vbCBmb3JlYWNoKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRpcm5hbWUsdGF0dHJwcm9j ZXNzb3IgJmRvdGhpcyk7CiAgICAgICAgYm9vbCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmlu ZyBjb25zdCAmYXR0cm5hbWUsbG9jYWw6OnN0cmluZyAmcyxsb2NhbDo6c3RyaW5nICZ1bml0cyk7 CiAgICAgICAgICAgICAgICByZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6 c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAg ICAgICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAg ICAgICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQg aW5jKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAg ICAgICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwog ICAgICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0 ICZuYW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wg cmVtb3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAg ICAgICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWdu ZWQgaW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFk c2VyaWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKICAgICAg ICB2b2lkIGFmdGVybG9hZCgpOwoKICAgICAgICBib29sIGdldGxvZ2luZm8obG9jYWw6OnN0cmlu ZyBjb25zdCAmYXR0cm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgdm9sYXRpbGUgKiAmYXR0cnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50ICZzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsOjpzdHJpbmcgJnVuaXRzKSBjb25zdDsKICAg IH07CiMgNyAiZW5ncHJvZi5oIiAyCiMgMSAibWFwLmgiIDEKCgoKCiMgMSAiZGVsYW4uaCIgMQoK CgoKIyAxICJzdGRjeHgvbG9jYWxzdGFjay5oIiAxCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9zdGFjayIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvc3RhY2siIDMKCgoKCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMSAzCiMgNzIgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4NSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCmlubGluZSBzaXplX3QKX19kZXF1 ZV9idWZfc2l6ZShzaXplX3QgX19zaXplKQp7IHJldHVybiBfX3NpemUgPCA1MTIgPyBzaXplX3Qo NTEyIC8gX19zaXplKSA6IHNpemVfdCgxKTsgfQojIDEwMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNz IF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRlcmF0b3IKewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9y PF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1Rw LCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90 IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7 IH0KCiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5 cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVk ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRl cjsKICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvciBfU2VsZjsKCiAgX1RwKiBfTV9jdXI7CiAgX1Rw KiBfTV9maXJzdDsKICBfVHAqIF9NX2xhc3Q7CiAgX01hcF9wb2ludGVyIF9NX25vZGU7CgogIF9E ZXF1ZV9pdGVyYXRvcihfVHAqIF9feCwgX01hcF9wb2ludGVyIF9feSkKICAgIDogX01fY3VyKF9f eCksIF9NX2ZpcnN0KCpfX3kpLAogICAgICBfTV9sYXN0KCpfX3kgKyBfU19idWZmZXJfc2l6ZSgp KSwgX01fbm9kZShfX3kpIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKCkgOiBfTV9jdXIoMCksIF9NX2Zp cnN0KDApLCBfTV9sYXN0KDApLCBfTV9ub2RlKDApIHt9CiAgX0RlcXVlX2l0ZXJhdG9yKGNvbnN0 IGl0ZXJhdG9yJiBfX3gpCiAgICA6IF9NX2N1cihfX3guX01fY3VyKSwgX01fZmlyc3QoX194Ll9N X2ZpcnN0KSwKICAgICAgX01fbGFzdChfX3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUp IHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VyOyB9CiAg cG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VyOyB9CgogIGRpZmZlcmVu Y2VfdHlwZSBvcGVyYXRvci0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIGRp ZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSAqIChfTV9ub2RlIC0gX194Ll9NX25vZGUg LSAxKSArCiAgICAgIChfTV9jdXIgLSBfTV9maXJzdCkgKyAoX194Ll9NX2xhc3QgLSBfX3guX01f Y3VyKTsKICB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgKytfTV9jdXI7CiAgICBpZiAo X01fY3VyID09IF9NX2xhc3QpIHsKICAgICAgX01fc2V0X25vZGUoX01fbm9kZSArIDEpOwogICAg ICBfTV9jdXIgPSBfTV9maXJzdDsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArKyp0aGlzOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICBpZiAoX01f Y3VyID09IF9NX2ZpcnN0KSB7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgLSAxKTsKICAgICAg X01fY3VyID0gX01fbGFzdDsKICAgIH0KICAgIC0tX01fY3VyOwogICAgcmV0dXJuICp0aGlzOwog IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg IC0tKnRoaXM7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3IrPShkaWZm ZXJlbmNlX3R5cGUgX19uKQogIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fbiAr IChfTV9jdXIgLSBfTV9maXJzdCk7CiAgICBpZiAoX19vZmZzZXQgPj0gMCAmJiBfX29mZnNldCA8 IGRpZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSkKICAgICAgX01fY3VyICs9IF9fbjsK ICAgIGVsc2UgewogICAgICBkaWZmZXJlbmNlX3R5cGUgX19ub2RlX29mZnNldCA9CiAgICAgICAg X19vZmZzZXQgPiAwID8gX19vZmZzZXQgLyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUo KSkKICAgICAgICAgICAgICAgICAgIDogLWRpZmZlcmVuY2VfdHlwZSgoLV9fb2Zmc2V0IC0gMSkg LyBfU19idWZmZXJfc2l6ZSgpKSAtIDE7CiAgICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyBfX25v ZGVfb2Zmc2V0KTsKICAgICAgX01fY3VyID0gX01fZmlyc3QgKwogICAgICAgIChfX29mZnNldCAt IF9fbm9kZV9vZmZzZXQgKiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpOwogICAg fQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw ZSBfX24pIGNvbnN0CiAgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3Rt cCArPSBfX247CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7 IHJldHVybiAqdGhpcyArPSAtX19uOyB9CgogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdCB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1w IC09IF9fbjsKICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24p IGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9CgoKCgoKCgogIHZvaWQgX01fc2V0X25v ZGUoX01hcF9wb2ludGVyIF9fbmV3X25vZGUpIHsKICAgIF9NX25vZGUgPSBfX25ld19ub2RlOwog ICAgX01fZmlyc3QgPSAqX19uZXdfbm9kZTsKICAgIF9NX2xhc3QgPSBfTV9maXJzdCArIGRpZmZl cmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKTsKICB9Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0 IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgY29uc3Qg X0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKewogIHJldHVybiBfX3guX01f Y3VyID09IF9feS5fTV9jdXI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWZMLCBj bGFzcyBfUHRyTCwgY2xhc3MgX1JlZlIsIGNsYXNzIF9QdHJSPgppbmxpbmUgYm9vbApvcGVyYXRv cj09KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKICAgICAg ICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCnsKICBy ZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfUmVmLCBjbGFzcyBfUHRyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IF9EZXF1 ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl X2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNz IF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfRGVxdWVf aXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl X2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQp7CiAgcmV0dXJuICEoX194ID09IF9f eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGlu ZSBib29sCm9wZXJhdG9yPChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYg X194LAogICAgICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBf X3kpCnsKICByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlKSA/CiAgICAoX194Ll9N X2N1ciA8IF9feS5fTV9jdXIpIDogKF9feC5fTV9ub2RlIDwgX195Ll9NX25vZGUpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNzIF9SZWZSLCBj bGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxf VHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKICAgICAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8 X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCnsKICByZXR1cm4gKF9feC5fTV9ub2RlID09IF9feS5f TV9ub2RlKSA/CiAgICAoX194Ll9NX2N1ciA8IF9feS5fTV9jdXIpIDogKF9feC5fTV9ub2RlIDwg X195Ll9NX25vZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBf UHRyPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1Jl ZiwgX1B0cj4mIF9feCwKICAgICAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVm LCBfUHRyPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX1JlZkwsIGNsYXNzIF9QdHJMLCBjbGFzcyBfUmVmUiwgY2xhc3MgX1B0clI+Cmlu bGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0 ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9Q dHJSPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBfRGVx dWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgIGNvbnN0IF9EZXF1 ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCnsKICByZXR1cm4gIShfX3kgPCBfX3gp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNz IF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBfRGVxdWVf aXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVl X2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5l IGJvb2wKb3BlcmF0b3I+PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYg X194LAogICAgICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBf X3kpCnsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfUmVmTCwgY2xhc3MgX1B0ckwsIGNsYXNzIF9SZWZSLCBjbGFzcyBfUHRyUj4KaW5saW5lIGJv b2wKb3BlcmF0b3I+PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBf X3gsCiAgICAgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYg X195KQp7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9Q dHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBf UmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDMzMCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2FsbG9jX2Jhc2UKewpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2M+OjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0RlcXVlX2FsbG9jX2Jhc2Uo Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwg X01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApCiAg e30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0Fs bG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2NhdG9yX3R5cGU7CgogIGFs bG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxsb2NhdG9yX3R5cGUgX01f bWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkgewogICAgcmV0dXJuIF9N X25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsK ICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsKICAgIF9NX25vZGVfYWxs b2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAg fQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fbWFw X2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX21hcChfVHAq KiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3As IF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBfc2l6ZTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1ZV9hbGxvY19iYXNlPF9U cCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9 CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9tYXAoMCks IF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf dHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxsb2NfdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX01h cF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7CiAgICByZXR1cm4gX05v ZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOwog IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewogICAgX05vZGVfYWxsb2Nf dHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKICB9 CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTWFwX2Fs bG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbWFwKF9UcCoq IF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwg X19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9zaXplOwp9OwojIDQwNCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0RlcXVlX2Jhc2UKICA6IHB1YmxpYyBfRGVxdWVfYWxs b2NfYmFzZTxfVHAsX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf dHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CnB1YmxpYzoKICB0eXBlZGVm IF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9y OwogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNv bnN0X2l0ZXJhdG9yOwoKICBfRGVxdWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hLCBz aXplX3QgX19udW1fZWxlbWVudHMpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0YXJ0KCksIF9NX2Zp bmlzaCgpCiAgICB7IF9NX2luaXRpYWxpemVfbWFwKF9fbnVtX2VsZW1lbnRzKTsgfQogIF9EZXF1 ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0 YXJ0KCksIF9NX2ZpbmlzaCgpIHt9CiAgfl9EZXF1ZV9iYXNlKCk7Cgpwcm90ZWN0ZWQ6CiAgdm9p ZCBfTV9pbml0aWFsaXplX21hcChzaXplX3QpOwogIHZvaWQgX01fY3JlYXRlX25vZGVzKF9UcCoq IF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIHZvaWQgX01fZGVzdHJveV9ub2RlcyhfVHAq KiBfX25zdGFydCwgX1RwKiogX19uZmluaXNoKTsKICBlbnVtIHsgX1NfaW5pdGlhbF9tYXBfc2l6 ZSA9IDggfTsKCnByb3RlY3RlZDoKICBpdGVyYXRvciBfTV9zdGFydDsKICBpdGVyYXRvciBfTV9m aW5pc2g7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpfRGVxdWVfYmFz ZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkKewogIGlmIChfTV9tYXApIHsKICAgIF9NX2Rl c3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAg IF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFwX3NpemUpOwogIH0KfQojIDQ1NCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4Kdm9pZApfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6X01faW5pdGlhbGl6 ZV9tYXAoc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQp7CiAgc2l6ZV90IF9fbnVtX25vZGVzID0KICAg IF9fbnVtX2VsZW1lbnRzIC8gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkgKyAxOwoKICBf TV9tYXBfc2l6ZSA9IG1heCgoc2l6ZV90KSBfU19pbml0aWFsX21hcF9zaXplLCBfX251bV9ub2Rl cyArIDIpOwogIF9NX21hcCA9IF9NX2FsbG9jYXRlX21hcChfTV9tYXBfc2l6ZSk7CgogIF9UcCoq IF9fbnN0YXJ0ID0gX01fbWFwICsgKF9NX21hcF9zaXplIC0gX19udW1fbm9kZXMpIC8gMjsKICBf VHAqKiBfX25maW5pc2ggPSBfX25zdGFydCArIF9fbnVtX25vZGVzOwoKICB0cnkKICAgIHsgX01f Y3JlYXRlX25vZGVzKF9fbnN0YXJ0LCBfX25maW5pc2gpOyB9CiAgY2F0Y2goLi4uKQogICAgewog ICAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9zaXplKTsKICAgICAgX01fbWFw ID0gMDsKICAgICAgX01fbWFwX3NpemUgPSAwOwogICAgICB0aHJvdzsKICAgIH0KCiAgX01fc3Rh cnQuX01fc2V0X25vZGUoX19uc3RhcnQpOwogIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfX25maW5p c2ggLSAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9maXJzdDsKICBfTV9maW5p c2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0ICsKICAgICAgICAgICAgICAgX19udW1fZWxl bWVudHMgJSBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIF9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9jcmVh dGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIF9UcCoqIF9fY3Vy OwogIHRyeSB7CiAgICBmb3IgKF9fY3VyID0gX19uc3RhcnQ7IF9fY3VyIDwgX19uZmluaXNoOyAr K19fY3VyKQogICAgICAqX19jdXIgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNhdGNoKC4u LikKICAgIHsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25zdGFydCwgX19jdXIpOwogICAgICB0 aHJvdzsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCl9E ZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBf VHAqKiBfX25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBfX25m aW5pc2g7ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9CiMgNTg4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyBkZXF1ZSA6IHByb3RlY3RlZCBf RGVxdWVfYmFzZTxfVHAsIF9BbGxvYz4KewoKIAoKICB0eXBlZGVmIF9EZXF1ZV9iYXNlPF9UcCwg X0FsbG9jPiBfQmFzZTsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0 X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFt ZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0K CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBy ZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnBy b3RlY3RlZDoKICB0eXBlZGVmIHBvaW50ZXIqIF9NYXBfcG9pbnRlcjsKICBzdGF0aWMgc2l6ZV90 IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7 IH0KCgogIHVzaW5nIF9CYXNlOjpfTV9pbml0aWFsaXplX21hcDsKICB1c2luZyBfQmFzZTo6X01f Y3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9kZXN0cm95X25vZGVzOwogIHVzaW5nIF9C YXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX25vZGU7 CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlX21hcDsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxv Y2F0ZV9tYXA7CgoKCgoKCgogIHVzaW5nIF9CYXNlOjpfTV9tYXA7CiAgdXNpbmcgX0Jhc2U6Ol9N X21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmlu aXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBp dGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9pdGVyYXRvciBiZWdp bigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u c3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7IH0KICBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25z dAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfTV9zdGFydCk7IH0KCiAgcmVm ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2Rp ZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf dHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9zdGFydFtkaWZmZXJlbmNlX3R5cGUoX19u KV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBp ZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19yYW5nZV9lcnJvcigiZGVxdWUi KTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVj ayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVf dHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMp W19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKl9NX3N0YXJ0OyB9CiAgcmVm ZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgIC0tX190 bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25z dCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsK ICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwogICAgLS1fX3RtcDsKICAgIHJl dHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2Zp bmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g c2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2gg PT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNpdCBkZXF1ZShjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hLCAwKSB7fQogIGRl cXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSwgX194LnNp emUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9N X3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs dWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp IDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQoK ICBleHBsaWNpdAogIGRlcXVlKHNpemVfdHlwZSBfX24pCiAgOiBfQmFzZShhbGxvY2F0b3JfdHlw ZSgpLCBfX24pCiAgeyBfTV9maWxsX2luaXRpYWxpemUodmFsdWVfdHlwZSgpKTsgfQoKCiAgdGVt cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J bnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J bnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3Ry dWVfdHlwZSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZV9tYXAoX19uKTsKICAgICAgX01fZmls bF9pbml0aWFsaXplKF9feCk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXI+CiAg ICB2b2lkCiAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0 ZWdvcnk7CiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNh dGVnb3J5KCkpOwogICAgfQoKICB+ZGVxdWUoKQogIHsgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2Zp bmlzaCk7IH0KCiAgZGVxdWUmIG9wZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29u c3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAg ICBpZiAoX19sZW4gPj0gX194LnNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigp LCBfX3guZW5kKCksIF9NX3N0YXJ0KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAg Y29uc3RfaXRlcmF0b3IgX19taWQgPSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xl bik7CiAgICAgICAgY29weShfX3guYmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBp bnNlcnQoX01fZmluaXNoLCBfX21pZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0 dXJuICp0aGlzOwogIH0KCiAgdm9pZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChf TV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9m aW5pc2gpOwogICAgc3RkOjpzd2FwKF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAo X01fbWFwX3NpemUsIF9feC5fTV9tYXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBf TV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAo X19uID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAg aW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAg ICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCks IF9fdmFsKTsKICAgIH0KICB9CgogIHZvaWQKICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg X1RwJiBfX3ZhbCkKICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CgogIHRlbXBsYXRl PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg IH0KCnByaXZhdGU6CgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZAogICAgX01f YXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl KQogICAgeyBfTV9maWxsX2Fzc2lnbihzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRp Y19jYXN0PF9UcD4oX192YWwpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y eSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0 ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog IHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9y d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIGlmIChfX2xlbiA+IHNpemUoKSkgewogICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg c2l6ZSgpKTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2Vy dChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgICBlbHNlCiAgICAgIGVyYXNlKGNvcHko X19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogIH0KCnB1YmxpYzoKCiAgdm9pZAog IHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpCiAgewogICAgaWYgKF9NX2ZpbmlzaC5f TV9jdXIgIT0gX01fZmluaXNoLl9NX2xhc3QgLSAxKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmlu aXNoLl9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQogICAgZWxz ZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkCiAgcHVzaF9iYWNrKCkK ICB7CiAgICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2guX01fbGFzdCAtIDEpIHsK ICAgICAgX0NvbnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgICAgKytfTV9maW5pc2guX01f Y3VyOwogICAgfQogICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KCk7CiAgfQoKICB2b2lk CiAgcHVzaF9mcm9udChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCiAgewogICAgaWYgKF9NX3N0YXJ0 Ll9NX2N1ciAhPSBfTV9zdGFydC5fTV9maXJzdCkgewogICAgICBfQ29uc3RydWN0KF9NX3N0YXJ0 Ll9NX2N1ciAtIDEsIF9fdCk7CiAgICAgIC0tX01fc3RhcnQuX01fY3VyOwogICAgfQogICAgZWxz ZQogICAgICBfTV9wdXNoX2Zyb250X2F1eChfX3QpOwogIH0KCiAgdm9pZAogIHB1c2hfZnJvbnQo KQogIHsKICAgIGlmIChfTV9zdGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fZmlyc3QpIHsKICAg ICAgX0NvbnN0cnVjdChfTV9zdGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9j dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9p ZAogIHBvcF9iYWNrKCkKICB7CiAgICBpZiAoX01fZmluaXNoLl9NX2N1ciAhPSBfTV9maW5pc2gu X01fZmlyc3QpIHsKICAgICAgLS1fTV9maW5pc2guX01fY3VyOwogICAgICBfRGVzdHJveShfTV9m aW5pc2guX01fY3VyKTsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcG9wX2JhY2tfYXV4KCk7CiAg fQoKICB2b2lkCiAgcG9wX2Zyb250KCkKICB7CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9N X3N0YXJ0Ll9NX2xhc3QgLSAxKSB7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0Ll9NX2N1cik7CiAg ICAgICsrX01fc3RhcnQuX01fY3VyOwogICAgfQogICAgZWxzZQogICAgICBfTV9wb3BfZnJvbnRf YXV4KCk7CiAgfQoKcHVibGljOgoKICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBwb3NpdGlv biwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogIHsKICAgIGlmIChwb3NpdGlvbi5fTV9jdXIgPT0g X01fc3RhcnQuX01fY3VyKSB7CiAgICAgIHB1c2hfZnJvbnQoX194KTsKICAgICAgcmV0dXJuIF9N X3N0YXJ0OwogICAgfQogICAgZWxzZSBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX2ZpbmlzaC5f TV9jdXIpIHsKICAgICAgcHVzaF9iYWNrKF9feCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01f ZmluaXNoOwogICAgICAtLV9fdG1wOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgICBlbHNl IHsKICAgICAgcmV0dXJuIF9NX2luc2VydF9hdXgocG9zaXRpb24sIF9feCk7CiAgICB9CiAgfQoK ICBpdGVyYXRvcgogIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKQogIHsgcmV0dXJuIGluc2Vy dChfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlKCkpOyB9CgogIHZvaWQKICBpbnNlcnQoaXRlcmF0b3Ig X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7IF9NX2ZpbGxf aW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9pZAogIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKCiAgdGVt cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICBpbnNlcnQoaXRlcmF0b3Ig X19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9J bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJz dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2Vy PgogICAgdm9pZAogICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdl ciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f cG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+ KF9feCkpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAg X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJD YXRlZ29yeTsKICAgICAgaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdv cnkoKSk7CiAgICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2 YWx1ZV90eXBlJiBfX3gpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKICAg IGlmIChfX25ld19zaXplIDwgX19sZW4pCiAgICAgIGVyYXNlKF9NX3N0YXJ0ICsgX19uZXdfc2l6 ZSwgX01fZmluaXNoKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KF9NX2ZpbmlzaCwgX19uZXdfc2l6 ZSAtIF9fbGVuLCBfX3gpOwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIG5ld19zaXplKSB7 IHJlc2l6ZShuZXdfc2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKcHVibGljOgogIGl0ZXJhdG9yIGVy YXNlKGl0ZXJhdG9yIF9fcG9zKSB7CiAgICBpdGVyYXRvciBfX25leHQgPSBfX3BvczsKICAgICsr X19uZXh0OwogICAgc2l6ZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0OwogICAgaWYg KF9faW5kZXggPCAoc2l6ZSgpID4+IDEpKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQs IF9fcG9zLCBfX25leHQpOwogICAgICBwb3BfZnJvbnQoKTsKICAgIH0KICAgIGVsc2UgewogICAg ICBjb3B5KF9fbmV4dCwgX01fZmluaXNoLCBfX3Bvcyk7CiAgICAgIHBvcF9iYWNrKCk7CiAgICB9 CiAgICByZXR1cm4gX01fc3RhcnQgKyBfX2luZGV4OwogIH0KCiAgaXRlcmF0b3IgZXJhc2UoaXRl cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGNsZWFyKCk7Cgpwcm90ZWN0 ZWQ6CgogIHZvaWQgX01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUp OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0 aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCnByb3RlY3RlZDoKCiAgdm9pZCBfTV9w dXNoX2JhY2tfYXV4KGNvbnN0IHZhbHVlX3R5cGUmKTsKICB2b2lkIF9NX3B1c2hfYmFja19hdXgo KTsKICB2b2lkIF9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZhbHVlX3R5cGUmKTsKICB2b2lkIF9N X3B1c2hfZnJvbnRfYXV4KCk7CiAgdm9pZCBfTV9wb3BfYmFja19hdXgoKTsKICB2b2lkIF9NX3Bv cF9mcm9udF9hdXgoKTsKCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRl cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7 CgogIGl0ZXJhdG9yIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5 cGUmIF9feCk7CiAgaXRlcmF0b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvcyk7CiAgdm9p ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1 ZV90eXBlJiBfX3gpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lk IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgIHNpemVfdHlwZSBfX24pOwoKICBpdGVyYXRvciBfTV9yZXNlcnZlX2VsZW1lbnRz X2F0X2Zyb250KHNpemVfdHlwZSBfX24pIHsKICAgIHNpemVfdHlwZSBfX3ZhY2FuY2llcyA9IF9N X3N0YXJ0Ll9NX2N1ciAtIF9NX3N0YXJ0Ll9NX2ZpcnN0OwogICAgaWYgKF9fbiA+IF9fdmFjYW5j aWVzKQogICAgICBfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoX19uIC0gX192YWNhbmNpZXMpOwog ICAgcmV0dXJuIF9NX3N0YXJ0IC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgfQoKICBpdGVyYXRv ciBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90 eXBlIF9fdmFjYW5jaWVzID0gKF9NX2ZpbmlzaC5fTV9sYXN0IC0gX01fZmluaXNoLl9NX2N1cikg LSAxOwogICAgaWYgKF9fbiA+IF9fdmFjYW5jaWVzKQogICAgICBfTV9uZXdfZWxlbWVudHNfYXRf YmFjayhfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4gX01fZmluaXNoICsgZGlmZmVyZW5j ZV90eXBlKF9fbik7CiAgfQoKICB2b2lkIF9NX25ld19lbGVtZW50c19hdF9mcm9udChzaXplX3R5 cGUgX19uZXdfZWxlbWVudHMpOwogIHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90 eXBlIF9fbmV3X2VsZW1lbnRzKTsKCnByb3RlY3RlZDoKCgoKCgogIHZvaWQgX01fcmVzZXJ2ZV9t YXBfYXRfYmFjayAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAgaWYgKF9fbm9k ZXNfdG9fYWRkICsgMSA+IF9NX21hcF9zaXplIC0gKF9NX2ZpbmlzaC5fTV9ub2RlIC0gX01fbWFw KSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIGZhbHNlKTsKICB9Cgog IHZvaWQgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQgKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCA9 IDEpIHsKICAgIGlmIChfX25vZGVzX3RvX2FkZCA+IHNpemVfdHlwZShfTV9zdGFydC5fTV9ub2Rl IC0gX01fbWFwKSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIHRydWUp OwogIH0KCiAgdm9pZCBfTV9yZWFsbG9jYXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQs IGJvb2wgX19hZGRfYXRfZnJvbnQpOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9j PgogIDo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2Zp cnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg ZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9f bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf VHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlw ZSYgX194KQp7CiAgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgIGl0 ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwog ICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbmV3X3N0YXJ0LCBfTV9zdGFydCwg X194KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIH0KICAgIGNhdGNoKC4uLikK ICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01f c3RhcnQuX01fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSBpZiAoX19w b3MuX01fY3VyID09IF9NX2ZpbmlzaC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz aCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgdHJ5IHsKICAgICAgdW5p bml0aWFsaXplZF9maWxsKF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoLCBfX3gpOwogICAgICBfTV9m aW5pc2ggPSBfX25ld19maW5pc2g7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAg ICBfTV9kZXN0cm95X25vZGVzKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSwgX19uZXdfZmluaXNoLl9N X25vZGUgKyAxKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KICBlbHNlCiAgICBfTV9pbnNl cnRfYXV4KF9fcG9zLCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxs b2M+OjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19m aXJzdCA9PSBfTV9zdGFydCAmJiBfX2xhc3QgPT0gX01fZmluaXNoKSB7CiAgICBjbGVhcigpOwog ICAgcmV0dXJuIF9NX2ZpbmlzaDsKICB9CiAgZWxzZSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19u ID0gX19sYXN0IC0gX19maXJzdDsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9 IF9fZmlyc3QgLSBfTV9zdGFydDsKICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxl bXNfYmVmb3JlKSA8IChzaXplKCkgLSBfX24pIC8gMikgewogICAgICBjb3B5X2JhY2t3YXJkKF9N X3N0YXJ0LCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9N X3N0YXJ0ICsgX19uOwogICAgICBfRGVzdHJveShfTV9zdGFydCwgX19uZXdfc3RhcnQpOwogICAg ICBfTV9kZXN0cm95X25vZGVzKF9NX3N0YXJ0Ll9NX25vZGUsIF9fbmV3X3N0YXJ0Ll9NX25vZGUp OwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIGNv cHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAgICBpdGVyYXRvciBfX25ld19maW5p c2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmlu aXNoKTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19maW5pc2guX01fbm9kZSArIDEsIF9N X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAg IH0KICAgIHJldHVybiBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpjbGVhcigp CnsKICBmb3IgKF9NYXBfcG9pbnRlciBfX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlICsgMTsKICAg ICAgIF9fbm9kZSA8IF9NX2ZpbmlzaC5fTV9ub2RlOwogICAgICAgKytfX25vZGUpIHsKICAgIF9E ZXN0cm95KCpfX25vZGUsICpfX25vZGUgKyBfU19idWZmZXJfc2l6ZSgpKTsKICAgIF9NX2RlYWxs b2NhdGVfbm9kZSgqX19ub2RlKTsKICB9CgogIGlmIChfTV9zdGFydC5fTV9ub2RlICE9IF9NX2Zp bmlzaC5fTV9ub2RlKSB7CiAgICBfRGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9NX3N0YXJ0Ll9N X2xhc3QpOwogICAgX0Rlc3Ryb3koX01fZmluaXNoLl9NX2ZpcnN0LCBfTV9maW5pc2guX01fY3Vy KTsKICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICBlbHNl CiAgICBfRGVzdHJveShfTV9zdGFydC5fTV9jdXIsIF9NX2ZpbmlzaC5fTV9jdXIpOwoKICBfTV9m aW5pc2ggPSBfTV9zdGFydDsKfQojIDExNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf ZGVxdWUuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8 X1RwLF9BbGxvYz46Ol9NX2ZpbGxfaW5pdGlhbGl6ZShjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVl KQp7CiAgX01hcF9wb2ludGVyIF9fY3VyOwogIHRyeSB7CiAgICBmb3IgKF9fY3VyID0gX01fc3Rh cnQuX01fbm9kZTsgX19jdXIgPCBfTV9maW5pc2guX01fbm9kZTsgKytfX2N1cikKICAgICAgdW5p bml0aWFsaXplZF9maWxsKCpfX2N1ciwgKl9fY3VyICsgX1NfYnVmZmVyX3NpemUoKSwgX192YWx1 ZSk7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLl9NX2ZpcnN0LCBfTV9maW5pc2gu X01fY3VyLCBfX3ZhbHVlKTsKICB9CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfRGVzdHJveShf TV9zdGFydCwgaXRlcmF0b3IoKl9fY3VyLCBfX2N1cikpOwogICAgICB0aHJvdzsKICAgIH0KfQoj IDExNzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K dm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFsaXplX21hcCgwKTsKICB0 cnkgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNo X2JhY2soKl9fZmlyc3QpOwogIH0KICBjYXRjaCguLi4pCiAgICB7CiAgICAgIGNsZWFyKCk7CiAg ICAgIHRocm93OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+Ojpf TV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykKewogIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog IF9NX2luaXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwogIHRy eSB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAgICAgICBfX2N1 cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9kZSkgewogICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwg X1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX21p ZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAgICB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICBj YXRjaCguLi4pCiAgICB7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXJf bm9kZSwgX19jdXJfbm9kZSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFj a19hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9f dDsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEp ID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaC5f TV9jdXIsIF9fdF9jb3B5KTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01f bm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9 CiAgY2F0Y2goLi4uKQogICAgewogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2gu X01fbm9kZSArIDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgo KQp7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjaygpOwogICooX01fZmluaXNoLl9NX25vZGUgKyAx KSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB0cnkgewogICAgX0NvbnN0cnVjdChfTV9maW5pc2gu X01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSArIDEp OwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9CiAgY2F0Y2go Li4uKQogICAgewogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSAr IDEpKTsKICAgICAgdGhyb3c7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZh bHVlX3R5cGUmIF9fdCkKewogIHZhbHVlX3R5cGUgX190X2NvcHkgPSBfX3Q7CiAgX01fcmVzZXJ2 ZV9tYXBfYXRfZnJvbnQoKTsKICAqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSA9IF9NX2FsbG9jYXRl X25vZGUoKTsKICB0cnkgewogICAgX01fc3RhcnQuX01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9k ZSAtIDEpOwogICAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01fbGFzdCAtIDE7CiAgICBf Q29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1ciwgX190X2NvcHkpOwogIH0KICBjYXRjaCguLi4pCiAg ICB7CiAgICAgICsrX01fc3RhcnQ7CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0 Ll9NX25vZGUgLSAxKSk7CiAgICAgIHRocm93OwogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgp2b2lkCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wdXNoX2Zyb250X2F1 eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAt IDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9k ZShfTV9zdGFydC5fTV9ub2RlIC0gMSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5f TV9sYXN0IC0gMTsKICAgIF9Db25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyKTsKICB9CiAgY2F0Y2go Li4uKQogICAgewogICAgICArK19NX3N0YXJ0OwogICAgICBfTV9kZWFsbG9jYXRlX25vZGUoKihf TV9zdGFydC5fTV9ub2RlIC0gMSkpOwogICAgICB0aHJvdzsKICAgIH0KfQoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcG9wX2Jh Y2tfYXV4KCkKewogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIF9N X2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSAtIDEpOwogIF9NX2ZpbmlzaC5f TV9jdXIgPSBfTV9maW5pc2guX01fbGFzdCAtIDE7CiAgX0Rlc3Ryb3koX01fZmluaXNoLl9NX2N1 cik7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8 X1RwLF9BbGxvYz46Ol9NX3BvcF9mcm9udF9hdXgoKQp7CiAgX0Rlc3Ryb3koX01fc3RhcnQuX01f Y3VyKTsKICBfTV9kZWFsbG9jYXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0 Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBf TV9zdGFydC5fTV9maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omlu c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19s YXN0LCBpbnNlcnRlcigqdGhpcywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxf VHAsX0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5 cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19wb3MuX01fY3VyID09 IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZl X2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX25ld19zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdf c3RhcnQ7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25v ZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpOwogICAgICAgIHRocm93 OwogICAgICB9CiAgfQogIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3Vy KSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Jh Y2soX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh c3QsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAg IGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9N X25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOwogICAgICAgIHRocm93OwogICAg ICB9CiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg X19uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1 ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4 KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5 cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9f eDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2luZGV4KSA8IHNpemUoKSAvIDIpIHsK ICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7CiAgICBpdGVyYXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0 OwogICAgKytfX2Zyb250MTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CiAgICAr K19fZnJvbnQyOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAgICBpdGVyYXRvciBf X3BvczEgPSBfX3BvczsKICAgICsrX19wb3MxOwogICAgY29weShfX2Zyb250MiwgX19wb3MxLCBf X2Zyb250MSk7CiAgfQogIGVsc2UgewogICAgcHVzaF9iYWNrKGJhY2soKSk7CiAgICBpdGVyYXRv ciBfX2JhY2sxID0gX01fZmluaXNoOwogICAgLS1fX2JhY2sxOwogICAgaXRlcmF0b3IgX19iYWNr MiA9IF9fYmFjazE7CiAgICAtLV9fYmFjazI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRl eDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fYmFjazIsIF9fYmFjazEpOwogIH0KICAqX19w b3MgPSBfX3hfY29weTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9U cCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90 eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5 cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8gMikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAg IGl0ZXJhdG9yIF9fZnJvbnQxID0gX01fc3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0 b3IgX19mcm9udDIgPSBfX2Zyb250MTsKICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0 YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7 CiAgICBjb3B5KF9fZnJvbnQyLCBfX3BvczEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBw dXNoX2JhY2soYmFjaygpKTsKICAgIGl0ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAt LV9fYmFjazE7CiAgICBpdGVyYXRvciBfX2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsK ICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3Bvcywg X19iYWNrMiwgX19iYWNrMSk7CiAgfQogICpfX3BvcyA9IHZhbHVlX3R5cGUoKTsKICByZXR1cm4g X19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf VHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKewogIGNvbnN0IGRpZmZl cmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBl IF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOwogIHZhbHVlX3R5cGUgX194X2NvcHkgPSBfX3g7CiAg aWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlmZmVyZW5jZV90eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAg IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24p OwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3Rh cnQgKyBfX2VsZW1zX2JlZm9yZTsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+ PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9N X3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5 KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9f bmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwog ICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5 KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxs KF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfTV9zdGFydCwgX194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh cnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQog ICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25l d19zdGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgICB0aHJvdzsKICAgICAg fQogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxl bWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNo OwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZmZXJl bmNlX3R5cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2Zpbmlz aCAtIF9fZWxlbXNfYWZ0ZXI7CiAgICB0cnkgewogICAgICBpZiAoX19lbGVtc19hZnRlciA+IGRp ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2Zp bmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf X2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19u ZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xk X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19u KSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXpl ZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBfTV9maW5pc2gp OwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxsKF9fcG9zLCBf X29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgY2F0Y2goLi4uKQogICAg ICB7CiAgICAgICAgX01fZGVzdHJveV9ub2RlcyhfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3 X2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdHlwZSBfX24pCnsKICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc2JlZm9yZSA9IF9f cG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gc2l6ZSgpOwogIGlmIChzdGF0 aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNiZWZvcmUpIDwgX19sZW5ndGggLyAyKSB7CiAgICBp dGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsK ICAgIGl0ZXJhdG9yIF9fb2xkX3N0YXJ0ID0gX01fc3RhcnQ7CiAgICBfX3BvcyA9IF9NX3N0YXJ0 ICsgX19lbGVtc2JlZm9yZTsKICAgIHRyeSB7CiAgICAgIGlmIChfX2VsZW1zYmVmb3JlID49IGRp ZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19zdGFydF9uID0gX01fc3Rh cnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01f c3RhcnQsIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdf c3RhcnQ7CiAgICAgICAgY29weShfX3N0YXJ0X24sIF9fcG9zLCBfX29sZF9zdGFydCk7CiAgICAg ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zIC0gZGlmZmVyZW5jZV90eXBlKF9fbikpOwog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIGRpZmZlcmVuY2VfdHlwZShfX24pIC0gX19lbGVt c2JlZm9yZSk7CiAgICAgICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfTV9zdGFydCwgX19w b3MsIF9fZmlyc3QsIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19u ZXdfc3RhcnQpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29weShf X21pZCwgX19sYXN0LCBfX29sZF9zdGFydCk7CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikK ICAgICAgewogICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01f c3RhcnQuX01fbm9kZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CiAgZWxzZSB7CiAgICBp dGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsK ICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAgIGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSBfX2VsZW1zYWZ0ZXIgPQogICAgICBkaWZmZXJlbmNlX3R5cGUoX19sZW5ndGgpIC0g X19lbGVtc2JlZm9yZTsKICAgIF9fcG9zID0gX01fZmluaXNoIC0gX19lbGVtc2FmdGVyOwogICAg dHJ5IHsKICAgICAgaWYgKF9fZWxlbXNhZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAg ICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2ZpbmlzaCAtIGRpZmZlcmVuY2VfdHlwZShf X24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9N X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGNvcHlf YmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcG9zKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2Vs ZW1zYWZ0ZXIpOwogICAgICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX19taWQsIF9fbGFz dCwgX19wb3MsIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25l d19maW5pc2g7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3MpOwogICAgICB9CiAg ICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZXN0cm95X25vZGVzKF9NX2Zp bmlzaC5fTV9ub2RlICsgMSwgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgICB0aHJv dzsKICAgICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk IGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9f bmV3X2VsZW1zKQp7CiAgc2l6ZV90eXBlIF9fbmV3X25vZGVzCiAgICAgID0gKF9fbmV3X2VsZW1z ICsgX1NfYnVmZmVyX3NpemUoKSAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKTsKICBfTV9yZXNlcnZl X21hcF9hdF9mcm9udChfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0cnkgewogICAg Zm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9kZXM7ICsrX19pKQogICAgICAqKF9NX3N0YXJ0 Ll9NX25vZGUgLSBfX2kpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIH0KICBjYXRjaCguLi4pIHsK ICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDE7IF9faiA8IF9faTsgKytfX2opCiAgICAgIF9NX2Rl YWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSBfX2opKTsKICAgIHRocm93OwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxs b2M+OjpfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbXMpCnsKICBz aXplX3R5cGUgX19uZXdfbm9kZXMKICAgICAgPSAoX19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6 ZSgpIC0gMSkgLyBfU19idWZmZXJfc2l6ZSgpOwogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soX19u ZXdfbm9kZXMpOwogIHNpemVfdHlwZSBfX2k7CiAgdHJ5IHsKICAgIGZvciAoX19pID0gMTsgX19p IDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9maW5pc2guX01fbm9kZSArIF9faSkg PSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNhdGNoKC4uLikgewogICAgZm9yIChzaXplX3R5 cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikKICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCoo X01fZmluaXNoLl9NX25vZGUgKyBfX2opKTsKICAgIHRocm93OwogIH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9yZWFsbG9j YXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgX19hZGRfYXRfZnJvbnQpCnsKICBzaXplX3R5cGUgX19v bGRfbnVtX25vZGVzID0gX01fZmluaXNoLl9NX25vZGUgLSBfTV9zdGFydC5fTV9ub2RlICsgMTsK ICBzaXplX3R5cGUgX19uZXdfbnVtX25vZGVzID0gX19vbGRfbnVtX25vZGVzICsgX19ub2Rlc190 b19hZGQ7CgogIF9NYXBfcG9pbnRlciBfX25ld19uc3RhcnQ7CiAgaWYgKF9NX21hcF9zaXplID4g MiAqIF9fbmV3X251bV9ub2RlcykgewogICAgX19uZXdfbnN0YXJ0ID0gX01fbWFwICsgKF9NX21h cF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKICAgICAgICAgICAgICAgICAgICAgKyAoX19h ZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgaWYgKF9fbmV3X25zdGFydCA8 IF9NX3N0YXJ0Ll9NX25vZGUpCiAgICAgIGNvcHkoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNo Ll9NX25vZGUgKyAxLCBfX25ld19uc3RhcnQpOwogICAgZWxzZQogICAgICBjb3B5X2JhY2t3YXJk KF9NX3N0YXJ0Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSwKICAgICAgICAgICAgICAg ICAgICBfX25ld19uc3RhcnQgKyBfX29sZF9udW1fbm9kZXMpOwogIH0KICBlbHNlIHsKICAgIHNp emVfdHlwZSBfX25ld19tYXBfc2l6ZSA9CiAgICAgIF9NX21hcF9zaXplICsgbWF4KF9NX21hcF9z aXplLCBfX25vZGVzX3RvX2FkZCkgKyAyOwoKICAgIF9NYXBfcG9pbnRlciBfX25ld19tYXAgPSBf TV9hbGxvY2F0ZV9tYXAoX19uZXdfbWFwX3NpemUpOwogICAgX19uZXdfbnN0YXJ0ID0gX19uZXdf bWFwICsgKF9fbmV3X21hcF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKICAgICAgICAgICAg ICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKICAg IGNvcHkoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19uc3Rh cnQpOwogICAgX01fZGVhbGxvY2F0ZV9tYXAoX01fbWFwLCBfTV9tYXBfc2l6ZSk7CgogICAgX01f bWFwID0gX19uZXdfbWFwOwogICAgX01fbWFwX3NpemUgPSBfX25ld19tYXBfc2l6ZTsKICB9Cgog IF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbmV3X25zdGFydCk7CiAgX01fZmluaXNoLl9NX3NldF9u b2RlKF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2RlcyAtIDEpOwp9CgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVx dWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8 X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYm CiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo Y29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29t cGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYg X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkg ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KaW5saW5lIHZvaWQgc3dhcChkZXF1ZTxfVHAsX0FsbG9jPiYgX194LCBkZXF1ZTxfVHAs X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDcxICIvdXNyL2luY2x1ZGUv ZysrLXYzL3N0YWNrIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0YWNr LmgiIDEgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3N0YWNrLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfU2Vx dWVuY2UgPSBkZXF1ZTxfVHA+ID4KY2xhc3Mgc3RhY2s7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNv bnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9T ZXE+CmJvb2wgb3BlcmF0b3I8KGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFj azxfVHAsX1NlcT4mIF9feSk7CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcXVlbmNl PgpjbGFzcyBzdGFjawp7CgogCiAKICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVf dHlwZSBfU2VxdWVuY2VfdmFsdWVfdHlwZTsKICA7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBj bGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBzdGFjazxfVHAxLCBf U2VxMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXEx PiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfU2VxMT4KICBmcmllbmQgYm9vbCBv cGVyYXRvcjwgKGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdGFjazxfVHAxLCBfU2VxMT4mKTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgX1NlcXVlbmNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf U2VxdWVuY2U6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiBfU2VxdWVuY2UgY29udGFp bmVyX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rf cmVmZXJlbmNlOwpwcm90ZWN0ZWQ6CiAgX1NlcXVlbmNlIGM7CnB1YmxpYzoKICBzdGFjaygpIDog YygpIHt9CiAgZXhwbGljaXQgc3RhY2soY29uc3QgX1NlcXVlbmNlJiBfX3MpIDogYyhfX3MpIHt9 CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBjLmVtcHR5KCk7IH0KICBzaXplX3R5cGUg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgcmVmZXJlbmNlIHRvcCgpIHsgcmV0 dXJuIGMuYmFjaygpOyB9CiAgY29uc3RfcmVmZXJlbmNlIHRvcCgpIGNvbnN0IHsgcmV0dXJuIGMu YmFjaygpOyB9CiAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyBjLnB1c2hfYmFj ayhfX3gpOyB9CiAgdm9pZCBwb3AoKSB7IGMucG9wX2JhY2soKTsgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj09KGNvbnN0IHN0YWNrPF9UcCxfU2Vx PiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiBfX3guYyA9PSBf X3kuYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcjwo Y29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7 CiAgcmV0dXJuIF9feC5jIDwgX195LmM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9T ZXE+CmJvb2wgb3BlcmF0b3IhPShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3Rh Y2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj4oY29uc3Qgc3RhY2s8X1RwLF9T ZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuIF9feSA8IF9f eDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcjw9KGNv bnN0IHN0YWNrPF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewog IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9TZXE+ CmJvb2wgb3BlcmF0b3I+PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8 X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp9CiMgNzIgIi91c3Iv aW5jbHVkZS9nKystdjMvc3RhY2siIDIgMwojIDUgInN0ZGN4eC9sb2NhbHN0YWNrLmgiIDIKCgoK CgpuYW1lc3BhY2UgbG9jYWwKICAgIHsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKICAgICAg ICAgICAgICAgIHR5cGVuYW1lIEFMTE9DPXRoZWFwYWxsb2NhdG9yPFQ+ID4KICAgIGNsYXNzIHN0 YWNrIDogcHVibGljIHN0ZDo6c3RhY2s8VCxBTExPQz4KICAgICAgICB7CiAgICAgICAgfTsKCgoK ICAgIH07CiMgNiAiZGVsYW4uaCIgMgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgpfSW5w dXRJdGVyIG5lYXJlc3Rwb2ludChfSW5wdXRJdGVyIGZpcnN0LCBfSW5wdXRJdGVyIGxhc3QsaW50 IHRhcmdldHgsaW50IHRhcmdldHkpCiAgICAgICAgewogICAgICAgIF9JbnB1dEl0ZXIgcj1sYXN0 OwogICAgICAgIHVuc2lnbmVkIGludCBtZD0weEZGRkZGRkZGOwogICAgICAgIGZvciAoX0lucHV0 SXRlciBpPWZpcnN0O2khPWxhc3Q7aSsrKQogICAgICAgICAgICAgICAgewogICAgICAgIHVuc2ln bmVkIGludCBkPWktPmRpc3QyKHRhcmdldHgsdGFyZ2V0eSk7CiAgICAgICAgICAgICAgICBpZiAo ZDxtZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBt ZD1kOwogICAgICAgICAgICAgICAgICAgICAgICByPWk7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICByZXR1cm4gcjsKICAgICAgICB9CgpzdHJ1Y3Qg dHRyaWFuZ2xlCiAgICAgICAgewogICAgICAgIHNob3J0IG5leHQ7CiAgICAgICAgc2hvcnQgdjE7 CiAgICAgICAgc2hvcnQgdjI7CiAgICAgICAgc2hvcnQgdjM7CiAgICAgICAgfTsKCnN0cnVjdCB0 dHJpZ3JvdXAKICAgICAgICB7CiAgICAgICAgc2hvcnQgbHRyZWU7CiAgICAgICAgc2hvcnQgcnRy ZWU7CiAgICAgICAgc2hvcnQgc3BsaXR4bDsKICAgICAgICBzaG9ydCBzcGxpdHhyOwogICAgICAg IH07CgpzdHJ1Y3QgdHRyaQogICAgICAgIHsKICAgICAgICB1bmlvbgogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgdHRyaWFuZ2xlIHQ7CiAgICAgICAgICAgICAgICB0dHJpZ3JvdXAg dGc7CiAgICAgICAgICAgICAgICB9OwogICAgICAgIGJvb2wgcmVhbHRyaWFuZ2xlKCkgY29uc3Qg e3JldHVybiB0Lm5leHQ+PTA7fTsKICAgICAgICBzaG9ydCBuZXh0aW5jaGFpbigpIGNvbnN0IHty ZXR1cm4gKHQubmV4dD09MHg3RkZGPy0xOnQubmV4dCk7fTsKICAgICAgICBzaG9ydCBsZWZ0dHJl ZSgpIGNvbnN0IHtyZXR1cm4gKHRnLmx0cmVlPT0tMT90Zy5sdHJlZToodGcubHRyZWUgJiAweDdG RkYpKTt9OwogICAgICAgIHNob3J0IHJpZ2h0dHJlZSgpIGNvbnN0IHtyZXR1cm4gKHRnLnJ0cmVl PT0tMT90Zy5ydHJlZToodGcucnRyZWUgJiAweDdGRkYpKTt9OwogICAgICAgIHZvaWQgc2V0bmV4 dChzaG9ydCBuKSB7dC5uZXh0PShuPT0tMSk/MHg3RkZGOm47fTsKICAgICAgICB2b2lkIHNldGxl ZnQoc2hvcnQgbikge3RnLmx0cmVlPW58MHg4MDAwO307CiAgICAgICAgdm9pZCBzZXRyaWdodChz aG9ydCBuKSB7dGcucnRyZWU9bnwweDgwMDA7fTsKICAgICAgICB9OwoKCmludCBoYWxmc3BhY2Uo c2hvcnQgYXgsc2hvcnQgYXksc2hvcnQgYngsc2hvcnQgYnksc2hvcnQgdHgsc2hvcnQgdHkpOwpi b29sIGludHJpYW5nbGUoc2hvcnQgYXgsc2hvcnQgYXksc2hvcnQgYngsc2hvcnQgYnksc2hvcnQg Y3gsc2hvcnQgY3ksc2hvcnQgdHgsc2hvcnQgdHksaW50ICpqb3V0LGludCAqa291dCk7CmludCBz d2FwZGlhZyhzaG9ydCB4MSxzaG9ydCB5MSxzaG9ydCB4MixzaG9ydCB5MixzaG9ydCB4MyxzaG9y dCB5MyxzaG9ydCB4NCxzaG9ydCB5NCk7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBj bGFzcyB0dHJpYW5ndWxhdGlvbgogICAgICAgIHsKICAgIHByaXZhdGU6CiAgICAgICAgWFlDT0xM RUNUIGNvbnN0ICZwb2ludHM7CgogICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3Rvcjx0dHJpPiB0 cmlzdHlwZTsKICAgICAgICB0cmlzdHlwZSB0cmlzOwogICAgICAgIHNob3J0IGZyZWV0cmlsaXN0 OwoKICAgICAgICAgICAgICAgIHR5cGVkZWYgbG9jYWw6OnZlY3RvcjxzaG9ydD4gY29udmh1bGx0 eXBlOwogICAgICAgIGNvbnZodWxsdHlwZSBjb252aHVsbDsKCiAgICAgICAgaW50IGhlYWR0cmk7 CgogICAgICAgIGJvb2wgdHJpYW5ndWxhdGVwZW5kaW5nOwogICAgICAgICAgICAgICAgdm9pZCB0 cmlhbmd1bGF0ZSgpOwoKICAgICAgICBib29sIGlzbGVmdHRhbmdlbnQoc2hvcnQgbG93LHNob3J0 IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpOwogICAgICAgIGJvb2wgaXNyaWdodHRh bmdlbnQoc2hvcnQgbG93LHNob3J0IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpOwog ICAgICAgIGludCBmaW5kdHJpKHNob3J0IHRuLHNob3J0IGEsc2hvcnQgYixzaG9ydCAqb3RoZXJw b2ludCxzaG9ydCAqcHJldnRyaSk7CiAgICAgICAgaW5saW5lIHZvaWQgZGVsYW5kYnVpbGRtZXJn ZSgKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHJpYW5nbGVzb25sZWZ0LAogICAgICAg ICAgICAgICAgICAgICAgICBzaG9ydCB0cmlhbmdsZXNvbnJpZ2h0LAogICAgICAgICAgICAgICAg ICAgICAgICBzaG9ydCAqdHJpb3V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBjaDEs CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNoMiwKICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBidWlsZGZvcnJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGMxY29s aW5lYXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYzJjb2xpbmVhciwKICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCAqcmVzdWx0Y29saW5lYXIsCiAgICAgICAgICAgICAgICAgICAg ICAgIHNob3J0ICpsZWRnZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpyZWRnZXEp OwogICAgICAgIHNob3J0IGFsbG9jdHJpKCk7CiAgICAgICAgdm9pZCBkZWx0cmkoc2hvcnQgZGVs LHNob3J0ICZoZWFkcmVmLHNob3J0IHByZXZ0cmkpOwogICAgcHVibGljOgoKICAgICAgICAgICAg ICAgIHR0cmlhbmd1bGF0aW9uKFhZQ09MTEVDVCBjb25zdCAmeHkpOwogICAgICAgIHZvaWQgaW52 YWxpZGF0ZSgpIHt0cmlhbmd1bGF0ZXBlbmRpbmc9dHJ1ZTt9CgogICAgICAgICAgICAgICAgaW50 IGZpbmRpbnRyaShzaG9ydCB4LHNob3J0IHksaW50ICpqb3V0LGludCAqa291dCkgY29uc3Q7CiAg ICAgICAgICAgICAgICBpbnQgdHJpYW5nbGVpbnRlcnBvbGF0ZShpbnQgdGFyZ2V0eCxpbnQgdGFy Z2V0eSxib29sICpvaykgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIHRyaWFuZ2xlcG9pbnRz KCBpbnQgdGFyZ2V0eCxpbnQgdGFyZ2V0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICppLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICppd2VpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmp3ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqa3dlaWdodAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKSBjb25zdDsKCiAgICAgICAgICAgICAgICBjbGFzcyB0cmlh bmdsZWl0ZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHJpYW5ndWxh dGlvbiBjb25zdCAmbzsKICAgICAgICAgICAgICAgIGxvY2FsOjpzdGFjazxpbnQ+IGRmc3N0YWNr OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJyZW50dHJpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRyaWFuZ2xlaXRlcmF0b3IodHRyaWFuZ3VsYXRpb24gY29uc3QgJmEpOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB0dHJpICZvcGVyYXRvciAqKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBvLnRyaXNbY3VycmVudHRyaV07CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHR0cmkgKm9wZXJhdG9yIC0+KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAmb3BlcmF0b3IgKigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZWl0ZXJhdG9yICZvcGVy YXRvcisrKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlaXRlcmF0 b3IgJm9wZXJhdG9yKysoaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh dG9yKysoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBvaygpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gKGN1cnJlbnR0cmk+PTApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgdHlwZWRl ZiBjb252aHVsbHR5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnZodWxsaXRlcmF0b3I7CiAgICAgICBj b252aHVsbGl0ZXJhdG9yIGJlZ2luaHVsbCgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgcmV0dXJuIGNvbnZodWxsLmJlZ2luKCk7CiAgICAgICAgICAgIH07CgogICAgICAgY29udmh1 bGxpdGVyYXRvciBlbmRodWxsKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1 cm4gY29udmh1bGwuZW5kKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCnRlbXBsYXRlIDxj bGFzcyBYWUNPTExFQ1Q+IGJvb2wgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjppc2xlZnR0 YW5nZW50KHNob3J0IGxvdyxzaG9ydCBoaWdoLHNob3J0IGN1cnIsc2hvcnQgY3VycmZpeGVkKQoK ICAgICAgICB7CiAgICAgICAgc2hvcnQgZng9cG9pbnRzW2NvbnZodWxsW2N1cnJmaXhlZF1dLng7 CiAgICAgICAgc2hvcnQgZnk9cG9pbnRzW2NvbnZodWxsW2N1cnJmaXhlZF1dLnk7CgogICAgICAg IHNob3J0IG5wPWN1cnIrMTsKICAgICAgICBzaG9ydCBwcD1jdXJyLTE7CiAgICAgICAgaWYgKG5w Pj1oaWdoKQogICAgICAgICAgICAgICAgbnA9bG93OwogICAgICAgIGlmIChwcDxsb3cpCiAgICAg ICAgICAgICAgICBwcD1oaWdoLTE7CgogICAgICAgIHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtj dXJyXV0ueDsKICAgICAgICBzaG9ydCBjeT1wb2ludHNbY29udmh1bGxbY3Vycl1dLnk7CgogICAg ICAgIHNob3J0IHB4PXBvaW50c1tjb252aHVsbFtwcF1dLng7CiAgICAgICAgc2hvcnQgcHk9cG9p bnRzW2NvbnZodWxsW3BwXV0ueTsKICAgICAgICBzaG9ydCBoc3A9aGFsZnNwYWNlKGZ4LGZ5LGN4 LGN5LHB4LHB5KTsKCiAgICAgICAgc2hvcnQgbng9cG9pbnRzW2NvbnZodWxsW25wXV0ueDsKICAg ICAgICBzaG9ydCBueT1wb2ludHNbY29udmh1bGxbbnBdXS55OwogICAgICAgIHNob3J0IGhzbj1o YWxmc3BhY2UoZngsZnksY3gsY3ksbngsbnkpOwoKICAgICAgICBpZiAoaHNuPT0tMSAmJiBoc3A8 PTApCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBlbHNlIGlmIChoc248PTAg JiYgaHNwPT0tMSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlD T0xMRUNUPiBib29sIHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+IDo6aXNyaWdodHRhbmdlbnQo c2hvcnQgbG93LHNob3J0IGhpZ2gsc2hvcnQgY3VycixzaG9ydCBjdXJyZml4ZWQpCgogICAgICAg IHsKICAgICAgICBzaG9ydCBmeD1wb2ludHNbY29udmh1bGxbY3VycmZpeGVkXV0ueDsKICAgICAg ICBzaG9ydCBmeT1wb2ludHNbY29udmh1bGxbY3VycmZpeGVkXV0ueTsKCiAgICAgICAgc2hvcnQg bnA9Y3VycisxOwogICAgICAgIHNob3J0IHBwPWN1cnItMTsKICAgICAgICBpZiAobnA+PWhpZ2gp CiAgICAgICAgICAgICAgICBucD1sb3c7CiAgICAgICAgaWYgKHBwPGxvdykKICAgICAgICAgICAg ICAgIHBwPWhpZ2gtMTsKCiAgICAgICAgc2hvcnQgY3g9cG9pbnRzW2NvbnZodWxsW2N1cnJdXS54 OwogICAgICAgIHNob3J0IGN5PXBvaW50c1tjb252aHVsbFtjdXJyXV0ueTsKCiAgICAgICAgc2hv cnQgcHg9cG9pbnRzW2NvbnZodWxsW3BwXV0ueDsKICAgICAgICBzaG9ydCBweT1wb2ludHNbY29u dmh1bGxbcHBdXS55OwogICAgICAgIHNob3J0IGhzcD1oYWxmc3BhY2UoZngsZnksY3gsY3kscHgs cHkpOwoKICAgICAgICBzaG9ydCBueD1wb2ludHNbY29udmh1bGxbbnBdXS54OwogICAgICAgIHNo b3J0IG55PXBvaW50c1tjb252aHVsbFtucF1dLnk7CiAgICAgICAgc2hvcnQgaHNuPWhhbGZzcGFj ZShmeCxmeSxjeCxjeSxueCxueSk7CgogICAgICAgIGlmIChoc249PTEgJiYgaHNwPj0wKQogICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgZWxzZSBpZiAoaHNuPj0wICYmIGhzcD09 MSkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBp bnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjpmaW5kdHJpKHNob3J0IHRuLHNob3J0IGEs c2hvcnQgYixzaG9ydCAqb3RoZXJwb2ludCxzaG9ydCAqcHJldnRyaSkKICAgICAgICB7CiAgICAg ICAgc2hvcnQgdD10bjsKICAgICAgICAqcHJldnRyaT0tMTsKCiAgICAgICAgc2hvcnQgeDE9cG9p bnRzW2FdLng7CiAgICAgICAgc2hvcnQgeDI9cG9pbnRzW2JdLng7CiAgICAgICAgd2hpbGUgKHQ+ PTApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgd2hpbGUgKHRyaXNbdF0ucmVh bHRyaWFuZ2xlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHRyaXNbdF0udC52MT09YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyaXNbdF0udC52Mj09YikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpvdGhlcnBvaW50PXRyaXNbdF0udC52MzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHRyaXNbdF0udC52Mz09YikKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpv dGhlcnBvaW50PXRyaXNbdF0udC52MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAodHJpc1t0XS50LnYyPT1hKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpc1t0XS50LnYxPT1i KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm90aGVycG9pbnQ9dHJpc1t0XS50LnYzOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZiAodHJpc1t0XS50LnYzPT1iKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Km90aGVycG9pbnQ9dHJpc1t0XS50LnYxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICh0cmlzW3RdLnQudjM9PWEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmlzW3RdLnQudjE9 PWIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3RoZXJwb2ludD10cmlzW3RdLnQudjI7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmICh0cmlzW3RdLnQudjI9PWIpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqb3RoZXJwb2ludD10cmlzW3RdLnQudjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgICpwcmV2dHJpPXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHQ9dHJpc1t0XS5uZXh0 aW5jaGFpbigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodDwwKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK CiAgICAgICAgICAgICAgICBpZiAoeDE8PXRyaXNbdF0udGcuc3BsaXR4bCAmJiB4Mjw9dHJpc1t0 XS50Zy5zcGxpdHhsKQogICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAg ICAgICAgICAqcHJldnRyaT10OwogICAgICAgICAgICAgICAgICAgICAgICB0PXRyaXNbdF0ubGVm dHRyZWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBp ZiAoeDE+PXRyaXNbdF0udGcuc3BsaXR4ciAmJiB4Mj49dHJpc1t0XS50Zy5zcGxpdHhyKQogICAg ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcHJldnRyaT10 OwogICAgICAgICAgICAgICAgICAgICAgICB0PXRyaXNbdF0ucmlnaHR0cmVlKCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICAg IH0KCnRlbXBsYXRlIDxjbGFzcyBYWUNPTExFQ1Q+IHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+ Ojp0dHJpYW5ndWxhdGlvbihYWUNPTExFQ1QgY29uc3QgJnh5KQogICAgOgogICAgcG9pbnRzKHh5 KSwKICAgIHRyaWFuZ3VsYXRlcGVuZGluZyh0cnVlKQogICAgewogICAgfQoKdGVtcGxhdGUgPGNs YXNzIFhZQ09MTEVDVD4gaW50IHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+Ojp0dHJpYW5ndWxh dGlvbjo6ZmluZGludHJpKHNob3J0IHgsc2hvcnQgeSxpbnQgKmpvdXQsaW50ICprb3V0KSBjb25z dAogICAgICAgIHsKICAgIGlmICh0cmlhbmd1bGF0ZXBlbmRpbmcpCiAgICAgICAgY29uc3RfY2Fz dDx0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPiAqPih0aGlzKS0+dHJpYW5ndWxhdGUoKTsKCiAg ICAgICAgc2hvcnQgdD1oZWFkdHJpOwoKICAgICAgICB3aGlsZSAodD49MCkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHdoaWxlICh0cmlzW3RdLnJlYWx0cmlhbmdsZSgpKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Pj1wb2lu dHNbdHJpc1t0XS50LnYxXS54ICYmIHg8PXBvaW50c1t0cmlzW3RdLnQudjNdLngpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoeT49cG9pbnRzW3RyaXNbdF0udC52MV0ueSB8fCB5Pj1wb2ludHNbdHJpc1t0XS50LnYy XS55IHx8IHk+PXBvaW50c1t0cmlzW3RdLnQudjNdLnkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHk8PXBvaW50c1t0cmlzW3RdLnQudjFdLnkgfHwgeTw9cG9pbnRzW3RyaXNbdF0udC52 Ml0ueSB8fCB5PD1wb2ludHNbdHJpc1t0XS50LnYzXS55KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaW50cmlhbmdsZSggcG9pbnRzW3RyaXNbdF0udC52MV0u eCxwb2ludHNbdHJpc1t0XS50LnYxXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3RyaXNbdF0udC52Ml0ueCxw b2ludHNbdHJpc1t0XS50LnYyXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3RyaXNbdF0udC52M10ueCxwb2lu dHNbdHJpc1t0XS50LnYzXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeCx5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam91dCxrb3V0KSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdD10cmlzW3RdLm5leHRpbmNo YWluKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0PDApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgaWYgKHg8PXRyaXNbdF0udGcuc3BsaXR4bCkKICAgICAgICAgICAgICAgICAg ICAgICAgdD10cmlzW3RdLmxlZnR0cmVlKCk7CiAgICAgICAgICAgICAgICBlbHNlIGlmICh4Pj10 cmlzW3RdLnRnLnNwbGl0eHIpCiAgICAgICAgICAgICAgICAgICAgICAgIHQ9dHJpc1t0XS5yaWdo dHRyZWUoKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgICB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiBpbnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46 OnRyaWFuZ2xlaW50ZXJwb2xhdGUoaW50IHRhcmdldHgsaW50IHRhcmdldHksYm9vbCAqb2spIGNv bnN0CiAgICAgICAgewogICAgaWYgKHRyaWFuZ3VsYXRlcGVuZGluZykKICAgICAgICBjb25zdF9j YXN0PHR0cmlhbmd1bGF0aW9uIDxYWUNPTExFQ1Q+ICo+KHRoaXMpLT50cmlhbmd1bGF0ZSgpOwoK ICAgICAgICBpbnQgam91dCxrb3V0OwogICAgICAgIGludCB0PWZpbmRpbnRyaSh0YXJnZXR4LHRh cmdldHksJmpvdXQsJmtvdXQpOwogICAgICAgIGlmICh0IT0tMSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICpvaz10cnVlOwogICAgICAgICAgICAgICAgaW50IGlvdXQ9NjU1MzYt am91dC1rb3V0OwogICAgICAgICAgICAgICAgcmV0dXJuIGlzY2FsZShwb2ludHNbdHJpc1t0XS50 LnYxXS56LGlvdXQsNjU1MzYpKwogICAgICAgICAgICAgICAgICAgICAgICBpc2NhbGUocG9pbnRz W3RyaXNbdF0udC52Ml0ueixqb3V0LDY1NTM2KSsKICAgICAgICAgICAgICAgICAgICAgICAgaXNj YWxlKHBvaW50c1t0cmlzW3RdLnQudjNdLnosa291dCw2NTUzNik7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKm9rPWZhbHNlOwogICAgICAgIH0KCnRlbXBs YXRlIDxjbGFzcyBYWUNPTExFQ1Q+IGJvb2wgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gOjp0 cmlhbmdsZXBvaW50cyggaW50IHRhcmdldHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXR5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50ICprLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml3ZWlnaHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqandlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICprd2VpZ2h0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg Y29uc3QKICAgICAgICB7CiAgICBpZiAodHJpYW5ndWxhdGVwZW5kaW5nKQogICAgICAgIGNvbnN0 X2Nhc3Q8dHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD4gKj4odGhpcyktPnRyaWFuZ3VsYXRlKCk7 CgogICAgICAgIGludCBqb3V0LGtvdXQ7CiAgICAgICAgaW50IHQ9ZmluZGludHJpKHRhcmdldHgs dGFyZ2V0eSwmam91dCwma291dCk7CiAgICAgICAgaWYgKHQhPS0xKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgKmk9dHJpc1t0XS50LnYxOwogICAgICAgICAgICAgICAgKml3ZWln aHQ9NjU1MzYtam91dC1rb3V0OwogICAgICAgICAgICAgICAgKmo9dHJpc1t0XS50LnYyOwogICAg ICAgICAgICAgICAgKmp3ZWlnaHQ9am91dDsKICAgICAgICAgICAgICAgICprPXRyaXNbdF0udC52 MzsKICAgICAgICAgICAgICAgICprd2VpZ2h0PWtvdXQ7CiAgICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgICAgfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFhZQ09MTEVDVD4gc2hv cnQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OmFsbG9jdHJpKCkKICAgICAgICB7CiAgICAg ICAgaWYgKGZyZWV0cmlsaXN0PT0tMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGludCBuPXRyaXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgdHRyaSBkdW1teXRyaTsKICAgICAg ICAgICAgICAgIHRyaXMucHVzaF9iYWNrKGR1bW15dHJpKTsKICAgICAgICAgICAgICAgIHJldHVy biBuOwogICAgICAgICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIHNob3J0IHI9ZnJlZXRyaWxpc3Q7CiAgICAgICAgICAgICAgICBmcmVldHJp bGlzdD10cmlzW2ZyZWV0cmlsaXN0XS5uZXh0aW5jaGFpbigpOwogICAgICAgICAgICAgICAgcmV0 dXJuIHI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M TEVDVD4gdm9pZCB0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPjo6ZGVsdHJpKHNob3J0IGRlbCxz aG9ydCAmaGVhZHJlZixzaG9ydCBwcmV2dHJpKQogICAgICAgIHsKICAgICAgICBpZiAoaGVhZHJl Zj09ZGVsKQogICAgICAgICAgICAgICAgaGVhZHJlZj10cmlzW2RlbF0ubmV4dGluY2hhaW4oKTsK ICAgICAgICBlbHNlIGlmICh0cmlzW3ByZXZ0cmldLnJlYWx0cmlhbmdsZSgpKQogICAgICAgICAg ICAgICAgdHJpc1twcmV2dHJpXS5zZXRuZXh0KHRyaXNbZGVsXS5uZXh0aW5jaGFpbigpKTsKICAg ICAgICBlbHNlIGlmICh0cmlzW3ByZXZ0cmldLmxlZnR0cmVlKCk9PWRlbCkKICAgICAgICAgICAg ICAgIHRyaXNbcHJldnRyaV0uc2V0bGVmdCh0cmlzW2RlbF0ubmV4dGluY2hhaW4oKSk7CiAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgdHJpc1twcmV2dHJpXS5zZXRyaWdodCh0cmlzW2RlbF0u bmV4dGluY2hhaW4oKSk7CgogICAgICAgIHRyaXNbZGVsXS5zZXRuZXh0KGZyZWV0cmlsaXN0KTsK ICAgICAgICBmcmVldHJpbGlzdD1kZWw7CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M TEVDVD4gdm9pZCB0dHJpYW5ndWxhdGlvbiA8WFlDT0xMRUNUPjo6ZGVsYW5kYnVpbGRtZXJnZSgK ICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHJpYW5nbGVzb25sZWZ0LAogICAgICAgICAg ICAgICAgICAgICAgICBzaG9ydCB0cmlhbmdsZXNvbnJpZ2h0LAogICAgICAgICAgICAgICAgICAg ICAgICBzaG9ydCAqdHJpb3V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBjaDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNoMiwKICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBidWlsZGZvcnJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGMxY29saW5l YXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYzJjb2xpbmVhciwKICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCAqcmVzdWx0Y29saW5lYXIsCiAgICAgICAgICAgICAgICAgICAgICAg IHNob3J0ICpsZWRnZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpyZWRnZXEpCiAg ICAgICAgewogICAgICAgIGludCBjaG49Y29udmh1bGwuc2l6ZSgpOwoKICAgICAgICBpZiAoYzFj b2xpbmVhciAmJiBjMmNvbGluZWFyICYmIGhhbGZzcGFjZShwb2ludHNbY29udmh1bGxbY2gxXV0u eCxwb2ludHNbY29udmh1bGxbY2gxXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcG9pbnRzW2NvbnZodWxsW2NoMi0xXV0ueCxwb2ludHNbY29udmh1 bGxbY2gyLTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwb2ludHNbY29udmh1bGxbY2gyXV0ueCxwb2ludHNbY29udmh1bGxbY2gyXV0ueSk9PTAg JiYKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbGZz cGFjZShwb2ludHNbY29udmh1bGxbY2gxXV0ueCxwb2ludHNbY29udmh1bGxbY2gxXV0ueSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2NvbnZo dWxsW2NoMi0xXV0ueCxwb2ludHNbY29udmh1bGxbY2gyLTFdXS55LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbY29udmh1bGwuYmFjaygpXS54 LHBvaW50c1tjb252aHVsbC5iYWNrKCldLnkpPT0wICkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICpyZXN1bHRjb2xpbmVhcj10cnVlOwoKCgogICAgICAgICAgICAgICAgc2hvcnQg Y3BsLGNwcjsKICAgICAgICAgICAgICAgIGlmIChidWlsZGZvcnJpZ2h0KQogICAgICAgICAgICAg ICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBjcGw9Y2gyLTE7CiAgICAgICAg ICAgICAgICAgICAgICAgIHdoaWxlIChjcGw+PWNoMSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbY3BsLS1dKTsKICAgICAgICAgICAg ICAgICAgICAgICAgY3ByPWNoMjsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNwcjxj aG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNv bnZodWxsW2NwcisrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGVsc2UKCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg Y3ByPWNobi0xOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3ByPj1jaDIpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2Nw ci0tXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAg ICAgICAgIHdoaWxlIChjcGw8Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtjcGwrK10pOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAqdHJpb3V0PS0xOwogICAgICAgICAgICAgICAgfQogICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICpyZXN1bHRjb2xpbmVhcj1m YWxzZTsKCgogICAgICAgICAgICAgICAgc2hvcnQgY3BsPWNoMTsKICAgICAgICAgICAgICAgIHNo b3J0IGNwcj1jaDI7CgogICAgICAgICAgICAgICAgYm9vbCBsdGw7CiAgICAgICAgICAgICAgICBi b29sIGx0cjsKICAgICAgICAgICAgICAgIGx0bD1pc3JpZ2h0dGFuZ2VudChjaDEsY2gyLGNwbCxj cHIpOwogICAgICAgICAgICAgICAgbHRyPWlzbGVmdHRhbmdlbnQoY2gyLGNobixjcHIsY3BsKTsK ICAgICAgICAgICAgICAgIHdoaWxlICghKGx0bCAmJiBsdHIpKQogICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbHRsKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNwbCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGNwbD09Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGx0bD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0bD1pc3Jp Z2h0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghbHRs KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHI9aXNsZWZ0dGFuZ2VudChjaDIs Y2huLGNwcixjcGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghbHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNwcisrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGNwcj09Y2huKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcj1j aDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0cj10 cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0cj1pc2xlZnR0YW5nZW50KGNoMixj aG4sY3ByLGNwbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFsdHIpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGx0bD1pc3JpZ2h0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgc2hvcnQgbG93ZXJsZWZ0PWNwbDsKICAgICAgICAgICAgICAgIHNo b3J0IGxvd2VycmlnaHQ9Y3ByOwoKICAgICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAg ICAgICBjcHI9Y2gyOwoKICAgICAgICAgICAgICAgIGJvb2wgdXRsOwogICAgICAgICAgICAgICAg Ym9vbCB1dHI7CiAgICAgICAgICAgICAgICB1dGw9aXNsZWZ0dGFuZ2VudChjaDEsY2gyLGNwbCxj cHIpOwogICAgICAgICAgICAgICAgdXRyPWlzcmlnaHR0YW5nZW50KGNoMixjaG4sY3ByLGNwbCk7 CiAgICAgICAgICAgICAgICB3aGlsZSAoISh1dGwgJiYgdXRyKSkKICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0bCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjcGwtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjcGw8Y2gxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjcGw9Y2gyLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY3BsPT1jaDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHV0bD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1dGw9aXNsZWZ0dGFuZ2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdoaWxlICghdXRsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dHI9aXNyaWdo dHRhbmdlbnQoY2gyLGNobixjcHIsY3BsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRyKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNwci0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGNwcjxjaDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNwcj1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChjcHI9PWNoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdXRyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHV0cj1pc3JpZ2h0dGFuZ2VudChjaDIsY2huLGNwcixjcGwpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo aWxlICghdXRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGw9aXNsZWZ0dGFu Z2VudChjaDEsY2gyLGNwbCxjcHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNob3J0IHVwcGVybGVm dD1jcGw7CiAgICAgICAgICAgICAgICBzaG9ydCB1cHBlcnJpZ2h0PWNwcjsKCgoKCgogICAgICAg ICAgICAgICAgc2hvcnQgc3BsaXR4cj1wb2ludHNbY29udmh1bGxbY2gyXV0ueDsKICAgICAgICAg ICAgICAgIHNob3J0IHNwbGl0eGw9cG9pbnRzW2NvbnZodWxsW2NoMV1dLng7CgoKCiAgICAgICAg ICAgICAgICBpZiAoYnVpbGRmb3JyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAg ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgbGVmdHA9LTE7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRw PWNoMi0xOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGxlZnR4 OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGNwbD1sb3dlcmxlZnQ7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtjcGxdXS54OwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGxlZnRwPT0tMSB8fCBjeDxsZWZ0eCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0eD1jeDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdHA9Y3BsOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoY3BsPT11cHBlcmxlZnQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3BsKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY3BsPT1jaDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNwbD1jaDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBz aG9ydCBscD1sZWZ0cDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb25lOwoKCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdHA9PWxv d2VybGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxs LnB1c2hfYmFjayhjb252aHVsbFtsb3dlcmxlZnRdKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Io aW50IGk9dXBwZXJsZWZ0O2k+PWxvd2VybGVmdDtpLS0pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtpXSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKCFkb25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9i YWNrKGNvbnZodWxsW2xwXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAobHA9PWxvd2VybGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9uZT10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChscD09Y2gxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBscD1jaDItMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bHAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMy Y29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChsb3dlcnJpZ2h0PHVwcGVycmlnaHQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPWxvd2VycmlnaHQ7aTw9dXBw ZXJyaWdodDtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnZodWxsLnB1c2hfYmFjayhjb252aHVsbFtpXSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpbnQgaT1sb3dlcnJpZ2h0O2k+PXVwcGVycmlnaHQ7aS0tKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1 bGxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBycD1sb3dlcnJpZ2h0OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKCFkb25lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVz aF9iYWNrKGNvbnZodWxsW3JwXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocnA9PXVwcGVycmlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvbmU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJwKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAocnA9PWNobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcnA9Y2gyOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjMWNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdHA9PWxvd2Vy bGVmdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT11 cHBlcmxlZnQ7aTxsb3dlcmxlZnQ7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbaV0pOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBscD11cHBlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u ZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobHAhPWxlZnRw KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2xw XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHA9PWNoMSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHA9Y2gyLTE7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwLS07CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCByaWdo dHA9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMmNvbGluZWFyKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0cD1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaG9ydCByaWdodHg7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2hvcnQgY3ByPWxvd2VycmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGN4PXBvaW50c1tjb252aHVsbFtj cHJdXS54OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0 cD09LTEgfHwgY3g+cmlnaHR4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJpZ2h0eD1jeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmlnaHRwPWNwcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNw cj09dXBwZXJyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHIr KzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcHI9PWNobikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ByPWNoMjsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aGlsZSAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHJwPXJpZ2h0cDsKICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBkb25lOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChjMmNvbGluZWFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRwPT1sb3dlcnJpZ2h0KQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxs W2xvd2VycmlnaHRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9dXBwZXJyaWdodDtp Pj1sb3dlcnJpZ2h0O2ktLSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGNvbnZodWxsW2ldKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG9uZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbcnBd KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycD09bG93ZXJy aWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u ZT10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycD09 Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycD1j aG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnAtLTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMxY29saW5lYXIpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChsb3dlcmxlZnQ8dXBwZXJsZWZ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIChpbnQgaT1sb3dlcmxlZnQ7aTw9dXBwZXJsZWZ0O2krKykKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9i YWNrKGNvbnZodWxsW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPWxvd2VybGVm dDtpPj11cHBlcmxlZnQ7aS0tKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbaV0pOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaG9ydCBscD1sb3dlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9u ZT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWRvbmUpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soY29udmh1bGxbbHBdKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChscD09dXBwZXJsZWZ0 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lPXRy dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscCsrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxwPT1jaDIpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwPWNoMTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMyY29saW5lYXIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChyaWdodHA9PWxvd2VycmlnaHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IoaW50IGk9dXBwZXJyaWdodDtpPGxvd2VycmlnaHQ7aSsrKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2so Y29udmh1bGxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycD11cHBlcnJpZ2h0OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvbmU9ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKHJwIT1yaWdodHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVs bC5wdXNoX2JhY2soY29udmh1bGxbcnBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChycD09Y2gyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBycD1jaG4tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcnAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoK CiAgICAgICAgICAgICAgICBzaG9ydCBsZWRnZWNvdW50PTA7CgogICAgICAgICAgICAgICAgaWYg KGMxY29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGxvd2VybGVmdDx1cHBlcmxlZnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIChpbnQgaT11cHBlcmxlZnQ7aT49bG93ZXJsZWZ0O2ktLSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50KytdPWNvbnZodWxs W2ldOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIChpbnQgaT11cHBlcmxlZnQ7aTw9bG93ZXJsZWZ0O2krKykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50KytdPWNvbnZo dWxsW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgY3Bp bD11cHBlcmxlZnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVts ZWRnZWNvdW50KytdPWNvbnZodWxsW2NwaWxdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNwaWwrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BpbD09Y2gy KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BpbD1jaDE7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAoY3BpbCE9bG93ZXJsZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VxW2xlZGdl Y291bnQrK109Y29udmh1bGxbbG93ZXJsZWZ0XTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK CiAgICAgICAgICAgICAgICBzaG9ydCByZWRnZWNvdW50PTA7CgogICAgICAgICAgICAgICAgaWYg KGMyY29saW5lYXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGxvd2VycmlnaHQ8dXBwZXJyaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgKGludCBpPXVwcGVycmlnaHQ7aT49bG93ZXJyaWdodDtpLS0pCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZXFbcmVkZ2Vjb3VudCsrXT1jb252 aHVsbFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaW50IGk9dXBwZXJyaWdodDtpPD1sb3dlcnJpZ2h0O2krKykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGdlcVtyZWRnZWNvdW50Kytd PWNvbnZodWxsW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hv cnQgY3Bpcj11cHBlcnJpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWRnZXFbcmVkZ2Vjb3VudCsrXT1jb252aHVsbFtjcGlyXTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjcGlyKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNw aXI9PWNobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwaXI9Y2gy OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKGNwaXIhPWxvd2VycmlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICByZWRn ZXFbcmVkZ2Vjb3VudCsrXT1jb252aHVsbFtsb3dlcnJpZ2h0XTsKICAgICAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIHNob3J0IGZpcnN0dHJpYnVpbGQ9LTE7CiAgICAgICAg ICAgICAgICBzaG9ydCBsYXN0dHJpYnVpbGQ9LTE7CgogICAgICAgICAgICAgICAgc2hvcnQgdDE9 dHJpYW5nbGVzb25sZWZ0OwogICAgICAgICAgICAgICAgc2hvcnQgdDI9dHJpYW5nbGVzb25yaWdo dDsKCgogICAgICAgICAgICAgICAgd2hpbGUgKGxlZGdlY291bnQ+PTIgfHwgcmVkZ2Vjb3VudD49 MikKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGxlZGdlY291bnQ+PTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgb3RoZXJwb2ludDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHByZXZ0cmk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVmdHRyaT1maW5kdHJpKHQxLGxlZGdlcVts ZWRnZWNvdW50LTFdLGxlZGdlcVtsZWRnZWNvdW50LTJdLCZvdGhlcnBvaW50LCZwcmV2dHJpKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0dHJpPDApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzd2FwZGlhZyggcG9pbnRz W2xlZGdlcVtsZWRnZWNvdW50LTFdXS54LHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw b2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMV1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFd XS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291 bnQtMl1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcG9pbnRzW290aGVycG9pbnRdLngscG9pbnRzW290aGVycG9pbnRdLnkgKT09LTEp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdHJpKGxlZnR0cmks dDEscHJldnRyaSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsZWRnZXFbbGVkZ2Vjb3VudF09bGVkZ2VxW2xlZGdlY291bnQtMV07CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlcVtsZWRnZWNvdW50LTFd PW90aGVycG9pbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxlZGdlY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmKHJlZGdlY291bnQ+PTIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2hpbGUoMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBvdGhlcnBvaW50OwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgcHJldnRyaTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByaWdodHRyaT1maW5kdHJpKHQy LHJlZGdlcVtyZWRnZWNvdW50LTFdLHJlZGdlcVtyZWRnZWNvdW50LTJdLCZvdGhlcnBvaW50LCZw cmV2dHJpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo dHRyaTwwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dhcGRp YWcoIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291 bnQtMV1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVk Z2Vjb3VudC0xXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwb2ludHNbb3RoZXJwb2ludF0ueCxwb2ludHNbb3RoZXJwb2ludF0ueSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw b2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTJd XS55ICk9PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdHJp KHJpZ2h0dHJpLHQyLHByZXZ0cmkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVkZ2VxW3JlZGdlY291bnRdPXJlZGdlcVtyZWRnZWNvdW50LTFdOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZXFbcmVk Z2Vjb3VudC0xXT1vdGhlcnBvaW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWRnZWNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICBib29sIGxlZnR0b3JpZ2h0OwoKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCBsZWRnZWNvdW50PDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm dHRvcmlnaHQ9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVkZ2Vjb3Vu dDwyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0b3JpZ2h0PWZhbHNlOwog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcj0gc3dhcGRpYWcoIHBv aW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1d LnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3Vu dC0xXV0ueSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb2ludHNbcmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRn ZWNvdW50LTJdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2Vx W2xlZGdlY291bnQtMl1dLnkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo c3I9PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0dG9yaWdo dD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNyPT0tMSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0b3JpZ2h0PWZhbHNl OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoaGFsZnNwYWNlKCBwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLngscG9p bnRzW2xlZGdlcVtsZWRnZWNvdW50LTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3JlZGdlcVtyZWRnZWNv dW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1ts ZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMl1dLnkgKT09 LTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnR0 b3JpZ2h0PWZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0dG9y aWdodD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChsZWZ0dG9yaWdodCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYWxmc3BhY2UoIHBvaW50c1tsZWRnZXFbbGVk Z2Vjb3VudC0xXV0ueCxwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLnksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3JlZGdl cVtyZWRnZWNvdW50LTFdXS54LHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNb cmVkZ2VxW3JlZGdlY291bnQtMl1dLngscG9pbnRzW3JlZGdlcVtyZWRnZWNvdW50LTJdXS55ICkh PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB0aGlzdHJpYnVpbGQ9YWxsb2N0cmko KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0dHJpYnVp bGQ8MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly c3R0cmlidWlsZD10aGlzdHJpYnVpbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRyaXNbbGFzdHRyaWJ1aWxkXS5zZXRuZXh0KHRoaXN0cmlidWlsZCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0dHJpYnVpbGQ9dGhpc3RyaWJ1aWxkOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXNbdGhpc3RyaWJ1aWxk XS5zZXRuZXh0KC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy aXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTFdOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGdlcVtyZWRnZWNvdW50LTJdPD1yZWRn ZXFbcmVkZ2Vjb3VudC0xXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0cmlzW3RoaXN0cmlidWlsZF0udC52Mj1yZWRnZXFbcmVkZ2Vjb3VudC0yXTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0aGlzdHJpYnVpbGRd LnQudjM9cmVkZ2VxW3JlZGdlY291bnQtMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3Ro aXN0cmlidWlsZF0udC52Mj1yZWRnZXFbcmVkZ2Vjb3VudC0xXTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0aGlzdHJpYnVpbGRdLnQudjM9cmVk Z2VxW3JlZGdlY291bnQtMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRnZWNvdW50LS07CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaGFsZnNwYWNlKCBwb2ludHNbbGVkZ2VxW2xlZGdlY291bnQtMV1dLngscG9pbnRzW2xl ZGdlcVtsZWRnZWNvdW50LTFdXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tyZWRnZXFbcmVkZ2Vjb3VudC0xXV0ueCxwb2lu dHNbcmVkZ2VxW3JlZGdlY291bnQtMV1dLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2xlZGdlcVtsZWRnZWNvdW50LTJdXS54 LHBvaW50c1tsZWRnZXFbbGVkZ2Vjb3VudC0yXV0ueSApIT0wKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2hvcnQgdGhpc3RyaWJ1aWxkPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAobGFzdHRyaWJ1aWxkPDApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0dHJpYnVpbGQ9dGhpc3RyaWJ1aWxk OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW2xhc3R0cmlidWlsZF0u c2V0bmV4dCh0aGlzdHJpYnVpbGQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGFzdHRyaWJ1aWxkPXRoaXN0cmlidWlsZDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmlidWlsZF0uc2V0bmV4dCgtMSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVkZ2VxW2xlZGdlY291bnQtMV08 PWxlZGdlcVtsZWRnZWNvdW50LTJdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRyaXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTFdOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmli dWlsZF0udC52Mj1sZWRnZXFbbGVkZ2Vjb3VudC0yXTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy aXNbdGhpc3RyaWJ1aWxkXS50LnYxPWxlZGdlcVtsZWRnZWNvdW50LTJdOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlzW3RoaXN0cmlidWlsZF0udC52 Mj1sZWRnZXFbbGVkZ2Vjb3VudC0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHJpc1t0aGlzdHJpYnVpbGRdLnQudjM9cmVkZ2VxW3JlZGdlY291bnQtMV07CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVkZ2Vjb3VudC0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0MT49MCB8fCB0Mj49 MCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzaG9y dCB0aGlzdHJpPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0dHJp YnVpbGQ8MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdHRyaWJ1aWxkPXRo aXN0cmk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0cmlzW2xhc3R0cmlidWlsZF0uc2V0bmV4dCh0aGlzdHJpKTsKCiAgICAgICAg ICAgICAgICAgICAgICAgIGxhc3R0cmlidWlsZD10aGlzdHJpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgdHJpc1t0aGlzdHJpXS5zZXRsZWZ0KHQxKTsKICAgICAgICAgICAgICAgICAgICAgICAg dHJpc1t0aGlzdHJpXS5zZXRyaWdodCh0Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaXNb dGhpc3RyaV0udGcuc3BsaXR4bD1zcGxpdHhsOwogICAgICAgICAgICAgICAgICAgICAgICB0cmlz W3RoaXN0cmldLnRnLnNwbGl0eHI9c3BsaXR4cjsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgKnRyaW91dD1maXJzdHRyaWJ1aWxkOwogICAgICAgICAgICAgICAgfQoK CiAgICAgICAgaW50IG49Y29udmh1bGwuc2l6ZSgpLWNobjsKICAgICAgICBmb3IgKGludCBpPTA7 aTxuO2krKykKICAgICAgICAgICAgICAgIGNvbnZodWxsW2NoMStpXT1jb252aHVsbFtjaG4raV07 CiAgICAgICAgY29udmh1bGwucmVzaXplKGNoMStuKTsKCiAgICAgICAgfQoKCnRlbXBsYXRlIDxj bGFzcyBYWUNPTExFQ1Q+IHZvaWQgdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OnRyaWFuZ3Vs YXRlKCkKICAgICAgICB7CiMgMTA1MCAiZGVsYW4uaCIKICAgICAgICBlbnVtIHByb2Nlc3NzdGF0 ZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZG9sZWZ0LAogICAgICAgICAgICAg ICAgZG9yaWdodCwKICAgICAgICAgICAgICAgIGRvbWVyZ2UKICAgICAgICAgICAgICAgIH07Cgog ICAgICAgIHN0cnVjdCBkZWxhbnN0YWNrCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICBwcm9jZXNzc3RhdGUgc3RhdGU7CiAgICAgICAgICAgICAgICBzaG9ydCBmcm9tOwogICAgICAg ICAgICAgICAgc2hvcnQgbjsKCiAgICAgICAgICAgICAgICBzaG9ydCB0MTsKICAgICAgICAgICAg ICAgIHNob3J0IGNoMTsKICAgICAgICAgICAgICAgIHNob3J0IGNoMjsKCiAgICAgICAgICAgICAg ICBib29sIGxjbDsKICAgICAgICAgICAgICAgIGJvb2wgYnVpbGRmb3JyaWdodDsKICAgICAgICAg ICAgICAgIH0gZHN0YWNrWzldOwoKCiAgICAgICAgc2hvcnQgKmxlZGdlcT1uZXcgc2hvcnQgWyhw b2ludHMuc2l6ZSgpKzUpLzJdOwogICAgICAgIHNob3J0ICpyZWRnZXE9bmV3IHNob3J0IFsocG9p bnRzLnNpemUoKSs1KS8yXTsKCiAgICAgICAgY29udmh1bGwuY2xlYXIoKTsKICAgICAgICBjb252 aHVsbC5yZXNlcnZlKHBvaW50cy5zaXplKCkqMik7CiAgICAgICAgdHJpcy5jbGVhcigpOwogICAg ICAgIHRyaXMucmVzZXJ2ZShwb2ludHMuc2l6ZSgpKzIpOwoKICAgICAgICBpbnQgc3RhY2twdHI9 MDsKCiAgICAgICAgc2hvcnQgZnJvbT0wOwogICAgICAgIHNob3J0IG49cG9pbnRzLnNpemUoKTsK ICAgICAgICBib29sIGJ1aWxkZm9ycmlnaHQ7CgogICAgICAgIGludCBzdGF0ZT1kb2xlZnQ7CiAg ICAgICAgc2hvcnQgY2gxLGNoMjsKICAgICAgICBib29sIGxjbDsKICAgICAgICBzaG9ydCB0MTsK CiAgICAgICAgc2hvcnQgdHJpaGVhZDsKICAgICAgICBib29sIGNvbGluZWFyOwoKICAgICAgICBm cmVldHJpbGlzdD0tMTsKICAgIHRyaWFuZ3VsYXRlcGVuZGluZz1mYWxzZTsKCiAgICAgICAgd2hp bGUgKDEpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYgKG4+PTQpCiAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlPT1k b2xlZnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkc3RhY2tbc3RhY2twdHJdLnN0YXRlPWRvcmlnaHQ7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5mcm9tPWZyb207CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5uPW47CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS5idWlsZGZvcnJpZ2h0PWJ1 aWxkZm9ycmlnaHQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGFja1tzdGFj a3B0cl0udDE9LTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNr cHRyXS5jaDE9Y29udmh1bGwuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRzdGFja1tzdGFja3B0cl0uY2gyPS0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRzdGFja1tzdGFja3B0cl0ubGNsPWZhbHNlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdGFja3B0cisrOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9 ZG9sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb209ZnJvbTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuPShuKzEpLzI7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnVpbGRmb3JyaWdodD1mYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZT09ZG9yaWdodCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRz dGFja1tzdGFja3B0cl0uc3RhdGU9ZG9tZXJnZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkc3RhY2tbc3RhY2twdHJdLmZyb209ZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkc3RhY2tbc3RhY2twdHJdLm49bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkc3RhY2tbc3RhY2twdHJdLmJ1aWxkZm9ycmlnaHQ9YnVpbGRmb3JyaWdodDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNrcHRyXS50MT10cmloZWFkOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGFja1tzdGFja3B0cl0uY2gxPWNoMTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RhY2tbc3RhY2twdHJdLmNoMj1jb252 aHVsbC5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0YWNrW3N0YWNr cHRyXS5sY2w9Y29saW5lYXI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr cHRyKys7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZT1kb2xlZnQ7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbT1mcm9tKyhuKzEpLzI7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbj1uLzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnVpbGRmb3JyaWdodD10cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGFuZGJ1aWxkbWVyZ2UoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpaGVhZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dHJpaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2gyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ1aWxkZm9ycmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGNsLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGluZWFyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb2xpbmVhciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWRn ZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVkZ2VxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKG49PTMpCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGE9ZnJvbTsKICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGI9ZnJvbSsxOwogICAgICAgICAgICAgICAgICAgICAgICBp bnQgYz1mcm9tKzI7CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgaHM9aGFsZnNwYWNlKHBv aW50c1thXS54LHBvaW50c1thXS55LHBvaW50c1tiXS54LHBvaW50c1tiXS55LHBvaW50c1tjXS54 LHBvaW50c1tjXS55KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhzIT0wKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaG9ydCB0aGlzdHJpPWFsbG9jdHJpKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHJpc1t0aGlzdHJpXS50LnYxPWE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHJpc1t0aGlzdHJpXS50LnYyPWI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJp c1t0aGlzdHJpXS50LnYzPWM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpc1t0 aGlzdHJpXS5zZXRuZXh0KC0xKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlo ZWFkPXRoaXN0cmk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29saW5lYXI9ZmFs c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbGluZWFyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHJpaGVhZD0tMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVpbGRmb3JyaWdodCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZo dWxsLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHMh PTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYyk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwu cHVzaF9iYWNrKGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dmh1bGwucHVzaF9iYWNrKGIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGMpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChocz09MSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnZodWxsLnB1c2hfYmFjayhhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnZodWxsLnB1c2hfYmFjayhiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb252aHVsbC5wdXNoX2JhY2soYSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlm IChuPT0yKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IGNvbGluZWFyPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWhlYWQ9LTE7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChidWlsZGZvcnJpZ2h0KQoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwu cHVzaF9iYWNrKGZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZodWxs LnB1c2hfYmFjayhmcm9tKzEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNrKGZy b20rMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmh1bGwucHVzaF9iYWNr KGZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAobj09MSkKICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xpbmVhcj10cnVlOwogICAgICAg ICAgICAgICAgICAgICAgICB0cmloZWFkPS0xOwogICAgICAgICAgICAgICAgICAgICAgICBjb252 aHVsbC5wdXNoX2JhY2soZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICBpZiAoc3RhY2twdHI9PTApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgIHN0YWNrcHRyLS07CgogICAgICAgICAgICAgICAgZnJvbT1kc3RhY2tb c3RhY2twdHJdLmZyb207CiAgICAgICAgICAgICAgICBuPWRzdGFja1tzdGFja3B0cl0ubjsKICAg ICAgICAgICAgICAgIGJ1aWxkZm9ycmlnaHQ9ZHN0YWNrW3N0YWNrcHRyXS5idWlsZGZvcnJpZ2h0 OwoKICAgICAgICAgICAgICAgIHN0YXRlPWRzdGFja1tzdGFja3B0cl0uc3RhdGU7CgogICAgICAg ICAgICAgICAgdDE9ZHN0YWNrW3N0YWNrcHRyXS50MTsKICAgICAgICAgICAgICAgIGNoMT1kc3Rh Y2tbc3RhY2twdHJdLmNoMTsKICAgICAgICAgICAgICAgIGNoMj1kc3RhY2tbc3RhY2twdHJdLmNo MjsKICAgICAgICAgICAgICAgIGxjbD1kc3RhY2tbc3RhY2twdHJdLmxjbDsKICAgICAgICAgICAg ICAgIH0KICAgICAgICBoZWFkdHJpPXRyaWhlYWQ7CiAgICAgICAgZGVsZXRlW10gbGVkZ2VxOwog ICAgICAgIGRlbGV0ZVtdIHJlZGdlcTsKICAgICAgICB9CgoKdGVtcGxhdGUgPGNsYXNzIFhZQ09M TEVDVD4gdHRyaWFuZ3VsYXRpb24gPFhZQ09MTEVDVD46OnRyaWFuZ2xlaXRlcmF0b3I6OnRyaWFu Z2xlaXRlcmF0b3IodHRyaWFuZ3VsYXRpb24gY29uc3QgJmEpCiAgICAgICAgOgogICAgICAgIG8o YSksCiAgICAgICAgY3VycmVudHRyaShhLmhlYWR0cmkpCiAgICAgICAgewogICAgICAgIGlmIChj dXJyZW50dHJpPj0wKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hvcnQgdD1j dXJyZW50dHJpOwogICAgICAgICAgICAgICAgd2hpbGUgKCFvLnRyaXNbdF0ucmVhbHRyaWFuZ2xl KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG8udHJpc1t0XS5yaWdodHRyZWUoKT49MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZnNzdGFjay5wdXNoKG8udHJpc1t0XS5yaWdodHRyZWUoKSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChvLnRyaXNbdF0ubGVmdHRyZWUoKT49MCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZnNzdGFjay5wdXNoKG8udHJpc1t0XS5sZWZ0dHJlZSgpKTsKCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChkZnNzdGFjay5lbXB0eSgpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0PS0xOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdD1kZnNzdGFjay50b3AoKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZGZzc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGN1cnJlbnR0cmk9dDsKICAgICAgICAgICAgICAgIH0KICAg ICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgWFlDT0xMRUNUPiB0eXBlbmFtZSB0dHJpYW5ndWxhdGlv biA8WFlDT0xMRUNUPjo6dHJpYW5nbGVpdGVyYXRvciAmIHR0cmlhbmd1bGF0aW9uIDxYWUNPTExF Q1Q+Ojp0cmlhbmdsZWl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKICAgICAgICB7CiAgICAgICAgc2hv cnQgdD1jdXJyZW50dHJpOwoKICAgICAgICBpZiAodD09LTEpCiAgICAgICAgICAgICAgICByZXR1 cm4gKnRoaXM7CgogICAgICAgIHQ9by50cmlzW3RdLm5leHRpbmNoYWluKCk7CiAgICAgICAgd2hp bGUgKHQ9PS0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRmc3N0YWNr LmVtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgY3VycmVudHRyaT0tMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdD1kZnNzdGFjay50b3AoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgZGZzc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCFvLnRyaXNbdF0ucmVh bHRyaWFuZ2xlKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoby50cmlz W3RdLnJpZ2h0dHJlZSgpPj0wKQogICAgICAgICAgICAgICAgICAgICAgICBkZnNzdGFjay5wdXNo KG8udHJpc1t0XS5yaWdodHRyZWUoKSk7CiAgICAgICAgICAgICAgICBpZiAoby50cmlzW3RdLmxl ZnR0cmVlKCk+PTApCiAgICAgICAgICAgICAgICAgICAgICAgIGRmc3N0YWNrLnB1c2goby50cmlz W3RdLmxlZnR0cmVlKCkpOwoKICAgICAgICAgICAgICAgIGlmIChkZnNzdGFjay5lbXB0eSgpKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQ9LTE7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB0PWRmc3N0YWNrLnRvcCgpOwogICAgICAgICAgICAgICAgZGZzc3RhY2su cG9wKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgY3VycmVudHRyaT10OwoKICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgICAgfQojIDYgIm1hcC5oIiAyCiMgMSAieHkuaCIgMQoKCgppbmxp bmUgdW5zaWduZWQgaW50IGRpc3QyKHNob3J0IHgxLHNob3J0IHkxLHNob3J0IHgyLHNob3J0IHky KQogICAgICAgIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkeCxkeTsKICAgICAgICBpZiAoeDE8 eDIpCiAgICAgICAgICAgICAgICBkeD14Mi14MTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBkeD14MS14MjsKCiAgICAgICAgaWYgKHkxPHkyKQogICAgICAgICAgICAgICAgZHk9eTIteTE7 CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZHk9eTEteTI7CgogICAgICAgIHJldHVybiAo KHVuc2lnbmVkIGludClkeCkqKCh1bnNpZ25lZCBpbnQpZHgpKygodW5zaWduZWQgaW50KWR5KSoo KHVuc2lnbmVkIGludClkeSk7CiAgICAgICAgfQoKc3RydWN0IHh5CiAgICAgICAgewoKCgoKCiAg ICB0eXBlZGVmIHNob3J0IHh0eXBlOwogICAgdHlwZWRlZiBzaG9ydCB5dHlwZTsKCiAgICAgICAg eHR5cGUgeDsKICAgICAgICB5dHlwZSB5OwoKICAgIHh0eXBlIGdldHgoKSB7cmV0dXJuIHg7fQog ICAgeXR5cGUgZ2V0eSgpIHtyZXR1cm4geTt9CgogICAgICAgIHNob3J0IHo7CiAgICAgICAgYm9v bCBmaXhlZDsKCiAgICAgICAgYm9vbCBsdChjb25zdCB4eSAmb3RoZXIpIGNvbnN0IHtyZXR1cm4g KHg8b3RoZXIueCB8fCAoeD09b3RoZXIueCAmJiB5PG90aGVyLnkpKTt9OwogICAgICAgIGJvb2wg Z3QoY29uc3QgeHkgJm90aGVyKSBjb25zdCB7cmV0dXJuICh4Pm90aGVyLnggfHwgKHg9PW90aGVy LnggJiYgeT5vdGhlci55KSk7fTsKCiAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgeHkgJnJp Z2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGx0KHJp Z2h0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgeHkg JnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICFs dChyaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgYm9vbCBvcGVyYXRvcj4oY29uc3Qg eHkgJnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu IGd0KHJpZ2h0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBib29sIG9wZXJhdG9yPD0oY29u c3QgeHkgJnJpZ2h0KSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0 dXJuICFndChyaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IHh5JiBvdGhlcikgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiAoeD09b3RoZXIueCAmJiB5PT1vdGhlci55KTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgeHkmIG90aGVyKSBjb25zdAogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgcmV0dXJuICh4IT1vdGhlci54IHx8IHkhPW90aGVyLnkpOwog ICAgICAgICAgICAgICAgfQogICAgdW5zaWduZWQgaW50IGRpc3QyKGNvbnN0IHh5JiBvdGhlcikg Y29uc3QKICAgICAgICB7CiAgICAgICAgcmV0dXJuIDo6ZGlzdDIoeCx5LG90aGVyLngsb3RoZXIu eSk7CiAgICAgICAgfTsKICAgIHVuc2lnbmVkIGludCBkaXN0Mih4dHlwZSBvdGhlcngseXR5cGUg b3RoZXJ5KSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4gOjpkaXN0Mih4LHksb3RoZXJ4 LG90aGVyeSk7CiAgICAgICAgfTsKICAgICAgICB9OwojIDcgIm1hcC5oIiAyCgpjbGFzcyB0bWFw CiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIGNvbnN0IHh5ICogY29u c3RfaXRlcmF0b3I7CiAgICAgICAgdmlydHVhbCBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0 OwogICAgICAgIHZpcnR1YWwgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7CiAgICAgICAgICAg ICAgICB2aXJ0dWFsIGJvb2wgbG9va3VwKHNob3J0IHgsc2hvcnQgeSxzaG9ydCAqeikgY29uc3Q9 MDsKICAgICAgICB9OwoKY2xhc3MgdHN0YXRpY21hcCA6IHB1YmxpYyB0bWFwCiAgICAgICAgewog ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB4eSBjb25zdCAqY29udHJvbHBvaW50czsK ICAgICAgICAgICAgICAgIGludCBuY29udHJvbHBvaW50czsKICAgICAgICBwdWJsaWM6CiAgICAg ICAgICAgICAgICB0c3RhdGljbWFwKHh5IGNvbnN0IGluaXRpYWxjb250cm9scG9pbnRzW10saW50 IG51bWJlcm9mY29udHJvbHBvaW50cyk7CgogICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg Y29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29u dHJvbHBvaW50cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg Y29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoY29u dHJvbHBvaW50cytuY29udHJvbHBvaW50cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICBib29sIGxvb2t1cChzaG9ydCB4LHNob3J0IHksc2hvcnQgKnopIGNvbnN0CiAgICAgICAgICAg IHsKCiAgICAgICAgICAgICp6PXgreTsKICAgICAgICAgICAgfQogICAgICAgIH07CgpjbGFzcyB0 ZHluYW1pY21hcCA6IHB1YmxpYyB0bWFwCiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAgICAg ICAgICAgICAgICB0eXBlZGVmIGxvY2FsOjp2ZWN0b3I8eHk+IGNvbnRyb2xwb2ludHN0eXBlOwog ICAgICAgICAgICAgICAgY29udHJvbHBvaW50c3R5cGUgY29udHJvbHBvaW50czsKICAgICAgICB0 eXBlZGVmIHR0cmlhbmd1bGF0aW9uPGNvbnRyb2xwb2ludHN0eXBlPiB0cmlhbmd1bGF0aW9udHlw ZWludGVybmFsOwogICAgICAgICAgICAgICAgdHJpYW5ndWxhdGlvbnR5cGVpbnRlcm5hbCB0cmlh bmdsZXM7CgogICAgICAgICAgICAgICAgc2hvcnQgeG1pbmxlYXJuYWJsZTsKICAgICAgICAgICAg ICAgIHNob3J0IHhtYXhsZWFybmFibGU7CiAgICAgICAgICAgICAgICBzaG9ydCB5bWlubGVhcm5h YmxlOwogICAgICAgICAgICAgICAgc2hvcnQgeW1heGxlYXJuYWJsZTsKCiAgICAgICAgICAgICAg ICB2b2lkIGFkanVzdHBvaW50KGludCBwdCxpbnQgdGFyZ2V0dmFsdWUsaW50IHdlaWdodGluZyxp bnQgbWlubW92ZSxpbnQgbWF4bW92ZSk7CiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgICAgICAg ICAgYm9vbCBva3RvbW92ZShjb25zdCB4eSAmIHB0KSBjb25zdDsKICAgICAgICBwdWJsaWM6CiAg ICAgICAgICAgICAgICB0ZHluYW1pY21hcCgpOwogICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAo eHkgY29uc3QgaW5pdGlhbGNvbnRyb2xwb2ludHNbXSxpbnQgbnVtYmVyb2Zjb250cm9scG9pbnRz KTsKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwICZvcGVyYXRvcj0odGR5bmFtaWNtYXAgY29u c3QgJm90aGVyKTsKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwICZvcGVyYXRvcj0odG1hcCBj b25zdCAmb3RoZXIpOwoKICAgICAgICB4eSBjb25zdCAmIG9wZXJhdG9yW10oaW50IGluZGV4KSBj b25zdAogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBjb250cm9scG9pbnRzW2luZGV4 XTsKICAgICAgICAgICAgfQoKICAgICAgICB0eXBlZGVmIHRyaWFuZ3VsYXRpb250eXBlaW50ZXJu YWwgdHJpYW5ndWxhdGlvbnR5cGU7CiAgICAgICAgdHJpYW5ndWxhdGlvbnR5cGUgY29uc3QgJiB0 cmlhbmd1bGF0aW9uICgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRy aWFuZ2xlczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZvaWQgc2V0bGVhcm5hYmxl YXJlYSggc2hvcnQgYXhtaW5sZWFybmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNob3J0IGF4bWF4bGVhcm5hYmxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBheW1pbmxlYXJuYWJsZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgYXltYXhs ZWFybmFibGUgKTsKICAgICAgICAgICAgICAgIHZvaWQgY2xlYXIoKTsKICAgICAgICAgICAgICAg IHZvaWQgYWRkY29udHJvbHBvaW50KHh5IGNvbnN0ICZwdCk7CiAgICAgICAgICAgICAgICB2b2lk IHJlbW92ZWNvbnRyb2xwb2ludCh4eSBjb25zdCAmcHQpOwogICAgICAgICAgICAgICAgYm9vbCBt b3ZlbWFwdG93YXJkcyggeHkgY29uc3QgJnBvaW50LCBpbnQgd2VpZ2h0aW5nLGludCBtaW5tb3Zl LGludCBtYXhtb3ZlICk7CiAgICAgICAgICAgICAgICBib29sIGxvb2t1cChzaG9ydCB4LHNob3J0 IHksc2hvcnQgKnopIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBzZXRjbG9zZXN0cG9pbnQo IHh5IGNvbnN0ICZwb2ludCApOwoKICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgY29udHJvbHBvaW50c3R5cGUgY29uc3QgJmNwPWNv bnRyb2xwb2ludHM7CiAgICAgICAgICAgIHJldHVybiAmKmNwLmJlZ2luKCk7CiAgICAgICAgICAg IH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgICAgICAgICAgewogICAg ICAgICAgICBjb250cm9scG9pbnRzdHlwZSBjb25zdCAmY3A9Y29udHJvbHBvaW50czsKICAgICAg ICAgICAgcmV0dXJuICYqY3AuZW5kKCk7CiAgICAgICAgICAgIH0KICAgIH07CiMgOCAiZW5ncHJv Zi5oIiAyCiMgMSAibWFwY29uc3QuaCIgMQojIDkgImVuZ3Byb2YuaCIgMgojIDEgIm1hcGVkaXQu aCIgMQoKCgoKCgoKIyAxICJhdHRydmFsdWUuaCIgMQojIDkgImF0dHJ2YWx1ZS5oIgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4gY2xhc3MgdGF0dHJ2YWx1ZWJhc2UgOiBwdWJsaWMgdGhhcmRhdHRyaWJ1 dGUKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAgIFQgZnZhbHVlOwog ICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8VD4gY29uc3QgJmZjb252ZXJ0b3I7CiAgICAgICAgICAg ICAgICBib29sIGZyZWFkb25seTsKICAgIHByb3RlY3RlZDoKICAgICAgICB0c3RyaW5nY29udmVy dG9yPFQ+IGNvbnN0ICZnZXRjb252ZXJ0b3IoKSBjb25zdCB7cmV0dXJuIGZjb252ZXJ0b3I7fQog ICAgICAgICAgICAgICAgdm9pZCBzZXR2YWx1ZShUIGNvbnN0IHYpIHsgZnZhbHVlPXY7IH0KICAg ICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0YXR0cnZhbHVlYmFzZShsb2NhbDo6c3RyaW5n IGNvbnN0ICZhdHRybmFtZSx0c3RyaW5nY29udmVydG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9v bCByZWFkb25seSwgVCBjb25zdCBpbml0aWFsdmFsdWUpOwogICAgICAgICAgICAgICAgdGF0dHJ2 YWx1ZWJhc2UobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRvcjxU PiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVhZG9ubHkpOwoKICAgICAgICAgICAgICAgIGJvb2wg ZmlsbHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgJnMpIGNvbnN0OwogICAgICAgIHR3aXRoYXR0 cjo6cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAm cyk7CgoKICAgICAgICAgICAgICAgIG9wZXJhdG9yIFQoKSBjb25zdCB7IHJldHVybiBmdmFsdWU7 IH0KICAgICAgICBUIGNvbnN0ICZ2YWx1ZWNvbnN0cmVmKCkgY29uc3QgeyByZXR1cm4gZnZhbHVl OyB9CiAgICAgICAgVCAmdmFsdWVyZWYoKSB7IHJldHVybiBmdmFsdWU7IH0KCiAgICAgICAgICAg ICAgICB0YXR0cnZhbHVlYmFzZSA8VD4gJiBvcGVyYXRvcj0oVCBjb25zdCB2KSB7IHNldHZhbHVl KHYpOyByZXR1cm4gKnRoaXM7fQogICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZWJhc2UgPFQ+ICYg b3BlcmF0b3I9KHRhdHRydmFsdWViYXNlIDxUPiBjb25zdCAmb3RoZXIpIHtmdmFsdWU9b3RoZXIu ZnZhbHVlO30KCiAgICAgICAgYm9vbCByZWFkb25seSgpIGNvbnN0IHtyZXR1cm4gZnJlYWRvbmx5 O30KICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Qge3JldHVybiBmY29udmVydG9y LnVuaXRzKCk7fQoKICAgICAgICAgICAgICAgIHZvaWQgaW5jKGJvb2wgbG90cyk7CiAgICAgICAg ICAgICAgICB2b2lkIGRlYyhib29sIGxvdHMpOwogICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU PiB0YXR0cnZhbHVlYmFzZSA8VD46OnRhdHRydmFsdWViYXNlIChsb2NhbDo6c3RyaW5nIGNvbnN0 ICZhdHRybmFtZSwgdHN0cmluZ2NvbnZlcnRvcjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVh ZG9ubHksIFQgY29uc3QgaW5pdGlhbHZhbHVlKQogICAgICAgIDogdGhhcmRhdHRyaWJ1dGUoYXR0 cm5hbWUpLAogICAgICAgIGZyZWFkb25seShyZWFkb25seSksCiAgICAgICAgZmNvbnZlcnRvcihj b252ZXJ0b3IpLAogICAgICAgICAgICAgICAgZnZhbHVlKGluaXRpYWx2YWx1ZSkKICAgICAgICB7 CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRhdHRydmFsdWViYXNlIDxUPjo6dGF0 dHJ2YWx1ZWJhc2UgKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLCB0c3RyaW5nY29udmVy dG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9vbCByZWFkb25seSkKICAgICAgICA6IHRoYXJkYXR0 cmlidXRlKGF0dHJuYW1lKSwKICAgICAgICBmcmVhZG9ubHkocmVhZG9ubHkpLAogICAgICAgIGZj b252ZXJ0b3IoY29udmVydG9yKQogICAgICAgIHsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gYm9vbCB0YXR0cnZhbHVlYmFzZSA8VD46OmZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3Ry aW5nICZzKSBjb25zdAogICAgICAgIHsKICAgICAgICBmY29udmVydG9yLmZpbGx2YWx1ZXN0cmlu ZyhzLGZ2YWx1ZSk7CiAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4gdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHRhdHRydmFsdWViYXNlIDxUPjo6cmVh ZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMpCiAgICAgICAgewogICAgICAgIGlm IChmcmVhZG9ubHkpCiAgICAgICAgICAgICAgICByZXR1cm4gdHdpdGhhdHRyOjphdHRycmVhZG9u bHk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHN0cmNv bnZyZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgcmVzOwogICAgICAgICAgICAgICAgVCB0ZW1wOwog ICAgICAgICAgICAgICAgcmVzPWZjb252ZXJ0b3IucmVhZHZhbHVlc3RyaW5nKHMsdGVtcCk7Cgog ICAgICAgICAgICAgICAgaWYgKHJlcz09dHN0cmNvbnZyZXN1bHQ6Om9rKQogICAgICAgICAgICAg ICAgICAgICAgICBmdmFsdWU9dGVtcDsKICAgICAgICBzd2l0Y2ggKHJlcykKICAgICAgICAgICAg ewogICAgICAgICAgICBjYXNlIHRzdHJjb252cmVzdWx0OjpvazoKICAgICAgICAgICAgICAgIHJl dHVybiB0d2l0aGF0dHI6Om9rOwogICAgICAgICAgICBjYXNlIHRzdHJjb252cmVzdWx0OjpvdXRv ZnJhbmdlOgogICAgICAgICAgICAgICAgcmV0dXJuIHR3aXRoYXR0cjo6b3V0b2ZyYW5nZTsKICAg ICAgICAgICAgY2FzZSB0c3RyY29udnJlc3VsdDo6YmFkZm9ybWF0OgogICAgICAgICAgICBkZWZh dWx0OgogICAgICAgICAgICAgICAgcmV0dXJuIHR3aXRoYXR0cjo6YmFkZm9ybWF0OwogICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ IHZvaWQgdGF0dHJ2YWx1ZWJhc2UgPFQ+OjppbmMoYm9vbCBsb3RzKQogICAgICAgIHsKICAgICAg ICBpZiAoZnJlYWRvbmx5KQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGZjb252ZXJ0 b3IuaW5jKGxvdHMsZnZhbHVlKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9p ZCB0YXR0cnZhbHVlYmFzZSA8VD46OmRlYyhib29sIGxvdHMpCiAgICAgICAgewogICAgICAgIGlm IChmcmVhZG9ubHkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgZmNvbnZlcnRvci5k ZWMobG90cyxmdmFsdWUpOwogICAgICAgIH0KCgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj bGFzcyB0YXR0cnZhbHVlIDogcHVibGljIHRhdHRydmFsdWViYXNlPFQ+CiAgICB7CiAgICBwdWJs aWM6CiAgICAgICAgICAgICAgICB0YXR0cnZhbHVlKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJu YW1lLHRzdHJpbmdjb252ZXJ0b3I8VD4gY29uc3QgJmNvbnZlcnRvcixib29sIHJlYWRvbmx5LCBU IGNvbnN0IGluaXRpYWx2YWx1ZSkKICAgICAgICAgICAgOiB0YXR0cnZhbHVlYmFzZTxUPihhdHRy bmFtZSxjb252ZXJ0b3IscmVhZG9ubHksaW5pdGlhbHZhbHVlICkge30KICAgICAgICAgICAgICAg IHRhdHRydmFsdWUobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRv cjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wgcmVhZG9ubHkpCiAgICAgICAgICAgIDogdGF0dHJ2 YWx1ZWJhc2U8VD4oYXR0cm5hbWUsY29udmVydG9yLHJlYWRvbmx5ICkge30KCiAgICAgICAgICAg ICAgICBib29sIHNhdmUodHdyaXRlc2VyaWFsc3RyZWFtICpzKSBjb25zdDsKICAgICAgICAgICAg ICAgIGJvb2wgbG9hZCh0cmVhZHNlcmlhbHN0cmVhbSAqcyk7CiAgICAgICAgYm9vbCBnZXRsb2dp bmZvKCB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIgY29uc3QgKiZzdHJjb252KSBjb25z dDsKICAgICAgICAgICAgICAgIHRhdHRydmFsdWUgPFQ+JiBvcGVyYXRvcj0oVCBjb25zdCB2KSB7 IHNldHZhbHVlKHYpOyByZXR1cm4gKnRoaXM7fQogICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU PiBib29sIHRhdHRydmFsdWUgPFQ+OjpzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29uc3QK ICAgICAgICB7CiAgICAgICAgcy0+d3JpdGUoJnZhbHVlY29uc3RyZWYoKSxzaXplb2YoVCkpOwog ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29s IHRhdHRydmFsdWUgPFQ+Ojpsb2FkKHRyZWFkc2VyaWFsc3RyZWFtICpzKQogICAgICAgIHsKICAg ICAgICBpZiAoIXJlYWRvbmx5KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gcy0+cmVhZCgmdmFs dWVyZWYoKSxzaXplb2YoVCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0YXR0cnZhbHVlIDxUPjo6Z2V0bG9naW5mbyggdW5zaWdu ZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYp IGNvbnN0CiAgICB7CiAgICBhdHRycHRyPSh1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICopJnZhbHVl Y29uc3RyZWYoKTsKICAgIHNpemU9c2l6ZW9mKFQpOwogICAgc3RyY29udj0mZ2V0Y29udmVydG9y KCk7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgoKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNs YXNzIHRzdHJpbmdhdHRydmFsdWUgOiBwdWJsaWMgdGF0dHJ2YWx1ZWJhc2U8VD4KICAgIHsKICAg IHB1YmxpYzoKICAgICAgICAgICAgICAgIHRzdHJpbmdhdHRydmFsdWUobG9jYWw6OnN0cmluZyBj b25zdCAmYXR0cm5hbWUsdHN0cmluZ2NvbnZlcnRvcjxUPiBjb25zdCAmY29udmVydG9yLGJvb2wg cmVhZG9ubHksIFQgY29uc3QgaW5pdGlhbHZhbHVlKQogICAgICAgICAgICA6IHRhdHRydmFsdWVi YXNlPFQ+KGF0dHJuYW1lLGNvbnZlcnRvcixyZWFkb25seSxpbml0aWFsdmFsdWUgKSB7fQogICAg ICAgICAgICAgICAgdHN0cmluZ2F0dHJ2YWx1ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFt ZSx0c3RyaW5nY29udmVydG9yPFQ+IGNvbnN0ICZjb252ZXJ0b3IsYm9vbCByZWFkb25seSkKICAg ICAgICAgICAgOiB0YXR0cnZhbHVlYmFzZTxUPihhdHRybmFtZSxjb252ZXJ0b3IscmVhZG9ubHkg KSB7fQogICAgICAgICAgICAgICAgYm9vbCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29u c3Q7CiAgICAgICAgICAgICAgICBib29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpOwogICAg ICAgIGJvb2wgZ2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnNpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdHRydmFsdWVwcmludGVyIGNvbnN0 IComc3RyY29udikgY29uc3Q7CiAgICAgICAgICAgICAgICB0c3RyaW5nYXR0cnZhbHVlIDxUPiYg b3BlcmF0b3I9KFQgY29uc3QgdikgeyBzZXR2YWx1ZSh2KTsgcmV0dXJuICp0aGlzO30KICAgIH07 Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0c3RyaW5nYXR0cnZhbHVlIDxUPjo6c2F2ZSh0 d3JpdGVzZXJpYWxzdHJlYW0gKnMpIGNvbnN0CiAgICAgICAgewogICAgdW5zaWduZWQgY2hhciB1 Y0xlbj12YWx1ZWNvbnN0cmVmKCkuc2l6ZSgpOwogICAgcy0+d3JpdGUoJnVjTGVuLHNpemVvZih1 Y0xlbikpOwogICAgcy0+d3JpdGUodmFsdWVjb25zdHJlZigpLmNfc3RyKCksdWNMZW4pOwogICAg ICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29sIHRz dHJpbmdhdHRydmFsdWUgPFQ+Ojpsb2FkKHRyZWFkc2VyaWFsc3RyZWFtICpzKQogICAgICAgIHsK ICAgIHVuc2lnbmVkIGNoYXIgdWNMZW47CiAgICBzLT5yZWFkKCZ1Y0xlbixzaXplb2YodWNMZW4p KTsKICAgIGNoYXIgc3RyWzI1Nl07CiAgICBzLT5yZWFkKHN0cix1Y0xlbik7CiAgICBzdHJbdWNM ZW5dPTA7CiAgICB2YWx1ZXJlZigpPWxvY2FsOjpzdHJpbmcoc3RyKTsKICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0c3RyaW5nYXR0cnZh bHVlIDxUPjo6Z2V0bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSAqICZhdHRycHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAm c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXR0cnZh bHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYpIGNvbnN0CiAgICB7CiAgICByZXR1cm4gZmFsc2U7 CiAgICB9CiMgOSAibWFwZWRpdC5oIiAyCgpjbGFzcyB0bWFwd3JhcHBlciA6IHB1YmxpYyB0d2l0 aGF0dHIKICAgIHsKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBtYXBwb2ludGRlc2Ny aXB0aW9uKHh5IGNvbnN0ICZtYXBwb2ludCxsb2NhbDo6c3RyaW5nICZzKSBjb25zdDsKICAgICAg ICBib29sIHB0ZnJvbWF0dHJuYW1lKGxvY2FsOjpzdHJpbmcgY29uc3QgJm5hbWUseHkgJnB0KSBj b25zdDsKICAgICAgICAgICAgICAgIHRtYXAgY29uc3QgJm1hcDsKICAgICAgICAgICAgICAgIHRz dHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZ4dHlwZTsKICAgICAgICAgICAgICAgIHRzdHJpbmdjb252 ZXJ0b3I8c2hvcnQ+ICZ5dHlwZTsKICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmenR5 cGU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdG1hcHdyYXBwZXIoCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1hcCBjb25zdCAmYW1hcCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXh0eXBlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZheXR5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2NvbnZlcnRvcjxzaG9ydD4g JmF6dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgYm9vbCBm b3JlYWNoKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRpcm5hbWUsdGF0dHJwcm9jZXNzb3IgJmRvdGhp cyk7CiAgICAgICAgYm9vbCBmaWxsdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0 cm5hbWUsbG9jYWw6OnN0cmluZyAmcyxsb2NhbDo6c3RyaW5nICZ1bml0cyk7CiAgICAgICAgdm9p ZCBhZnRlcmxvYWQoKSB7fQogICAgfTsKCmNsYXNzIHRjb25zdG1hcHdyYXBwZXIgOiBwdWJsaWMg dG1hcHdyYXBwZXIKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGNv bnN0bWFwd3JhcHBlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bWFwIGNvbnN0 ICZhbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8 c2hvcnQ+ICZheHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2Nv bnZlcnRvcjxzaG9ydD4gJmF5dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXp0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQogICAgICAgICAgICA6CiAgICAgICAgICAgIHRtYXB3cmFwcGVyKGFtYXAsYXh0eXBl LGF5dHlwZSxhenR5cGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3Ry aW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAgICAg ICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAgICAg ICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQgaW5j KGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAgICAg ICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwogICAg ICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0ICZu YW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wgcmVt b3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAgICAg ICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWduZWQg aW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFkc2Vy aWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKCiAgICAgICAg Ym9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0dHJw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAmc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50ZXIg Y29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh bDo6c3RyaW5nICZ1bml0cykgY29uc3Q7CiAgICAgICAgfTsKCgpjbGFzcyB0ZHluYW1pY21hcHdy YXBwZXIgOiBwdWJsaWMgdG1hcHdyYXBwZXIKICAgICAgICB7CiAgICAgICAgcHJvdGVjdGVkOgog ICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAgJmRtYXA7CiAgICAgICAgYm9vbCBpc2RpcnR5Owog ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRkeW5hbWljbWFwd3JhcHBlcigKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZHluYW1pY21hcCAmYW1hcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0c3RyaW5nY29udmVydG9yPHNob3J0PiAmYXh0eXBlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdHJpbmdjb252ZXJ0b3I8c2hvcnQ+ICZheXR5 cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0cmluZ2NvbnZlcnRvcjxzaG9y dD4gJmF6dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAg ICAgICAgdHdpdGhhdHRyOjpyZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6 c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxsb2NhbDo6c3RyaW5nIGNvbnN0ICZzKTsKICAgICAgICAg ICAgICAgIGJvb2wgcmVhZG9ubHkobG9jYWw6OnN0cmluZyBjb25zdCAmYXR0cm5hbWUpOwogICAg ICAgICAgICAgICAgYm9vbCBkaXJ0eShib29sIHJlc2V0KTsKICAgICAgICAgICAgICAgIHZvaWQg aW5jKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLGJvb2wgbG90cyk7CiAgICAgICAgICAg ICAgICB2b2lkIGRlYyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZhdHRybmFtZSxib29sIGxvdHMpOwog ICAgICAgICAgICAgICAgYm9vbCBhZGRuYW1lZGF0dHJpYnV0ZShsb2NhbDo6c3RyaW5nIGNvbnN0 ICZuYW1lLGxvY2FsOjpzdHJpbmcgY29uc3QgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGJvb2wg cmVtb3ZlbmFtZWRhdHRyaWJ1dGUobG9jYWw6OnN0cmluZyBjb25zdCAmbmFtZSk7CgogICAgICAg ICAgICAgICAgdm9pZCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqd3JpdGVzdHJlYW0sdW5zaWdu ZWQgaW50IG9iam5hbWVjcmMpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBsb2FkKHRyZWFk c2VyaWFsc3RyZWFtICpyZWFkc3RyZWFtLHVuc2lnbmVkIGludCBvYmpuYW1lY3JjKTsKCiAgICAg ICAgYm9vbCBnZXRsb2dpbmZvKGxvY2FsOjpzdHJpbmcgY29uc3QgJmF0dHJuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlICogJmF0 dHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAm c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF0dHJ2YWx1ZXByaW50 ZXIgY29uc3QgKiZzdHJjb252LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs b2NhbDo6c3RyaW5nICZ1bml0cykgY29uc3Q7CiAgICAgICAgfTsKIyAxMCAiZW5ncHJvZi5oIiAy CiMgMSAiZWN1dHlwZXMuaCIgMQoKCgoKIyAxICJzdHJjb252cy5oIiAxCgoKCgoKCiMgMSAic3Ry ZnVuY3MuaCIgMQoKCgoKCmxvY2FsOjpzdHJpbmcgdW5zaWduZWRudW1iZXIodW5zaWduZWQgaW50 IGksaW50IGZpZWxkbGVuPTAsY2hhciBwYWRjaGFyPScgJyxpbnQgYmFzZW49MTApOwpsb2NhbDo6 c3RyaW5nIHNpZ25lZG51bWJlcihpbnQgaSxpbnQgZmllbGRsZW49MCxjaGFyIHBhZGNoYXI9JyAn LGludCBiYXNlbj0xMCk7CmxvY2FsOjpzdHJpbmcgZml4ZWRwdDE2MTYoaW50IHZhbHVlLHNob3J0 IGZyYWN0aW9uYWxzaXplLGludCBmaWVsZGxlbixjaGFyIHBhZGNoYXI9JyAnLGludCBiYXNlbj0x MCk7CmxvY2FsOjpzdHJpbmcgZnJhY3Rpb25hbChpbnQgdixzaG9ydCBmcmFjdGlvbmFsc2l6ZSxz aG9ydCBkaWdpdHNzaGlmdGVkLGludCBmaWVsZGxlbixjaGFyIHBhZGNoYXI9JyAnLGludCBiYXNl bj0xMCk7Cgpib29sIHN0cmluZ3RvbnVtYmVyKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsaW50IGJh c2UsaW50ICpyZXN1bHQpOwpib29sIGZpeGVkcHQxNjE2c3RyaW5ndG9udW1iZXIobG9jYWw6OnN0 cmluZyBjb25zdCAmcyxpbnQgKnJlc3VsdG91dCk7CmJvb2wgZnJhY3Rpb25hbHN0cmluZ3RvbnVt YmVyKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsaW50IHBvd2VyMTAsaW50ICpyZXN1bHRvdXQpOwoj IDggInN0cmNvbnZzLmgiIDIKCgoKY2xhc3MgdGN5Y2xpY2FuZ2xldHlwZSA6IHB1YmxpYyB0c3Ry aW5nY29udmVydG9yPHRhbmdsZT4KICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAg ICAgICAgIGludCBmaWVsZGxlbjsKICAgICAgICAgICAgICAgIGludCBmcmFjc2l6ZTsKICAgICAg ICAgICAgICAgIHRhbmdsZSBjeWNsZTsKICAgICAgICAgICAgICAgIHRhbmdsZSBpbmNyZW1lbnQ7 CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGN5Y2xpY2FuZ2xldHlwZSggaW50IGFm aWVsZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnJh Y3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YW5nbGUgY3lj bGVsZW5ndGggKTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6 c3RyaW5nICZzLHRhbmdsZSBjb25zdCAmKSBjb25zdDsKICAgICAgICAgICAgICAgIHJlYWR2YWx1 ZXJlc3VsdHMgcmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsdGFuZ2xlICYp IGNvbnN0OwogICAgICAgIGxvY2FsOjpzdHJpbmcgdW5pdHMoKSBjb25zdDsKICAgICAgICAgICAg ICAgIGJvb2wgaW5jKGJvb2wgbG90cyx0YW5nbGUgJikgY29uc3Q7CiAgICAgICAgICAgICAgICBi b29sIGRlYyhib29sIGxvdHMsdGFuZ2xlICYpIGNvbnN0OwogICAgICAgIGludCB2YWx1ZWZpZWxk bGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZmllbGRsZW47 CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKCgpjbGFzcyB0ZGVsdGFhbmdsZXR5cGUgOiBwdWJs aWMgdHN0cmluZ2NvbnZlcnRvcjx0YW5nbGU+CiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAg ICAgICAgICAgICAgICBpbnQgZmllbGRsZW47CiAgICAgICAgICAgICAgICBpbnQgZnJhY3NpemU7 CiAgICAgICAgICAgICAgICB0YW5nbGUgbG93ZXJsaW1pdDsKICAgICAgICAgICAgICAgIHRhbmds ZSB1cHBlcmxpbWl0OwogICAgICAgICAgICAgICAgdGFuZ2xlIGluY3JlbWVudDsKICAgICAgICBw dWJsaWM6CiAgICAgICAgICAgICAgICB0ZGVsdGFhbmdsZXR5cGUoIGludCBhZmllbGRsZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlIGFsb3dlcmxpbWl0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlIGF1cHBlcmxpbWl0 KTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZz LHRhbmdsZSBjb25zdCAmKSBjb25zdDsKICAgICAgICAgICAgICAgIHJlYWR2YWx1ZXJlc3VsdHMg cmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMsdGFuZ2xlICYpIGNvbnN0Owog ICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0OwogICAgICAgICAgICAg ICAgYm9vbCBpbmMoYm9vbCBsb3RzLHRhbmdsZSAmKSBjb25zdDsKICAgICAgICAgICAgICAgIGJv b2wgZGVjKGJvb2wgbG90cyx0YW5nbGUgJikgY29uc3Q7CiAgICAgICAgaW50IHZhbHVlZmllbGRs ZW5ndGgoKSBjb25zdAogICAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmaWVsZGxlbjsK ICAgICAgICAgICAgfQogICAgICAgIH07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyB0 aW50dHlwZSA6IHB1YmxpYyB0c3RyaW5nY29udmVydG9yPFQ+CiAgICAgICAgewogICAgICAgIHBy aXZhdGU6CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIGZ1bml0czsKICAgICAgICAgICAg ICAgIHNob3J0IGZpZWxkbGVuOwogICAgICAgICAgICAgICAgc2hvcnQgZnJhY3NpemU7CiAgICAg ICAgICAgICAgICBzaG9ydCBwb3dlcjEwOwogICAgICAgICAgICAgICAgc2hvcnQgaW5jcmVtZW50 OwogICAgICAgICAgICAgICAgVCBsb3dlcmxpbWl0OwogICAgICAgICAgICAgICAgVCB1cHBlcmxp bWl0OwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbnR0eXBlKCBsb2NhbDo6c3Ry aW5nIGNvbnN0ICZhdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFm aWVsZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcG93ZXIxMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYWluY3JlbWVudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUIGFsb3dlcmxpbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFQgYXVwcGVybGltaXQpOwoKICAgICAgICAgICAgICAgIHZvaWQgZmlsbHZhbHVlc3RyaW5nKGxv Y2FsOjpzdHJpbmcgJnMsVCBjb25zdCAmKSBjb25zdDsKICAgICAgICB0c3RyY29udnJlc3VsdDo6 cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVzdHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmcyxU ICYpIGNvbnN0OwogICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0Owog ICAgICAgICAgICAgICAgYm9vbCBpbmMoYm9vbCBsb3RzLFQgJikgY29uc3Q7CiAgICAgICAgICAg ICAgICBib29sIGRlYyhib29sIGxvdHMsVCAmKSBjb25zdDsKICAgICAgICBpbnQgdmFsdWVmaWVs ZGxlbmd0aCgpIGNvbnN0CiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZpZWxkbGVu OwogICAgICAgICAgICB9CiAgICAgICAgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0aW50dHlw ZTxUPjo6CiAgICAgICAgICAgICAgICB0aW50dHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAmYXVu aXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZmllbGRsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmcmFjc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgYXBvd2VyMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGFpbmNyZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCBh bG93ZXJsaW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGF1cHBlcmxpbWl0 KQogICAgICAgIDogZmllbGRsZW4oYWZpZWxkbGVuKSwKICAgICAgICAgICAgICAgIGZyYWNzaXpl KGFmcmFjc2l6ZSksCiAgICAgICAgICAgICAgICBwb3dlcjEwKGFwb3dlcjEwKSwKICAgICAgICAg ICAgICAgIGluY3JlbWVudChhaW5jcmVtZW50KSwKICAgICAgICAgICAgICAgIGxvd2VybGltaXQo YWxvd2VybGltaXQpLAogICAgICAgICAgICAgICAgdXBwZXJsaW1pdChhdXBwZXJsaW1pdCksCiAg ICAgICAgICAgICAgICBmdW5pdHMoYXVuaXRzKQogICAgICAgIHsKICAgICAgICBpZiAocG93ZXIx MD5mcmFjc2l6ZSkKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPHBvd2VyMTAtZnJhY3Np emU7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQqPTEwOwogICAgICAgIH0K CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIHRpbnR0eXBlPFQ+OjpmaWxsdmFsdWVzdHJpbmco bG9jYWw6OnN0cmluZyAmcyxUIGNvbnN0ICZwKSBjb25zdAogICAgICAgIHsKICAgICAgICBzPWZy YWN0aW9uYWwocCxmcmFjc2l6ZSxwb3dlcjEwLGZpZWxkbGVuKTsKICAgICAgICB9Cgp0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4gdHN0cmNvbnZyZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgdGludHR5cGU8 VD46OnJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLFQgJnApIGNvbnN0CiAg ICAgICAgewogICAgICAgIGludCByZXN1bHQ7CgogICAgICAgIGJvb2wgcj1mcmFjdGlvbmFsc3Ry aW5ndG9udW1iZXIocyxwb3dlcjEwLCZyZXN1bHQpOwogICAgICAgIGlmIChyKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgaWYgKHJlc3VsdD49bG93ZXJsaW1pdCAmJiByZXN1bHQ8 PXVwcGVybGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgcD1yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gb3V0b2ZyYW5nZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICByZXR1cm4gYmFkZm9ybWF0OwogICAgICAgIH0KCnRlbXBsYXRlIDx0 eXBlbmFtZSBUPiBsb2NhbDo6c3RyaW5nIHRpbnR0eXBlPFQ+Ojp1bml0cygpIGNvbnN0CiAgICAg ICAgewogICAgICAgIHJldHVybiBmdW5pdHM7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGJvb2wgdGludHR5cGU8VD46OmluYyhib29sIGxvdHMsVCAmcCkgY29uc3QKICAgICAgICB7 CiAgICAgICAgVCBuPXAgKyBpbmNyZW1lbnQqKGxvdHM/MTA6MSk7CiAgICAgICAgaWYgKG4+PWxv d2VybGltaXQgJiYgbjw9dXBwZXJsaW1pdCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIHA9bjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQog ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9Cgp0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCB0aW50dHlwZTxUPjo6ZGVjKGJvb2wgbG90cyxUICZwKSBj b25zdAogICAgICAgIHsKICAgICAgICBUIG49cCAtIGluY3JlbWVudCoobG90cz8xMDoxKTsKICAg ICAgICBpZiAobj49bG93ZXJsaW1pdCAmJiBuPD11cHBlcmxpbWl0KQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgcD1uOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIHRzY2FsZWRpbnR0eXBlIDog cHVibGljIHRzdHJpbmdjb252ZXJ0b3I8VD4KICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAg ICAgICAgICAgICAgIGxvY2FsOjpzdHJpbmcgZnVuaXRzOwogICAgICAgICAgICAgICAgc2hvcnQg ZmllbGRsZW47CiAgICAgICAgICAgICAgICBzaG9ydCBmcmFjc2l6ZTsKICAgICAgICAgICAgICAg IHNob3J0IHBvd2VyMTA7CiAgICAgICAgICAgICAgICBzaG9ydCBpbmNyZW1lbnQ7CiAgICAgICAg ICAgICAgICBUIG11bHRpcGxpZXI7CiAgICAgICAgICAgICAgICBUIGRpdmlzb3I7CiAgICAgICAg ICAgICAgICBUIGxvd2VybGltaXQ7CiAgICAgICAgICAgICAgICBUIHVwcGVybGltaXQ7CiAgICAg ICAgcHVibGljOgogICAgICAgICAgICAgICAgdHNjYWxlZGludHR5cGUoIGxvY2FsOjpzdHJpbmcg Y29uc3QgJmF1bml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGFtdWx0aXBs aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgYWRpdmlzb3IsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmaWVsZGxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYWZyYWNzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBhcG93ZXIxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWlu Y3JlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGFsb3dlcmxpbWl0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgYXVwcGVybGltaXQpOwoKICAgICAgICAg ICAgICAgIHZvaWQgZmlsbHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgJnMsVCBjb25zdCAmKSBj b25zdDsKICAgICAgICB0c3RyY29udnJlc3VsdDo6cmVhZHZhbHVlcmVzdWx0cyByZWFkdmFsdWVz dHJpbmcobG9jYWw6OnN0cmluZyBjb25zdCAmcyxUICYpIGNvbnN0OwogICAgICAgICAgICAgICAg bG9jYWw6OnN0cmluZyB1bml0cygpIGNvbnN0OwogICAgICAgICAgICAgICAgYm9vbCBpbmMoYm9v bCBsb3RzLFQgJikgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIGRlYyhib29sIGxvdHMsVCAm KSBjb25zdDsKICAgICAgICBpbnQgdmFsdWVmaWVsZGxlbmd0aCgpIGNvbnN0CiAgICAgICAgICAg IHsKICAgICAgICAgICAgcmV0dXJuIGZpZWxkbGVuOwogICAgICAgICAgICB9CiAgICAgICAgfTsK CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0c2NhbGVkaW50dHlwZTxUPjo6CiAgICAgICAgICAgICAg ICB0c2NhbGVkaW50dHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAmYXVuaXRzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFQgYW11bHRpcGxpZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVCBhZGl2aXNvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgYWZpZWxkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnJhY3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFwb3dlcjEwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhaW5jcmVtZW50LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFQgYWxvd2VybGltaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVCBhdXBwZXJsaW1pdCkKICAgICAgICA6IG11bHRpcGxpZXIoYW11bHRpcGxpZXIpLAog ICAgICAgICAgICAgICAgZGl2aXNvcihhZGl2aXNvciksCiAgICAgICAgICAgICAgICBmaWVsZGxl bihhZmllbGRsZW4pLAogICAgICAgICAgICAgICAgZnJhY3NpemUoYWZyYWNzaXplKSwKICAgICAg ICAgICAgICAgIHBvd2VyMTAoYXBvd2VyMTApLAogICAgICAgICAgICAgICAgaW5jcmVtZW50KGFp bmNyZW1lbnQpLAogICAgICAgICAgICAgICAgbG93ZXJsaW1pdChhbG93ZXJsaW1pdCksCiAgICAg ICAgICAgICAgICB1cHBlcmxpbWl0KGF1cHBlcmxpbWl0KSwKICAgICAgICAgICAgICAgIGZ1bml0 cyhhdW5pdHMpCiAgICAgICAgewogICAgICAgIGlmIChwb3dlcjEwPmZyYWNzaXplKQogICAgICAg ICAgICAgICAgZm9yIChpbnQgaT0wO2k8cG93ZXIxMC1mcmFjc2l6ZTtpKyspCiAgICAgICAgICAg ICAgICAgICAgICAgIGluY3JlbWVudCo9MTA7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IHZvaWQgdHNjYWxlZGludHR5cGU8VD46OmZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5n ICZzLFQgY29uc3QgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIGludCBwdD1pc2NhbGUocCxt dWx0aXBsaWVyLGRpdmlzb3IpOwogICAgICAgIHM9ZnJhY3Rpb25hbChwdCxmcmFjc2l6ZSxwb3dl cjEwLGZpZWxkbGVuKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdHN0cmNvbnZy ZXN1bHQ6OnJlYWR2YWx1ZXJlc3VsdHMgdHNjYWxlZGludHR5cGU8VD46OnJlYWR2YWx1ZXN0cmlu Zyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLFQgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIGlu dCByZXN1bHQ7CiAgICAgICAgYm9vbCByPWZyYWN0aW9uYWxzdHJpbmd0b251bWJlcihzLHBvd2Vy MTAsJnJlc3VsdCk7CiAgICAgICAgcmVzdWx0PWlzY2FsZShyZXN1bHQsZGl2aXNvcixtdWx0aXBs aWVyKTsKICAgICAgICBpZiAocikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlm IChyZXN1bHQ+PWxvd2VybGltaXQgJiYgcmVzdWx0PD11cHBlcmxpbWl0KQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHA9cmVzdWx0OwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dG9mcmFuZ2U7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIGJh ZGZvcm1hdDsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gbG9jYWw6OnN0cmluZyB0 c2NhbGVkaW50dHlwZTxUPjo6dW5pdHMoKSBjb25zdAogICAgICAgIHsKICAgICAgICByZXR1cm4g ZnVuaXRzOwogICAgICAgIH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBib29sIHRzY2FsZWRpbnR0 eXBlPFQ+OjppbmMoYm9vbCBsb3RzLFQgJnApIGNvbnN0CiAgICAgICAgewogICAgICAgIFQgbj1w ICsgaW5jcmVtZW50Kihsb3RzPzEwOjEpOwogICAgICAgIGlmIChuPj1sb3dlcmxpbWl0ICYmIG48 PXVwcGVybGltaXQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwPW47CiAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKdGVtcGxhdGUgPHR5cGVuYW1l IFQ+IGJvb2wgdHNjYWxlZGludHR5cGU8VD46OmRlYyhib29sIGxvdHMsVCAmcCkgY29uc3QKICAg ICAgICB7CiAgICAgICAgVCBuPXAgLSBpbmNyZW1lbnQqKGxvdHM/MTA6MSk7CiAgICAgICAgaWYg KG4+PWxvd2VybGltaXQgJiYgbjw9dXBwZXJsaW1pdCkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIHA9bjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9 CgoKCmNsYXNzIHRib29sdHlwZSA6IHB1YmxpYyB0c3RyaW5nY29udmVydG9yPGJvb2w+CiAgICAg ICAgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHRydWVz dHJpbmc7CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIGZhbHNlc3RyaW5nOwogICAgICAg IHB1YmxpYzoKICAgICAgICAgICAgICAgIHRib29sdHlwZSggbG9jYWw6OnN0cmluZyBjb25zdCAm dHJ1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWw6OnN0cmluZyBjb25z dCAmZmFsc2VzKTsKCiAgICAgICAgICAgICAgICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6 c3RyaW5nICZzLGJvb2wgY29uc3QgJikgY29uc3Q7CiAgICAgICAgICAgICAgICByZWFkdmFsdWVy ZXN1bHRzIHJlYWR2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLGJvb2wgJikgY29u c3Q7CiAgICAgICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAg ICAgICAgICBib29sIGluYyhib29sIGxvdHMsYm9vbCAmKSBjb25zdDsKICAgICAgICAgICAgICAg IGJvb2wgZGVjKGJvb2wgbG90cyxib29sICYpIGNvbnN0OwogICAgICAgIGludCB2YWx1ZWZpZWxk bGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gc3RkOjptYXgo dHJ1ZXN0cmluZy5zaXplKCksZmFsc2VzdHJpbmcuc2l6ZSgpKTsKICAgICAgICAgICAgfQogICAg ICAgIH07CgoKY2xhc3MgdHN0cmluZ3R5cGUgOiBwdWJsaWMgdHN0cmluZ2NvbnZlcnRvcjxsb2Nh bDo6c3RyaW5nPgogICAgewogICAgcHJpdmF0ZToKICAgICAgICBpbnQgZmllbGRsZW47CiAgICBw dWJsaWM6CiAgICAgICAgdHN0cmluZ3R5cGUoaW50IGFmaWVsZGxlbik7CiAgICAgICAgICAgICAg ICB2b2lkIGZpbGx2YWx1ZXN0cmluZyhsb2NhbDo6c3RyaW5nICZzLGxvY2FsOjpzdHJpbmcgY29u c3QgJikgY29uc3Q7CiAgICAgICAgICAgICAgICByZWFkdmFsdWVyZXN1bHRzIHJlYWR2YWx1ZXN0 cmluZyhsb2NhbDo6c3RyaW5nIGNvbnN0ICZzLGxvY2FsOjpzdHJpbmcgJikgY29uc3Q7CiAgICAg ICAgICAgICAgICBsb2NhbDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAgICAgICAgICBi b29sIGluYyhib29sIGxvdHMsbG9jYWw6OnN0cmluZyAmKSBjb25zdDsKICAgICAgICAgICAgICAg IGJvb2wgZGVjKGJvb2wgbG90cyxsb2NhbDo6c3RyaW5nICYpIGNvbnN0OwogICAgICAgIGludCB2 YWx1ZWZpZWxkbGVuZ3RoKCkgY29uc3QKICAgICAgICAgICAgewogICAgICAgICAgICByZXR1cm4g ZmllbGRsZW47CiAgICAgICAgICAgIH0KICAgIH07CiMgNiAiZWN1dHlwZXMuaCIgMgoKdHlwZWRl ZiB0YXR0cnZhbHVlPHNob3J0PiB0c2hvcnR2YWx1ZTsKZXh0ZXJuIHRpbnR0eXBlPHNob3J0PiBz aG9ydHR5cGU7Cgp0eXBlZGVmIHRhdHRydmFsdWU8dW5zaWduZWQgc2hvcnQgPiB0dW5zaWduZWRz aG9ydHZhbHVlOwpleHRlcm4gdGludHR5cGU8dW5zaWduZWQgc2hvcnQ+IHVuc2lnbmVkc2hvcnR0 eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPGludD4gdGludHZhbHVlOwpleHRlcm4gdGludHR5cGU8 aW50PiBpbnR0eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPHVuc2lnbmVkIGludD4gdHVuc2lnbmVk aW50dmFsdWU7CmV4dGVybiB0aW50dHlwZTx1bnNpZ25lZCBpbnQ+IHVuc2lnbmVkaW50dHlwZTsK CnR5cGVkZWYgdGF0dHJ2YWx1ZTx0YW5nbGU+IHRjeWNsaWNhbmdsZXZhbHVlOwpleHRlcm4gdGN5 Y2xpY2FuZ2xldHlwZSBjcmFua3Bvc3R5cGUxMHRoczsKCnR5cGVkZWYgdGF0dHJ2YWx1ZTx0YW5n bGU+IHRkZWx0YWFuZ2xldmFsdWU7CmV4dGVybiB0ZGVsdGFhbmdsZXR5cGUgaWduaXRpb250cmlt dHlwZTsKZXh0ZXJuIHRkZWx0YWFuZ2xldHlwZSBpZ25jdXRyYXRldHlwZTsKZXh0ZXJuIHRkZWx0 YWFuZ2xldHlwZSBkdXR5Y3ljbGV0eXBlOwoKdHlwZWRlZiB0YXR0cnZhbHVlPGJvb2w+IHRib29s dmFsdWU7CmV4dGVybiB0Ym9vbHR5cGUgb25vZmZ0eXBlOwpleHRlcm4gdGJvb2x0eXBlIHRydWVm YWxzZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBpbmplY3RvcnJhdGV0eXBlOwpleHRlcm4g dGludHR5cGU8aW50PiBpbmp0aW1ldHlwZWNhbmJlbmVnOwpleHRlcm4gdGludHR5cGU8aW50PiBp bmp0aW1ldHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gcGVyY2VudHRyaW10eXBlOwpleHRlcm4g dGludHR5cGU8aW50PiBwZXJjZW50bWF4MTAwdHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gaWdu dGltZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBjeWx2b2x1bWVpbmNjdHlwZTsKCmV4dGVy biB0aW50dHlwZTxpbnQ+IGludHJwbXR5cGU7CgoKZXh0ZXJuIHRpbnR0eXBlPGludD4gbWFuaWZv bGRhYnNvbHV0ZXByZXNzdXJldHlwZTsKZXh0ZXJuIHRpbnR0eXBlPGludD4gbWFuaWZvbGRyZWxh dGl2ZXByZXNzdXJldHlwZTsKCmV4dGVybiB0aW50dHlwZTxpbnQ+IHRlbXBlcmF0dXJldHlwZTsK ZXh0ZXJuIHRpbnR0eXBlPGludD4gdm9sdGFnZXR5cGU7CmV4dGVybiB0aW50dHlwZTxpbnQ+IG94 eXZvbHR0eXBlOwoKZXh0ZXJuIHRpbnR0eXBlPGludD4gaW50dmV0eXBlOwoKZXh0ZXJuIHRpbnR0 eXBlPHVuc2lnbmVkIGludD4gcnVudGltZXR5cGU7CmV4dGVybiB0aW50dHlwZTxpbnQ+IHN0YXJ0 dGltZXR5cGU7CgpleHRlcm4gdGludHR5cGU8aW50PiBhZnJhdGlvdHlwZTsKZXh0ZXJuIHRpbnR0 eXBlPGludD4gc21hbGxhaXJtYXNzdHlwZTsKCmV4dGVybiB0aW50dHlwZTxpbnQ+IHNhbXBsZXN0 eXBlOwpleHRlcm4gdGludHR5cGU8aW50PiBwZXJjZW50cGVyc2VjdHlwZTsKCmV4dGVybiB0aW50 dHlwZTxzaG9ydD4gc2hvcnRycG10eXBlOwpleHRlcm4gdGludHR5cGU8c2hvcnQ+IHNob3J0dmV0 eXBlOwoKZXh0ZXJuIHRzY2FsZWRpbnR0eXBlPHNob3J0PiBzaG9ydG1hcHR5cGU7CmV4dGVybiB0 c2NhbGVkaW50dHlwZTxzaG9ydD4gc2hvcnRhZHZ0eXBlOwoKZXh0ZXJuIHRpbnR0eXBlPGludD4g ZnJlcTEwdGhzdHlwZTsKCmV4dGVybiB0c3RyaW5ndHlwZSBsb2djb2xzdHJpbmd0eXBlOwpleHRl cm4gdHN0cmluZ3R5cGUgbG9nZXhwcnN0cmluZ3R5cGU7CiMgMTEgImVuZ3Byb2YuaCIgMgoKY2xh c3MgdGVuZ2luZXByb2ZpbGUgOiBwdWJsaWMgdHdpdGhoYXJkYXR0cgogICAgICAgIHsKICAgICAg ICBwcml2YXRlOgogICAgICAgICAgICAgICAgdGR5bmFtaWNtYXAgaWduaXRpb25tYXA7CiAgICAg ICAgICAgICAgICB0ZHluYW1pY21hcCBkeW5hbWljdmU7CgogICAgICAgICAgICAgICAgdG1hcCAm aW5pdGlhbHZlOwogICAgICAgICAgICAgICAgdG1hcCAmaW5pdGlhbGFkdjsKCiAgICAgICAgICAg ICAgICB0aW50dmFsdWUgY3lsaW5kZXJ2b2x1bWU7CgogICAgICAgICAgICAgICAgdGR5bmFtaWNt YXB3cmFwcGVyIGluam1hcHdyYXA7CiAgICAgICAgICAgICAgICB0ZHluYW1pY21hcHdyYXBwZXIg aWdubWFwd3JhcDsKCiAgICAgICAgICAgICAgICB0c2hvcnR2YWx1ZSBtaW5sZWFybnJwbTsKICAg ICAgICAgICAgICAgIHRzaG9ydHZhbHVlIG1heGxlYXJucnBtOwogICAgICAgICAgICAgICAgdHNo b3J0dmFsdWUgbWlubGVhcm5tYXA7CiAgICAgICAgICAgICAgICB0c2hvcnR2YWx1ZSBtYXhsZWFy bm1hcDsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0ZW5naW5lcHJvZmlsZSgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGN5bHZvbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0bWFwICZkZWZhdWx0dmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG1hcCAmZGVmYXVsdGFkdiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZGVmYXVsdGxlYXJubWlucnBtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBkZWZhdWx0bGVhcm5tYXhycG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGRlZmF1bHRsZWFybm1pbm1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZGVmYXVsdGxlYXJubWF4bWFwICk7CiAgICAgICAgICAgICAgICB2b2lkIHNlZWR0 YWJsZXMoKTsKCiAgICAgICAgICAgICAgICB2b2lkIGNhbGNjb25kKCBpbnQgcnBtLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGlhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFp cm1hc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICpvcHRpbWFsaWdu YW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp2ZSk7CgogICAgICAg ICAgICAgICAgdm9pZCBsZWFybnZlcG9pbnQoaW50IHJwbSxpbnQgbWFwLGludCB2ZSk7CgogICAg ICAgICAgICAgICAgaW50IHR5cGljYWxhaXJtYXNzcGVyY3lsKGludCBpYXQpOwogICAgICAgIH07 CiMgOCAiZW5naW5lLmgiIDIKIyAxICJldmVudGNoYW4uaCIgMQoKCgojIDEgImV2ZW50LmgiIDEK CgoKCgpjbGFzcyB0ZXZlbnQKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAg ICAgdGV2ZW50ICpuZXh0OwogICAgICAgICAgICAgICAgaW50IGFuZ2xlc3RlcDsKICAgICAgICBw cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZSAqcG9ydGFk ZHJlc3M7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0c2FuZG1hc2s7CiAgICAgICAg ICAgICAgICBib29sIHNhZmU7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgYm9vbCBv bGRldmVudDsKCgogICAgICAgICAgICAgICAgdm9pZCBzZXRwcm9wZXJ0aWVzKCB1bnNpZ25lZCBz aG9ydCB2b2xhdGlsZSAqcG9ydGFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgc2hvcnQgYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBzaG9ydCBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg c2FmZSApOwoKICAgICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZSgpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYml0cz1iaXRzYW5kbWFzazsKICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgc2hvcnQgbWFzaz1iaXRzYW5kbWFzaz4+MTY7CiAgICAgICAgICAg ICAgICAgICAgICAgICpwb3J0YWRkcmVzcz0qcG9ydGFkZHJlc3MgJiBtYXNrIHwgYml0czsKICAg ICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICB2b2lkIGV4ZWN1dGVpZnNh ZmUoKSB7aWYgKHNhZmUpIGV4ZWN1dGUoKTt9OwogICAgICAgIH07CgpjbGFzcyB0ZXZlbnRwb29s CiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwgdGV2ZW50 ICphbGxvY2V2ZW50KCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcG9ydGFkZHJlc3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0 IGJpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIHNob3J0IG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgc2FmZSk9MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBmcmVl ZXZlbnQodGV2ZW50ICpldmVudCk9MDsKICAgICAgICB9OwoKY2xhc3MgdGFuZ2xldHJhbnNsYXRv cgogICAgICAgIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB2aXJ0dWFsIGludCB0 cmFuc2xhdGVhbmdsZXRvc3RlcCh0YW5nbGUgYW5nbGUpPTA7CiAgICAgICAgICAgICAgICB2aXJ0 dWFsIGJvb2wgaW5vcmRlciggdGV2ZW50ICphLHRldmVudCAqYiApPTA7CiAgICAgICAgICAgICAg ICBib29sIGluYmV0d2VlbiggdGV2ZW50ICpiZWZvcmUsdGV2ZW50ICpuLHRldmVudCAqYWZ0ZXIg KTsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdGFuZ2xlIGN5Y2xlYW5nbGUoKT0wOwogICAgICAg IH07CgpjbGFzcyB0Y2hhbmdlcmVjb3JkZXIKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAg ICAgICAgICAgICAgdmlydHVhbCBib29sIGlzb2xkZXZlbnQoKT0wOwogICAgICAgICAgICAgICAg dmlydHVhbCB2b2lkIGNoYW5nZWlmc2NoZWR1bGVkKHRldmVudCAqb2xkLHRldmVudCAqbmV3ZSk9 MDsKICAgICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VpZnNjaGVkdWxlZGFuZG5vdHRv b2Zhcih0ZXZlbnQgKnByZXYsdGV2ZW50ICpvbGQsdGV2ZW50ICpuZXdlKT0wOwogICAgICAgIH07 CgpjbGFzcyB0ZXZlbnRzb3VyY2UKICAgICAgICB7CiAgICAgICAgcHVibGljOgogICAgICAgICAg ICAgICAgdmlydHVhbCB0ZXZlbnQgKnJlc2NoZWR1bGUodGNoYW5nZXJlY29yZGVyICYsdGFuZ2xl dHJhbnNsYXRvciAmKT0wOwogICAgICAgIH07CiMgNSAiZXZlbnRjaGFuLmgiIDIKCgoKY2xhc3Mg dG9ub2ZmY2hhbm5lbDsKCmNsYXNzIHRvbm9mZmFuZ2xlcwogICAgewogICAgcHVibGljOgogICAg ICAgICAgICAgICAgdGFuZ2xlIG9wZW4sY2xvc2U7CiAgICB9OwoKY2xhc3MgdG9ub2ZmY2hhbm5l bCA6IHB1YmxpYyB0ZXZlbnRzb3VyY2UKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICpwb3J0YWRkcmVzczsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIHNob3J0IG9wZW5iaXRzOwogICAgICAgICAgICAgICAgdW5zaWduZWQg c2hvcnQgb3Blbm1hc2s7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbG9zZWJpdHM7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbG9zZW1hc2s7CiAgICAgICAgICAgICAg ICBib29sIGlzc2FmZXRvY2xvc2U7CgogICAgICAgICAgICAgICAgdGV2ZW50ICpvbGRzdHVmZmhl YWQ7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKm5ld3N0dWZmaGVhZDsKICAgICAgICAgICAgICAg IGJvb2wgaGFzb2xkZXZlbnRzOwogICAgICAgICAgICAgICAgYm9vbCBoYXNuZXdldmVudHM7CiAg ICAgICAgICAgICAgICB0ZXZlbnRwb29sICZwb29sOwoKCiAgICAgICAgY2xhc3MgdG9ub2ZmY2hh bm5lbHRhc2sKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdWJsaWM6CgogICAgICAgICAgICAg ICAgICAgICAgICB0ZXZlbnQgKm9sZHRyYW5zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAg IHRldmVudCAqb3BlbmV2ZW50LCpjbG9zZWV2ZW50OwoKICAgICAgICAgICAgICAgICAgICAgICAg dGV2ZW50ICp0cmFuc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB0ZXZlbnQgKm5ld29w ZW5ldmVudCwqbmV3Y2xvc2VldmVudDsKCgogICAgICAgICAgICAgICAgdG9ub2ZmYW5nbGVzICZh bmdsZXM7CgoKICAgICAgICAgICAgICAgIHRvbm9mZmNoYW5uZWx0YXNrKHRvbm9mZmFuZ2xlcyAm YWFuZ2xlcyk7CiAgICAgICAgfTsKCgogICAgICAgIHR5cGVkZWYgbG9jYWw6Omxpc3Q8dG9ub2Zm Y2hhbm5lbHRhc2s+IHRhc2tzdHlwZTsKICAgICAgICB0YXNrc3R5cGUgdGFza3M7CgoKICAgICAg ICAgICAgICAgIHRldmVudCAqY3JlYXRlZXZlbnRhdChpbnQgYW5nbGVzdGVwLGJvb2wgZG9vcGVu KTsKICAgICAgICAgICAgICAgIHRldmVudCAqY3JlYXRlZHVtbXlldmVudCggdGV2ZW50ICpldiAp OwogICAgICAgICAgICAgICAgdm9pZCBmcmVlZXZlbnQoIHRldmVudCAqZXYgKTsKCgogICAgICAg ICAgICAgICAgdm9pZCBwYXJ0aXRpb25vbGRmcm9tbmV3KCk7CiAgICAgICAgICAgICAgICB2b2lk IGZyZWVuZXdzdHVmZigpOwogICAgICAgICAgICAgICAgdm9pZCB0dXJubmV3c3R1ZmZpbnRvb2xk c3R1ZmYoKTsKICAgICAgICAgICAgICAgIGJvb2wgY3JlYXRlbmV3ZXZlbnRzKHRhbmdsZXRyYW5z bGF0b3IgJmFuZ2xldHJhbnNsYXRvcik7CiAgICAgICAgICAgICAgICB2b2lkIGhvb2tvbGRldmVu dHN0b25ld2V2ZW50cyh0Y2hhbmdlcmVjb3JkZXIgJmNoYW5nZXJlY29yZGVyLHRhbmdsZXRyYW5z bGF0b3IgJmFuZ2xldHJhbnNsYXRvcik7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKmZpcnN0bmV3 ZXZlbnQoKTsKICAgICAgICAgICAgICAgIHZvaWQgZGVhZGVuZG9sZCh0Y2hhbmdlcmVjb3JkZXIg JmNoYW5nZXJlY29yZGVyKTsKICAgICAgICAgICAgICAgIHRldmVudCAqbmV4dG9sZG9wZW4odGFz a3N0eXBlOjppdGVyYXRvciB0YXNrbnVtKTsKICAgICAgICAgICAgICAgIHRldmVudCAqbmV4dG5l d29wZW4odGFza3N0eXBlOjppdGVyYXRvciB0YXNrbnVtKTsKCiAgICAgICAgcHVibGljOgogICAg ICAgICAgICAgICAgdG9ub2ZmY2hhbm5lbCh0ZXZlbnRwb29sICZldmVudGhlYXAsdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKmFkZHIsdW5zaWduZWQgc2hvcnQgYml0c3Rvc2V0LGJvb2wgcmV2ZXJz ZWQsYm9vbCBzYWZldG9jbG9zZSk7CiAgICAgICAgICAgICAgICB2b2lkIGFkZHB1bHNlKHRvbm9m ZmFuZ2xlcyAmYW5nbGVzKTsKICAgICAgICAgICAgICAgIHZvaWQgcmVtb3ZlcHVsc2UodG9ub2Zm YW5nbGVzICZhbmdsZXMpOwoKICAgICAgICAgICAgICAgIHZvaWQgb24oKTsKICAgICAgICAgICAg ICAgIHZvaWQgb2ZmKCk7CgogICAgICAgICAgICAgICAgdGV2ZW50ICpyZXNjaGVkdWxlKHRjaGFu Z2VyZWNvcmRlciAmY2hhbmdlcmVjb3JkZXIsdGFuZ2xldHJhbnNsYXRvciAmYW5nbGV0cmFuc2xh dG9yKTsKICAgICAgICB9OwojIDkgImVuZ2luZS5oIiAyCiMgMSAiaW5qZmlyaW5nLmgiIDEKCgoK CgojIDEgImluanByb2YuaCIgMQoKCgoKCgoKY2xhc3MgdGluamVjdG9ycHJvZmlsZSA6IHB1Ymxp YyB0d2l0aGhhcmRhdHRyCiAgICAgICAgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg ICB0aW50dmFsdWUgb3BlbnRpbWU7CiAgICAgICAgICAgICAgICB0aW50dmFsdWUgcmF0ZTsKICAg ICAgICAgICAgICAgIHRpbnR2YWx1ZSBsaW5lYXJzdGFydHRpbWU7CiAgICAgICAgICAgICAgICB0 Y3ljbGljYW5nbGV2YWx1ZSBjbG9zZWFuZ2xlOwogICAgICAgICAgICAgICAgdGRlbHRhYW5nbGV2 YWx1ZSBtYXhkdXR5OwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbmplY3RvcnBy b2ZpbGUoIGludCBkZWZhdWx0cmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk ZWZhdWx0b3BlbnRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGxp bmVhcnN0YXJ0dGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmdsZSBkZWZhdWx0 Y2xvc2VhbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmds ZSBkZWZhdWx0bWF4ZHV0eSk7CiAgICAgICAgICAgICAgICBpbnQgdGltZWZvcmZ1ZWwoaW50IHJw bSxpbnQgbWFwLGludCBiYXR2b2x0LGludCBtYXNzLGludCAmbWFzc2xlZnQpOwoKICAgICAgICB0 YW5nbGUgZ2V0Y2xvc2VhbmdsZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNs b3NlYW5nbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9OwojIDcgImluamZpcmluZy5oIiAyCgpj bGFzcyB0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgOiBwdWJsaWMgdHdpdGhoYXJkYXR0 cgogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgIHRpbmplY3RvcnByb2ZpbGUgJmlu anNldDsKICAgICAgICAgICAgICAgIGJvb2wgZG91YmxlZmlyZTsKICAgICAgICAgICAgICAgIHRh bmdsZSB0ZGNvZmZzZXQ7CiAgICAgICAgICAgICAgICB0aW50dmFsdWUgdHJpbTsKICAgICAgICAg ICAgICAgIHRhbmdsZSBvZmZzZXR0b3NlY29uZGZpcmluZzsKICAgIHB1YmxpYzoKICAgICAgICAg ICAgICAgIHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyggY29uc3QgY2hhciAqY2hhbnRy aW1uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRhbmdsZSBhdGRjb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGluamVjdG9ycHJvZmlsZSAmcHJvZmlsZSk7CgogICAgICAgIHZvaWQgZ2V0YW5n bGVzKCBpbnQgcnBtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBiYXR2b2x0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG1hc3NyZXF1aXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbmds ZSBmdWxsc3luY2N5Y2xlYW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJm1h c3NsZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICZvcGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGFuZ2xlICZjbG9zZSApIDsKICAgICAgICB9OwojIDEwICJl bmdpbmUuaCIgMgojIDEgImlnbmZpcmluZy5oIiAxCgoKCgoKCgojIDEgImlnbml0ZXJwcm9mLmgi IDEKCgoKCgoKCmNsYXNzIHRpZ25pdGVycHJvZmlsZTogcHVibGljIHR3aXRoaGFyZGF0dHIKICAg ICAgICB7CiAgICAgICAgcHJpdmF0ZToKCiAgICAgICAgICAgICAgICB0aW50dmFsdWUgZHdlbGw7 CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGlnbml0ZXJwcm9maWxlKCBpbnQgZGVm YXVsdGR3ZWxsKTsKICAgICAgICBpbnQgZ2V0ZHdlbGwoKQogICAgICAgICAgICB7CiAgICAgICAg ICAgIHJldHVybiBkd2VsbDsKICAgICAgICAgICAgfQogICAgICAgIH07CiMgOSAiaWduZmlyaW5n LmgiIDIKCmNsYXNzIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzIDogcHVibGljIHR3aXRo aGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICB0YW5nbGUgdGRjb2Zm c2V0OwogICAgICAgICAgICAgICAgdGRlbHRhYW5nbGV2YWx1ZSB0cmltOwogICAgICAgIHRhbmds ZSBvcGVuYW5nbGUsY2xvc2VhbmdsZTsKICAgICAgICB0aWduaXRlcnByb2ZpbGUgJmlnbnByb2Y7 CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGlnbml0aW9uZXZlbnRmaXJpbmdwYXJh bXRlcnMoY29uc3QgY2hhciAqY3lsaW5kZXJkZXNjLHRhbmdsZSBhdGRjb2Zmc2V0LHRpZ25pdGVy cHJvZmlsZSAmYWlnbnByb2YpOwogICAgICAgIHZvaWQgZ2V0YW5nbGVzKGludCBycG0sIHRhbmds ZSBhZHZhbmNlLHRhbmdsZSBmdWxsY3ljbGVhbmdsZSwgdGFuZ2xlICZvcGVuLCB0YW5nbGUgJmNs b3NlKTsKICAgICAgICB9OwojIDExICJlbmdpbmUuaCIgMgoKCgojIDEgImV2ZW50dXNlci5oIiAx CiMgMTAgImV2ZW50dXNlci5oIgpjbGFzcyB0ZXZlbnR1c2VyOiBwdWJsaWMgdGFuZ2xldHJhbnNs YXRvcixwdWJsaWMgdGNoYW5nZXJlY29yZGVyCiAgICAgICAgewogICAgICAgIHByb3RlY3RlZDoK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuZXh0ZXZlbnRhbmdsZTsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBudW1iZXJvZmNoYWluczsKICAgICAgICAgICAgICAgIHRldmVudCog bmV4dGV2ZW50WzIwXTsKCgogICAgICAgICAgICAgICAgdm9pZCBjaGFuZ2VpZnNjaGVkdWxlZCh0 ZXZlbnQgKm9sZCx0ZXZlbnQgKm5ld2UpOwogICAgICAgICAgICAgICAgdm9pZCBjaGFuZ2VpZnNj aGVkdWxlZGFuZG5vdHRvb2Zhcih0ZXZlbnQgKnByZXYsdGV2ZW50ICpvbGQsdGV2ZW50ICpuZXdl KTsKICAgICAgICAgICAgICAgIGJvb2wgaXNvbGRldmVudCgpOwogICAgICAgIHByaXZhdGU6CiAg ICAgICAgICAgICAgICBpbnQgY3VycmVudGNhbGxiYWNrY2hhaW47CiAgICAgICAgbG9jYWw6OnZl Y3Rvcjx0ZXZlbnRzb3VyY2UqPiBzb3VyY2VzOwogICAgICAgICAgICAgICAgdGFuZ2xlIGZ1bGxz eW5jY3ljbGVhbmdsZTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0ZXZlbnR1c2Vy KHRhbmdsZSBhZnVsbHN5bmNjeWNsZWFuZ2xlKTsKICAgICAgICAgICAgICAgIH50ZXZlbnR1c2Vy KCk7CiAgICAgICAgICAgICAgICB2b2lkIHJlc2NoZWR1bGUoKTsKICAgICAgICAgICAgICAgIHZv aWQgYXR0YWNoZXZlbnRzb3VyY2UodGV2ZW50c291cmNlICZzb3VyY2UpOwogICAgICAgICAgICAg ICAgdGFuZ2xlIGN5Y2xlYW5nbGUoKSB7cmV0dXJuIGZ1bGxzeW5jY3ljbGVhbmdsZTt9OwogICAg ICAgIH07CiMgMTUgImVuZ2luZS5oIiAyCiMgMSAiZmVlZGJhY2suaCIgMQoKCgoKCiMgMSAibWFw bGVhcm4uaCIgMQoKCgpzdHJ1Y3QgdGdlbmVyaWNtYXBsb2NhdGlvbgogICAgICAgIHsKICAgICAg ICBpbnQgYTsKICAgICAgICBpbnQgYjsKICAgICAgICBpbnQgYzsKICAgIHRnZW5lcmljbWFwbG9j YXRpb24oKQogICAgICAgIHsKICAgICAgICB9CiAgICB0Z2VuZXJpY21hcGxvY2F0aW9uKGludCBh YSxpbnQgYmIsaW50IGNjKQogICAgICAgIDoKICAgICAgICBhKGFhKSwKICAgICAgICBiKGJiKSwK ICAgICAgICBjKGNjKQogICAgICAgIHsKICAgICAgICB9CiAgICAgICAgfTsKCmNsYXNzIHRtYXBs ZWFybmVyCiAgICAgICAgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHZpcnR1YWwg dm9pZCBsZWFybnZlcG9pbnQodGdlbmVyaWNtYXBsb2NhdGlvbiAmbG9jYXRpb24pPTA7CiAgICAg ICAgfTsKIyA3ICJmZWVkYmFjay5oIiAyCiMgMSAic3RkY3h4L2xvY2FsZGVxdWUuaCIgMQoKCgoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvZGVxdWUiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvZysr LXYzL2RlcXVlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o IiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK CiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2 b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNf ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292 ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxv d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUo Y29uc3QgY2hhciogX19zKTsKfQojIDY3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2RlcXVlIiAyIDMK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAxIDMKIyA3MiAi L3Vzci9pbmNsdWRlL2crKy12My9kZXF1ZSIgMiAzCiMgNSAic3RkY3h4L2xvY2FsZGVxdWUuaCIg MgoKCgoKCm5hbWVzcGFjZSBsb2NhbAogICAgewoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULAog ICAgICAgICAgICAgICAgdHlwZW5hbWUgQUxMT0M9dGhlYXBhbGxvY2F0b3I8VD4gPgogICAgY2xh c3MgZGVxdWUgOiBwdWJsaWMgc3RkOjpkZXF1ZTxULEFMTE9DPgogICAgICAgIHsKICAgICAgICB9 OwoKCgogICAgfTsKIyA4ICJmZWVkYmFjay5oIiAyCgpjbGFzcyB0ZmVlZGJhY2tsb29wIDogcHVi bGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg ICAgIGludCB2ZXR3aWRkbGU7CiAgICAgICAgICAgICAgICBib29sIGxhc3RveHl3YXNsZWFuOwoK ICAgICAgICAgICAgICAgIHRib29sdmFsdWUgY2xvc2VkbG9vcDsKICAgICAgICAgICAgICAgIHRi b29sdmFsdWUgbGVhcm5vbjsKCiAgICAgICAgICAgICAgICB0aW50dmFsdWUgdGltZXVudGlsaG90 OwogICAgICAgICAgICAgICAgdGludHZhbHVlIGNoYW5nZWNvdW50OwogICAgICAgICAgICAgICAg dGludHZhbHVlIHN0b2ljOwogICAgICAgICAgICAgICAgdGludHZhbHVlIHN0b2ljcmFuZ2U7Cgog ICAgICAgICAgICAgICAgdGludHZhbHVlIG94eXRhcmdldDsKICAgICAgICAgICAgICAgIHRpbnR2 YWx1ZSBsZWFub3h5dm9sdDsKICAgICAgICAgICAgICAgIHRpbnR2YWx1ZSB2ZXR3aWRkbGVyYXRl OwoKICAgICAgICAgICAgICAgIHRpbnR2YWx1ZSBtaW5jbGVhbmhpc3RvcnlsZW47CgogICAgICAg ICAgICAgICAgYm9vbCBoYWR2b2x0YWdleWV0OwogICAgICAgICAgICAgICAgYm9vbCBsb29wY2xv c2FibGU7CiAgICAgICAgICAgICAgICBpbnQgY2xlYW5oaXN0b3J5bGVuOwoKICAgICAgICBzdHJ1 Y3QgeHl6bG9jCiAgICAgICAgICAgIHsKICAgICAgICAgICAgc2hvcnQgeDsKICAgICAgICAgICAg c2hvcnQgeTsKICAgICAgICAgICAgc2hvcnQgejsKICAgICAgICAgICAgfTsKICAgICAgICBsb2Nh bDo6ZGVxdWU8eHl6bG9jPiBsZWFybmxvY2F0aW9uaGlzdG9yeTsKICAgICAgICAgICAgICAgIHRn ZW5lcmljbWFwbG9jYXRpb24gbGFzdGxlYXJudHBvaW50OwogICAgICAgICAgICAgICAgYm9vbCBs ZWFybnB0dmFsaWQ7CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRmZWVkYmFja2xv b3AoIGJvb2wgZGVmYXVsdGNsb3NlZGxvb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBkZWZhdWx0bGVhcm5vbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGRlZmF1bHRsZWFybmFsd2F5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZGVmYXVsdHRpbWV1bnRpbGhvdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZGVmYXVsdHN0b2ljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZh dWx0c3RvaWNtYXJnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZGVmYXVsdG94eXRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZGVmYXVsdGxlYW5veHl2b2x0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk ZWZhdWx0dmV0d2lkZGxlcmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZGVmYXVsdGxlYXJuZGVsYXkgKTsKCiAgICAgICAgICAgICAgICB2b2lkIG1hbnVhbGxlYW5lcigp OwogICAgICAgICAgICAgICAgdm9pZCBtYW51YWxyaWNoZXIoKTsKCiAgICAgICAgICAgICAgICBp bnQgcGVyaW9kaWMoIHVuc2lnbmVkIGludCBmcmVxLAogICAgICAgICAgICAgICAgICAgICAgICBp bnQgcnBtLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3h5dm9sdCwKICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBveHlkaXNhYmxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bWFwbGVhcm5lciAmbWFwbGVhcm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0Z2VuZXJpY21hcGxvY2F0aW9uICZtYXBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIG1hcGxvY2F0aW9udmFsaWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHRhcmdldGFmcmF0aW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHRpbWVzaW5jZXN0YXJ0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg bGVhcm5vayk7CgogICAgICAgICAgICAgICAgYm9vbCBpc2xlYXJub24oKSB7cmV0dXJuIGxlYXJu b247fTsKICAgICAgICB9OwojIDE2ICJlbmdpbmUuaCIgMgoKY2xhc3MgdGVuZ2luZXBhcnRzCiAg ICB7CiAgICBwdWJsaWM6CiAgICAgICAgY2xhc3MgdGluamVjdG9yY2hhbm5lbAogICAgICAgICAg ICB7CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB0b25vZmZjaGFubmVsIGNo YW5uZWw7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRpbmplY3RvcmNoYW5u ZWwodGV2ZW50cG9vbCAmZXZlbnRoZWFwLHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICphZGRyLHVu c2lnbmVkIHNob3J0IGJpdHN0b3NldCxib29sIHJldmVyc2VkKQogICAgICAgICAgICAgICAgICAg IDoKICAgICAgICAgICAgICAgICAgICBjaGFubmVsKGV2ZW50aGVhcCxhZGRyLGJpdHN0b3NldCxy ZXZlcnNlZCx0cnVlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICB2b2lkIGFkZGZpcmluZyh0b25vZmZhbmdsZXMgJmFuZ2xlcykKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC5hZGRwdWxzZShh bmdsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZvaWQgcmVtb3Zl ZmlyaW5nKHRvbm9mZmFuZ2xlcyAmYW5nbGVzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICBjaGFubmVsLnJlbW92ZXB1bHNlKGFuZ2xlcyk7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgdGV2ZW50c291cmNlICZnZXRjaGFubmVsKCkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWw7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aWduaXRpb25j aGFubmVsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgICAg IHRvbm9mZmNoYW5uZWwgY2hhbm5lbDsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAg ICAgdGlnbml0aW9uY2hhbm5lbCh0ZXZlbnRwb29sICZldmVudGhlYXAsdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKmFkZHIsdW5zaWduZWQgc2hvcnQgYml0c3Rvc2V0LGJvb2wgcmV2ZXJzZWQpCiAg ICAgICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgIGNoYW5uZWwoZXZlbnRoZWFw LGFkZHIsYml0c3Rvc2V0LHJldmVyc2VkLGZhbHNlKQogICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2b2lkIGFkZGZpcmluZyh0b25vZmZh bmdsZXMgJmFuZ2xlcykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg Y2hhbm5lbC5hZGRwdWxzZShhbmdsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIHZvaWQgcmVtb3ZlZmlyaW5nKHRvbm9mZmFuZ2xlcyAmYW5nbGVzKQogICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnJlbW92ZXB1bHNlKGFuZ2xl cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV2ZW50c291cmNlICZn ZXRjaGFubmVsKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGNoYW5uZWw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgIHBy aXZhdGU6CiAgICAgICAgY2xhc3MgdGZlZWRiYWNrY2hhbm5lbAogICAgICAgICAgICB7CiAgICAg ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBpbnQgY3VycmVudHR3aWRkbGU7CiAgICAg ICAgICAgICAgICB0ZmVlZGJhY2tsb29wICZsb29wOwogICAgICAgICAgICBwdWJsaWM6CiAgICAg ICAgICAgICAgICB0ZmVlZGJhY2tjaGFubmVsKCB0ZmVlZGJhY2tsb29wICZhbG9vcCApCiAgICAg ICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgIGxvb3AoYWxvb3ApCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGludCBn ZXRmdWVsbWFzc3R3aWRkbGUoKSB7cmV0dXJuIGN1cnJlbnR0d2lkZGxlO30KICAgICAgICAgICAg ICAgIGJvb2wgaXN0aGlzKCB0ZmVlZGJhY2tsb29wICZhbG9vcCApIHtyZXR1cm4gJmxvb3A9PSZh bG9vcDt9CiAgICAgICAgICAgICAgICB2b2lkIHNldHZhbHVlKCBpbnQgdmFsdWUgKSB7Y3VycmVu dHR3aWRkbGU9dmFsdWU7fQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aW5qZWN0b3Jm aXJpbmcKICAgICAgICAgICAgewogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg dG9ub2ZmYW5nbGVzIGFuZ2xlczsKICAgICAgICAgICAgICAgIHRpbmplY3RvcmV2ZW50ZmlyaW5n cGFyYW1ldGVycyAmZmlyaW5nOwogICAgICAgICAgICAgICAgdGluamVjdG9yY2hhbm5lbCAmY2hh bm5lbDsKICAgICAgICAgICAgICAgIHRpbmplY3RvcmZpcmluZyogc2Vjb25kYXJ5ZmlyaW5nOwog ICAgICAgICAgICAgICAgaW50IGZ1ZWxkaXZpc29yOwogICAgICAgICAgICAgICAgdGZlZWRiYWNr Y2hhbm5lbCAmZmVlZGJhY2s7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRp bmplY3RvcmZpcmluZyggdGluamVjdG9yY2hhbm5lbCAmYWNoYW5uZWwsdGluamVjdG9yZXZlbnRm aXJpbmdwYXJhbWV0ZXJzICZhZmlyaW5nLGludCBmdWVsZGl2aXNvcix0ZmVlZGJhY2tjaGFubmVs ICZmZWVkYmFjayApOwogICAgICAgICAgICAgICAgfnRpbmplY3RvcmZpcmluZygpOwogICAgICAg ICAgICAgICAgdm9pZCBhZGRzZWNvbmRhcnlmaXJpbmcoIHRpbmplY3RvcmNoYW5uZWwgJmFjaGFu bmVsLHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyAmYWZpcmluZyApOwogICAgICAgICAg ICAgICAgdm9pZCBzZXRhbmdsZXMoaW50IHJwbSxpbnQgbWFwLGludCBiYXR2b2x0LGludCBtYXNz LHRhbmdsZSBmdWxsY3ljbGVhbmdsZSk7CiAgICAgICAgICAgICAgICBib29sIGlzdGhpcyh0aW5q ZWN0b3JjaGFubmVsICZhY2hhbm5lbCx0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgJmFm aXJpbmcgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g JmNoYW5uZWw9PSZhY2hhbm5lbCAmJiAmZmlyaW5nPT0mYWZpcmluZzsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyB0aWduaXRpb25maXJpbmcKICAg ICAgICAgICAgewogICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgdG9ub2ZmYW5n bGVzIGFuZ2xlczsKICAgICAgICAgICAgICAgIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJz ICZmaXJpbmc7CiAgICAgICAgICAgICAgICB0aWduaXRpb25jaGFubmVsICZjaGFubmVsOwogICAg ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0aWduaXRpb25maXJpbmcoIHRpZ25pdGlv bmNoYW5uZWwgJmFjaGFubmVsLHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzICZhZmlyaW5n ICk7CiAgICAgICAgICAgICAgICB+dGlnbml0aW9uZmlyaW5nKCk7CiAgICAgICAgICAgICAgICB2 b2lkIHNldGFuZ2xlcyhpbnQgcnBtLHRhbmdsZSBhZHZhbmNlLHRhbmdsZSBmdWxsY3ljbGVhbmds ZSk7CiAgICAgICAgICAgICB9OwoKCiAgICAgICAgbG9jYWw6OnNsaXN0PHRpbmplY3RvcmZpcmlu Zz4gaW5qZWN0b3JmaXJpbmdzOwogICAgICAgIGxvY2FsOjpzbGlzdDx0aWduaXRpb25maXJpbmc+ IGlnbml0aW9uZmlyaW5nczsKICAgICAgICBsb2NhbDo6dmVjdG9yPHRpbmplY3RvcmNoYW5uZWwg Kj4gaW5qZWN0b3JjaGFubmVsczsKICAgICAgICBsb2NhbDo6dmVjdG9yPHRpZ25pdGlvbmNoYW5u ZWwgKj4gaWduaXRpb25jaGFubmVsczsKICAgICAgICBsb2NhbDo6c2xpc3Q8dGZlZWRiYWNrY2hh bm5lbD4gZmVlZGJhY2tjaGFubmVsczsKICAgICAgICB0ZXZlbnR1c2VyICZldmVudHVzZXI7CiAg ICAgICAgdGVuZ2luZXByb2ZpbGUgJmVuZ2luZXByb2ZpbGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAg ICAgdm9pZCBhZGRjaGFubmVsKHRpbmplY3RvcmNoYW5uZWwgJmNoYW5uZWwpOwogICAgICAgIHZv aWQgYWRkY2hhbm5lbCh0aWduaXRpb25jaGFubmVsICZjaGFubmVsKTsKICAgICAgICBib29sIGFk ZGV2ZW50KHRpbmplY3RvcmV2ZW50ZmlyaW5ncGFyYW1ldGVycyAmZmlyaW5nLHRpbmplY3RvcmNo YW5uZWwgJmNoYW5uZWwsaW50IGZ1ZWxkaXZpc29yLHRmZWVkYmFja2xvb3AgJmZlZWRiYWNrKTsK ICAgICAgICB2b2lkIGFkZGV2ZW50KHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJzICZmaXJp bmcsdGlnbml0aW9uY2hhbm5lbCAmY2hhbm5lbCk7CiAgICAgICAgYm9vbCBhZGRzZWNvbmRhcnll dmVudCggdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJzICZmaXJpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aW5qZWN0b3JjaGFubmVsICZjaGFubmVsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJz ICZmaXJpbmdwcmltYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluamVj dG9yY2hhbm5lbCAmY2hhbm5lbHByaW1hcnkgKTsKCiAgICAgICAgdm9pZCBzZXRpbmplY3RvcmFu Z2xlcyhpbnQgcnBtLGludCBtYXAsaW50IGJhdHZvbHQsaW50IG1hc3MpOwogICAgICAgIHZvaWQg c2V0aWduaXRpb25hbmdsZXMoaW50IHJwbSwgdGFuZ2xlIGFkdmFuY2UpOwogICAgcHVibGljOgog ICAgICAgIHRlbmdpbmVwYXJ0cyh0ZXZlbnR1c2VyICZhZXZlbnR1c2VyLHRlbmdpbmVwcm9maWxl ICZhZW5naW5lcHJvZmlsZSk7CiAgICAgICAgdm9pZCBzZXRhbmdsZXMoaW50IHJwbSxpbnQgbWFw LGludCBiYXR2b2x0LHRhbmdsZSBhZHZhbmNlLGludCBmdWVsbWFzc3BlcmN5bHBlcmN5Y2xlKTsK ICAgICAgICB2b2lkIHNldGZlZWRiYWNrdmFsdWUodGZlZWRiYWNrbG9vcCAmZmVlZGJhY2tsb29w LGludCB2YWx1ZSk7CiAgICB9OwojIDIgImk0ZW5naW5lLmgiIDIKIyAxICJldmVudHBvb2wuaCIg MQoKCgoKCmNsYXNzIHRhcnJheWV2ZW50cG9vbCA6IHB1YmxpYyB0ZXZlbnRwb29sCiAgICAgICAg ewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBuZXh0ZXZl bnQ7CiAgICAgICAgICAgICAgICB0ZXZlbnQgKmZyZWVoZWFkOwogICAgICAgIHByb3RlY3RlZDoK ICAgICAgICAgICAgICAgIHZvaWQgYWRkZXZlbnRhcnJheSh0ZXZlbnQgZXZlbnRzW10saW50IG51 bWJlcm9mZXZlbnRzKTsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0YXJyYXlldmVu dHBvb2woKTsKICAgICAgICAgICAgICAgIHRhcnJheWV2ZW50cG9vbCh0ZXZlbnQgZXZlbnRzW10s aW50IG51bWJlcm9mZXZlbnRzKTsKCiAgICAgICAgICAgICAgICB0ZXZlbnQgKmFsbG9jZXZlbnQo IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwb3J0YWRkcmVzcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzYWZlKTsKCiAgICAgICAgICAgICAg ICB2b2lkIGZyZWVldmVudCh0ZXZlbnQgKmV2ZW50KTsKICAgICAgICB9OwoKdGVtcGxhdGUgPGlu dCBOPiBjbGFzcyB0c3RhdGljZXZlbnRwb29sIDogcHVibGljIHRhcnJheWV2ZW50cG9vbAogICAg ICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgdGV2ZW50IGV2ZW50c1tOXTsK ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0c3RhdGljZXZlbnRwb29sKCkgOiB0YXJy YXlldmVudHBvb2woZXZlbnRzLE4pIHsgfTsKICAgICAgICB9OwojIDMgImk0ZW5naW5lLmgiIDIK IyAxICJpbml0aWFsbWFwLmgiIDEKCgoKCgpleHRlcm4gdHN0YXRpY21hcCBpbml0aWFsdmU7CmV4 dGVybiB0c3RhdGljbWFwIGluaXRpYWxhZHY7CiMgNCAiaTRlbmdpbmUuaCIgMgoKdW5zaWduZWQg c2hvcnQgZHVtbXk7CgpjbGFzcyB0aTRlbmdpbmUgOiBwdWJsaWMgdGVuZ2luZXBhcnRzCiAgICB7 CiAgICBwcml2YXRlOgogICAgICAgdHN0YXRpY2V2ZW50cG9vbDwxNTA+IGV2ZW50cG9vbDsKICAg ICAgIHRldmVudHVzZXIgJmV2ZW50c3lzdGVtOwogICAgICAgdGVuZ2luZXByb2ZpbGUgZW5naW5l cHJvZmlsZTsKCiAgICAgICB0aWduaXRlcnByb2ZpbGUgaWducHJvZjsKICAgICAgIHRpZ25pdGlv bmNoYW5uZWwgaWduY2hhbm5lbDsKICAgICAgIHRpZ25pdGlvbmV2ZW50ZmlyaW5ncGFyYW10ZXJz IGlnbjE0LGlnbjIzOwoKICAgICAgIHRpbmplY3RvcnByb2ZpbGUgaW5qcHJvZjsKICAgICAgIHRp bmplY3RvcmNoYW5uZWwgaW5qY2hhbjEsaW5qY2hhbjIsaW5qY2hhbjMsaW5qY2hhbjQ7CiAgICAg ICB0aW5qZWN0b3JldmVudGZpcmluZ3BhcmFtZXRlcnMgaW5qZmlyaW5nMSxpbmpmaXJpbmcyLGlu amZpcmluZzMsaW5qZmlyaW5nNDsKCiAgICAgICB0aW5qZWN0b3Jwcm9maWxlIGluanByb2ZzZWM7 CiAgICAgICB0aW5qZWN0b3JjaGFubmVsIGluamNoYW4xc2VjLGluamNoYW4yc2VjLGluamNoYW4z c2VjLGluamNoYW40c2VjOwogICAgICAgdGluamVjdG9yZXZlbnRmaXJpbmdwYXJhbWV0ZXJzIGlu amZpcmluZzFzZWMsaW5qZmlyaW5nMnNlYyxpbmpmaXJpbmczc2VjLGluamZpcmluZzRzZWM7Cgog ICAgICAgdGZlZWRiYWNrbG9vcCBmZWVkYmFjazsKCiAgICAgICAgcHVibGljOgogICAgICAgdGk0 ZW5naW5lKHRldmVudHVzZXIgJmV2ZW50ZXhlYykKICAgICAgICAgICA6CiAgICAgICAgICAgdGVu Z2luZXBhcnRzKGV2ZW50ZXhlYyxlbmdpbmVwcm9maWxlKSwKICAgICAgICAgICBldmVudHN5c3Rl bShldmVudGV4ZWMpLAoKICAgICAgICAgICBlbmdpbmVwcm9maWxlKDUxNyxpbml0aWFsdmUsaW5p dGlhbGFkdiwyMDAsNjUwMCwxMDAwLDE0NzAwKSwKCiAgICAgICAgICAgZmVlZGJhY2soZmFsc2Us ZmFsc2UsZmFsc2UsMjAwMDAsMTQ3MDAsMTAwLDYwMCwxMDAsMjAwMDAsMjApICwKCiAgICAgICAg ICAgaWducHJvZigyNDAwKSwKICAgICAgICAgICBpZ25jaGFubmVsKGV2ZW50cG9vbCwmZHVtbXks MHgwMDAxLGZhbHNlKSwKICAgICAgICAgICBpZ24xNCgiMWFuZDQiLCgodGFuZ2xlKSgoKGludCkw KTw8MTYpKSxpZ25wcm9mKSwKICAgICAgICAgICBpZ24yMygiMmFuZDMiLCgodGFuZ2xlKSgoKGlu dCkxODApPDwxNikpLGlnbnByb2YpLAoKICAgICAgICAgICBpbmpwcm9mKCAyNDAsIDUwMCwgMTAw MCwoKHRhbmdsZSkoKChpbnQpMTgwKTw8MTYpKSwgKCh0YW5nbGUpKCgoaW50KTMzMCk8PDE2KSkp LAogICAgICAgICAgIGluamNoYW4xKGV2ZW50cG9vbCwgJmR1bW15LCAweDAxMDAsIGZhbHNlKSwK ICAgICAgICAgICBpbmpjaGFuMihldmVudHBvb2wsICZkdW1teSwgMHgwMjAwLCBmYWxzZSksCiAg ICAgICAgICAgaW5qY2hhbjMoZXZlbnRwb29sLCAmZHVtbXksIDB4MDQwMCwgZmFsc2UpLAogICAg ICAgICAgIGluamNoYW40KGV2ZW50cG9vbCwgJmR1bW15LCAweDA4MDAsIGZhbHNlKSwKICAgICAg ICAgICBpbmpmaXJpbmcxKCJUcmltMSIsKCh0YW5nbGUpKCgoaW50KTApPDwxNikpLGluanByb2Yp LAogICAgICAgICAgIGluamZpcmluZzIoIlRyaW0yIiwoKHRhbmdsZSkoKChpbnQpMTgwKTw8MTYp KSxpbmpwcm9mKSwKICAgICAgICAgICBpbmpmaXJpbmczKCJUcmltMyIsKCh0YW5nbGUpKCgoaW50 KTE4MCk8PDE2KSksaW5qcHJvZiksCiAgICAgICAgICAgaW5qZmlyaW5nNCgiVHJpbTQiLCgodGFu Z2xlKSgoKGludCkwKTw8MTYpKSxpbmpwcm9mKSwKCiAgICAgICAgICAgaW5qcHJvZnNlYyggMjQw LCA1MDAsIDEwMDAsKCh0YW5nbGUpKCgoaW50KTE4MCk8PDE2KSksICgodGFuZ2xlKSgoKGludCkz NTUpPDwxNikpKSwKICAgICAgICAgICBpbmpjaGFuMXNlYyhldmVudHBvb2wsICZkdW1teSwgMHgx MDAwLCBmYWxzZSksCiAgICAgICAgICAgaW5qY2hhbjJzZWMoZXZlbnRwb29sLCAmZHVtbXksIDB4 MjAwMCwgZmFsc2UpLAogICAgICAgICAgIGluamNoYW4zc2VjKGV2ZW50cG9vbCwgJmR1bW15LCAw eDQwMDAsIGZhbHNlKSwKICAgICAgICAgICBpbmpjaGFuNHNlYyhldmVudHBvb2wsICZkdW1teSwg MHg4MDAwLCBmYWxzZSksCiAgICAgICAgICAgaW5qZmlyaW5nMXNlYygiVHJpbTEiLCgodGFuZ2xl KSgoKGludCkwKTw8MTYpKSxpbmpwcm9mc2VjKSwKICAgICAgICAgICBpbmpmaXJpbmcyc2VjKCJU cmltMiIsKCh0YW5nbGUpKCgoaW50KTE4MCk8PDE2KSksaW5qcHJvZnNlYyksCiAgICAgICAgICAg aW5qZmlyaW5nM3NlYygiVHJpbTMiLCgodGFuZ2xlKSgoKGludCkxODApPDwxNikpLGluanByb2Zz ZWMpLAogICAgICAgICAgIGluamZpcmluZzRzZWMoIlRyaW00IiwoKHRhbmdsZSkoKChpbnQpMCk8 PDE2KSksaW5qcHJvZnNlYykKICAgICAgICAgICB7CiAgICAgICAgICAgYWRkY2hhbm5lbChpZ25j aGFubmVsKTsKCiAgICAgICAgICAgYWRkZXZlbnQoaWduMTQsaWduY2hhbm5lbCk7CiAgICAgICAg ICAgYWRkZXZlbnQoaWduMjMsaWduY2hhbm5lbCk7CgogICAgICAgICAgIGFkZGNoYW5uZWwoaW5q Y2hhbjEpOwogICAgICAgICAgIGFkZGNoYW5uZWwoaW5qY2hhbjIpOwogICAgICAgICAgIGFkZGNo YW5uZWwoaW5qY2hhbjMpOwogICAgICAgICAgIGFkZGNoYW5uZWwoaW5qY2hhbjQpOwoKICAgICAg ICAgICBhZGRldmVudChpbmpmaXJpbmcxLGluamNoYW4xLDEsZmVlZGJhY2spOwogICAgICAgICAg IGFkZGV2ZW50KGluamZpcmluZzIsaW5qY2hhbjIsMSxmZWVkYmFjayk7CiAgICAgICAgICAgYWRk ZXZlbnQoaW5qZmlyaW5nMyxpbmpjaGFuMywxLGZlZWRiYWNrKTsKICAgICAgICAgICBhZGRldmVu dChpbmpmaXJpbmc0LGluamNoYW40LDEsZmVlZGJhY2spOwoKICAgICAgICAgICBhZGRjaGFubmVs KGluamNoYW4xc2VjKTsKICAgICAgICAgICBhZGRjaGFubmVsKGluamNoYW4yc2VjKTsKICAgICAg ICAgICBhZGRjaGFubmVsKGluamNoYW4zc2VjKTsKICAgICAgICAgICBhZGRjaGFubmVsKGluamNo YW40c2VjKTsKCiAgICAgICAgICAgYWRkc2Vjb25kYXJ5ZXZlbnQoaW5qZmlyaW5nMXNlYyxpbmpj aGFuMXNlYyxpbmpmaXJpbmcxLGluamNoYW4xKTsKICAgICAgICAgICBhZGRzZWNvbmRhcnlldmVu dChpbmpmaXJpbmcyc2VjLGluamNoYW4yc2VjLGluamZpcmluZzIsaW5qY2hhbjIpOwogICAgICAg ICAgIGFkZHNlY29uZGFyeWV2ZW50KGluamZpcmluZzNzZWMsaW5qY2hhbjNzZWMsaW5qZmlyaW5n MyxpbmpjaGFuMyk7CiAgICAgICAgICAgYWRkc2Vjb25kYXJ5ZXZlbnQoaW5qZmlyaW5nNHNlYyxp bmpjaGFuNHNlYyxpbmpmaXJpbmc0LGluamNoYW40KTsKICAgICAgICAgICB9CiAgICB9OwojIDIg ImNvbmZpZy5jYyIgMgojIDEgImV2ZW50ZXhlLmgiIDEKCgoKIyAxICJ0b290aHdoZWVsLmgiIDEK CgoKCgojIDEgImFsYXJtLmgiIDEKCgoKCgoKCmNsYXNzIHRhbGFybXNvdXJjZSA6IHB1YmxpYyB0 aGFyZGF0dHJpYnV0ZQogICAgICAgIHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAg aW50ICpldmVudGNvdW50ZXI7CiAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdGNvdW50ZXI7CiAg ICAgICAgICAgICAgICBib29sIGlzc2V0OwogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBsb2Nh bDo6c3RyaW5nIHVuaXRzKCkgY29uc3Q7CiAgICAgICAgICAgICAgICBib29sIGZpbGx2YWx1ZXN0 cmluZyhsb2NhbDo6c3RyaW5nICZzKSBjb25zdDsKICAgICAgICB0d2l0aGF0dHI6OnJlYWR2YWx1 ZXJlc3VsdHMgcmVhZHZhbHVlc3RyaW5nKGxvY2FsOjpzdHJpbmcgY29uc3QgJnMpOwogICAgICAg ICAgICAgICAgYm9vbCBzYXZlKHR3cml0ZXNlcmlhbHN0cmVhbSAqcykgY29uc3Q7CiAgICAgICAg ICAgICAgICBib29sIGxvYWQodHJlYWRzZXJpYWxzdHJlYW0gKnMpOwogICAgICAgICAgICAgICAg Ym9vbCByZWFkb25seSgpIGNvbnN0OwoKICAgICAgICAgICAgICAgIHZvaWQgaW5jKGJvb2wgbG90 cyk7CiAgICAgICAgICAgICAgICB2b2lkIGRlYyhib29sIGxvdHMpOwogICAgICAgIGJvb2wgZ2V0 bG9naW5mbyggdW5zaWduZWQgY2hhciB2b2xhdGlsZSogJmF0dHJwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0YXR0cnZhbHVlcHJpbnRlciBjb25zdCAqJnN0cmNvbnYpIGNvbnN0OwogICAgcHVibGlj OgogICAgICAgICAgICAgICAgdGFsYXJtc291cmNlKGxvY2FsOjpzdHJpbmcgY29uc3QgJmRlc2Mp OwogICAgICAgICAgICAgICAgdm9pZCBzZXRjb3VudGVybWVtb3J5KGludCAqY291bnRlcik7Cgog ICAgICAgICAgICAgICAgdm9pZCBzZXRhbGFybWNvbmQoYm9vbCBhbGFybW9uKTsKICAgICAgICAg ICAgICAgIHZvaWQgYWxhcm1ldmVudCgpOwogICAgICAgIH07CgpjbGFzcyB0YWxhcm1zY2FubmVy IDogcHVibGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJpdmF0ZToKICAgICAg ICB0eXBlZGVmIGxvY2FsOjp2ZWN0b3I8dGFsYXJtc291cmNlICo+IHNvdXJjZXN0eXBlOwogICAg ICAgICAgICAgICAgc291cmNlc3R5cGUgc291cmNlczsKICAgICAgICAgICAgICAgIGludCAqZXZl bnRjb3VudGVyYXJyYXk7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgdGFsYXJtc2Nh bm5lcihpbnQgYWV2ZW50Y291bnRlcmFycmF5W10pOwogICAgICAgICAgICAgICAgdm9pZCBhZGRz b3VyY2UodGFsYXJtc291cmNlICopOwogICAgICAgICAgICAgICAgdm9pZCBjbGVhcmFsbCgpOwog ICAgICAgIH07CiMgNyAidG9vdGh3aGVlbC5oIiAyCgojIDEgImltYXRoLmgiIDEKCgpleHRlcm4g dW5zaWduZWQgaW50IGlzcXJ0KHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgaXNjYWxlKGludCBp bixpbnQgbnVtZXIsaW50IGRlbm9tKTsKCmlubGluZSB1bnNpZ25lZCBpbnQgbXVsdDE2MzIodW5z aWduZWQgaW50IGEsdW5zaWduZWQgc2hvcnQgYikKICAgICAgICB7CiAgICByZXR1cm4gYSpiOwoK ICAgICAgICB9CiMgOSAidG9vdGh3aGVlbC5oIiAyCiMgMTggInRvb3Rod2hlZWwuaCIKY29uc3Qg aW50IHNzbm90aW1pbmc9MDsKY29uc3QgaW50IHNzd2FpdGluZ2ZvcmVub3VnaHRlZXRoPTE7CmNv bnN0IGludCBzc2xvb2tpbmdmb3JnYXA9MjsKY29uc3QgaW50IHNzbG9va2luZ2ZvcmdhcDI9MzsK Y29uc3QgaW50IHNzc3luY2VkPTQ7CgoKCmNsYXNzIHR0b290aHdoZWVscHJvdG8gOiBwdWJsaWMg dGV2ZW50dXNlciwgcHVibGljIHR3aXRoaGFyZGF0dHIKICAgICAgICB7CiAgICAgICAgcHJvdGVj dGVkOgogICAgICAgICAgICAgICAgdHNob3J0dmFsdWUgc3luY3N0YXRlOwoKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB0aWNrc3BlcmFuZ2xlc3RlcDsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBzdGVwc3Rha2VuOwoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvdmVyZmxv d25jbGlja3M7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtYmVydG9za2lwOwoKICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoOwogICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhdGltZTsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBsYXN0dGltZXN0ZXA7CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5leHRldmVu dHN0ZXBtb25vdG9uaWM7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFzdGtub3duc3Rl cG1vbm90b25pYzsKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG90YWxzYW1wbGV0aW1l OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpZm92YWxpZGNvdW50OwogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGZpZm9pbnB0cjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB0b290aHRpbWVmaWZvWzRdOwoKICAgICAgICAgICAgICAgIHRjeWNsaWNhbmdsZXZhbHVlIGZy ZWZlcmVuY2VhbmdsZTsKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZXZzcGVyc3lu Y2N5Y2xlOwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHRhbGFybXNvdXJjZSB0b29s b25nYWxhcm07CiAgICAgICAgICAgICAgICB0YWxhcm1zb3VyY2UgZ2FwbGF0ZWFsYXJtOwogICAg ICAgICAgICAgICAgdGFsYXJtc291cmNlIGdhcGVhcmx5YWxhcm07CiAgICAgICAgcHVibGljOgog ICAgICAgICAgICAgICAgdHRvb3Rod2hlZWxwcm90byhpbnQgYXJldnNwZXJzeW5jY3ljbGUpOwog ICAgICAgIH07CiMgNzMgInRvb3Rod2hlZWwuaCIKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRF VElNRVIsIGludCBJTlRFUlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElN RVIsIGludCBUT09USEVER0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQg U1RFUFNQRVJUT09USCx0YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiBjbGFz cyB0dG9vdGh3aGVlbCA6IHB1YmxpYyB0dG9vdGh3aGVlbHByb3RvCiAgICAgICAgewogICAgICAg IHByaXZhdGU6CiAgICAgICAgICAgICAgICB2b2lkIHNjaGVkdWxlbmV4dCgpOwogICAgICAgICAg ICAgICAgdm9pZCB1bnNjaGVkdWxlbmV4dCgpOwogICAgICAgIGJvb2wgc3RhcnRlZDsKICAgICAg ICBwdWJsaWM6CiAgICAgICAgICAgICAgICB0dG9vdGh3aGVlbCggdm9pZCAoKnRpbWVyZXhwaXJl ZGludGVycnVwdCkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg c2hvcnQgdGltZXJwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKnRvb3RoaW50ZXJydXB0KSgpLAogICAgICAgICAgICAgICAgIHZvaWQgKCp0b290aHRvb2xv bmdpbnRlcnJ1cHQpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IHNob3J0IHRvb3RocHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIHNob3J0IGFyZXZzcGVyc3luY2N5Y2xlICk7CiAgICAgICAgICAgICAgICB2b2lkIHN0 YXJ0KCk7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBzYW1wbGVycG0odW5zaWduZWQg c2hvcnQgc2FtcGxlZnJlcSk7CgoKCiAgICAgICAgICAgICAgICBpbnQgdHJhbnNsYXRlYW5nbGV0 b3N0ZXAodGFuZ2xlIGFuZ2xlKTsKICAgICAgICAgICAgICAgIGJvb2wgaW5vcmRlcih0ZXZlbnQg KmEsdGV2ZW50ICpiKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIGludCBkPWItPmFuZ2xlc3RlcC1hLT5hbmdsZXN0ZXA7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChkPDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCs9KE5VTUJF Uk9GVEVFVEgqU1RFUFNQRVJUT09USCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo ZDwoKE5VTUJFUk9GVEVFVEgqU1RFUFNQRVJUT09USCkvMikpOwogICAgICAgICAgICAgICAgICAg ICAgICB9OwoKCiAgICAgICAgICAgICAgICBpbmxpbmUgdm9pZCBkb3Rvb3RoaW50ZXJydXB0KCk7 CiAgICAgICAgICAgICAgICBpbmxpbmUgdm9pZCBkb3Rvb3RodG9vbG9uZ2ludGVycnVwdCgpOwog ICAgICAgICAgICAgICAgaW5saW5lIHZvaWQgZG90aW1lcmV4cGlyZWRpbnRlcnJ1cHQoKTsKICAg ICAgICB9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRFVElNRVIsIGludCBJTlRF UlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElNRVIsIGludCBUT09USEVE R0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQgU1RFUFNQRVJUT09USCx0 YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiB0dG9vdGh3aGVlbCA8SU5URVJQ T0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09U SEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNM RUFOR0xFLEJBU0VDUFVGUkVRPiA6OnR0b290aHdoZWVsKHZvaWQgKCp0aW1lcmV4cGlyZWRpbnRl cnJ1cHQpKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRpbWVycHJpb3JpdHksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnRvb3RoaW50ZXJydXB0KSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCp0b290aHRvb2xvbmdpbnRlcnJ1cHQpKCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIHNob3J0IHRvb3RocHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZXZzcGVyc3luY2N5 Y2xlICkKICAgICAgICA6CiAgICAgICAgdHRvb3Rod2hlZWxwcm90byhhcmV2c3BlcnN5bmNjeWNs ZSksCiAgICBzdGFydGVkKGZhbHNlKQogICAgICAgIHsKCgogICAgSU5URVJQT0xBVEVUSU1FUjo6 c3RvcCgpOwogICAgICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGludGVycnVwdHZlY3RvcnMoCiAg ICAgICAgICAgICAgICAgICAgdGltZXJleHBpcmVkaW50ZXJydXB0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVycHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAg ICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c2V0dXAoY29tcGFyZW5vb3V0cHV0LG5vdHVzZWQsZGlz YWJsZWQscmlzaW5nLElOVEVSUE9MQVRFVElNRVJESVYpOwogICAgSU5URVJQT0xBVEVUSU1FUjo6 Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKCgoKCgogICAgVE9PVEhFREdFQ0FQVFVS RVRJTUVSOjpzdG9wKCk7CiAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpzZXRpbnRlcnJ1 cHR2ZWN0b3JzKAogICAgICAgICAgICAgICAgICAgIHRvb3RoaW50ZXJydXB0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0b29sb25naW50ZXJydXB0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGhwcmlvcml0eSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6OnNl dHVwKGlucHV0bWF0Y2hmYWxsaW5nLGNvbXBhcmVub291dHB1dCxjaGFuYSxyaXNpbmcsVE9PVEhF REdFQ0FQVFVSRVRJTUVSRElWKTsKICAgIFRPT1RIRURHRUNBUFRVUkVUSU1FUjo6Y2xlYXJpbnRz b3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQ T0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElNRVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRV UkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgs IGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxMQ1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+ IHVuc2lnbmVkIHNob3J0IHR0b290aHdoZWVsIDxJTlRFUlBPTEFURVRJTUVSLElOVEVSUE9MQVRF VElNRVJESVYsVE9PVEhFREdFQ0FQVFVSRVRJTUVSLFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJVixO VU1CRVJPRlRFRVRILFNURVBTUEVSVE9PVEgsRlVMTENZQ0xFQU5HTEUsQkFTRUNQVUZSRVE+IDo6 c2FtcGxlcnBtKHVuc2lnbmVkIHNob3J0IHNhbXBsZWZyZXEpCiAgICAgICAgewogICAgICAgIHVu c2lnbmVkIGludCBjdXJyZW50c3RlcHM7CiAgICAgICAgdW5zaWduZWQgaW50IHRvdGFsdGltZSxj b3VudDsKCiAgICBpZiAoc3RhcnRlZCkKICAgICAgICB7CiAgICAgICAgVE9PVEhFREdFQ0FQVFVS RVRJTUVSOjplbmFibGVpbnRzKGZhbHNlLGZhbHNlLGZhbHNlKTsKICAgICAgICBjdXJyZW50c3Rl cHM9c3RlcHN0YWtlbjsKICAgICAgICAgICAgc3RlcHN0YWtlbj0wOwogICAgICAgIHRvdGFsdGlt ZT10b3RhbHNhbXBsZXRpbWU7CiAgICAgICAgY291bnQ9Zmlmb3ZhbGlkY291bnQ7CiAgICAgICAg ICAgIFRPT1RIRURHRUNBUFRVUkVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLHRydWUsZmFsc2UpOwog ICAgICAgIH0KICAgIGVsc2UKICAgICAgICBjb3VudD0wOwoKICAgICAgICBpZiAoIGN1cnJlbnRz dGVwczxTVEVQU1BFUlRPT1RIKjQgJiYKICAgICAgICAgICAgICAgIGNvdW50PT00KQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIChCQVNFQ1BVRlJFUS9UT09USEVER0VD QVBUVVJFVElNRVJESVYpKnJldnNwZXJzeW5jY3ljbGUvU1RFUFNQRVJUT09USCo2MCo0L3RvdGFs dGltZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlcGZyZXE9Y3VycmVudHN0ZXBzKnNhbXBsZWZy ZXE7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RlcGZyZXEqNjAqcmV2c3BlcnN5bmNjeWNsZS8o TlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElN RVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVU SU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxM Q1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRF VElNRVIsSU5URVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdF Q0FQVFVSRVRJTUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdM RSxCQVNFQ1BVRlJFUT4gOjpzdGFydCgpCiAgICAgICAgewogICAgICAgIFRPT1RIRURHRUNBUFRV UkVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgSU5URVJQT0xB VEVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgVE9PVEhFREdF Q0FQVFVSRVRJTUVSOjpzZXRjb3VudCgwKTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6 OnNldGdyYigweEZGRkYpOwogICAgICAgIG92ZXJmbG93bmNsaWNrcz0wOwogICAgICAgIFRPT1RI RURHRUNBUFRVUkVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUgLHRydWUgLHRydWUgKTsKICAg ICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6OnN0YXJ0KCk7CiAgICAgICAgVE9PVEhFREdFQ0FQ VFVSRVRJTUVSOjplbmFibGVpbnRzKHRydWUsdHJ1ZSxmYWxzZSk7CiAgICAgICAgSU5URVJQT0xB VEVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLGZhbHNlLGZhbHNlKTsKICAgIHN0YXJ0ZWQ9dHJ1ZTsK ICAgICAgICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9M QVRFVElNRVJESVYsIGNsYXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNB UFRVUkVUSU1FUkRJViwgaW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmds ZSBGVUxMQ1lDTEVBTkdMRSxpbnQgQkFTRUNQVUZSRVE+IGludCB0dG9vdGh3aGVlbCA8SU5URVJQ T0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09U SEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNM RUFOR0xFLEJBU0VDUFVGUkVRPiA6OnRyYW5zbGF0ZWFuZ2xldG9zdGVwKHRhbmdsZSBhbmdsZSkK ICAgICAgICB7CiAgICAgICAgdGFuZ2xlIGFuPWFuZ2xlLWZyZWZlcmVuY2VhbmdsZTsKICAgICAg ICB3aGlsZSAoYW4+PUZVTExDWUNMRUFOR0xFKQogICAgICAgICAgICAgICAgYW4tPUZVTExDWUNM RUFOR0xFOwogICAgICAgIHdoaWxlIChhbjwwKQogICAgICAgICAgICAgICAgYW4rPUZVTExDWUNM RUFOR0xFOwogICAgICAgIHJldHVybiAoKHNob3J0KSgoKGFuKS8zNjAqKChOVU1CRVJPRlRFRVRI KlNURVBTUEVSVE9PVEgpL3JldnNwZXJzeW5jY3ljbGUpKT4+MTYpKTsKICAgICAgICB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSU5URVJQT0xBVEVUSU1FUiwgaW50IElOVEVSUE9MQVRFVElNRVJESVYsIGNs YXNzIFRPT1RIRURHRUNBUFRVUkVUSU1FUiwgaW50IFRPT1RIRURHRUNBUFRVUkVUSU1FUkRJViwg aW50IE5VTUJFUk9GVEVFVEgsIGludCBTVEVQU1BFUlRPT1RILHRhbmdsZSBGVUxMQ1lDTEVBTkdM RSxpbnQgQkFTRUNQVUZSRVE+IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIsSU5U RVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVSRVRJ TUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNFQ1BV RlJFUT4gOjp1bnNjaGVkdWxlbmV4dCgpCiAgICAgICAgewogICAgICAgIElOVEVSUE9MQVRFVElN RVI6OnN0b3AoKTsKICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGNvdW50KDApOwogICAgICAgIElO VEVSUE9MQVRFVElNRVI6OmNsZWFyaW50c291cmNlcyh0cnVlLHRydWUsdHJ1ZSk7CiAgICAgICAg Zm9yIChpbnQgY2g9MDtjaDxudW1iZXJvZmNoYWlucztjaCsrKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgaW50IHBhc3Njb3VudD0wOwogICAgICAgICAgICAgICAgd2hpbGUgKHBh c3Njb3VudDwyICYmIG5leHRldmVudFtjaF0pCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHRoaXNhbmdsZT1uZXh0ZXZlbnRbY2hdLT5hbmdsZXN0 ZXA7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudFtjaF0tPmV4ZWN1dGVpZnNhZmUo KTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dGV2ZW50W2NoXT1uZXh0ZXZlbnRbY2hdLT5u ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dGV2ZW50W2NoXSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG5leHRhbmdsZT1uZXh0ZXZlbnRbY2hdLT5hbmdsZXN0ZXA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG5leHRhbmdsZTw9dGhpc2FuZ2xlKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgfQoKdGVtcGxhdGUgPGNsYXNzIElOVEVSUE9MQVRFVElNRVIsIGludCBJTlRFUlBP TEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VDQVBUVVJFVElNRVIsIGludCBUT09USEVER0VD QVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRFRVRILCBpbnQgU1RFUFNQRVJUT09USCx0YW5n bGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVGUkVRPiBpbmxpbmUgdm9pZCB0dG9vdGh3aGVl bCA8SU5URVJQT0xBVEVUSU1FUixJTlRFUlBPTEFURVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVU SU1FUixUT09USEVER0VDQVBUVVJFVElNRVJESVYsTlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RI LEZVTExDWUNMRUFOR0xFLEJBU0VDUFVGUkVRPiA6OnNjaGVkdWxlbmV4dCgpCiAgICAgICAgewog ICAgICAgIGludCBuZXh0ZXZlbnRkZWx0YT1uZXh0ZXZlbnRzdGVwbW9ub3RvbmljLWxhc3Rrbm93 bnN0ZXBtb25vdG9uaWM7CgogICAgICAgIGlmIChuZXh0ZXZlbnRkZWx0YTw9MCkKICAgICAgICAg ICAgICAgIHsKCiAgICAgICAgICAgICAgICBsYXN0dGltZXN0ZXA9MDsKICAgICAgICAgICAgICAg IG51bWJlcnRvc2tpcD0wOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c3RvcCgp OwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c2V0Y291bnQoMCk7CiAgICAgICAg ICAgICAgICBJTlRFUlBPTEFURVRJTUVSOjpzZXRncmEoMSk7CiAgICAgICAgICAgICAgICBJTlRF UlBPTEFURVRJTUVSOjpzdGFydCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZWZyb21sYXN0dG9vdGg9dGlj a3NwZXJhbmdsZXN0ZXAqKCh1bnNpZ25lZCBpbnQpbmV4dGV2ZW50ZGVsdGEpLzE2OwogICAgICAg ICAgICAgICAgaWYgKGRlbHRhdGltZT49dGltZWZyb21sYXN0dG9vdGgpCiAgICAgICAgICAgICAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3R0aW1lc3RlcD0wOwogICAg ICAgICAgICAgICAgICAgICAgICBudW1iZXJ0b3NraXA9MDsKICAgICAgICAgICAgICAgIElOVEVS UE9MQVRFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVU SU1FUjo6c2V0Y291bnQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSUE9MQVRFVElN RVI6OnNldGdyYSgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6 c3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3R0aW1l c3RlcD10aW1lZnJvbWxhc3R0b290aC1kZWx0YXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAg IElOVEVSUE9MQVRFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQ T0xBVEVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1ZSx0cnVlKTsKICAgICAgICAgICAg ICAgICAgICAgICAgbnVtYmVydG9za2lwPWxhc3R0aW1lc3RlcD4+MTY7CiAgICAgICAgICAgICAg ICAgICAgICAgIElOVEVSUE9MQVRFVElNRVI6OnNldGdyYShsYXN0dGltZXN0ZXAgJiAweEZGRkYp OwogICAgICAgICAgICAgICAgICAgICAgICBJTlRFUlBPTEFURVRJTUVSOjpzZXRjb3VudCgwKTsK ICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6c3RhcnQoKTsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCnRlbXBsYXRl IDxjbGFzcyBJTlRFUlBPTEFURVRJTUVSLCBpbnQgSU5URVJQT0xBVEVUSU1FUkRJViwgY2xhc3Mg VE9PVEhFREdFQ0FQVFVSRVRJTUVSLCBpbnQgVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLCBpbnQg TlVNQkVST0ZURUVUSCwgaW50IFNURVBTUEVSVE9PVEgsdGFuZ2xlIEZVTExDWUNMRUFOR0xFLGlu dCBCQVNFQ1BVRlJFUT4gaW5saW5lIHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIs SU5URVJQT0xBVEVUSU1FUkRJVixUT09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVS RVRJTUVSRElWLE5VTUJFUk9GVEVFVEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNF Q1BVRlJFUT4gOjpkb3Rvb3RoaW50ZXJydXB0KCkKICAgICAgICB7CiAgICB1bnNpZ25lZCBpbnQg Y291bnRlcnY9VE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpnZXRncmEoKStvdmVyZmxvd25jbGlja3M7 CgoKICAgICAgICB1bnNpZ25lZCBpbnQgbWF4cHVsc2U9dG90YWxzYW1wbGV0aW1lKig4KjE1MC8x MDApLyg0KjgpOwogICAgICAgIHVuc2lnbmVkIGludCBtYXhnYXA9dG90YWxzYW1wbGV0aW1lKig4 KjI1MC8xMDApLyg0KjgpOwogICAgICAgIHVuc2lnbmVkIGludCBtaW5wdWxzZTsKCiAgICAgICAg aWYgKHRvdGFsc2FtcGxldGltZT4gNCAqIDYwICogKEJBU0VDUFVGUkVRL1RPT1RIRURHRUNBUFRV UkVUSU1FUkRJVikgLyA1MDAgL05VTUJFUk9GVEVFVEggKQogICAgICAgICAgICAgICAgbWlucHVs c2U9dG90YWxzYW1wbGV0aW1lKig4KjM4LzEwMCkvKDQqOCk7CiAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgbWlucHVsc2U9dG90YWxzYW1wbGV0aW1lKig4KjYzLzEwMCkvKDQqOCk7CgogICAg ICAgIHRpY2tzcGVyYW5nbGVzdGVwPXRvdGFsc2FtcGxldGltZSoxNi8oNCpTVEVQU1BFUlRPT1RI KTsKCiAgICAgICAgYm9vbCBnYXA9ZmFsc2U7CiAgICAgICAgYm9vbCBpZ25vcmU9ZmFsc2U7CgoK ICAgICAgICBzd2l0Y2ggKHN5bmNzdGF0ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIGNhc2Ugc3Nub3RpbWluZzoKICAgICAgICAgICAgbWF4Z2FwPTB4ODAwMDA7CiAgICAgICAg ICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc3dhaXRpbmdmb3Jlbm91Z2h0ZWV0aDsKICAgICAg ICAgICAgICAgICAgICAgICAgaWdub3JlPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBzc3dhaXRpbmdmb3Jlbm91Z2h0ZWV0aDoKICAgICAg ICAgICAgbWF4Z2FwPTB4ODAwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWZvdmFs aWRjb3VudD09NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jc3RhdGU9c3Ns b29raW5nZm9yZ2FwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2Ugc3Nsb29raW5nZm9yZ2FwOgogICAgICAgICAgICBtYXhnYXA9MHg4MDAwMDsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJ2ID4gbWF4cHVsc2UpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3luY3N0YXRlPXNzbG9va2luZ2ZvcmdhcDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2FwPXRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ugc3Nsb29raW5nZm9yZ2Fw MjoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJ2ID4gbWF4cHVsc2UpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIGlmICh0ZWV0aHNp bmNlbWlzc2luZ3Rvb3RoPT1OVU1CRVJPRlRFRVRILTEpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3luY3N0YXRlPXNzc3luY2VkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGVldGhzaW5jZW1pc3Npbmd0b290aD0xOwogICAgICAgICAgICAgICAgICAgIElOVEVS UE9MQVRFVElNRVI6OmVuYWJsZWludHMoZmFsc2UsZmFsc2UsZmFsc2UpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdGtub3duc3RlcG1vbm90b25pYz0oKDAgKyhT VEVQU1BFUlRPT1RIKjIpKSUoTlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXRpbWU9VE9PVEhFREdFQ0FQVFVS RVRJTUVSOjpnZXRjb3VudCgpOwoKICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRhbmdsZT1s YXN0a25vd25zdGVwbW9ub3RvbmljKzE7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRldmVu dGFuZ2xlPj0oTlVNQkVST0ZURUVUSCpTVEVQU1BFUlRPT1RIKSkKICAgICAgICAgICAgICAgICAg ICAgICAgbmV4dGV2ZW50YW5nbGUtPShOVU1CRVJPRlRFRVRIKlNURVBTUEVSVE9PVEgpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudHN0ZXBtb25vdG9uaWM9bmV4dGV2 ZW50YW5nbGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRldmVudHN0 ZXBtb25vdG9uaWM8bGFzdGtub3duc3RlcG1vbm90b25pYykKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5leHRldmVudHN0ZXBtb25vdG9uaWMrPShOVU1CRVJPRlRFRVRI KlNURVBTUEVSVE9PVEgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NoZWR1bGVuZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6ZW5h YmxlaW50cyh0cnVlLGZhbHNlLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdhcD10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3VudGVydiA8IG1pbnB1bHNlKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3luY3N0YXRlPXNzbG9va2luZ2ZvcmdhcDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZ25vcmU9dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlZXRoc2luY2VtaXNzaW5ndG9vdGghPU5V TUJFUk9GVEVFVEgtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRlZXRoc2luY2VtaXNzaW5ndG9vdGgrKzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdmb3JnYXA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg ICAgICBjYXNlIHNzc3luY2VkOgogICAgICAgICAgICBpZiAoY291bnRlcnYgPiBtYXhwdWxzZSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYgKHRl ZXRoc2luY2VtaXNzaW5ndG9vdGg9PU5VTUJFUk9GVEVFVEgtMSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZWV0aHNpbmNlbWlzc2luZ3Rvb3RoPTE7CiAgICAgICAgICAgICAgICAgICAgSU5U RVJQT0xBVEVUSU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0a25vd25zdGVwbW9ub3RvbmljKz0oU1RF UFNQRVJUT09USCoyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl bHRhdGltZT1UT09USEVER0VDQVBUVVJFVElNRVI6OmdldGNvdW50KCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZW5leHQoKTsKICAgICAgICAgICAgICAg ICAgICBJTlRFUlBPTEFURVRJTUVSOjplbmFibGVpbnRzKHRydWUsZmFsc2UsZmFsc2UpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwPXRydWU7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdm b3JnYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNjaGVkdWxl bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwZWFybHlh bGFybS5hbGFybWV2ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmIChjb3VudGVydiA8IG1pbnB1bHNlKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE9PVEhFREdF Q0FQVFVSRVRJTUVSOjpzZXRjb3VudChUT09USEVER0VDQVBUVVJFVElNRVI6OmdldGNvdW50KCkr Y291bnRlcnYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZT10cnVlOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAodGVldGhzaW5jZW1pc3Npbmd0b290aCE9TlVNQkVST0ZURUVUSC0xKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGVldGhzaW5jZW1pc3Npbmd0b290aCsrOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVU SU1FUjo6ZW5hYmxlaW50cyhmYWxzZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFzdGtub3duc3RlcG1vbm90b25pYys9U1RFUFNQRVJUT09USDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YXRpbWU9VE9PVEhFREdFQ0FQVFVSRVRJTUVS OjpnZXRjb3VudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlbmV4 dCgpOwogICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6ZW5hYmxlaW50cyh0cnVlLGZh bHNlLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNzdGF0ZT1zc2xvb2tpbmdmb3JnYXA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zY2hlZHVsZW5leHQoKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnYXBsYXRlYWxhcm0uYWxhcm1ldmVudCgpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICB9CgoKCiAgICB1bnNpZ25lZCBpbnQgbWF4Z2FwaGlnaD1tYXhnYXA+ PjE2OwogICAgaWYgKG1heGdhcGhpZ2gpCiAgICAgICAgewoKCiAgICAgICAgdW5zaWduZWQgaW50 IHJlbT1tYXhnYXAgJiAweEZGRkY7CiAgICAgICAgdW5zaWduZWQgaW50IGN1cnJlbnQ9VE9PVEhF REdFQ0FQVFVSRVRJTUVSOjpnZXRjb3VudCgpOwogICAgICAgIG92ZXJmbG93bmNsaWNrcz1tYXhn YXBoaWdoOwogICAgICAgIGlmIChjdXJyZW50KzB4ODA+cmVtKQogICAgICAgICAgICBUT09USEVE R0VDQVBUVVJFVElNRVI6OnNldGdyYihjdXJyZW50KzB4ODApOwogICAgICAgIGVsc2UKICAgICAg ICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpzZXRncmIocmVtKTsKICAgICAgICB9CiAgICBl bHNlCiAgICAgICAgewogICAgICAgIG92ZXJmbG93bmNsaWNrcz0wOwogICAgICAgIFRPT1RIRURH RUNBUFRVUkVUSU1FUjo6c2V0Z3JiKG1heGdhcCk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKCFp Z25vcmUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9v dGh0aW1lOwoKICAgICAgICAgICAgICAgIGlmIChnYXApCiAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0aW1lPWNvdW50ZXJ2LzI7CiAgICAgICAg ICAgICAgICAgICAgICAgIHN0ZXBzdGFrZW4rPShTVEVQU1BFUlRPT1RIKjIpOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9vdGh0aW1lPWNvdW50ZXJ2OwogICAgICAg ICAgICAgICAgICAgICAgICBzdGVwc3Rha2VuKz1TVEVQU1BFUlRPT1RIOwogICAgICAgICAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG90YWxzYW1wbGV0aW1lKz10b290aHRpbWU7 CiAgICAgICAgICAgICAgICBpZiAoZmlmb3ZhbGlkY291bnQ9PTQpCiAgICAgICAgICAgICAgICAg ICAgICAgIHRvdGFsc2FtcGxldGltZS09dG9vdGh0aW1lZmlmb1tmaWZvaW5wdHJdOwogICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBmaWZvdmFsaWRjb3VudCsrOwoK ICAgICAgICAgICAgICAgIHRvb3RodGltZWZpZm9bZmlmb2lucHRyXT10b290aHRpbWU7CiAgICAg ICAgICAgICAgICBmaWZvaW5wdHI9KGZpZm9pbnB0cisxKSAmICg0IC0xKTsKICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVSOjpjbGVhcmludHNvdXJjZXModHJ1 ZSxmYWxzZSxmYWxzZSk7CiAgICAgICAgfQoKCnRlbXBsYXRlIDxjbGFzcyBJTlRFUlBPTEFURVRJ TUVSLCBpbnQgSU5URVJQT0xBVEVUSU1FUkRJViwgY2xhc3MgVE9PVEhFREdFQ0FQVFVSRVRJTUVS LCBpbnQgVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLCBpbnQgTlVNQkVST0ZURUVUSCwgaW50IFNU RVBTUEVSVE9PVEgsdGFuZ2xlIEZVTExDWUNMRUFOR0xFLGludCBCQVNFQ1BVRlJFUT4gaW5saW5l IHZvaWQgdHRvb3Rod2hlZWwgPElOVEVSUE9MQVRFVElNRVIsSU5URVJQT0xBVEVUSU1FUkRJVixU T09USEVER0VDQVBUVVJFVElNRVIsVE9PVEhFREdFQ0FQVFVSRVRJTUVSRElWLE5VTUJFUk9GVEVF VEgsU1RFUFNQRVJUT09USCxGVUxMQ1lDTEVBTkdMRSxCQVNFQ1BVRlJFUT4gOjpkb3Rvb3RodG9v bG9uZ2ludGVycnVwdCgpCiAgICB7CiAgICBpZiAob3ZlcmZsb3duY2xpY2tzKQogICAgICAgIHsK ICAgICAgICBvdmVyZmxvd25jbGlja3MtLTsKICAgICAgICBUT09USEVER0VDQVBUVVJFVElNRVI6 OmNsZWFyaW50c291cmNlcyhmYWxzZSx0cnVlLGZhbHNlKTsKICAgICAgICB9CiAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgICAgICAgdG9vbG9uZ2FsYXJtLmFsYXJtZXZlbnQoKTsKICAgICAg ICBUT09USEVER0VDQVBUVVJFVElNRVI6OnN0b3AoKTsKICAgICAgICAgICAgVE9PVEhFREdFQ0FQ VFVSRVRJTUVSOjpzZXRjb3VudCgwKTsKICAgICAgICAgICAgVE9PVEhFREdFQ0FQVFVSRVRJTUVS OjpjbGVhcmludHNvdXJjZXModHJ1ZSx0cnVlLHRydWUpOwoKICAgICAgICAgICAgc3luY3N0YXRl PXNzbm90aW1pbmc7CiAgICAgICAgICAgIGZpZm92YWxpZGNvdW50PTA7CiAgICAgICAgZmlmb2lu cHRyPTA7CiAgICAgICAgICAgIHRvdGFsc2FtcGxldGltZT0wOwogICAgICAgICAgICB1bnNjaGVk dWxlbmV4dCgpOwoKICAgICAgICAgICAgb3ZlcmZsb3duY2xpY2tzPTA7CiAgICAgICAgVE9PVEhF REdFQ0FQVFVSRVRJTUVSOjpzZXRncmIoMHhGRkZGKTsKCiAgICAgICAgVE9PVEhFREdFQ0FQVFVS RVRJTUVSOjpzdGFydCgpOwogICAgICAgIH0KICAgIH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIElO VEVSUE9MQVRFVElNRVIsIGludCBJTlRFUlBPTEFURVRJTUVSRElWLCBjbGFzcyBUT09USEVER0VD QVBUVVJFVElNRVIsIGludCBUT09USEVER0VDQVBUVVJFVElNRVJESVYsIGludCBOVU1CRVJPRlRF RVRILCBpbnQgU1RFUFNQRVJUT09USCx0YW5nbGUgRlVMTENZQ0xFQU5HTEUsaW50IEJBU0VDUFVG UkVRPiBpbmxpbmUgdm9pZCB0dG9vdGh3aGVlbCA8SU5URVJQT0xBVEVUSU1FUixJTlRFUlBPTEFU RVRJTUVSRElWLFRPT1RIRURHRUNBUFRVUkVUSU1FUixUT09USEVER0VDQVBUVVJFVElNRVJESVYs TlVNQkVST0ZURUVUSCxTVEVQU1BFUlRPT1RILEZVTExDWUNMRUFOR0xFLEJBU0VDUFVGUkVRPiA6 OmRvdGltZXJleHBpcmVkaW50ZXJydXB0KCkKICAgICAgICB7CiAgICAgICAgaWYgKG51bWJlcnRv c2tpcCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG51bWJlcnRvc2tpcC0tOwog ICAgICAgICAgICAgICAgSU5URVJQT0xBVEVUSU1FUjo6Y2xlYXJpbnRzb3VyY2VzKHRydWUsdHJ1 ZSx0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7 CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoaXNhbmdsZT1uZXh0ZXZlbnRhbmdsZTsK CgogICAgICAgICAgICAgICAgaW50IGNsb3Nlc3RkaXN0PShOVU1CRVJPRlRFRVRIKlNURVBTUEVS VE9PVEgpKjI7CiAgICAgICAgICAgICAgICBmb3IgKGludCBjaD0wO2NoPG51bWJlcm9mY2hhaW5z O2NoKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg aW50IGRpc3Q7CgoKICAgICAgICAgICAgd2hpbGUgKG5leHRldmVudFtjaF0pCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdD1uZXh0ZXZlbnRbY2hd LT5hbmdsZXN0ZXAtdGhpc2FuZ2xlOwogICAgICAgICAgICAgICAgaWYgKGRpc3QpCiAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRldmVudFtjaF0t PmV4ZWN1dGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRbY2hd PW5leHRldmVudFtjaF0tPm5leHQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo bmV4dGV2ZW50W2NoXSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChkaXN0PDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCs9KE5VTUJF Uk9GVEVFVEgqU1RFUFNQRVJUT09USCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChkaXN0PGNsb3Nlc3RkaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs b3Nlc3RkaXN0PWRpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICB9CgogICAgICAgIGlmIChjbG9zZXN0ZGlzdD49KE5VTUJFUk9GVEVF VEgqU1RFUFNQRVJUT09USCkpCiAgICAgICAgICAgIGNsb3Nlc3RkaXN0PShOVU1CRVJPRlRFRVRI KlNURVBTUEVSVE9PVEgpLzg7CgogICAgICAgIG5leHRldmVudGFuZ2xlKz1jbG9zZXN0ZGlzdDsK ICAgICAgICBpZiAobmV4dGV2ZW50YW5nbGU+PShOVU1CRVJPRlRFRVRIKlNURVBTUEVSVE9PVEgp KQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0ZXZlbnRhbmdsZS09KE5VTUJFUk9GVEVFVEgq U1RFUFNQRVJUT09USCk7CiAgICAgICAgbmV4dGV2ZW50c3RlcG1vbm90b25pYys9Y2xvc2VzdGRp c3Q7CgogICAgICAgICAgICAgICAgZGVsdGF0aW1lKz0obGFzdHRpbWVzdGVwKyg0MDAqKEJBU0VD UFVGUkVRL0lOVEVSUE9MQVRFVElNRVJESVYpL0JBU0VDUFVGUkVRKSk7CiAgICAgICAgICAgICAg ICBzY2hlZHVsZW5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiMgNSAiZXZlbnRl eGUuaCIgMgojIDEgIm1rNmJvYXJkL2h3YWxsb2MuaCIgMQoKCgojIDEgImNwdS9zaDIuaCIgMQoj IDE2MiAiY3B1L3NoMi5oIgp0eXBlZGVmIHZvaWQgKCppbnRmdW5jdGlvbikoKTsKZXh0ZXJuICJD IiB2b2lkIGp1bXB0b3Jlc2V0KCk7CgogICAgICAgIGVudW0gcGludHlwZQogICAgICAgIHsKICAg ICAgICAgICAgbm90dXNlZCwKICAgICAgICAgICAgaW5wdXRtYXRjaHJpc2luZywKICAgICAgICAg ICAgaW5wdXRtYXRjaGZhbGxpbmcsCiAgICAgICAgICAgIGlucHV0bWF0Y2hib3RoLAogICAgICAg ICAgICBvdXRwdXRjb21wYXJldG9nZ2xlLAogICAgICAgICAgICBvdXRwdXRjb21wYXJlcHVsc2Uw LAogICAgICAgICAgICBvdXRwdXRjb21wYXJlcHVsc2UxLAogICAgICAgICAgICBjb21wYXJlbm9v dXRwdXQKICAgICAgICB9OwoKICAgICAgICBlbnVtIGNsZWFyc291cmNlCiAgICAgICAgewogICAg ICAgICAgICBkaXNhYmxlZCwKICAgICAgICAgICAgY2hhbmEsCiAgICAgICAgICAgIGNoYW5iLAog ICAgICAgICAgICBzeW5jCiAgICAgICAgfTsKCiAgICAgICAgZW51bSBlZGdlbW9kZQogICAgICAg IHsKICAgICAgICAgICAgcmlzaW5nLAogICAgICAgICAgICBmYWxsaW5nLAogICAgICAgICAgICBi b3RoCiAgICAgICAgfTsKCiAgICAgICAgZW51bSBjbGtzcmMKICAgICAgICB7CiAgICAgICAgICAg IGNsa3NyY2V4dGE9LTEsCiAgICAgICAgICAgIGNsa3NyY2V4dGI9LTIsCiAgICAgICAgICAgIGNs a3NyY2V4dGM9LTMsCiAgICAgICAgICAgIGNsa3NyY2V4dGQ9LTQsCiAgICAgICAgICAgIGNsa3Ny Y3Qxb3ZmPS01LAogICAgICAgICAgICBjbGtzcmN0Mm92Zj0tNgogICAgICAgICB9OwoKCmNsYXNz IHRwcm9jZXNzb3IKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICBzdGF0aWMgaW50ZnVuY3Rpb24g dmVjdG9ydGFibGVbMjU2XTsKCiAgICAgICAgc3RhdGljIHZvaWQgbWFza2FsbGludGVycnVwdHMo KQogICAgICAgICAgICB7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop KDB4RkZGRjgzNDgpKT0wOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4MzRBKSk9MDsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg KikoMHhGRkZGODM0QykpPTA7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 ICopKDB4RkZGRjgzNEUpKT0wOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4MzUwKSk9MDsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODM1MikpPTA7CiAgICAgICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQg aW5pdGlhbGlzZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgbWFza2FsbGludGVycnVwdHMo KTsKICAgICAgICAgICAgYXNtICgibGRjICUwLHZiciIgOiA6ICJyIigmdmVjdG9ydGFibGUpICk7 CgogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4NjIwKSk9 MHgwMjsKICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODYy MikpPTB4MDA7CiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZG Rjg2MjQpKT0weDExOwogICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw eEZGRkY4NjI2KSk9MHgwMTsKCiAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 ICopKDB4RkZGRjgzOUEpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzlB KSkgJiAweENGRkYgfCAweDIwMDA7CiAgICAgICAgICAgIH0KCgoKICAgICAgICBzdGF0aWMgdm9p ZCBlbmFibGVpbnRzKCkKICAgICAgICAgICAgewogICAgICAgICAgICBhc20gKCJsZGMgJTAsc3Ii IDogOiAiciIoMCkgOiAiY2MiLCJ0Iik7CiAgICAgICAgICAgIH0KCgoKICAgICAgICBzdGF0aWMg dm9pZCBkaXNhYmxlaW50cygpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgYXNtICgibGRjICUw LHNyIiA6IDogInIiKDB4RjApIDogImNjIiwidCIpOwogICAgICAgICAgICB9CgoKCiAgICAgICAg c3RhdGljIHZvaWQgc2ltdWxhdGVyZXNldCgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgbWFz a2FsbGludGVycnVwdHMoKTsKICAgICAgICAgICAganVtcHRvcmVzZXQoKTsKICAgICAgICAgICAg fQoKICAgICAgICBjbGFzcyBtYXNraW50ZXJydXB0cwogICAgICAgICAgICB7CiAgICAgICAgICAg IHByaXZhdGU6CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2F2ZWRfc3I7CiAgICAgICAg ICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIG1hc2tpbnRlcnJ1cHRzKCkKICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYXNtKCJzdGMgc3IsJTAiIDogIj1yIihzYXZl ZF9zcikpOwogICAgICAgICAgICAgICAgICAgIGFzbSAoImxkYyAlMCxzciIgOiA6ICJyIihzYXZl ZF9zcnwweEYwKSA6ICJjYyIsInQiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBtYXNraW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgbGV2KQogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICBhc20oInN0YyBzciwlMCIgOiAiPXIiKHNhdmVkX3NyKSk7 CiAgICAgICAgICAgICAgICAgICAgaWYgKChzYXZlZF9zciAmIDB4RjApPChsZXY8PDQpKQogICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBuZXdzdGF0ZT1zYXZlZF9zciAmIH4weEYwIHwgKGxldjw8NCk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGFzbSAoImxkYyAlMCxzciIgOiA6ICJyIihuZXdzdGF0ZSkgOiAiY2MiLCJ0Iik7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB+bWFza2ludGVycnVwdHMoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBhc20gKCJsZGMgJTAsc3IiIDogOiAiciIoc2F2ZWRfc3IpIDogImNjIiwidCIpOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgY2xhc3MgdHRpbWVy MAogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHN0YXRp YyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg KCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy NDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgfCAweDAxOwog ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzdG9wKCkK ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hh ciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgwMTsKICAgICAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0dXAocGludHlwZSBjb25zdCBw aW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNvbnN0IGNsZWFyLGVkZ2Vtb2Rl IGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwMTsKICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjMpKT0weDAwOwogICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAocGluYSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0g fjB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4 RkZGRjgzQkEpKSAmICh+MHgwMDAzKSB8IDB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgJiAofjB4MEYpIHwgMHgwODsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwMDE7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDAw MykgfCAweDAwMDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNoYm90aDoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4 RkZGRjgzQjQpKSAmPSB+MHgwMDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMDMpIHwgMHgwMDAxOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYy KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHgwRikg fCAweDBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRvZ2dsZToKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAw MDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4 M0JBKSkgJiAofjB4MDAwMykgfCAweDAwMDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDM7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRw dXRjb21wYXJlcHVsc2UwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAwMTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDAzKSB8 IDB4MDAwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjYyKSkgJiAofjB4MEYpIHwgMHgwNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw eEZGRkY4M0I0KSkgfD0gMHgwMDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMDMpIHwgMHgwMDAxOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYy KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHgwRikg fCAweDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODI2MikpICYgKH4weDBGKSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmIpCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko MHhGRkZGODNCNCkpICY9IH4weDAwMDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDAwQykgfCAweDAwMDQ7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy NjIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weEYw KSB8IDB4ODA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgw MDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODNCQSkpICYgKH4weDAwMEMpIHwgMHgwMDA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAweDkwOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5w dXRtYXRjaGJvdGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0gfjB4MDAwMjsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDBDKSB8IDB4 MDAwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4 MjYyKSkgJiAofjB4RjApIHwgMHhBMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG RkY4M0I0KSkgfD0gMHgwMDAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDAwMEMpIHwgMHgwMDA0OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAw eDMwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMDI7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB KSkgJiAofjB4MDAwQykgfCAweDAwMDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2 b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSA9ICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikoMHhGRkZGODI2MikpICYgKH4weEYwKSB8IDB4NTA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRj b21wYXJlcHVsc2UxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAwMjsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMDBDKSB8IDB4 MDAwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODI2MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4 MjYyKSkgJiAofjB4RjApIHwgMHgxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYyKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjIpKSAmICh+MHhGMCkgfCAweDAwOwoKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xlYXIp CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBk aXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjYwKSkgJiAofjB4RTApIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHhFMCkgfCAweDIw OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODI2MCkpICYgKH4weEUwKSB8IDB4NDA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYw KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHhFMCkg fCAweDYwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goZWRnZSkKICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHJpc2luZzoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgJiAofjB4 MTgpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDE4KSB8IDB4MDg7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBib3Ro OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq KSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjAp KSAmICh+MHgxOCkgfCAweDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY2xrKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkg JiAofjB4MDcpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDA3KSB8IDB4MDE7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkg JiAofjB4MDcpIHwgMHgwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDY0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDAzOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xr c3JjZXh0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjYwKSkgJiAofjB4MDcpIHwgMHgwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNsa3NyY2V4dGI6CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjAp KSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2MCkpICYgKH4weDA3KSB8 IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBjbGtzcmNleHRjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xrc3Jj ZXh0ZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODI2MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4 MjYwKSkgJiAofjB4MDcpIHwgMHgwNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjYwKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNjApKSAmICh+MHgwNykgfCAweDAwOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0Z3Jh KHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 ICopKDB4RkZGRjgyNjgpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYSgpCiAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw eEZGRkY4MjY4KSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRp YyB2b2lkIHNldGdyYih1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjZBKSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmIoKQogICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODI2QSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICBzdGF0aWMgdm9pZCBzZXRjb3VudCh1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAq KSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjY2KSkpPXg7CiAgICAgICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRj b3VudCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAo Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MjY2KSk7CiAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGVuYWJsZWludHMoIGJvb2wgY29u c3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVyZmxvdyApCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIGNoYXIgKikmKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjY0KSkpID0gKHBpbmE/MHgwMToweDAwKSB8 IChwaW5iPzB4MDI6MHgwMCkgfCAob3ZlcmZsb3c/MHgxMDoweDAwKTsKICAgICAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCBib29s IGNvbnN0IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBjaGFyICopJigq KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI2NSkpKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikoMHhGRkZGODI2NSkpICYgfiggKHBpbmE/MHgwMToweDAwKSB8IChwaW5i PzB4MDI6MHgwMCkgfCAob3ZlcmZsb3c/MHgxMDoweDAwKSk7CiAgICAgICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5haW50KCkKICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODI2NSkpICYgMHgwMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgc3RhdGljIGJvb2wgY2hhbmJpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjY1KSkgJiAweDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz dGF0aWMgYm9vbCBvdmZpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjY1KSkgJiAw eDEwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBz ZXRpbnRlcnJ1cHR2ZWN0b3JzKCBpbnRmdW5jdGlvbiBwaW5hLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gcGluYiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGNv bnN0IHBpbnByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ZnVuY3Rpb24gb3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25zdCBvdmVyZmxvd3ByaW9y aXR5KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzRFKSk9KCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0ICopKDB4RkZGRjgzNEUpKSAmICh+MHhGRjAwKSkgfCAocGlucHJpb3JpdHk8PDEyKSB8IChv dmVyZmxvd3ByaW9yaXR5PDw4KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0 b3J0YWJsZVs4OF09cGluYTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0 YWJsZVs4OV09cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs ZVs5Ml09b3ZlcmZsb3c7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKCiAg ICAgICAgY2xhc3MgdHRpbWVyMQogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAg ICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjQwKSkgfCAweDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz dGF0aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZG RjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgw MjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0 dXAocGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNv bnN0IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwMjsKICAg ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNC NCkpICY9IH4weDAwMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDEwMCkgfCAweDAxMDA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgq KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpICYgKH4weDBGKSB8IDB4MDg7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDEwOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYg KH4weDAxMDApIHwgMHgwMTAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDA5OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJv dGg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4M0I0KSkgJj0gfjB4MDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxl IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMTAwKSB8IDB4MDEwMDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAo fjB4MEYpIHwgMHgwQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkg fD0gMHgwMDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko MHhGRkZGODNCQSkpICYgKH4weDAxMDApIHwgMHgwMTAwOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDAzOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh c2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMTA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4 M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4 MDEwMCkgfCAweDAxMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODI4MikpICYgKH4weDBGKSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVs c2UxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODNCNCkpIHw9IDB4MDAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxl IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwMTAwKSB8IDB4MDEwMDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAo fjB4MEYpIHwgMHgwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHgwRikgfCAweDAwOwogICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwaW5iKQogICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaHJp c2luZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDIwOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDA0MDApIHwgMHgwNDAwOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw eEZGRkY4MjgyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAm ICh+MHhGMCkgfCAweDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkg Jj0gfjB4MDAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop KDB4RkZGRjgzQkEpKSAmICh+MHgwNDAwKSB8IDB4MDQwMDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpID0gKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4RjApIHwgMHg5MDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwMjA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDQw MCkgfCAweDA0MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODI4MikpICYgKH4weEYwKSB8IDB4QTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJldG9nZ2xl OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg KikoMHhGRkZGODNCNCkpIHw9IDB4MDAyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgwNDAwKSB8IDB4MDQwMDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODI4MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4 RjApIHwgMHgzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTA6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0g MHgwMDIwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODNCQSkpICYgKH4weDA0MDApIHwgMHgwNDAwOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgPSAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODIpKSAmICh+MHhGMCkgfCAweDUwOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug b3V0cHV0Y29tcGFyZXB1bHNlMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwMjA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MDQw MCkgfCAweDA0MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyODIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODI4MikpICYgKH4weEYwKSB8IDB4MTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MikpID0g KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgyKSkgJiAofjB4RjApIHwgMHgw MDsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGNsZWFyKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODI4MCkpICYgKH4weEUwKSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYToKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4 MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4RTAp IHwgMHgyMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIGNoYW5iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHhFMCkgfCAweDQwOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc3luYzoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODI4MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAo fjB4RTApIHwgMHg2MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVkZ2UpCiAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSByaXNpbmc6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop KDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkp ICYgKH4weDE4KSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgxOCkgfCAweDA4OwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgYm90aDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjgwKSkgJiAofjB4MTgpIHwgMHgxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNo KGNsaykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODI4MCkpICYgKH4weDA3KSB8IDB4MDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgwNykgfCAweDAxOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMTY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODI4MCkpICYgKH4weDA3KSB8IDB4MDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4MDcpIHwgMHgwMzsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIGNsa3NyY2V4dGE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODI4MCkpICYgKH4weDA3KSB8IDB4MDQ7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjbGtzcmNleHRiOgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+ MHgwNykgfCAweDA1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgMjU2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyODApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2xrc3Jj dDJvdmY6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyODApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODI4MCkpICYgKH4weDA3KSB8IDB4MDc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4MCkpID0gKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjgwKSkgJiAofjB4MDcpIHwgMHgwMDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzZXRn cmEodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODI4OCkpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JhKCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop KDB4RkZGRjgyODgpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh dGljIHZvaWQgc2V0Z3JiKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxl IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyOEEpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYigpCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSgweEZGRkY4MjhBKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHN0YXRpYyB2b2lkIHNldGNvdW50KHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0 ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyODYpKSk9eDsKICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdl dGNvdW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgyODYpKTsKICAgICAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgZW5hYmxlaW50cyggYm9vbCBj b25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29sIGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2 b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyODQpKSkgPSAocGluYT8weDAxOjB4MDAp IHwgKHBpbmI/MHgwMjoweDAwKSB8IChvdmVyZmxvdz8weDEwOjB4MDApOwogICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBjbGVhcmludHNvdXJjZXMoIGJv b2wgY29uc3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVyZmxvdyApCiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2lnbmVkIGNoYXIgKikm KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4Mjg1KSkpID0gKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSgweEZGRkY4Mjg1KSkgJiB+KChwaW5hPzB4MDE6MHgwMCkgfCAocGlu Yj8weDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCkpOwogICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyODUpKSAmIDB4MDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODI4NSkpICYgMHgwMjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg c3RhdGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODI4NSkpICYg MHgxMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQg c2V0aW50ZXJydXB0dmVjdG9ycyggaW50ZnVuY3Rpb24gcGluYSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHBpbmIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBj b25zdCBwaW5wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludGZ1bmN0aW9uIG92ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY29uc3Qgb3ZlcmZsb3dwcmlv cml0eSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRp bGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM0RSkpPSgoKih2b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCAqKSgweEZGRkY4MzRFKSkgJiAofjB4MDBGRikpIHwgKHBpbnByaW9yaXR5PDw0KSB8IChv dmVyZmxvd3ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0 YWJsZVs5Nl09cGluYTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs ZVs5N109cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsx MDBdPW92ZXJmbG93OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAg ICAgY2xhc3MgdHRpbWVyMgogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAg ICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBj aGFyICopKDB4RkZGRjgyNDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4 MjQwKSkgfCAweDA0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0 aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg KCoodW5zaWduZWQgY2hhciAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy NDApKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MjQwKSkgJiB+MHgwNDsK ICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0dXAo cGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFyc291cmNlIGNvbnN0 IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyNDEpKSAmPSB+MHgwNDsKICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkp ICY9IH4weDAwNDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4M0JBKSkgJiAofjB4MTAwMCkgfCAweDEwMDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpICYgKH4weDBGKSB8IDB4MDg7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBpbnB1dG1hdGNoZmFsbGluZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDQwOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4w eDEwMDApIHwgMHgxMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDA5OwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJvdGg6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4M0I0KSkgJj0gfjB4MDA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgxMDAwKSB8IDB4MTAwMDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODJBMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4 MEYpIHwgMHgwQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0g MHgwMDQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODNCQSkpICYgKH4weDEwMDApIHwgMHgxMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDAzOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug b3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwNDA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JB KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4MTAw MCkgfCAweDEwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiko MHhGRkZGODJBMikpICYgKH4weDBGKSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2Ux OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg KikoMHhGRkZGODNCNCkpIHw9IDB4MDA0MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHgxMDAwKSB8IDB4MTAwMDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODJBMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4 MEYpIHwgMHgwMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHgwRikgfCAweDAwOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwaW5iKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaHJpc2lu ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 ICopKDB4RkZGRjgzQjQpKSAmPSB+MHgwMDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCQSkpICYgKH4weDQwMDApIHwgMHg0MDAwOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+ MHhGMCkgfCAweDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgJj0g fjB4MDA4MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4 RkZGRjgzQkEpKSAmICh+MHg0MDAwKSB8IDB4NDAwMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpID0gKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjApIHwgMHg5MDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNCNCkpICY9IH4weDAwODA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4NDAwMCkg fCAweDQwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODJBMikpICYgKH4weEYwKSB8IDB4QTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJldG9nZ2xlOgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKiko MHhGRkZGODNCNCkpIHw9IDB4MDA4MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSA9ICgqKHZvbGF0aWxlIHVuc2ln bmVkIHNob3J0ICopKDB4RkZGRjgzQkEpKSAmICh+MHg0MDAwKSB8IDB4NDAwMDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJB MikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjAp IHwgMHgzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTA6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0I0KSkgfD0gMHgw MDgwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODNCQSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODNCQSkpICYgKH4weDQwMDApIHwgMHg0MDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTIpKSAmICh+MHhGMCkgfCAweDUwOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0 cHV0Y29tcGFyZXB1bHNlMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl IHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzQjQpKSB8PSAweDAwODA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0JBKSkgJiAofjB4NDAwMCkg fCAweDQwMDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopKDB4RkZGRjgyQTIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODJBMikpICYgKH4weEYwKSB8IDB4MTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMikpID0gKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEyKSkgJiAofjB4RjApIHwgMHgwMDsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xl YXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSBkaXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw eEZGRkY4MkEwKSkgJiAofjB4RTApIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHhFMCkgfCAw eDIwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODJBMCkpICYgKH4weEUwKSB8IDB4NDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4 MkEwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHhF MCkgfCAweDYwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goZWRnZSkKICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHJpc2luZzoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgJiAo fjB4MTgpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDE4KSB8IDB4MDg7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBi b3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh ciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy QTApKSAmICh+MHgxOCkgfCAweDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goY2xr KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw KSkgJiAofjB4MDcpIHwgMHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSA9ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDA3KSB8IDB4MDE7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx NjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw KSkgJiAofjB4MDcpIHwgMHgwMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY0OgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDAzOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug Y2xrc3JjZXh0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgw eEZGRkY4MkEwKSkgJiAofjB4MDcpIHwgMHgwNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNsa3NyY2V4dGI6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgy QTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBMCkpICYgKH4weDA3 KSB8IDB4MDU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBjbGtzcmNleHRjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDA2OwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAy NDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODJBMCkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEw KSkgJiAofjB4MDcpIHwgMHgwNzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MkEwKSkgPSAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTApKSAmICh+MHgwNykgfCAweDAwOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHNldGdyYSh1 bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4MkE4KSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmEoKQogICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODJBOCkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMg dm9pZCBzZXRncmIodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikoMHhGRkZGODJBQSkpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JiKCkKICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopKDB4RkZGRjgyQUEpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgc3RhdGljIHZvaWQgc2V0Y291bnQodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikm KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODJBNikpKT14OwogICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Y291 bnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoo dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODJBNikpOwogICAgICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnRzKCBib29sIGNvbnN0 IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBjaGFyICopJigqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBNCkpKSA9IChwaW5hPzB4MDE6MHgwMCkgfCAo cGluYj8weDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCk7CiAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyaW50c291cmNlcyggYm9vbCBj b25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29sIGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgY2hhciAqKSYoKih2 b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgyQTUpKSkgPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopKDB4RkZGRjgyQTUpKSAmIH4oIChwaW5hPzB4MDE6MHgwMCkgfCAocGluYj8w eDAyOjB4MDApIHwgKG92ZXJmbG93PzB4MTA6MHgwMCkpOwogICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopKDB4RkZGRjgyQTUpKSAmIDB4MDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgIHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODJBNSkpICYgMHgwMjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh dGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODJBNSkpICYgMHgx MDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0 aW50ZXJydXB0dmVjdG9ycyggaW50ZnVuY3Rpb24gcGluYSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHBpbmIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25z dCBwaW5wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludGZ1bmN0aW9uIG92ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY29uc3Qgb3ZlcmZsb3dwcmlvcml0 eSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM1MCkpPSgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4MzUwKSkgJiAofjB4RkYwMCkpIHwgKHBpbnByaW9yaXR5PDwxMikgfCAob3Zl cmZsb3dwcmlvcml0eTw8OCk7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9y dGFibGVbMTA0XT1waW5hOwogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRh YmxlWzEwNV09cGluYjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs ZVsxMDhdPW92ZXJmbG93OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCgoK ICAgICAgICBjbGFzcyBjbXRpbWVyMAogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoK ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikoMHhGRkZGODNEMCkpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4M0QwKSkgfCAweDAxOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICBzdGF0aWMgdm9pZCBzdG9wKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg KikoMHhGRkZGODNEMCkpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Qw KSkgJiB+MHgwMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGlj IHZvaWQgc2V0dXAocGludHlwZSBjb25zdCBwaW5hLCBwaW50eXBlIGNvbnN0IHBpbmIsIGNsZWFy c291cmNlIGNvbnN0IGNsZWFyLGVkZ2Vtb2RlIGNvbnN0IGVkZ2UsIGludCBjb25zdCBjbGspCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHBpbmEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIGlucHV0bWF0Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNv bXBhcmV0b2dnbGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1 bHNlMDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UxOgog ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBz d2l0Y2ggKHBpbmIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBpbnB1dG1hdGNocmlzaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IGlucHV0bWF0Y2hmYWxsaW5nOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGlucHV0bWF0 Y2hib3RoOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmV0b2dnbGU6 CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXB1bHNlMDoKICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UxOgogICAgICAgICAgICAg ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNsZWFy KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug ZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2hhbmE6CiAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgY2hhbmI6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc3lu YzoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgc3dpdGNoKGVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBkaXNhYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFu YToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYjoKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBzeW5jOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgc3dpdGNoKGNsaykKICAgICAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgPSAoKih2b2xhdGls ZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwgMHgwMDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDMyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgKikoMHhGRkZGODNEMikpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODNEMikpICYgKH4weDAzKSB8IDB4MDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjg6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgPSAoKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwgMHgwMjsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDUxMjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIHNob3J0ICopKDB4RkZGRjgzRDIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop KDB4RkZGRjgzRDIpKSAmICh+MHgwMykgfCAweDAzOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4MDMpIHwg MHgwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBzdGF0aWMg dm9pZCBzZXRncmEodW5zaWduZWQgc2hvcnQgY29uc3QgeCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikoMHhGRkZGODNENikpKT14OwogICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2V0Z3JhKCkKICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopKDB4RkZGRjgzRDYpKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgc3RhdGljIHZvaWQgc2V0Z3JiKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYigpCiAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBzZXRjb3VudCh1bnNpZ25lZCBz aG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAo Kih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4 M0Q0KSkpPXg7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCBnZXRjb3VudCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q0 KSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGVu YWJsZWludHMoIGJvb2wgY29uc3QgcGluYSxib29sIGNvbnN0IHBpbmIsYm9vbCBjb25zdCBvdmVy ZmxvdyApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHVuc2ln bmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDIpKSkg PSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0QyKSkgJiAofjB4NDApIHwg KHBpbmE/MHg0MDoweDAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg c3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCBib29sIGNvbnN0IHBpbmEsYm9vbCBjb25zdCBw aW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4M0QyKSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODNEMikpICYgfihwaW5hPzB4ODA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHN0YXRpYyBib29sIGNoYW5haW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4 RkZGRjgzRDIpKSAmIDB4ODA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHN0YXRpYyBib29sIGNoYW5iaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICBzdGF0aWMgYm9vbCBvdmZpbnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgIHN0YXRpYyB2b2lkIHNldGludGVycnVwdHZlY3RvcnMoIGludGZ1bmN0aW9uIHBpbmEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRmdW5j dGlvbiBwaW5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgc2hvcnQgY29uc3QgcGlucHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRmdW5jdGlvbiBvdmVyZmxvdywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0 IGNvbnN0IG92ZXJmbG93cHJpb3JpdHkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzNTQpKT0oKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzU0KSkgJiAofjB4MDBGMCkgfCAocGlu cHJpb3JpdHk8PDQpOwogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxl WzE0NF09cGluYTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAg IGNsYXNzIGNtdGltZXIxCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAg ICAgICAgICAgc3RhdGljIHZvaWQgc3RhcnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCAqKSgweEZGRkY4M0QwKSkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZG RjgzRDApKSB8IDB4MDI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0 YXRpYyB2b2lkIHN0b3AoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAoKih1bnNpZ25lZCBzaG9ydCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG RkY4M0QwKSkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDApKSAmIH4w eDAyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBz ZXR1cChwaW50eXBlIGNvbnN0IHBpbmEsIHBpbnR5cGUgY29uc3QgcGluYiwgY2xlYXJzb3VyY2Ug Y29uc3QgY2xlYXIsZWRnZW1vZGUgY29uc3QgZWRnZSwgaW50IGNvbnN0IGNsaykKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RvcCgpOwogICAgICAgICAgICAgICAg ICAgIHN3aXRjaCAocGluYSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgaW5wdXRtYXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5w dXRtYXRjaGJvdGg6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRv Z2dsZToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UwOgog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAgICAgICAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo cGluYikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIGlucHV0bWF0Y2hyaXNpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRt YXRjaGZhbGxpbmc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW5wdXRtYXRjaGJvdGg6 CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb3V0cHV0Y29tcGFyZXRvZ2dsZToKICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSBvdXRwdXRjb21wYXJlcHVsc2UwOgogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIG91dHB1dGNvbXBhcmVwdWxzZTE6CiAgICAgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xlYXIpCiAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBkaXNhYmxl ZDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBjaGFuYToKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBjaGFuYjoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBzeW5jOgogICAg ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2l0 Y2goZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIGRpc2FibGVkOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5hOgogICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIGNoYW5iOgogICAgICAgICAgICAgICAgICAgICAgICBj YXNlIHN5bmM6CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgIHN3aXRjaChjbGspCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4 RkZGRjgzRDgpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDgpKSAm ICh+MHgwMykgfCAweDAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgMTI4OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDI7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1 MTI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9y dCAqKSgweEZGRkY4M0Q4KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4 M0Q4KSkgJiAofjB4MDMpIHwgMHgwMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpID0gKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDAzKSB8IDB4MDA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0 Z3JhKHVuc2lnbmVkIHNob3J0IGNvbnN0IHgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICgqKHVuc2lnbmVkIHNob3J0ICopJigqKHZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0ICopKDB4RkZGRjgzREMpKSk9eDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldGdyYSgpCiAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4M0RDKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0 YXRpYyB2b2lkIHNldGdyYih1bnNpZ25lZCBzaG9ydCBjb25zdCB4KQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRncmIoKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgc2V0Y291bnQodW5zaWduZWQgc2hvcnQgY29u c3QgeCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoodW5zaWdu ZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEQSkpKT14 OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQg c2hvcnQgZ2V0Y291bnQoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEQSkpOwogICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnRz KCBib29sIGNvbnN0IHBpbmEsYm9vbCBjb25zdCBwaW5iLGJvb2wgY29uc3Qgb3ZlcmZsb3cgKQog ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih1bnNpZ25lZCBzaG9y dCAqKSYoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q4KSkpID0gKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNEOCkpICYgKH4weDQwKSB8IChwaW5hPzB4 NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2 b2lkIGNsZWFyaW50c291cmNlcyggYm9vbCBjb25zdCBwaW5hLGJvb2wgY29uc3QgcGluYixib29s IGNvbnN0IG92ZXJmbG93ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgKCoodW5zaWduZWQgc2hvcnQgKikmKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODNEOCkpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRDgpKSAm IH4ocGluYT8weDgwOjB4MDApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICBzdGF0aWMgYm9vbCBjaGFuYWludCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Q4 KSkgJiAweDgwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMg Ym9vbCBjaGFuYmludCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3Rh dGljIGJvb2wgb3ZmaW50KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBz dGF0aWMgdm9pZCBzZXRpbnRlcnJ1cHR2ZWN0b3JzKCBpbnRmdW5jdGlvbiBwaW5hLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gcGlu YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIHNob3J0IGNvbnN0IHBpbnByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ZnVuY3Rpb24gb3ZlcmZsb3csCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb25zdCBv dmVyZmxvd3ByaW9yaXR5KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzU0KSk9KCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM1NCkpICYgKH4weDAwMEYpIHwgKHBpbnByaW9yaXR5 KTsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsxNDhdPXBpbmE7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICBjbGFzcyBzZXJp YWwwCiAgICAgICAgICAgIHsKICAgICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgc3Rh dGljIHZvaWQgaW5pdHBvcnQoIGludGZ1bmN0aW9uIHJ4ZXJyaW50ZXJydXB0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHJ4aW50ZXJydXB0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGZ1bmN0aW9uIHR4aW50ZXJydXB0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHBy aW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo b3J0IGJpdHJhdGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzhFKSk9KCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikoMHhGRkZGODM4RSkpICYgMHhGRkYwIHwgMHgwMDA1OwogICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzODYpKT0oKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4Mzg2KSkgJiAweEZGRkMgfCAweDAwMDI7 CgogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZG ODFBMCkpPTB4MDA7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh ciAqKSgweEZGRkY4MUEyKSk9MHgzMDsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQTQpKT0weDg0OwogICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAoYml0cmF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDM4NDAwOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZG RjgxQTEpKT0yMzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg ICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJsZVsxMjhdPXJ4ZXJyaW50ZXJydXB0OwogICAgICAgICAg ICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxlWzEyOV09cnhpbnRlcnJ1cHQ7CiAgICAg ICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9ydGFibGVbMTMwXT10eGludGVycnVwdDsK CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZG ODM1MikpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzNTIpKSAmIDB4RkYw RiB8IChwcmlvcml0eTw8NCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHN0YXRpYyB2b2lkIHB1dGNoYXIoY2hhciBjKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSBjaGFyICopKDB4RkZGRjgxQTMpKT1jOwogICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBnZXRjaGFyKCkKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxl IGNoYXIgKikoMHhGRkZGODFBNSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICBzdGF0aWMgdm9pZCBjbGVhcmludHNvdXJjZXMoYm9vbCB0eCxib29sIHJ4LGJvb2wgcnhl cnIpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFBNCkpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikoMHhGRkZGODFBNCkpICYgfiggKHR4PzB4ODA6MHgwMCkgfCAocng/MHg0MDoweDAwKSB8IChy eGVycj8weDM4OjB4MDApKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg c3RhdGljIHZvaWQgZW5hYmxlaW50KGJvb2wgdHgsYm9vbCByeCApCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhG RkZGODFBMikpPSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFBMikpICYgKH4w eEMwKSB8ICh0eD8weDgwOjB4MDApIHwgKHJ4PzB4NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIHJ4Y2hhcmF2YWlsKCkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikoMHhGRkZGODFBNCkpICYgMHg0MDsKICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgc3RhdGljIGJvb2wgdHhzbG90YXZhaWwoKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh ciAqKSgweEZGRkY4MUE0KSkgJiAweDgwOwogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAg ICAgICB9OwoKICAgICAgICBjbGFzcyBzZXJpYWwxCiAgICAgICAgICAgIHsKICAgICAgICAgICAg cHVibGljOgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgaW5pdHBvcnQoIGludGZ1bmN0aW9u IHJ4ZXJyaW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dGZ1bmN0aW9uIHJ4aW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGZ1bmN0aW9uIHR4aW50ZXJydXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJpdHJhdGUgKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgw eEZGRkY4MzhFKSk9KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM4RSkpICYg MHhGQzNGIHwgMHgwMTQwOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopKDB4RkZGRjgzODYpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZG RkY4Mzg2KSkgJiAweEZGRTcgfCAweDAwMTA7CgogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODFCMCkpPTB4MDA7CiAgICAgICAgICAgICAgICAg ICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUIyKSk9MHgzMDsKICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjQpKT0w eDg0OwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYml0cmF0ZSkKICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4NDAwOgogICAgICAgICAg ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2 b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjEpKT0yMzsKICAgICAgICAgICAgICAg ICAgICAgICAgfQoKCgogICAgICAgICAgICAgICAgICAgIHRwcm9jZXNzb3I6OnZlY3RvcnRhYmxl WzEzMl09cnhlcnJpbnRlcnJ1cHQ7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVj dG9ydGFibGVbMTMzXT1yeGludGVycnVwdDsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29y Ojp2ZWN0b3J0YWJsZVsxMzRdPXR4aW50ZXJydXB0OwoKICAgICAgICAgICAgICAgICAgICAoKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4MzUyKSk9KCoodm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgKikoMHhGRkZGODM1MikpICYgMHhGRkYwIHwgKHByaW9yaXR5KTsKICAgICAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHV0Y2hhcihjaGFyIGMp CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIGNo YXIgKikoMHhGRkZGODFCMykpPWM7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIHN0YXRpYyBjaGFyIGdldGNoYXIoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKCoodm9sYXRpbGUgY2hhciAqKSgweEZGRkY4MUI1KSk7CiAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyaW50c291 cmNlcyhib29sIHR4LGJvb2wgcngsYm9vbCByeGVycikKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0 KSk9KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0KSkgJiB+KCAodHg/MHg4 MDoweDAwKSB8IChyeD8weDQwOjB4MDApIHwgKHJ4ZXJyPzB4Mzg6MHgwMCkpOwogICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBlbmFibGVpbnQoYm9vbCB0 eCxib29sIHJ4ICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUIyKSk9KCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSgweEZGRkY4MUIyKSkgJiAofjB4QzApIHwgKHR4PzB4ODA6MHgwMCkgfCAocng/ MHg0MDoweDAwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGlj IGJvb2wgcnhjaGFyYXZhaWwoKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICByZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4MUI0KSkgJiAw eDQwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCB0 eHNsb3RhdmFpbCgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJl dHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgxQjQpKSAmIDB4ODA7CiAg ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfTsKCgoKICAgICAgICBjbGFzcyBod2Fk YwogICAgICAgICAgICB7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIHN0YXRp YyB2b2lkIHNldHVwKCBpbnRmdW5jdGlvbiBpbnRmbixpbnQgaW50cHJpb3JpdHksIGJvb2wgc2Nh bm1vZGUgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKT0weDFGOwogICAgICAgICAgICAgICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODNFMSkpPTB4NDAgfCAoc2Nh bm1vZGU/MHg4OjB4MCk7CiAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nvcjo6dmVjdG9ydGFi bGVbMTM2XT1pbnRmbjsKICAgICAgICAgICAgICAgICAgICB0cHJvY2Vzc29yOjp2ZWN0b3J0YWJs ZVsxMzhdPWludGZuOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0ICopKDB4RkZGRjgzNTQpKT0oKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4 MzU0KSkgJiAweDBGRkYgfCAoaW50cHJpb3JpdHk8PDEyKTsKICAgICAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJlYWRjaGFubmVsKGludCBj aGFubmVsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGNoYW5uZWwpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0YwKSk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGMikpOwogICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRjQpKTsKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0Y2KSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCoo dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGOCkpOwogICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgq KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjgzRkEpKTsKICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo Kih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4M0ZDKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODNGRSkpOwoKICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdGF0 aWMgdW5zaWduZWQgc2hvcnQgcGVyaW9kKCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5uZWxzcmVhZHkoKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHhGRjsKICAgICAgICAgICAgICAgICAg ICB9CgoKCiAgICAgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWxlY3RuZXh0Y2hh bm5lbHNldCgpCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICB9CgoK CiAgICAgICAgICAgICAgICBzdGF0aWMgYm9vbCBpbnRwZW5kaW5nKCkKICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikoMHhGRkZGODNFMCkpICYgMHg4MDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgc3RhdGljIHZvaWQgY2xlYXJpbnRzb3VyY2VzKCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZG RkY4M0UwKSkgJj0gfjB4ODA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHN0YXRpYyBib29sIGVuYWJsZWludChib29sIGVuYSkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4M0Uw KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKSAmICh+MHg0MCkg fCAoZW5hPzB4NDA6MHgwMCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHN0YXRpYyBib29sIHN0YXJ0KCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgweEZGRkY4M0UwKSkgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopKDB4RkZGRjgzRTApKSB8IDB4MjA7CiAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIHN0YXRpYyBib29sIHN0b3AoKQogICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop KDB4RkZGRjgzRTApKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoMHhGRkZGODNFMCkp ICYgKH4weDIwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiMgMTUwMiAi Y3B1L3NoMi5oIgogICAgICAgIGNsYXNzIGRyYW0KICAgICAgICAgICAgewogICAgICAgICAgICBw dWJsaWM6CiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBpbml0KGludCAmZHJhbXNpemUsYm9v bCAmZHJhbWJ1cnN0KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBl eHRlcm4gdW5zaWduZWQgY2hhciBfZHJhbWZyZWVbXTsKCiAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODM5QSkpIHw9IDB4MEZGMDsKICAgICAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgweEZGRkY4Mzk0KSkg fD0gMHgzQzsKICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAq KSgweEZGRkY4NjJDKSkgPSAweDBBOwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVu c2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MzApKSA9IDB4ODA7CgogICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgdm9sYXRpbGUgKmQ9X2RyYW1mcmVlOwogICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0IFdhaXRTdGF0ZXM9MDsKCgogICAgICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MkEpKT1XYWl0U3RhdGVzIHwgMHg2Owog ICAgICAgICAgICAgICAgICAgIGRbMF09MHhBQTsKICAgICAgICAgICAgICAgICAgICBkWzQqMTAy NCoxMDI0XT0weDU1OwoKICAgICAgICAgICAgICAgICAgICBpZiAoZFswXT09MHhBQSAmJiBkWzQq MTAyNCoxMDI0XT09MHg1NSkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAg ICAgICAgICAgICAgZHJhbXNpemU9OCoxMDI0KjEwMjQ7CiAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gY2hlY2tidXJzdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCgogICAgICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4RkZGRjg2MkEpKT1XYWl0 U3RhdGVzIHwgMHg1OwogICAgICAgICAgICAgICAgICAgIGRbMF09MHgzMzsKICAgICAgICAgICAg ICAgICAgICBkWzEqMTAyNCoxMDI0XT0weENDOwoKICAgICAgICAgICAgICAgICAgICBpZiAoZFsw XT09MHgzMyAmJiBkWzEqMTAyNCoxMDI0XT09MHhDQykKICAgICAgICAgICAgICAgICAgICAgICAg ewoKICAgICAgICAgICAgICAgICAgICAgICAgZHJhbXNpemU9MioxMDI0KjEwMjQ7CiAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tidXJzdDsKICAgICAgICAgICAgICAgICAgICAgICAg fQoKCiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhG RkZGODYyQSkpPVdhaXRTdGF0ZXMgfCAweDQ7CiAgICAgICAgICAgICAgICAgICAgZFswXT0weDIy OwogICAgICAgICAgICAgICAgICAgIGRbMjU2KjEwMjRdPTB4RUU7CgogICAgICAgICAgICAgICAg ICAgIGlmIChkWzBdPT0weDIyICYmIGRbMjU2KjEwMjRdPT0weEVFKQogICAgICAgICAgICAgICAg ICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICBkcmFtc2l6ZT0yKjEwMjQqMTAyNDsK ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjaGVja2J1cnN0OwogICAgICAgICAgICAgICAg ICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRyYW1zaXplPTA7CiAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoMHhGRkZGODYyQSkpPTA7CiAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgICAgICAgICBjaGVja2J1cnN0Ogoj IDE1ODQgImNwdS9zaDIuaCIKICAgICAgICAgICAgICAgICAgICBkcmFtYnVyc3Q9ZmFsc2U7CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgfTsKIyA1ICJtazZib2FyZC9o d2FsbG9jLmgiIDIKIyA2ICJldmVudGV4ZS5oIiAyCgojIDEgImNvbmZpZy5oIiAxCiMgMSAiZGF0 c3VuY29uZmlnLmgiIDEKIyAyICJjb25maWcuaCIgMgojIDggImV2ZW50ZXhlLmgiIDIKIyAyNyAi ZXZlbnRleGUuaCIKdHlwZWRlZiB0dG9vdGh3aGVlbDwKICAgICAgICAgICAgICAgICAgICAgICAg dHByb2Nlc3Nvcjo6dHRpbWVyMCwxNiwKICAgICAgICAgICAgICAgICAgICAgICAgdHByb2Nlc3Nv cjo6dHRpbWVyMSwxNiwKICAgICAgICAgICAgICAgICAgICAgICAgNjAsCiAgICAgICAgICAgICAg ICAgICAgICAgIDY0LAogICAgICAgICAgICAgICAgICAgICAgICAoKHRhbmdsZSkoKChpbnQpMzYw KTw8MTYpKSoxLAogICAgICAgICAgICAyOTUwMDAwMAogICAgICAgICAgICAgICAgPiB0ZXZlbnRl eGVjdXRvcjsKCmV4dGVybiB0ZXZlbnRleGVjdXRvciBldmVudGV4ZWN1dG9yOwojIDMgImNvbmZp Zy5jYyIgMgoKCnZvaWQgeCgpCiAgICB7CiAgICB0aTRlbmdpbmUgZW5naW5lKGV2ZW50ZXhlY3V0 b3IpOwogICAgfQo=