From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29479 invoked by alias); 5 Feb 2003 19:46:03 -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 29453 invoked by uid 71); 5 Feb 2003 19:46:01 -0000 Resent-Date: 5 Feb 2003 19:46:01 -0000 Resent-Message-ID: <20030205194601.29451.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, bmiller@txcorp.com Received: (qmail 28467 invoked by uid 48); 5 Feb 2003 19:43:59 -0000 Message-Id: <20030205194359.28465.qmail@sources.redhat.com> Date: Wed, 05 Feb 2003 19:46:00 -0000 From: bmiller@txcorp.com Reply-To: bmiller@txcorp.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9589: Segmentation fault on missing semicolon after class definition. X-SW-Source: 2003-02/txt/msg00271.txt.bz2 List-Id: >Number: 9589 >Category: c++ >Synopsis: Segmentation fault on missing semicolon after class definition. >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: ice-on-illegal-code >Submitter-Id: net >Arrival-Date: Wed Feb 05 19:46:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: bmiller@txcorp.com >Release: 3.2 >Organization: >Environment: GNU CPP version 3.2 (cpplib) (i386 Linux/ELF) GNU C++ version 3.2 (i686-pc-linux-gnu) compiled by GNU C version 3.2. RedHat 7.2 >Description: The attached .ii file causes g++ to segfault. Search for "xxx" and see that the end of the class definition is missing a semicolon. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="TxVorpalGUI.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="TxVorpalGUI.ii" IyAxICJUeFZvcnBhbEdVSS5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5l PiIKIyAxICJUeFZvcnBhbEdVSS5jcHAiCiMgMTMgIlR4Vm9ycGFsR1VJLmNwcCIKIyAxICJUeFZv cnBhbEdVSS5oIiAxCiMgMTYgIlR4Vm9ycGFsR1VJLmgiCiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1p bGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAxCiMgMTkg Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFF ZGl0VGFibGUuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiIDEK IyA0MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIgojIDEgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAxCiMgNDEgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xZnJhbWUuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZyYW1l LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIgMQojIDQyICIv dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpZGdldC5oIgojIDEgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xd2luZG93ZGVmcy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x b2JqZWN0ZGVmcy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xb2JqZWN0 ZGVmcy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA1 NzMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciB1Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5z aWduZWQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwp0eXBlZGVmIGNoYXIgKnBj aGFyOwp0eXBlZGVmIHVjaGFyICpwdWNoYXI7CnR5cGVkZWYgY29uc3QgY2hhciAqcGNjaGFyOwoK CgoKCgoKY29uc3QgYm9vbCBGQUxTRSA9IDA7CmNvbnN0IGJvb2wgVFJVRSA9ICEwOwojIDYzMCAi L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKaW5saW5lIGludCBxUm91bmQo IGRvdWJsZSBkICkKewogICAgcmV0dXJuIGQgPj0gMC4wID8gaW50KGQgKyAwLjUpIDogaW50KCBk IC0gKChpbnQpZC0xKSArIDAuNSApICsgKChpbnQpZC0xKTsKfQojIDY0MiAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBJTlQ4Owp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQgSU5UMTY7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4Owp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBR X1VJTlQzMjsKCgoKCgoKdHlwZWRlZiBsb25nIFFfTE9ORzsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFFfVUxPTkc7CiMgNjc4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdsb2JhbC5oIgog ICAgdHlwZWRlZiBRX1VMT05HIFF0T2Zmc2V0OwoKCgoKCgoKY2xhc3MgUURhdGFTdHJlYW07CiMg NzEwICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xY29uZmlnLmgiIDEKIyA3MTEgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDIKIyA3MjAgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVk ZS9xZ2xvYmFsLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Ftb2R1bGVzLmgi IDEKIyA3MjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDIKIyA3NzMg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiCiMgMSAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3FmZWF0dXJlcy5oIiAxCiMgNzc0ICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMgODQwICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cWdsb2JhbC5oIgogY29uc3QgY2hhciAqcVZlcnNpb24oKTsKIGJvb2wgcVN5c0luZm8oIGludCAq d29yZFNpemUsIGJvb2wgKmJpZ0VuZGlhbiApOwojIDkwMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3FnbG9iYWwuaCIKIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAg X19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxV2Fybmlu ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50 ZiwgMSwgMikpKQoKOwoKIHZvaWQgcUZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19h dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBxU3lzdGVtV2Fy bmluZyggY29uc3QgY2hhciAqLCBpbnQgY29kZSA9IC0xICk7CgoKCiB2b2lkIGRlYnVnKCBjb25z dCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAy KSkpCgo7Cgogdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1 dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgogdm9pZCBmYXRhbCggY29uc3QgY2hh ciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoK OwojIDk2NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKIGJvb2wgcXRf Y2hlY2tfcG9pbnRlciggYm9vbCBjLCBjb25zdCBjaGFyICosIGludCApOwojIDk3OSAiL3Vzci9s b2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIKZW51bSBRdE1zZ1R5cGUgeyBRdERlYnVn TXNnLCBRdFdhcm5pbmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5cGVkZWYgdm9pZCAoKlF0TXNnSGFu ZGxlcikoUXRNc2dUeXBlLCBjb25zdCBjaGFyICopOwogUXRNc2dIYW5kbGVyIHFJbnN0YWxsTXNn SGFuZGxlciggUXRNc2dIYW5kbGVyICk7CgoKdHlwZWRlZiBRdE1zZ0hhbmRsZXIgbXNnX2hhbmRs ZXI7CgoKIHZvaWQgcVN1cHByZXNzT2Jzb2xldGVXYXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCiB2 b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRmdW5jLAogICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3ZnVuYyApOwogdm9pZCBxT2Jzb2xldGUoIGNv bnN0IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogdm9pZCBxT2Jzb2xldGUoIGNv bnN0IGNoYXIgKm1lc3NhZ2UgKTsKCgoKCgoKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aCgpOwog Y29uc3QgY2hhciAqcUluc3RhbGxQYXRoRG9jcygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRo SGVhZGVycygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRoTGlicygpOwogY29uc3QgY2hhciAq cUluc3RhbGxQYXRoQmlucygpOwogY29uc3QgY2hhciAqcUluc3RhbGxQYXRoUGx1Z2lucygpOwog Y29uc3QgY2hhciAqcUluc3RhbGxQYXRoRGF0YSgpOwojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIgMgojIDcyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcW9iamVjdGRlZnMuaCIKc3RydWN0IFFVT2JqZWN0OwojIDE1MiAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2Jq ZWN0OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1 Y3QgUU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlz dEl0OwpjbGFzcyBRU2lnbmFsVmVjOwpjbGFzcyBRT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdExp c3RJdDsKY2xhc3MgUU1lbWJlckRpY3Q7Cgogdm9pZCAqcXRfZmluZF9vYmpfY2hpbGQoIFFPYmpl Y3QgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcXN0cmluZy5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc3Ry aW5nLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiIDEKIyA0 MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiCiMgMSAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FtZW1hcnJheS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xbWVtYXJyYXkuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cWdhcnJheS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2FycmF5Lmgi CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzaGFyZWQuaCIgMQojIDQyICIvdXNy L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXNoYXJlZC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl L3FzaGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hhcmVkKCkgOiBjb3VudCgg MSApIHsgfQogICAgdm9pZCByZWYoKSB7IGNvdW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKSB7IHJl dHVybiAhLS1jb3VudDsgfQogICAgdWludCBjb3VudDsKfTsKIyA0MyAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FnYXJyYXkuaCIgMgoKCgpjbGFzcyBRR0FycmF5CnsKZnJpZW5kIGNsYXNz IFFCdWZmZXI7CnB1YmxpYzoKCiAgICBzdHJ1Y3QgYXJyYXlfZGF0YSA6IHB1YmxpYyBRU2hhcmVk IHsKICAgICAgICBhcnJheV9kYXRhKCk6ZGF0YSgwKSxsZW4oMCkKCgoKICAgICAgICAgICAge30K ICAgICAgICBjaGFyICpkYXRhOwogICAgICAgIHVpbnQgbGVuOwoKCgogICAgfTsKICAgIFFHQXJy YXkoKTsKICAgIGVudW0gT3B0aW1pemF0aW9uIHsgTWVtT3B0aW0sIFNwZWVkT3B0aW0gfTsKcHJv dGVjdGVkOgogICAgUUdBcnJheSggaW50LCBpbnQgKTsKICAgIFFHQXJyYXkoIGludCBzaXplICk7 CiAgICBRR0FycmF5KCBjb25zdCBRR0FycmF5ICZhICk7CiAgICB2aXJ0dWFsIH5RR0FycmF5KCk7 CgogICAgUUdBcnJheSAmb3BlcmF0b3I9KCBjb25zdCBRR0FycmF5ICZhICkgeyByZXR1cm4gYXNz aWduKCBhICk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCkgeyBkdXBsaWNhdGUoKnRoaXMp OyB9CgoKICAgIGNoYXIgKmRhdGEoKSBjb25zdCB7IHJldHVybiBzaGQtPmRhdGE7IH0KICAgIHVp bnQgbnJlZnMoKSBjb25zdCB7IHJldHVybiBzaGQtPmNvdW50OyB9CiAgICB1aW50IHNpemUoKSBj b25zdCB7IHJldHVybiBzaGQtPmxlbjsgfQogICAgYm9vbCBpc0VxdWFsKCBjb25zdCBRR0FycmF5 ICZhICkgY29uc3Q7CgogICAgYm9vbCByZXNpemUoIHVpbnQgbmV3c2l6ZSwgT3B0aW1pemF0aW9u IG9wdGltICk7CiAgICBib29sIHJlc2l6ZSggdWludCBuZXdzaXplICk7CgogICAgYm9vbCBmaWxs KCBjb25zdCBjaGFyICpkLCBpbnQgbGVuLCB1aW50IHN6ICk7CgogICAgUUdBcnJheSAmYXNzaWdu KCBjb25zdCBRR0FycmF5ICZhICk7CiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQs IHVpbnQgbGVuICk7CiAgICBRR0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsK ICAgIFFHQXJyYXkgJmR1cGxpY2F0ZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZv aWQgc3RvcmUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CgogICAgYXJyYXlfZGF0YSAqc2hh cmVkQmxvY2soKSBjb25zdCB7IHJldHVybiBzaGQ7IH0KICAgIHZvaWQgc2V0U2hhcmVkQmxvY2so IGFycmF5X2RhdGEgKnAgKSB7IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJyYXkgJnNl dFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0 YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciAq ZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBj aGFyICpkLCB1aW50IHN6ICkgY29uc3Q7CgogICAgdm9pZCBzb3J0KCB1aW50IHN6ICk7CiAgICBp bnQgYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIGNoYXIgKmF0 KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNv bnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0 YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoIGFycmF5X2RhdGEgKnAg KTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2dfaW5kZXgoIHVpbnQgKTsKICAgIGFycmF5 X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdBcnJheTo6YXQoIHVpbnQgaW5kZXggKSBj b25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkgKSB7CiAgICAgICAgbXNnX2luZGV4KCBp bmRleCApOwogICAgICAgIGluZGV4ID0gMDsKICAgIH0KCiAgICByZXR1cm4gJnNoZC0+ZGF0YVtp bmRleF07Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW1hcnJheS5oIiAy CgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFNZW1BcnJheSA6IHB1YmxpYyBRR0FycmF5 CnsKcHVibGljOgogICAgdHlwZWRlZiB0eXBlKiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3Qg dHlwZSogQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZSBWYWx1ZVR5cGU7Cgpwcm90ZWN0 ZWQ6CiAgICBRTWVtQXJyYXkoIGludCwgaW50ICkgOiBRR0FycmF5KCAwLCAwICkge30KCnB1Ymxp YzoKICAgIFFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXkoIGludCBzaXplICkgOiBRR0FycmF5 KHNpemUqc2l6ZW9mKHR5cGUpKSB7fQogICAgUU1lbUFycmF5KCBjb25zdCBRTWVtQXJyYXk8dHlw ZT4gJmEgKSA6IFFHQXJyYXkoYSkge30KICAgflFNZW1BcnJheSgpIHt9CiAgICBRTWVtQXJyYXk8 dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNz aWduKGEpOyB9CiAgICB0eXBlICpkYXRhKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0FycmF5 OjpkYXRhKCk7IH0KICAgIHVpbnQgbnJlZnMoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpucmVm cygpOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkvc2l6 ZW9mKHR5cGUpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAg ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpzaXplKCkgPT0gMDsgfQog ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBRR0FycmF5OjpkYXRhKCkgPT0gMDsgfQog ICAgYm9vbCByZXNpemUoIHVpbnQgc2l6ZSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXpl KnNpemVvZih0eXBlKSk7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUsIE9wdGltaXphdGlv biBvcHRpbSApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShzaXplKnNpemVvZih0eXBlKSwgb3B0 aW0pOyB9CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJl c2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBp bnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxz aXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNo KCk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFNZW1BcnJh eTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRlKCp0aGlzKTsgfQogICAgUU1lbUFycmF5 PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFNZW1BcnJheTx0eXBlPiYgYSApCiAgICAgICAgeyByZXR1 cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICBRTWVtQXJyYXk8 dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAo UU1lbUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlwZSkp OyB9CiAgICBRTWVtQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUU1lbUFycmF5PHR5cGU+ JiBhICkKICAgICAgICB7IHJldHVybiAoUU1lbUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNh dGUoYSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1 aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxp Y2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFNZW1BcnJheTx0eXBlPiYgc2V0 UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUU1lbUFy cmF5PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQog ICAgdm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBR R0FycmF5OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQg ZmluZCggY29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFH QXJyYXk6OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5z KCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlu cygoY2hhciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpz b3J0KHNpemVvZih0eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29u c3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXpl b2YodHlwZSkpOyB9CgogICAgdHlwZSYgb3BlcmF0b3JbXSggaW50IGkgKSBjb25zdAogICAgICAg IHsgcmV0dXJuICh0eXBlICYpKCoodHlwZSAqKVFHQXJyYXk6OmF0KGkqc2l6ZW9mKHR5cGUpKSk7 IH0KICAgIHR5cGUmIGF0KCB1aW50IGkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuICh0eXBlICYp KCoodHlwZSAqKVFHQXJyYXk6OmF0KGkqc2l6ZW9mKHR5cGUpKSk7IH0KICAgICAgICAgb3BlcmF0 b3IgY29uc3QgdHlwZSooKSBjb25zdCB7IHJldHVybiAoY29uc3QgdHlwZSAqKVFHQXJyYXk6OmRh dGEoKTsgfQogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRTWVtQXJyYXk8dHlwZT4gJmEgKSBj b25zdCB7IHJldHVybiBpc0VxdWFsKGEpOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFN ZW1BcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuICFpc0VxdWFsKGEpOyB9CiAgICBJdGVy YXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQogICAgSXRlcmF0b3IgZW5kKCkgeyByZXR1 cm4gZGF0YSgpICsgc2l6ZSgpOyB9CiAgICBDb25zdEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gZGF0YSgpOyB9CiAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGRh dGEoKSArIHNpemUoKTsgfQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNz dHJpbmcuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4 MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz LmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9p bmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwoj IDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEg Ii91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNs dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNCAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZv aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBf X2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2 b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVt Y21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAq bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVt Y2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBp bnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hh ciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNh dCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBp bnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xs IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5j bHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVk ZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2Nh bGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0 IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpf X2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50 IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19s b2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z cmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAq c3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hy IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g c2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0 KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXpl X3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJw YnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9f Y29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2Vz dHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0 cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl bGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9f aGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUs IHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAo X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg X19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl eHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBj aGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMs IHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8g KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2Nv bnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChp bnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g aW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGlu dCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5j YXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4g aW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIg KipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQg X19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Rw bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVy biBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK CgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cg KCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDQ3ICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcWNzdHJpbmcuaCIgMgoKCgoKCgogdm9pZCAqcW1lbW1vdmUoIHZvaWQg KmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1aW50IGxlbiApOwoKIGNoYXIgKnFzdHJkdXAoIGNvbnN0 IGNoYXIgKiApOwoKIGlubGluZSB1aW50IHFzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0 dXJuIHN0ciA/ICh1aW50KXN0cmxlbihzdHIpIDogMDsgfQoKIGlubGluZSBjaGFyICpxc3RyY3B5 KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHNyYyA/IHN0cmNweShkc3Qs IHNyYykgOiAwOyB9CgogY2hhciAqcXN0cm5jcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3Jj LCB1aW50IGxlbiApOwoKIGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29u c3QgY2hhciAqc3RyMiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYgc3RyMiApID8gc3RyY21wKCBz dHIxLCBzdHIyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBzdHIxID8gMSA6ICgg c3RyMiA/IC0xIDogMCApICk7Cn0KCiBpbmxpbmUgaW50IHFzdHJuY21wKCBjb25zdCBjaGFyICpz dHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYg c3RyMiApID8gc3RybmNtcCggc3RyMSwgc3RyMiwgbGVuICkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDogKCBzdHIxID8gMSA6ICggc3RyMiA/IC0xIDogMCApICk7Cn0KCiBpbnQgcXN0cmlj bXAoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgogaW50IHFzdHJuaWNtcCggY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CgoKIGlubGluZSB1aW50IGNzdHJsZW4o IGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuICh1aW50KXN0cmxlbihzdHIpOyB9CgogaW5saW5l IGNoYXIgKmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3Ry Y3B5KGRzdCxzcmMpOyB9CgogaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBj b25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiBpbmxpbmUg aW50IGNzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxl biApCnsgcmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxlbik7IH0KCgoKCgogUV9VSU5UMTYgcUNo ZWNrc3VtKCBjb25zdCBjaGFyICpzLCB1aW50IGxlbiApOwojIDEyMCAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3Fjc3RyaW5nLmgiCnR5cGVkZWYgUU1lbUFycmF5PGNoYXI+IFFCeXRlQXJy YXk7CgoKCiBRQnl0ZUFycmF5IHFDb21wcmVzcyggY29uc3QgdWNoYXIqIGRhdGEsIGludCBuYnl0 ZXMgKTsKIFFCeXRlQXJyYXkgcVVuY29tcHJlc3MoIGNvbnN0IHVjaGFyKiBkYXRhLCBpbnQgbmJ5 dGVzICk7CiBpbmxpbmUgUUJ5dGVBcnJheSBxQ29tcHJlc3MoIGNvbnN0IFFCeXRlQXJyYXkmIGRh dGEpCnsgcmV0dXJuIHFDb21wcmVzcyggKGNvbnN0IHVjaGFyKilkYXRhLmRhdGEoKSwgZGF0YS5z aXplKCkgKTsgfQogaW5saW5lIFFCeXRlQXJyYXkgcVVuY29tcHJlc3MoIGNvbnN0IFFCeXRlQXJy YXkmIGRhdGEgKQp7IHJldHVybiBxVW5jb21wcmVzcyggKGNvbnN0IHVjaGFyKilkYXRhLmRhdGEo KSwgZGF0YS5zaXplKCkgKTsgfQoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh U3RyZWFtICYsIGNvbnN0IFFCeXRlQXJyYXkgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o IFFEYXRhU3RyZWFtICYsIFFCeXRlQXJyYXkgJiApOwoKCgoKCgpjbGFzcyBRUmVnRXhwOwoKY2xh c3MgUUNTdHJpbmcgOiBwdWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkg e30KICAgIFFDU3RyaW5nKCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5n ICZzICkgOiBRQnl0ZUFycmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIg KTsKICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CiAgICB+UUNT dHJpbmcoKTsKCiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApOwog ICAgUUNTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICk7CgogICAgYm9vbCBpc051 bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBj b25zdDsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbCB0cnVuY2F0ZSgg dWludCBwb3MgKTsKICAgIGJvb2wgZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAgICBR Q1N0cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIg KmZvcm1hdCwgLi4uICk7CgogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJvb2wg Y3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4 PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYs IGludCBpbmRleD0wICkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4 PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwogICAgaW50IGZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0 ciwgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBj b25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucygg Y2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hh ciAqc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFS ZWdFeHAgJiApIGNvbnN0OwoKICAgIFFDU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAg ICBRQ1N0cmluZyByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIG1pZCggdWlu dCBpbmRleCwgdWludCBsZW49MHhmZmZmZmZmZikgY29uc3Q7CgogICAgUUNTdHJpbmcgbGVmdEp1 c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsIGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7 CiAgICBRQ1N0cmluZyByaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIGNoYXIgZmlsbD0nICcsYm9v bCB0cnVuYz1GQUxTRSljb25zdDsKCiAgICBRQ1N0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUUNT dHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBRQ1N0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBjb25z dDsKICAgIFFDU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFDU3RyaW5n ICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJmluc2Vy dCggdWludCBpbmRleCwgY2hhciApOwogICAgUUNTdHJpbmcgJmFwcGVuZCggY29uc3QgY2hhciAq ICk7CiAgICBRQ1N0cmluZyAmcHJlcGVuZCggY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAm cmVtb3ZlKCB1aW50IGluZGV4LCB1aW50IGxlbiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIHVp bnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFj ZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBRQ1N0cmluZyAmcmVwbGFj ZSggY2hhciBjLCBjb25zdCBjaGFyICphZnRlciApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVwbGFjZSggY2hhciwg Y2hhciApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVzaG9y dCB0b1VTaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpvaz0w ICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgbG9uZyB0 b0xvbmcoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAg KSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJs ZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFDU3RyaW5nICZzZXRTdHIoIGNv bnN0IGNoYXIgKnMgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHNob3J0ICk7CiAgICBRQ1N0cmlu ZyAmc2V0TnVtKCB1c2hvcnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGludCApOwogICAgUUNT dHJpbmcgJnNldE51bSggdWludCApOwogICAgUUNTdHJpbmcgJnNldE51bSggbG9uZyApOwogICAg UUNTdHJpbmcgJnNldE51bSggdWxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGZsb2F0LCBj aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBkb3VibGUsIGNo YXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICBib29sIHNldEV4cGFuZCggdWludCBpbmRleCwg Y2hhciBjICk7CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3Q7 CiAgICBRQ1N0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmlu ZyAmb3BlcmF0b3IrPSggY2hhciBjICk7CnByaXZhdGU6CiAgICBpbnQgZmluZCggY29uc3QgY2hh ciAqc3RyLCBpbnQgaW5kZXgsIGJvb2wgY3MsIHVpbnQgbCApIGNvbnN0Owp9OwoKCgoKCgogUURh dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsK IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ1N0cmluZyAmICk7CgoK CgoKCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcg JnMgKQp7IHJldHVybiAoUUNTdHJpbmcmKWFzc2lnbiggcyApOyB9CgppbmxpbmUgUUNTdHJpbmcg JlFDU3RyaW5nOjpvcGVyYXRvcj0oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIChRQ1N0cmlu ZyYpZHVwbGljYXRlKCBzdHIsIHFzdHJsZW4oc3RyKSsxICk7IH0KCmlubGluZSBib29sIFFDU3Ry aW5nOjppc051bGwoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wg UUNTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBkYXRhKCkgPT0gMCB8fCAqZGF0YSgp ID09ICdcMCc7IH0KCmlubGluZSB1aW50IFFDU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVy biBxc3RybGVuKCBkYXRhKCkgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OnRydW5jYXRlKCB1 aW50IHBvcyApCnsgcmV0dXJuIHJlc2l6ZShwb3MrMSk7IH0KCmlubGluZSBRQ1N0cmluZyBRQ1N0 cmluZzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFDU3RyaW5nKCBkYXRhKCkgKTsgfQoKaW5saW5l IFFDU3RyaW5nICZRQ1N0cmluZzo6cHJlcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJuIGlu c2VydCgwLHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNo YXIgKnMgKQp7IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry aW5nOjpzZXROdW0oIHNob3J0IG4gKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGlu ZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdXNob3J0IG4gKQp7IHJldHVybiBzZXROdW0o KHVsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGludCBuICkK eyByZXR1cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpz ZXROdW0oIHVpbnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlubGluZSBRQ1N0 cmluZyAmUUNTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0 dXJuIHNldE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFDU3RyaW5nOjpvcGVyYXRv ciBjb25zdCBjaGFyICooKSBjb25zdAp7IHJldHVybiAoY29uc3QgY2hhciAqKWRhdGEoKTsgfQoK CgoKCgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBR Q1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyLmRhdGEoKSApID09 IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0 IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMiApID09IDA7IH0KCiBp bmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMy ICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSApID09IDA7IH0KCiBpbmxpbmUgYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsg cmV0dXJuIHFzdHJjbXAoIHMxLmRhdGEoKSwgczIuZGF0YSgpICkgIT0gMDsgfQoKIGlubGluZSBi b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJl dHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJh dG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3Ry Y21wKCBzMSwgczIuZGF0YSgpICkgIT0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29u c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyYgczIgKQp7IHJldHVybiBxc3RyY21wKCBz MS5kYXRhKCksIHMyLmRhdGEoKSApIDwgMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPCggY29u c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLmRh dGEoKSwgczIgKSA8IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMx LCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMSwgczIuZGF0YSgpICkg PCAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25z dCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyLmRhdGEoKSAp IDw9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRQ1N0cmluZyAmczEsIGNv bnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMiApIDw9IDA7IH0K CiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcg JnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSApIDw9IDA7IH0KCiBpbmxpbmUg Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK eyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMi5kYXRhKCkgKSA+IDA7IH0KCiBpbmxpbmUg Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJl dHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgPiAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0 b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt cCggczEsIHMyLmRhdGEoKSApID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0 IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0cmNtcCggczEu ZGF0YSgpLCBzMi5kYXRhKCkgKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29u c3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLmRh dGEoKSwgczIgKSA+PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAq czEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLCBzMi5kYXRhKCkg KSA+PSAwOyB9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJp bmcgJnMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR Q1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9 IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvciso IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRQ1N0cmluZyB0bXAo IHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBj b25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAm czIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4g dG1wOwp9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcg JnMxLCBjaGFyIGMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCAr PSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJpbmcgb3BlcmF0b3Ir KCBjaGFyIGMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXA7CiAgICB0 bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CiMgNDMgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xc3RyaW5nLmgiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL3N0cmluZyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv bmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt bGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwoj IDQ2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMg NDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAz CgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBj aGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgogIHRl bXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5 cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmlu ZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwogIHR5cGVkZWYgYmFzaWNf c3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cn0KIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk ZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs dWRlL2MrKy8zLjIvY3N0cmluZyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9jc3RkZGVmIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbG9jYWwvZ2Nj My4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyA0OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7 CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv My4yL2NzdHJpbmciIDIgMwojIDc3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Y3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1l bW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3Ry Y2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNt cDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZy bTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7 CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsK CiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGlu dCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p ZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIq CiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNo cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBi cms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19z MikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJy Y2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29u c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7Cgog IGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsg cmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f czIpOyB9Cn0KIyA0NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hh cl90cmFpdHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvZnBvcy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvZnBvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMSAzCiMgNDggIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9n Y2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg MSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9n Y2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xvY2Fs L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5z aWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9u ZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFk X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7 CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGlu dCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVk ZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7 CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90Owpf X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoK dHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7 CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRl ZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191 X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRf dCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0 eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsK dHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFs WzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIg Kl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYg bG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRl ZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVm IGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoK Cgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Js a2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n IF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVk ZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0 X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9f b2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNs dWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3Nj aGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwog IGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3Ry dWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9z CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19z Y2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Nj b3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQg Kl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoK dHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBf cHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBz dHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVu c2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19t X3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwog IGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRo cmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0 aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9j ayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dy aXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNj ciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVk Owp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2lu ZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2 b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1 Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGlu dCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRf YmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf YmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsK IyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2dj YzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAy IDMKIyA1NCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0 ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5j bHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL3Vz ci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIv dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIv dXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0 X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj IDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx IDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg MiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19H Q09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19H Q09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNP TVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lO VEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBf X0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsK c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0Owpz dHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAo c3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1 bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWdu ZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVk ZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25z dCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBj b25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lk ICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9f dHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2Zj dDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0 YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2dj b252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxl OwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpf X2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9f Z2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoK CgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50 IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVm dWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1 bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoK ICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9f aW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19z dGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBl ZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19n Y29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3Ry dWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZf c3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYg aW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk ZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo X19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj IDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAi L3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK IyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9f bWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpf c2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoK ZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRp YWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBf SU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2 dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0 IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBf X2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVj dnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq X19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoq LCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChz dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYp IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0 cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2Nv ZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZf dCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2Rh dGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAg d2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hh cl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAq X0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2 ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVf ZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3Rh dGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1Zlsx XTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJ TEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9f cmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsK ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lP X2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwog IGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBf SU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBf ZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2ln bmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNo YXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2 dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGlu dCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2Yg KHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz IF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk ZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9f aW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMp OwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUs IF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tp ZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9m biAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90 Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewog IF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtf Zm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlv bnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9p bml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRl cmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkg dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBp bnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVy biB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBf SU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5 bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9JT192ZndzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z dCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192Zndwcmlu dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9f c3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAo KTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAo KTsKCgoKfQojIDc1ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3Qg X19ub3RfdmFfbGlzdF9fOwojIDg5ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190IGZw b3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM4ICIvdXNyL2xvY2Fs L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9s b2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0 ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUg KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAo X19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpl eHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTY5ICIvdXNyL2xvY2FsL2dj YzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAz CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0 bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNo YXIgKl9fcykgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1w bmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVu YW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz KSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0 IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJ TEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmlj dCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2ll X2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVt b3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhy b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0 IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj dCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRm IChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4s CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBp bnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAw KSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz KSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7 CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7 CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By aW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNj YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0 ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBm Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg cHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0 Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2Vk IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNf dW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBw dXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19y ZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhy b3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBf X3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0 aHJvdyAoKTsKIyA0MzcgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGlt IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBf X2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipf X3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq X19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4g c2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQg KF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKIyA1MDAgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28g KEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoK ZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3Ry aWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0 cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzQgIi91c3IvbG9jYWwv Z2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4 dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19w b3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRl cm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBj bGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZl b2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3Jf dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJv ciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsK ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQg X3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoK CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIg Kl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1 Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq X19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0 YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY0 NCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu Y2x1ZGUvc3RkaW8uaCIgMwp9CiMgNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0 ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6 ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1 c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6 OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAx NTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNl IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251 X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8u aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxp bnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs dC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt bGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9zY2hlZC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRp bWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9 OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3Qg c2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJD IiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQg Kl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2Fy ZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKCgpleHRl cm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2Nv bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f cGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90 IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz Y2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg c2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9y aXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl dF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz Y2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190 KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJu ICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRl ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVm IF9fdGltZV90IHRpbWVfdDsKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9f Y2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVm IF9fdGltZXJfdCB0aW1lcl90OwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3Qg dG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1f bWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0 bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0 IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1 Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAg fTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoK ZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGlt ZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0 aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHAp IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0 cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAg IHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3Qg Kl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29u c3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGlt ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRl cm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190 aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj dCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVj dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVf dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29u c3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChf X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5h bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7 CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo KTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0 cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9z bGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGlt ZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVy biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9z bGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2Nr X2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19j bG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0 cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3Qg X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBf X3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBf X3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0 aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq Z2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk ZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0 LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBf X3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBp bnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0g X19zaWdzZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA0OCAiL3Vzci9p bmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzEgIi91 c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIg MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDU5 ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5B QkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5I RVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJF QURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQ VEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU SFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgog ICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRI UkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhS RUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRI UkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAsIFBUSFJFQURf TVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCn07CgplbnVtCnsKICBQ VEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgpl bnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJFQURfUldMT0NL X1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNV UlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BS RUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0 IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsK ICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVh bnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUs CgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RF RkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTYzICIvdXNyL2lu Y2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAq X19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBw dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJl YWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9l cXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf am9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRf YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRl dGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0 YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFy YW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhy ZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy LCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0 IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGlu aGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIs IGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3Bl KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2Nv bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6 ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2Nv bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRo cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBf X3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z ZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0 cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tz aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAg ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBf X3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBw dGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3Bv bGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9n ZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFy YW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQg X19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9t dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0 ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1l ZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9f bXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQg KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBw dGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRl eGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90 ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRf dCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0 aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k X2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0 IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2Fp dCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2Nv bmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy X2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf c2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmlj dCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJl YWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kg KHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxv Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9j a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3 cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmlj dCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAq X19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95 IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90 ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th dHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVh ZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwoj IDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9p bml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2Nr X3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRo cmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9z cGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFy cmllcl90ICpfX3Jlc3RyaWN0IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhy b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJp ZXJfdCAqX19iYXJyaWVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0 cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4g aW50IHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFy ZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhy b3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVh ZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9i YXJyaWVyX3dhaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1 NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0 ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5 KSB0aHJvdyAoKTsKIyA1NzYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBw dGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpf X29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUg KGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg cHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0 aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lk IF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkg dGhyb3cgKCk7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w dGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVy ICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBf cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgp OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3Iv aW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChp bnQgX19ob3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3Qg Kl9fcmVzdHJpY3QgX19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdz ZXRfdCAqX19yZXN0cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAi L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgNjcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoK CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93 ICgpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3Qg X19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7 CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21h IHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZp YwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9j cmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhy ZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4 MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2Jp dHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9w ICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyID0gKHZv aWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAw Owp9CiMgNDM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf b25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlm IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBm dW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh ZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICop KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlu bGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpw dHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDAp OwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5 X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxl dGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAo X19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkp Owp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9r ZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmlj IChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChf X2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQog ICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAw Owp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFk X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy biBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoK c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4 X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhy ZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0 aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYg bG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRl ZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7 CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUg X19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9f aW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw MDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQg PSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg PSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAg fCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAw MDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9h dGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g MHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3RpbWUi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90Owog IHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2lu ZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6 Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpz dHJmdGltZTsKfQojIDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFy IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0 YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRt OwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4 dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93 ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2Nv bnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNt cCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy X3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9f d2NzY29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwK ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90 ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3 Y2hhcl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3 Y3NyY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hy bnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChf X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bi cmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAq d2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19u ZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3 Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGlt LAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhy b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVu IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9f Y29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hh cl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90 ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hh cl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w KSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry aWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4g KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19y ZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Ny dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nu cnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IHdjd2lkdGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAo X19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBk b3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoK CgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0MTAgIi91c3IvaW5j bHVkZS93Y2hhci5oIiAzCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9sIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsK CmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3dj c3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s b2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs ZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2Zf aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVy bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25l ZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f d2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25z dCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3 Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21v ZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK ZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5m IChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0 ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3Nj YW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBm Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjIChf X0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193Yywg X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2No YXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2Mg KHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2lu dF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdp bnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBm Z2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50 X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3 Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2Vk ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgwICIvdXNy L2luY2x1ZGUvd2NoYXIuaCIgMwp9CiMgNTUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Y3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMzICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwog IHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVz aW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNp bmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5n IDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNp bmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNp bmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1 c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7 CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21i OwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsK ICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsK ICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwog IHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsK ICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1 c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVz aW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5nIDo6d21lbWNweTsKICB1c2lu ZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2luZyA6OndwcmludGY7CiAgdXNp bmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3Nj aHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2Fz dDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlu bGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7 IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsg fQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJf dCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg d2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hh cl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdj c3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcg Ojp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2No YXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0 IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4 eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3Rv dWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNp bmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0 NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKCm5h bWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBm cG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBl OwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlw ZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlw ZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1v ZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9f b2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQogICAgICA6IF9NX29mZihf X29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3Qg eyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9m ZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYK ICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1 cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikK ICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAg ICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3Ry ZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9f dCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBib29sCiAgICAg IG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29m ZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBm cG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsg fQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01f b2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBf TV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh bXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0NyAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hh cl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3Nf dHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJz dGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90 eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAg ICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAg ICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy X3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0 YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0 YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNp emVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf dCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hh cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw ZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3Qg aW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUo Y29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5 cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0 YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBu b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBz dHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBv c190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBt YnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFy X3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsg fQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAg c3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5 cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50 CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9f czIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9 CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykK ICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNo YXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUq PihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAg ICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19u KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9f czIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlw ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAg ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90 IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl Kj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAg ICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0 b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBz dGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3Qg aW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh dGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigo LTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5 cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsK CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAg ICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5 cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJl YW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAg ICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5 cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAg IGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7 IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0 IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBf X2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl dHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAg ICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19z KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFy X3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0 dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg ICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBl IF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAg c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3My LCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQo X19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90 eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAg ICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2Mp IHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2lu dF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAg eyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9m KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAg ICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAg ICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9D aGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJh aXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wK ICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEo X01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv bWVtb3J5IiAxIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9y eSIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2xp bWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3IvbG9jYWwvZ2NjMy4yL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIgIi91 c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl L2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3Iv aW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIg MSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vz ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMv cG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVk ZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEg MwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGlt LmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMzICIv dXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk ZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2Fs L2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMu aCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAy IDMKIyA2NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGli IiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZs YWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRz dGF0dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAz OCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp dHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1 Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1 bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRj b2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVy bWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv cHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2ln bmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwog IH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25n IGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMz ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9j dXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNo YXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRv ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4 dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7 CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoK CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgp OwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBfX3N0cnRv bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu IGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2Nh bGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7 CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs ZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91 cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91 bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMzg0ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0 eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRl ZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRf dCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBm c2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlu b190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90 IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBt b2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90 IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0 X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9f aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg X19rZXlfdCBrZXlfdDsKIyAxMzYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVm IF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNv bmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMg MTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVf aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2ln bmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f U0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMg MzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA0 NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Rp bWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZh bAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9 OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVk ZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVv ZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNr IGZkX21hc2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJDIiB7 CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3Qg X19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVm ZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jl c3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3Qg X193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNl cHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry aWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpfX3Jl c3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIx OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXplX3Qg Ymxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYg X19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250 X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0 X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5cGVk ZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoK CgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9f c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJvdyAo KTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBp bnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAg aW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9 OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3Ig KHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBz cmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFuZF9y ICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRy YW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAo dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQp IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2Vl ZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWdu ZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDgg KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJh bmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVk IHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsK ICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0 OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhy b3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl c3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZh bCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g aW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRl cm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CiMg NTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90 IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2 b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2Mg KHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgpl eHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5j bHVkZS9hbGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAi QyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoK CgoKCn0KIyA1NDcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAq dmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXpl X3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQg KCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50 IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl eHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpf X3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRl bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVh cmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRl KSB0aHJvdyAoKTsKIyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq bWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3Rl bSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAq Y2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoj IDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9f Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYg X19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2gg KF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19j b21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVt Yiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21w YXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n IGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVy LCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9f IGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpn Y3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRf ciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAg ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cg KCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz dHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNo YXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoK CgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoK CgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg dW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwg Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRw dCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9f bG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6 ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7 CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2lu ZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6 ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAg dXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6 Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpx c29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7 CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwog IHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7Cgog IGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5s aW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBf X2opOyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jc3RkbGli IiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9F eGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9f eCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBs b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRp dl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K CiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQog IHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19k OyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNp bmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9Cgpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVf Y3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6Omxs YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAg dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvbmV3IiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNl cHRpb24iIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0 aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNl cHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1 YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgp IGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4 Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgog ICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9p ZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9o YW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRl X2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4 cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0K Cm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgp Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9uZXciIDIgMwoK ZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVi bGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoK CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93 X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9p ZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hh bmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9h bGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf YWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRv ciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90 LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0 ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig ZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0 b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxp bmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyBy ZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9p ZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRl bGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVs ZXRlW10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDEgMwojIDQzICIvdXNyL2xvY2FsL2dj YzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zZndkIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAy IDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp OwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df YmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2 b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52 YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhf ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAg X190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf c3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0Fs bG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFz cyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJh c2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNo YXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu Z2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+ IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJp bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNf aWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBv ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlwZWRl ZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hh cl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBi YXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdi dWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2No YXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFy X3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+ IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVm OwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVh bTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDcxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEg Zmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9U MiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIo Y29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2Ip IHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWly PF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7 fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3ku c2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv cGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195 LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVy biAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f eCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh dG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh c3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9f eSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgi IDEgMwojIDUzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3Ry YWl0cy5oIiAzCiMgOTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5 cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBl IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAg IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m YWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5 cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu c2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRv dWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsK ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J c19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAg dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9u ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0 ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu ZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05v cm1hbDsKfTsKIyA3MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1l c3BhY2Ugc3RkCnsKIyA4MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcg e307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9p dGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307 CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90 LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5j ZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkg aXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAg dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRl ciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90 cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdv cnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2 YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpk aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv cjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxj b25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRl cmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBv aW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShj b25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2 OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh c2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVz cGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs IGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0 dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAg aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojpk aWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9 CiMgMTExICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0 b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlu bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpCiAgewoKICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0 ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAg d2hpbGUgKF9fbi0tKSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2Uo X0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAg ICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9f aTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l IF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0 b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpCiAgewoKICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxp bmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7 CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0K Cn0KIyA3NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJs aWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAg ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6 cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3VycmVudDsK CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAg ICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAgIGV4cGxp Y2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChf X3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9y JiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7IH0K CgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl bnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAg IHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVybiAqLS1f X3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25z dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAgICAgICBy ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBv cGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAq dGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoK CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiAg ICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAg ICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJz ZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1 cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVy YXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJy ZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2 ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK ICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoKCgoKCgog ICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf X24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5j ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMgMjY5 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJu IF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y IT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShf X3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUg Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog ICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2Uo KSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5s aW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRl cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRh aW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVm ZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3Zh bHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9p dGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNr X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu ICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgog ICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2Vy dGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+KF9feCk7IH0KIyAzOTcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4K ICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0 cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3Rl Y3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9p bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0 MjIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o IiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1l IF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29u dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1 cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y KysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAg ICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJl dHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQ3MCAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAg ICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lk LCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7 CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2Vy dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y IF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAg aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l cjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFp bmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVy biAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9sb2Nh bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9J dGVyYXRvciBfX2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4oX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4 CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVy YXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ CiAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2 YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j ZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAg cHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVy IHBvaW50ZXI7CgogICAgICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0 b3IoKSkgeyB9CgogICAgICBleHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBf SXRlcmF0b3ImIF9faSkgOiBfTV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXI+CiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQo X19pLmJhc2UoKSkgeyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0 IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3IrKygpIHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAg IF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1h bF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBf X25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxf aXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRv cltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9j dXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9 KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyBy ZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhj b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxf aXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1 cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAg ICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyBy ZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0 IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAg IH07CiMgNjQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+ JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9 KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0g X19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0 b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s aW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu ZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jo cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0 ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0o Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu ZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBf X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y Pj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+ PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1l IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5 cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250 YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4K ICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSB2b2lkCiAgICBpdGVyX3N3 YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIxPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CgoKICAgICAKICAgICAKICAgICAKICAg ICAKCiAgICAgIF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAgKl9fYSA9ICpfX2I7CiAg ICAgICpfX2IgPSBfX3RtcDsKICAgIH0KIyAxMTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAK CiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3Rt cDsKICAgIH0KIyAxNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0 IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAg IAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAx NjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1h eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYg KF9fYSA8IF9fYikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAxODYgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAm CiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9f YTsKICAgIH0KIyAyMDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19i KSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0 ZXIKICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh ZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytf X2ZpcnN0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKICAgICAgZm9y IChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfdHJpdmlhbChjb25zdCBf VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgewogICAg ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2Zp cnN0KSk7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy CiAgICBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy ZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAq CiAgICBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LAogICAgICAgICAgICAg ICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlh bChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z dCBfVHAqIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBl KQogICAgeyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs IF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9PdXRwdXRJ dGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Ucml2aWFsKCkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f Y29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAg ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf VmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1Ry aXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Ucml2 aWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJl dHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwg X19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg ICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFs KCkpOwogICAgfQojIDMzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK CiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv cjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkx KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2Fy ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRp cmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0 IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAg ICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp c3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHko X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U cCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0 IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsK ICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAg bWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAg ICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog ICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq LCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwg X0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+ CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy ZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQu YmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3Io X0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9f Y29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs X2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0 eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u b3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg MwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9C STIKICAgIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jl c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNTA5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m aXJzdCA9IF9fdmFsdWU7CiAgICB9CiMgNTMxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJ dGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZp bGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkK ICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAg ICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoK ICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hh ciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hh ciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJz dCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25l ZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNo YXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmls bChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBj aGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNo YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewog ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp cnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBz aWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNp Z25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg X19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1Np emUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJz dCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAg IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICAgICAr K19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8 X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgfQojIDY0 MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJ dGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2Zp cnN0MikpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0K ICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m aXJzdDIpOwogICAgfQojIDY2OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJz dDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRy dWU7CiAgICB9CiMgNjk5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29s CiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5 X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2Nv bXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytf X2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9 PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CiMgNzY3ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAg ICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9f Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29u c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0g X19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBf X2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJz dDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl c3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dy YXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBj aGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNv bnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoK CgoKICB9Cgp9CiMgNTUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnki IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv Yy5oIiAxIDMKIyA4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Fzc2Vy dCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAz CgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3Nl cnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0 IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9u KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4g dm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xp bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVu Y3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoK ZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFy ICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Nh c3NlcnQiIDIgMwojIDg1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7 CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJv d19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAg dm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2lj X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v dmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJl KGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoK ICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoK ICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3Qg X01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3Jl Zl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAw LCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3Vu dF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsK ICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytf TV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9s b2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVh ZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9f dG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3Jl Zl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvdXNy L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVt cGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3Rh dGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9f ZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1t eT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs IDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQg bG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xv Y2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9u ZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19y ZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9f Z3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAg ICB7CiMgMTg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhy ZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoK ICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAg IF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2so Jl9NX2xvY2spOwogICAgfQogIH07CiMgMjIwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewog ICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0 ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVp cmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2Vf bG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f bG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoK fQojIDg3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwogIHsKICBwdWJs aWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy biA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUo dm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KICB9Owoj IDEyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi IDMKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz aXplX3QpOwogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7 CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAg IHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmICgw ID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRlYWxsb2NhdGUo dm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAgc3RhdGljIHZv aWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3op CiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7 CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19w LCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0 aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7 CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog ICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybihf X29sZCk7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQg KCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21h bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAg ICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19y ZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hh bmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9f bXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsK ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihf X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZv aWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2 b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFu ZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsK ICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxl cjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0 ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlciko KTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgICBpZiAo X19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoK CgoKCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIxOSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0 ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogIHsKICBw dWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp KTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJuIChfVHAqKSBfQWxs b2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxv Y2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9j YXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkp OyB9CiAgfTsKIyAyNTEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX2RlYnVnX2Fs bG9jCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCiAgcHVibGljOgoK ICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBf X3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsK ICAgICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAo aW50KSBfU19leHRyYTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0g KGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3Jl YWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09 IF9fbiIsICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu aCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxv Y2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2 b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdf c3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4 dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19v bGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xk X3N6IiwgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o IiwgMjc3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgY2hhciogX19yZXN1bHQg PSAoY2hhciopCiAgICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiAr IChpbnQpIF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19u ZXdfc3ogKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3 X3N6OwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgIH0KICB9Owoj IDMyNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi IDMKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAg IGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZ VEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9N X2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAg ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAg c3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7 CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9s b2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91 bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3Qp IF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVf dAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChf X2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAg IHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNo YXIqCiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgog ICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3Ro cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg fl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVh c2VfbG9jaygpOyB9CiAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICBmcmll bmQgY2xhc3MgX0xvY2s7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRl KHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICAgIGlmIChfX24g PiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjph bGxvY2F0ZShfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09iaiogdm9sYXRp bGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICsgX1NfZnJlZWxp c3RfaW5kZXgoX19uKTsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAg ICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg ICAgIGlmIChfX3Jlc3VsdCA9PSAwKQogICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19y b3VuZF91cChfX24pKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg ICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAg ICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH07CgoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQq IF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllU RVMpCiAgICAgICAgX19tZW1faW50ZXJmYWNlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAog ICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg ICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgogICAgICAgICAgX0xvY2sgX19sb2NrX2lu c3RhbmNlOwogICAgICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9s aXN0OwogICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgIH0KICAgIH0KCiAg ICBzdGF0aWMgdm9pZCoKICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3os IHNpemVfdCBfX25ld19zeik7CiAgfTsKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQogICAgeyByZXR1cm4g dHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0 ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXpl X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQogICAgewogICAgICBjaGFyKiBfX3Jlc3Vs dDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICBz aXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgICAg aWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQogICAgICB7CiAgICAgICAgX19yZXN1 bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRl czsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYnl0 ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19ub2JqcyA9IChpbnQpKF9f Ynl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9f bm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICBfU19z dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3Rv X2dldCA9CiAgICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVh cF9zaXplID4+IDQpOwoKICAgICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAg ICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7 CgogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xp bmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9P YmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg PSAoY2hhciopIF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAg ICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg IHNpemVfdCBfX2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0 OwogICAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7 CiAgICAgICAgICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0g KHNpemVfdCkgX0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAg ICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYg KDAgIT0gX19wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpf X215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAg ICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgICAg X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwoKCiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsK ICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxs b2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAgIH0KICAgICAgICAgIF9TX2hlYXBf c2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf ZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9f c2l6ZSwgX19ub2JqcykpOwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBp bnQgX19ub2JqcyA9IDIwOwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u LCBfX25vYmpzKTsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBf T2JqKiBfX3Jlc3VsdDsKICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19u ZXh0X29iajsKICAgICAgaW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihf X2NodW5rKTsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlz dF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpf X215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAg ICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0 X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9f bik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgX19jdXJyZW50 X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICB9 IGVsc2UgewogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9f bmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9 CgoKICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3As CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgdm9pZCogX19yZXN1 bHQ7CiAgICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90 KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAg IHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgICAgfQogICAgICBpZiAoX1Nfcm91 bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAg ICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgICBfX2NvcHlfc3ogPSBfX25l d19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgICBtZW1jcHkoX19yZXN1 bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAg ICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CiAgX1NUTF9tdXRleF9sb2NrCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogID0geyB7MCwgMCwgMCwg UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy ZWFkcywgaW50IF9faW5zdD4KICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogIHNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywg aW50IF9faW5zdD4KICB0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZQogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD46Ol9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHR5cGVkZWYgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+IF9fYWxsb2M7CiAgdHlwZWRlZiBfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2MTMg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRlZiBfX2FsbG9jIF9B bGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7 CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs b2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxv Y2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0 b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7 IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBf X24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8 X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAg ICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBl IF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9 CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRv cjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBl ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7 CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs b2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg YWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYs IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDY5NSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9BbGxvYyBf X3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsK ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigp IHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRl bXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEs IF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k ZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIg YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9p bnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0K CgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICBy ZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19h bGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0KCgogIHZv aWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5 aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90 eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNp emVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3Ap IHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxs b2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwog IHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVf dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxv Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWlu Z19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5z dD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgppbmxp bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0 cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0 YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBl Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9j YXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVl OwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2FsbG9jPiBfQWxsb2NfdHlwZTsKICB0 eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNl bGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg X0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f aW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2Nh dG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4K ewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBf X3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwog IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0 b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2lu c3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxv Y2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9h bGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsK ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAg ICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsK ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19z aW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+ CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5 cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpz dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxv Yz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxv Y2F0b3I8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsK CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUs IDA+OwoKfQojIDU2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAy IDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3Ry dWN0LmgiIDEgMwojIDY3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3As IGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkg X1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUg dm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lk Kj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQoj IDExMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVj dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9p ZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBf X3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBpbmxp bmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+fl9U cCgpOyB9CiMgMTM0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf Y29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlu bGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAg IF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl X3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hh c190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNy L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAz Cm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs aXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIGNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6 ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIg X19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIs ICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7CiAgICAgICAg ICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl cgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90 eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAg dW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFz dCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19s YXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7 CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJf dCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg KF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmls bF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBm aWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1 eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAg ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAo IDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3Vy LCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVz dHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMg MTY0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFs aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw ZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxp bmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9fZmly c3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5p dGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkK ICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAg ICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVj dCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRj aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAg ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAgfQojIDIyNyAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2Nv cHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJu IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogICAgICB9CiAg ICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19t aWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAg IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0Zvcndh cmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewogICAgICB1bmluaXRp YWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkgewogICAgICAgIHJl dHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0K ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBf X21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBf X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJ dGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJz dDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFz dDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E ZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg fQoKfQojIDU5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3Jh Z2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFn ZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p ZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9Cgog ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3Qg X1RwJiBfX2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19l bGVtZW50KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdl X2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAg ICB7CiAgICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg ICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVy YXRvcisrKGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJk SXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAg cmV0dXJuIF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1l IF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlm Zl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBz aXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hp bGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3Rk OjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAg cmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0g MjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAx MDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogIGlubGluZSBwYWlyPF9UcCoscHRyZGlmZl90PgogIGdldF90ZW1wb3Jh cnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICB7CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5 X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwogIH0KIyAxMjAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHZvaWQKICBy ZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICB7CiAgICBzdGQ6OmZyZWUoX19wKTsK ICB9CiMgMTM1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRl bXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9N X3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRy KF9fcCkge30KfTsKIyAxNzUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1v cnkiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGNsYXNzIGF1dG9fcHRyCnsKcHJpdmF0ZToK ICBfVHAqIF9NX3B0cjsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKCgoK CgoKICBleHBsaWNpdAogIGF1dG9fcHRyKGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQog IDogX01fcHRyKF9fcCkgeyB9CiMgMjAyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKQogIDogX01fcHRy KF9fYS5yZWxlYXNlKCkpIHsgfQojIDIxNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRv X3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0K IyAyMjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBhdXRv X3B0ciYKICBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKQogICAgewogICAgICByZXNl dChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI0MyAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfVHAxPgogICAgYXV0b19wdHImCiAgICBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkg dGhyb3coKQogICAgewogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQojIDI2MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9y eSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSYKICBvcGVyYXRv ciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgZWxlbWVudF90 eXBlKgogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDI5 NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRf dHlwZSoKICBnZXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIF9NX3B0cjsgfQojIDMwOSAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoK ICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01f cHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgdm9pZAogIHJlc2V0 KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19wICE9IF9N X3B0cikKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRy ID0gX19wOwogICAgICAgIH0KICAgIH0KIyAzNDUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBf X3JlZikgdGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYK ICBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAg IHsKICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICB7CiAgICAg ICAgICBkZWxldGUgX01fcHRyOwogICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy biBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAxPgogICAgb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCn07Cgp9CiMgNDkgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2 NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgi IDMKbmFtZXNwYWNlIHN0ZAp7CiMgMTAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl c3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlw ZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9u IHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBz ZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMg MTI3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9U cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICogX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw LF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAt X194OyB9Cn07CiMgMTczICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29s Pgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u c3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggPD0gX195OyB9Cn07CiMgMjIyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg bG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNh bF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVk OgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShj b25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigp KGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGlj YXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0 ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9 CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRf dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vj b25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJv dGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9u ZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3Bl cmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBf X3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9h cmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195 KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVn YXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJu IGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl ZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50 X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAog ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl JiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp b246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpz ZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9f eCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp KHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChj b25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBi aW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3Rl Y3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1 bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwg dmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0 b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0 IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf T3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJu ZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlw ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1 cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0Mzgg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJv dGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191 bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihf UmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3Io KShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp b248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVy biBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1w bGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2lu dGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxf QXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBf QXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4 cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBf QXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJn MSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsK ICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVz dWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3Vs dD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50 ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9f eDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1 cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4g ewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpm aXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVj dDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29u ZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWly JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFt ZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp KCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5f dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2Yo X19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJu IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90 IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt ZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQg b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0 IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9S ZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBj b25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChf VHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo X1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0K cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDog X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gp IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1f ZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19w Zikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7 IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0 b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh c3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYp KCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0 X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9 CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7 IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2Yp KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9U cCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l bV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9f eCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBf VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K aW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f ZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0 LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90 PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMgNDQgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0 b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2 ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193 b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2Vk X18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGlu dCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6 ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAi bSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJu IF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2Vk X18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3Zh bCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAg ICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIp Owp9CiMgNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDg4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNf c3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7 CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf QWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9j eHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAg ICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBi YXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRl cmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2 YXRlOgojIDEyMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2Fs bG9jOwojIDE0MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwog ICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlw ZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9t aWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2Vk KCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBi b29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZl cmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAg ICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9z aGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQq CiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJl dF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAgICAgb3Bl cmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgp IFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYg X19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgewogICAgICAgICAgcmV0 dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpCiAgICAgICAgICAg ICAgICAgID8gX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOwogICAgICAgIH0KCgog ICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxv YyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkK ICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2Vz LCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAg ICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAg ICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAg ICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9y ZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29u c3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0 IF9BbGxvY19oaWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFy VCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3Ao X19kYXQpIHsgfQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoK CgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5 cGU+KC0xKTsKCiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0 YXBsdXM7CgoKCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl b2Yoc2l6ZV90eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2Rh dGEoX0NoYXJUKiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsg fQoKICAgICAgX1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVp bnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0 b3IKICAgICAgX01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsg fQoKICAgICAgaXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y KF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygp CiAgICAgIHsKICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAg IF9NX2xlYWtfaGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhz aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5z aXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9j aGVjayIpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAg ICAgaXRlcmF0b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29m ZikgY29uc3QKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5z aXplKCkgLSBfX3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBf X29mZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkg KyBfX3BvcyArIF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRl cmF0b3I+CiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog X19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAg Zm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5 cGU6OmFzc2lnbigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAg ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r MikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsg fQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29u c3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2No YXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQK ICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9f azIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0 IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpj b3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0 ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoK ICAgICAgdm9pZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAg ICBfU19lbXB0eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4o Jl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQog ICAgICBiYXNpY19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhj b25zdCBfQWxsb2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3Mp OwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBf X2EpOwoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u LAogICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs b2MoKSk7CiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0 SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0g X0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rp c3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNz aWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3Qg X0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19z dHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24o MSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAg IF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoK ICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBj b25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQog ICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2Rh dGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAg IGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRo aXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAg ICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u c3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0 b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVn aW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0K CiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu IF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBj b25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAg dm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lk CiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01f cmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBl IF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAs IHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJl dHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBv cGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEo KVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBf X3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgp W19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlw ZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAg ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAg cmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQo c2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9s ZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsg cmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg b3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJl dHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVu ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBw ZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBw ZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBf X2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7 IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0 cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3Np Z24iKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3Bv czsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9f c3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0 YSgpICsgX19wb3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAg ICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9l cnJvcigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lz X3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAg ICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwg X19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2ll bmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAg aWYgKF9fcG9zID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRh KCksIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAg dHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3Jl cCgpLT5fTV9sZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6 X1NfdGVybWluYWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFy VCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQo KSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAg ICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAg eyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lu cHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+ cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK ICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUo KSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEs IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3My LCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6 ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAg Y29uc3QgYm9vbCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNv bnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19w b3MyOwogICAgICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkg KyBfX3BvczIsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg aW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhf c2l6ZSgpIC0gX19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmlu Zzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNz PGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29u c3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4g X01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAg ICBlbHNlCiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9 IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwog ICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBf X3AgPSBfTV9kYXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3Ap CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAg ICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19wLCBfX3MgKyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAg ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBf X24sIF9fbiAtIChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy biAqdGhpczsKICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg aW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJu IHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2so X19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBp dGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkp CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAg ICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAg ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01f aWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFz ZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAg ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3Bvcywg X19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7 CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24p CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigp OwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2Rh dGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg ICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAg ICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAg ICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5y ZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9N X3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7 CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0 dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXpl KCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z MSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAg ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3Mg PiBfX3NpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpy ZXBsYWNlIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMSA9IF9fbjEgPCBfX3NpemUgLSBf X3BvczsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEg OiBfX3NpemUgLSBfX3BvczsKICAgICAgICBpZiAoX19zaXplIC0gX19mb2xkbjEgPiB0aGlzLT5t YXhfc2l6ZSgpIC0gX19uMikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z dHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8 IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVz czxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJl dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9f cyArIF9fbjIpOwoKICAgICAgICBlbHNlIHJldHVybgogICAgICAgICAgICAgICBfTV9yZXBsYWNl KF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MgKyBfX2ZvbGRuMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRv cl9jYXRlZ29yeSgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3Ms IF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK ICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCks IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFj ZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBj b25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2ky LCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv ciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19r MiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfQ2hhclQqIF9fazEsIF9DaGFyVCog X19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwg X19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0g X19rMSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikK ICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAt IF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLCBfX2syIC0gX19rMSk7 IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJu IHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh dG9yIF9faTIsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sx KTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1w bGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg ICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJ dGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2syKTsK CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog ICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAg ICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRl cj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0 KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3Rf YXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0 dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2Ep OwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGlj IF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu ZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJl dHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAg ICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9D aGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9D aGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVyIF9fZW5k LCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlw ZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAg ICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXpl X3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoK ICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlz LT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1Jl cDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAg IGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoK ICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3Bv cywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQo X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmlu ZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7 CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m aW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v Zihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25z dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bvcywg X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAg ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v ZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9m aXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl X3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0 OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25v dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwg X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k X2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRy YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh c3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAg ICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5 cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNp emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0 ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAg ICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj b25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUg X19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190 eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYg KCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBf X3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQK ICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5 cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9f cykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBj b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z LAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9B bGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAg ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMp OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVy YXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog ICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9f bGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmlu Z190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBf X3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCog X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf X3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo cy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs CiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j b21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3Qg X0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywK ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j b21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf X2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy ZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9p ZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z dHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGlu ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0 bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0ICIvdXNy L2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgojIDEgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDEgMwojIDY1ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0 eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAg ICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hp bGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBf X3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg X19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJl bnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19o b2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl CiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hl YXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh bmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl PgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs IF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcElu ZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2Ug X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRl eCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkp IHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu dCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChf X2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl eCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUK ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rp c3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5j ZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg ICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNl LCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3Rv cEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAq IF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewog ICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3Nl Y29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19m aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAg IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAq IChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0g X19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAo X19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg LSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv cEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192 YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDAp LCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9w X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAg ICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1Zh bHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rp c3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAo X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBf X3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAg ICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD aGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAg ICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmly c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg ICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVz aF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXAp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVh cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAg X192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp c3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChf X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAg ICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv aWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19m aXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwg X19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y PgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAg ICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5j ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJl dHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAg IF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRy dWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1Zh bHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0g MCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu bGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAo X19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9 IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4g LSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmly c3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihf X2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkg cmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQog ICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQog ICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK ICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog ICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVh cChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL3Vzci9sb2Nh bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNz IF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgogIHB0cmRpZmZfdCBfTV9vcmln aW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCgogIHZvaWQg X01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAg X01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAv IHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoK ICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2Mo X01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFr OwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZm ZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZl cihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxf bihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6CgogIHB0cmRpZmZfdCBzaXpl KCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBfVHAqIGJlZ2luKCkgeyByZXR1 cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVu OyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8 X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlh bDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAg X01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0 Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9idWZmZXIpOwogICAgICAgIF9NX2J1ZmZl ciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAgICB0aHJvdzsKICAgICAgfQogIH0KCiAg fl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIg KyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CgogIF9UZW1wb3Jh cnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShj b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK IyA4NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRp YW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsK CiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAg ICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0 dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm IChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19j KQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAg fQojIDExOCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp bmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i LCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAgaWYg KF9fY29tcChfX2EsIF9fYikpCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAg ICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAg ICByZXR1cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVs c2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBp ZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAg ICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpf X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmlu ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBf VHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19f Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRl cgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJz dCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAg X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAg ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3Vu dAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJp cF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBf X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9f Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAg ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly c3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewog ICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAx OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9f bGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZp bmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vz c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChf X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsg LS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkg cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpf X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAo X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAg ICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAg ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz dDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl IDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoj IDI4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9f bGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMjkg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFj ZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7 CgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGls ZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkK ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAg IH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg IGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsK CiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGls ZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJz dCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0g X19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICAg ICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNvdW50X2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAg ICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICsrX19uOwog ICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2go X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAg ICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2Zp cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2Fy ZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09 IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0 Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmly c3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoK ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZp bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09 IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsK ICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0g X19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3Vy cmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp CiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0Jp bmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3By ZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEg PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0 MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsK ICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0Zv cndhcmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAg ICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7 CiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg ICAgICBicmVhazsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3Qx KQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAg X19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp IHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwg Kl9fcCkpIHsKICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1 cm4gX19maXJzdDE7CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAg ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAg ICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1OTYgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2Fy ZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICBy ZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJz dCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg ICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9 IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19p OwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkK ICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f Zmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVy biBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUg X0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3Vu dCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3By ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdo aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3Vu dCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsr X19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5h cnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0t X19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9f bGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJl dHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dh cF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIp OwogICAgICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4K ICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl cmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0 ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3 NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+ CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5 X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAh PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpf X3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29u c3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3Qg PT0gX19vbGRfdmFsdWUpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQoj IDgyNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwg dHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJl ZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQojIDg1 NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1Rw JiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1 bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAg ICB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAg ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA5MTggIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9y d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikK ICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+ CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6 ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9f biA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAg IHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAg ewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091 dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRp Y2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3Qp KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7 CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL3Vzci9sb2Nh bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBy ZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg X19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9f bGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgcmVt b3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBfX2Zp cnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAgIF9Gb3J3YXJkSXRl ciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBf X2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIF9f dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIG91dHB1 dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqX19yZXN1bHQg PSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo IShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Owog ICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsr X19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAg ICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsK ICAgIH0KIyAxMTQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJU eXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAg IHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlw ZSgpKTsKICAgIH0KIyAxMTcwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgog ICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRf aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9f cmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAg ICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192 YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAg IH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwK ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xh c3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMy ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVu YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5 cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAg cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19iaW5hcnlf cHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAKCgogICAgICAg ICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJl dHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAgfQojIDEyOTAg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2Zp cnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNl KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICAgICAgd2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0 KTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg ICB2b2lkCiAgICBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAg ICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJl dmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRw dXRJdGVyCiAgICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp cmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xh c3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg ICB9CiMgMTM5OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4KICAgIF9F dWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwg X0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hpbGUgKF9fbiAhPSAwKSB7 CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgICAgICBf X20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAgIHJldHVybiBfX207CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgdm9pZAogICAg X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9Gb3J3 YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAgICAgICAgc3dhcCgqX19m aXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAg ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBf X2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAg ICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJz dDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICAgICAgX19maXJz dDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09 IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAg ICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn KCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRs ZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBfRGlzdGFu Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxl IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKCiAgICAgIGlmIChf X2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlk ZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0YW5jZSBfX2QgPSBfX2dj ZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9f aSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChfX2sgPCBfX2wpIHsKICAg ICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAg ICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAgICAgKl9fcCA9 ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAgICB9Cgog ICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICBfX3AgKz0gX19rOwog ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICBmb3IgKF9EaXN0 YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgICAgIGlm IChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2sp OwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpf X3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAgfQog ICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsrX19maXJzdDsKICAgICAg fQogICAgfQojIDE1NjEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUg dm9pZAogICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk bGUsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0 ZXJUeXBlOwogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5 cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK CgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19s YXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2MTIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+ CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikK ICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCiAgICB9CiMgMTYzNCAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRv bV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47 CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9u dW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2NjAgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAg IHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5l cmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBf X3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIK ICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgr K19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBf X25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAg ICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0 KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19maXJzdDsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu YW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGls ZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFf X3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAgICAgZWxzZQogICAg ICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAg ICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAg cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBy ZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3 YXJkSXRlcgogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBpZiAoX19sZW4g PT0gMSkKICAgICAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7 CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19t aWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlk ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUoX19iZWdpbiwg X19taWRkbGUsIF9fZW5kKTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRs ZSwgX19lbmQpKTsKICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRp Y2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAg IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl IF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6 ZSkgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Q b2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3QgOyArK19fZmlyc3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAg ICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwog ICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19m aXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShf X2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19m aXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3 YXJkSXRlciBfX2JlZ2luID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp OwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2 ZSggX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZm ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19l bmQpOwogICAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7 CiAgICAgICAgcmV0dXJuIF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVy CiAgICBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk SXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19i dWYuc2l6ZSgpID4gMCkKICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRp dmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCks IF9fYnVmLnNpemUoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9z dGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVk X3NpemUoKSkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3Vu Z3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAg ewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3Qp CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9f cGl2b3QgPCAqX19sYXN0KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJz dCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAo X19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0 aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJz dCwgX19waXZvdCkpCiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAg ICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0Owog ICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0Owog ICAgICB9CiAgICB9CiMgMTkyOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lk CiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg X1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7 CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAg Kl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19u ZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hp bGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsK ICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAg Kl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFs ID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9i YWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3Zh bDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2lu c2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5z ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNz SXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAg ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90 eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsK ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZv aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFs dWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJk ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191 bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAg ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lk CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmly c3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s ZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVz aG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0 ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9T aXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAh PSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZv aWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xp bWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0g MCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlv bihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVl VHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0 IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRo X2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNo b2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlh bF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJu OwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFu KCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21w KSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBf X2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAg ICAgIH0KICAgIH0KIyAyMTY2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg ICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAg CgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3Nv cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAg ICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0KICAg IH0KIyAyMTk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D b21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGco X19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9CiAgICB9CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnBsYWNl X3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgICByZXR1cm47CiAgICAg IH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAt IF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk ZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogICAg ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk CiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgIHJldHVy bjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAo X19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz dCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRs ZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg LSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIy LAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29y dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBf RGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0g MiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29f c3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl cF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBf X2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsK ICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KCiAgICAgIF9fc3RlcF9zaXpl ID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogICAgICBt ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6 ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAg ICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy MiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf X3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXAp IHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJz dCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVw OwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2Zp cnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl cF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAg ICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfTV9j aHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAg IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7CiAgICAgICAgX19m aXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9f Y2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19j aHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBf X2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz dCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9f Y2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs IHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g X19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47 CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2No dW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICAgICAg d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChf X2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3Np emUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFz dCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l IF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93 aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9D b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAg X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZm ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUg PSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBf X2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZm ZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAg ICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9f c3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgIH0KICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2lu dGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0 aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf X2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19t ZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAg ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsK ICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs IF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2lu dGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xl biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6 ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm ZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICAgIF9fbWVyZ2Vf c29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19jb21wKTsKICAg ICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9E aXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAg ICAKCiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1Zh bHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAw KQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBl bHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5i ZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l IHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAK CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4g YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAg IF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIGVs c2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJl Z2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRk bGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBf X2xhc3Q7ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Bv cF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBz b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBwYXJ0 aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAoX19maXJz dCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g X19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAq X19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9W YWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs ZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlh bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5 cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAg ICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s YXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs dF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9s YXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f Zmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0Owog ICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0 KTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0 IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJz dCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw ZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAg ICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7 CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vzci9sb2Nh bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf T3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAg CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0 X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl c3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBf X2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAq X19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xh c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9m aXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3Qp KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgw KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xh c3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVl VHlwZSgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAg KytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1 bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owog ICAgfQojIDI2ODYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQK ICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAK CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlh bigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAg ICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAg ICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgbnRoX2Vs ZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAg ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsK ICAgIH0KIyAyNzY4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAogICAg IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7 CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o YWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3Qg PSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4g LSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9f aGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBf Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAg X19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAg YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwg X192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmly c3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAg ICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f Zmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlw ZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAK ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk ZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs IF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAgICAgX19sZW4g PSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAg ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK ICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjkwMSAiL3Vz ci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAg ICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg ICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwg Kl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAg ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAg X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgfQojIDI5NDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVh bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3Qg X1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh bmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4g PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsK ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGls ZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAg ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK ICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAg IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJf Ym91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJz dCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9f Zmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zvcndh cmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4g cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9 CiMgMzAwMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBl cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg IAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19t aWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAg ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxl LCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19m aXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAg ICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9 IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJz dCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9f Zmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVy LCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAg IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0 KTsKICAgIH0KIyAzMDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAg ewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2Jv dW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAm JiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFy eV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg ICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFz dCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K ICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7 CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg ICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAg aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYg KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0 KQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0 dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmly c3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAg ICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsK ICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9j dXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAg IF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9f c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChf X2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9j dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u ZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl cihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh bmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4y ID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsK ICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0 ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9 IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0 LCBfX2xlbjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5j ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0 LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFu Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29t cCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFu Y2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFu Y2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAg ewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVu MSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVy X2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFj a3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19i dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19s ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf X2ZpcnN0KTsKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9f bWlkZGxlLCBfX2xhc3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy Mz4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg X19yZXN1bHQpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJl dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlm IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3Qy OwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7 CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr K19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAg ICAgZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYg KF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAg ICB9CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9u YWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19j b21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz dDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAg LS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0 ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAg ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog ICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBl bmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwK ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl cl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9 IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIp OwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4y MiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAg ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJz dF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBf X2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy OwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAg ICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs ICpfX3NlY29uZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19m aXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2 ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAg ICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs IF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRs ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp OwogICAgICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9f bGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6 ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9f bWlkZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9l bmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAg ICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAg ICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f YnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg ICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f bGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21p ZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9f bGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7 CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAg ICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg Kl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVf YWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsK ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf bWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0 aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2Uo X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly ZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAg aWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJl dHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19t aWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf X2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFs dWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9 PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7 CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0 aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAg ICAgCgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09 IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRp c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBk aXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRp cmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAg aWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogICAgICBl bHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf X2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9E aXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgog ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog ICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19fZmly c3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAg ICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh c3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoK ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsr X19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIg X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAg IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlm ICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg ICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIs IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAg ICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0 SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgog ICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz dDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlm ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg IAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0 MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg IHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg X091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRl cgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29t cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgog ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jl c3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly c3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19f Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+ CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg ICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg ICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAg ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19k aWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg ICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytf X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwog ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1h eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAg ewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp cnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAo KytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAg ICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog ICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0 OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3Qp KSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxl bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19m aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICAg ICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y d2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK ICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJz dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAg ICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBu ZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p ID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZv cig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0t X19pOwogICAgICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAg ICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZl cnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAg ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg ICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m aXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVy biBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7Oykg ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwog ICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19q KSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAg ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9 CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3Qs IF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIHBy ZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kg PSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAg cmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9y KDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1f X2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAg ICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVy c2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAg ICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0 KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg IGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2Zp cnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7 CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAg ICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kp KQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAg IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0K ICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwg X19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0K CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J bnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9G b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy KQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgICAgICByZXR1cm4g X19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVk aWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJz dDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAg IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgICAgICBmb3IgKF9G b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy KQogICAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgICAgICBy ZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQojIDQyMDEgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0Zv cndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcs IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9G b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09 IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2Ugewog ICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJzdDEg PSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAgICAg ICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0 ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0 MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRl cmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg ICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIxIF9f cmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgX0ZvcndhcmRJ dGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9 PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3Qx ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAg ICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ dGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIF9CaWRpcmVjdGlvbmFsSXRl cjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f Zmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK CiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u YWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly ZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmly c3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIx IF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIp OwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0 MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f cnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmly c3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9C aWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp cnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7Cgog ICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs SXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj dGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0 MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBf X3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogICAgICBpZiAoX19y cmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsK ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsK ICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsK ICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIF9G b3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3 YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVy biBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAg ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwK ICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJk SXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9f bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg ICB9Cgp9CiMgNzAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i IDIgMwojIDU3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcu dGNjIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz aWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29u c3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90 eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19l bXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNp emVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQg JiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3Jl ZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9f aSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1 ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytd ID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAq IF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQog ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZk YXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0g X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9y ICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg X19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAg ICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVf dHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1Jl cCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAg ICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAg ICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0g X19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAg ICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6 ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5f ZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vy cm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAg ICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVy biBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5 X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2go Li4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7 CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsK ICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hh clQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2Nv bnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAg IHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4g X1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9T X2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24p CiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwg X19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3It Pl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5f TV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190 ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3Jl cCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAg ICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B bGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9D aGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVz KF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygp KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19h KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwg X19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo X19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFy VCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1 cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJ dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry dWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewog ICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAg IGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9D aGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxv Y2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAg X01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl cDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBz aXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVp bnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9p ZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJk KCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9t dXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoK CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBz aXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsg X19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsg X19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRf c2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQo KSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2Nh dG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5 cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2Nf aGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1Jl cCkgLSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAg IGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFj aXR5KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNh cGFjaXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6 IDIqY2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1Jl cDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj b3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBp ZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01f cmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4u LikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2Nh dG9yKCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9y ZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEo KSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4y KQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3Bv cyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCkt Pl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6 ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlz LT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAg ICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVz IDwgdGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAg ICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFy VCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7 CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShf X3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAg aWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3No YXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAg IF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxs b2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hh clQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsK ICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgp LCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19z Ll9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAg ICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3Qg X19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAg ICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6 ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0 MjEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50 Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBz aXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hl YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFs bG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90 IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2Nf aGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAg ICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAg X19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXAp OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXpl IC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAg ICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJh IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICog c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBf X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAg ICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkg PSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9N X2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9j bG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90 eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21h bGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAg IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVk X2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkK CiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2Fw YWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAy Kl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9T X2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShf X3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBj YXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h bGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAg IGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp Y19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3Np emUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFz ZShfX24pOwoKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogICAgICAg IGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf c2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9 CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0g c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAgICAgICAgc2l6 ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0 aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAg IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAg ICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRl KF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAg X1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf X24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp OwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9 IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRu MiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0 ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK ICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6 ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0 aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1 cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4o KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoK CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSAr IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAg ICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9p ZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+ c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMt PnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwg X01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f bGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAg ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgog ICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVf dHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwog ICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19y aHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhf Q2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190 eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAg ICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZl KF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwog ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kx LCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9f aTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0g X19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5n OjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAg IGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYx LCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBf X3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYg KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykK ICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpj b3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBf TV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykK ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9f bikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0g bnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9f c2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6 ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg ICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6 ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9 IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBf X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0g MCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAg d2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAg ewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194 cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAo KytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx KF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAg ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewog ICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAg IHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBf X24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0 dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFz dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp ZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv cykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb X19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg ICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBv czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9 IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkp CiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu ZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewog ICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5z aXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtf X3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3Ms IF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsK ICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAg IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUg PiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6 ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXpl IC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29z aXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9f cG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50 CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5 cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBf X3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f cG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19w b3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXpl KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9f cG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19y b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFy VCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9f c2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg ICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAog ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19w b3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6 Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24x KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBp bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19s ZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAg ICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24y KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj X3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRz X3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o X19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6 ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRh KCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9f cnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19z dHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6 c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6 c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNp emUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAt IDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwog ICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxh dGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf aXN0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmlu ZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJh dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1w bGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxj aGFyPiYsIHN0cmluZyYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh bTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w bGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0 cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29z dHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBj b25zdCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFy X3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFy X3QpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdl dGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKfQojIDU4ICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyA0NyAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3FzdHJpbmcuaCIgMgojIDU3ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcXN0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hh clJlZjsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFEZWVwQ29weTsKCmNsYXNzIFFDaGFyIHsK cHVibGljOgogICAgUUNoYXIoKTsKICAgIFFDaGFyKCBjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hh ciBjICk7CiAgICBRQ2hhciggdWNoYXIgYywgdWNoYXIgciApOwogICAgUUNoYXIoIGNvbnN0IFFD aGFyJiBjICk7CiAgICBRQ2hhciggdXNob3J0IHJjICk7CiAgICBRQ2hhciggc2hvcnQgcmMgKTsK ICAgIFFDaGFyKCB1aW50IHJjICk7CiAgICBRQ2hhciggaW50IHJjICk7CgogICAgc3RhdGljIGNv bnN0IFFDaGFyIG51bGw7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgcmVwbGFjZW1lbnQ7CiAgICBz dGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9yZGVyTWFyazsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBi eXRlT3JkZXJTd2FwcGVkOwogICAgc3RhdGljIGNvbnN0IFFDaGFyIG5ic3A7CgoKCiAgICBlbnVt IENhdGVnb3J5CiAgICB7CiAgICAgICAgTm9DYXRlZ29yeSwKCiAgICAgICAgTWFya19Ob25TcGFj aW5nLAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywKICAgICAgICBNYXJrX0VuY2xvc2lu ZywKCiAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCwKICAgICAgICBOdW1iZXJfTGV0dGVyLAog ICAgICAgIE51bWJlcl9PdGhlciwKCiAgICAgICAgU2VwYXJhdG9yX1NwYWNlLAogICAgICAgIFNl cGFyYXRvcl9MaW5lLAogICAgICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGgsCgogICAgICAgIE90aGVy X0NvbnRyb2wsCiAgICAgICAgT3RoZXJfRm9ybWF0LAogICAgICAgIE90aGVyX1N1cnJvZ2F0ZSwK ICAgICAgICBPdGhlcl9Qcml2YXRlVXNlLAogICAgICAgIE90aGVyX05vdEFzc2lnbmVkLAoKICAg ICAgICBMZXR0ZXJfVXBwZXJjYXNlLAogICAgICAgIExldHRlcl9Mb3dlcmNhc2UsCiAgICAgICAg TGV0dGVyX1RpdGxlY2FzZSwKICAgICAgICBMZXR0ZXJfTW9kaWZpZXIsCiAgICAgICAgTGV0dGVy X090aGVyLAoKICAgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IsCiAgICAgICAgUHVuY3R1YXRp b25fRGFzaCwKICAgICAgICBQdW5jdHVhdGlvbl9EYXNrID0gUHVuY3R1YXRpb25fRGFzaCwKICAg ICAgICBQdW5jdHVhdGlvbl9PcGVuLAogICAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlLAogICAgICAg IFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSwKICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3Rl LAogICAgICAgIFB1bmN0dWF0aW9uX090aGVyLAoKICAgICAgICBTeW1ib2xfTWF0aCwKICAgICAg ICBTeW1ib2xfQ3VycmVuY3ksCiAgICAgICAgU3ltYm9sX01vZGlmaWVyLAogICAgICAgIFN5bWJv bF9PdGhlcgogICAgfTsKCiAgICBlbnVtIERpcmVjdGlvbgogICAgewogICAgICAgIERpckwsIERp clIsIERpckVOLCBEaXJFUywgRGlyRVQsIERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1Ms IERpck9OLAogICAgICAgIERpckxSRSwgRGlyTFJPLCBEaXJBTCwgRGlyUkxFLCBEaXJSTE8sIERp clBERiwgRGlyTlNNLCBEaXJCTgogICAgfTsKCiAgICBlbnVtIERlY29tcG9zaXRpb24KICAgIHsK ICAgICAgICBTaW5nbGUsIENhbm9uaWNhbCwgRm9udCwgTm9CcmVhaywgSW5pdGlhbCwgTWVkaWFs LAogICAgICAgIEZpbmFsLCBJc29sYXRlZCwgQ2lyY2xlLCBTdXBlciwgU3ViLCBWZXJ0aWNhbCwK ICAgICAgICBXaWRlLCBOYXJyb3csIFNtYWxsLCBTcXVhcmUsIENvbXBhdCwgRnJhY3Rpb24KICAg IH07CgogICAgZW51bSBKb2luaW5nCiAgICB7CiAgICAgICAgT3RoZXJKb2luaW5nLCBEdWFsLCBS aWdodCwgQ2VudGVyCiAgICB9OwoKICAgIGVudW0gQ29tYmluaW5nQ2xhc3MKICAgIHsKICAgICAg ICBDb21iaW5pbmdfQmVsb3dMZWZ0QXR0YWNoZWQgPSAyMDAsCiAgICAgICAgQ29tYmluaW5nX0Jl bG93QXR0YWNoZWQgPSAyMDIsCiAgICAgICAgQ29tYmluaW5nX0JlbG93UmlnaHRBdHRhY2hlZCA9 IDIwNCwKICAgICAgICBDb21iaW5pbmdfTGVmdEF0dGFjaGVkID0gMjA4LAogICAgICAgIENvbWJp bmluZ19SaWdodEF0dGFjaGVkID0gMjEwLAogICAgICAgIENvbWJpbmluZ19BYm92ZUxlZnRBdHRh Y2hlZCA9IDIxMiwKICAgICAgICBDb21iaW5pbmdfQWJvdmVBdHRhY2hlZCA9IDIxNCwKICAgICAg ICBDb21iaW5pbmdfQWJvdmVSaWdodEF0dGFjaGVkID0gMjE2LAoKICAgICAgICBDb21iaW5pbmdf QmVsb3dMZWZ0ID0gMjE4LAogICAgICAgIENvbWJpbmluZ19CZWxvdyA9IDIyMCwKICAgICAgICBD b21iaW5pbmdfQmVsb3dSaWdodCA9IDIyMiwKICAgICAgICBDb21iaW5pbmdfTGVmdCA9IDIyNCwK ICAgICAgICBDb21iaW5pbmdfUmlnaHQgPSAyMjYsCiAgICAgICAgQ29tYmluaW5nX0Fib3ZlTGVm dCA9IDIyOCwKICAgICAgICBDb21iaW5pbmdfQWJvdmUgPSAyMzAsCiAgICAgICAgQ29tYmluaW5n X0Fib3ZlUmlnaHQgPSAyMzIsCgogICAgICAgIENvbWJpbmluZ19Eb3VibGVCZWxvdyA9IDIzMywK ICAgICAgICBDb21iaW5pbmdfRG91YmxlQWJvdmUgPSAyMzQsCiAgICAgICAgQ29tYmluaW5nX0lv dGFTdWJzY3JpcHQgPSAyNDAKICAgIH07CgoKCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0Owog ICAgUUNoYXIgbG93ZXIoKSBjb25zdDsKICAgIFFDaGFyIHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0 ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKICAgIERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsK ICAgIEpvaW5pbmcgam9pbmluZygpIGNvbnN0OwogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0Owog ICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3Q7CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBv c2l0aW9uKCkgY29uc3Q7CiAgICBEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25z dDsKICAgIHVuc2lnbmVkIGNoYXIgY29tYmluaW5nQ2xhc3MoKSBjb25zdDsKCiAgICBjaGFyIGxh dGluMSgpIGNvbnN0IHsgcmV0dXJuIHVjcyA+IDB4ZmYgPyAwIDogKGNoYXIpIHVjczsgfQogICAg dXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiB1Y3M7IH0KICAgIHVzaG9ydCAmdW5pY29k ZSgpIHsgcmV0dXJuIHVjczsgfQoKCiAgICBvcGVyYXRvciBjaGFyKCkgY29uc3QgeyByZXR1cm4g bGF0aW4xKCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9 PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0OwogICAgYm9vbCBpc1B1bmN0KCkgY29uc3Q7 CiAgICBib29sIGlzU3BhY2UoKSBjb25zdDsKICAgIGJvb2wgaXNNYXJrKCkgY29uc3Q7CiAgICBi b29sIGlzTGV0dGVyKCkgY29uc3Q7CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CiAgICBib29s IGlzTGV0dGVyT3JOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwogICAg Ym9vbCBpc1N5bWJvbCgpIGNvbnN0OwoKICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiAo KHVjaGFyKSB1Y3MgJiAweGZmKTsgfQogICAgdWNoYXIgcm93KCkgY29uc3QgeyByZXR1cm4gKCh1 Y2hhcikgKHVjcz4+OCkmMHhmZik7IH0KICAgIHZvaWQgc2V0Q2VsbCggdWNoYXIgY2VsbCApIHsg dWNzID0gKHVjcyAmIDB4ZmYwMCkgKyBjZWxsOyB9CiAgICB2b2lkIHNldFJvdyggdWNoYXIgcm93 ICkgeyB1Y3MgPSAoKCh1c2hvcnQpIHJvdyk8PDgpICsgKHVjcyYweGZmKTsgfQoKICAgIHN0YXRp YyBib29sIG5ldHdvcmtPcmRlcmVkKCkgewogICAgICAgIGludCB3b3JkU2l6ZTsKICAgICAgICBi b29sIGJpZ0VuZGlhbiA9IEZBTFNFOwogICAgICAgIHFTeXNJbmZvKCAmd29yZFNpemUsICZiaWdF bmRpYW4gKTsKICAgICAgICByZXR1cm4gYmlnRW5kaWFuOwogICAgfQoKICAgIGZyaWVuZCBpbmxp bmUgYm9vbCBvcGVyYXRvcj09KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5l IGJvb2wgb3BlcmF0b3I9PSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBi b29sIG9wZXJhdG9yPT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBi b29sIG9wZXJhdG9yIT0oIFFDaGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBi b29sIG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9v bCBvcGVyYXRvciE9KCBRQ2hhciBjLCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wg b3BlcmF0b3I8PSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9w ZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVy YXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKTsKCnByaXZhdGU6CiAgICB1c2hvcnQgdWNzOwoK Cgp9IDsKCmlubGluZSBRQ2hhcjo6UUNoYXIoKSA6IHVjcyggMCApCgoKCnsKfQppbmxpbmUgUUNo YXI6OlFDaGFyKCBjaGFyIGMgKSA6IHVjcyggKHVjaGFyKWMgKQoKCgp7Cn0KaW5saW5lIFFDaGFy OjpRQ2hhciggdWNoYXIgYyApIDogdWNzKCBjICkKCgoKewp9CmlubGluZSBRQ2hhcjo6UUNoYXIo IHVjaGFyIGMsIHVjaGFyIHIgKSA6IHVjcyggKHIgPDwgOCkgfCBjICkKCgoKewp9CmlubGluZSBR Q2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkgOiB1Y3MoIGMudWNzICkKCgoKewp9Cgppbmxp bmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKSA6IHVjcyggcmMgKQoKCgp7Cn0KaW5saW5lIFFD aGFyOjpRQ2hhciggc2hvcnQgcmMgKSA6IHVjcyggKHVzaG9ydCkgcmMgKQoKCgp7Cn0KaW5saW5l IFFDaGFyOjpRQ2hhciggdWludCByYyApIDogdWNzKCAodXNob3J0ICkgKHJjICYgMHhmZmZmKSAp CgoKCnsKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBpbnQgcmMgKSA6IHVjcyggKHVzaG9ydCkgKHJj ICYgMHhmZmZmKSApCgoKCnsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNo YXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29s IG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gp ID09IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIg KQp7CiAgICByZXR1cm4gYzEudWNzID09IGMyLnVjczsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3Ih PSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewogICAgcmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0K CmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4g KCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMs IGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUg Ym9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9 ICgodWNoYXIpIGNoKTsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIg YyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBjaCkgPD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9w ZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIu dWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1 cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkg eyByZXR1cm4gYyA8PSBjaDsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNo YXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFy IGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwo IGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVy YXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUg Ym9vbCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQpp bmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNo KTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJu ICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBRU3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAg IFFTdHJpbmdEYXRhKCkgOgogICAgICAgIFFTaGFyZWQoKSwgdW5pY29kZSgwKSwgYXNjaWkoMCks IGxlbigwKSwgaXNzaW1wbGV0ZXh0KFRSVUUpLCBtYXhsKDApLCBpc2xhdGluMShGQUxTRSkgeyBy ZWYoKTsgfQogICAgUVN0cmluZ0RhdGEoUUNoYXIgKnUsIHVpbnQgbCwgdWludCBtKSA6CiAgICAg ICAgUVNoYXJlZCgpLCB1bmljb2RlKHUpLCBhc2NpaSgwKSwgbGVuKGwpLCBpc3NpbXBsZXRleHQo RkFMU0UpLCBtYXhsKG0pLCBpc2xhdGluMShGQUxTRSkgeyB9CiAgICB+UVN0cmluZ0RhdGEoKSB7 IGlmICggdW5pY29kZSApIGRlbGV0ZVtdICgoY2hhciopdW5pY29kZSk7CiAgICAgICAgICAgICAg ICAgICAgIGlmICggYXNjaWkgKSBkZWxldGVbXSBhc2NpaTsgfQoKICAgIHZvaWQgZGVsZXRlU2Vs ZigpOwogICAgUUNoYXIgKnVuaWNvZGU7CiAgICBjaGFyICphc2NpaTsKICAgIHZvaWQgc2V0RGly dHkoKSB7CiAgICAgICAgaWYgKCBhc2NpaSApIHsKICAgICAgICAgICAgZGVsZXRlIFtdIGFzY2lp OwogICAgICAgICAgICBhc2NpaSA9IDA7CiAgICAgICAgfQogICAgICAgIGlzc2ltcGxldGV4dCA9 IEZBTFNFOwogICAgfQoKCgogICAgdWludCBsZW4gOiAzMDsKCiAgICB1aW50IGlzc2ltcGxldGV4 dCA6IDE7CgoKCiAgICB1aW50IG1heGwgOiAzMDsKCiAgICB1aW50IGlzbGF0aW4xIDogMTsKCnBy aXZhdGU6CgogICAgUVN0cmluZ0RhdGEoIGNvbnN0IFFTdHJpbmdEYXRhJiApOwogICAgUVN0cmlu Z0RhdGEmIG9wZXJhdG9yPSggY29uc3QgUVN0cmluZ0RhdGEmICk7Cgp9OwoKCmNsYXNzIFFTdHJp bmcKewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3RyaW5nKCBRQ2hhciApOwogICAgUVN0 cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQnl0ZUFycmF5JiAp OwogICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CgogICAg UVN0cmluZyggY29uc3QgY2hhciAqc3RyICk7CgoKICAgIFFTdHJpbmcoIGNvbnN0IHN0ZDo6c3Ry aW5nJiApOwoKICAgIH5RU3RyaW5nKCk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBR U3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7CgogICAg UVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZv cGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBRQ2hh ciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25z dCBRU3RyaW5nIG51bGw7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0 eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1bmNhdGUoIHVp bnQgcG9zICk7CgogICAgUVN0cmluZyAmIGZpbGwoIFFDaGFyIGMsIGludCBsZW4gPSAtMSApOwoK ICAgIFFTdHJpbmcgY29weSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgYXJnKCBsb25nIGEsIGludCBm aWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggdWxvbmcg YSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJn KCBpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJp bmcgYXJnKCB1aW50IGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAg ICBRU3RyaW5nIGFyZyggc2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBj b25zdDsKICAgIFFTdHJpbmcgYXJnKCB1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJh c2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBjaGFyIGEsIGludCBmaWVsZHdpZHRoPTAg KSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBRQ2hhciBhLCBpbnQgZmllbGR3aWR0aD0wICkgY29u c3Q7CiAgICBRU3RyaW5nIGFyZyggY29uc3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCAp IGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0aD0wLCBjaGFy IGZtdD0nZycsIGludCBwcmVjPS0xICkgY29uc3Q7CgoKICAgIFFTdHJpbmcgJnNwcmludGYoIGNv bnN0IGNoYXIqIGZvcm1hdCwgLi4uICkKCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAo cHJpbnRmLCAyLCAzKSkpCgogICAgICAgIDsKCgogICAgaW50IGZpbmQoIFFDaGFyIGMsIGludCBp bmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjaGFyIGMsIGludCBp bmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRU3RyaW5n ICZzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgZmluZCgg Y29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKCiAgICBpbnQgZmluZCggY29u c3QgY2hhciogc3RyLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBRQ2hh ciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldigg Y2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJl diggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7 CgogICAgaW50IGZpbmRSZXYoIGNvbnN0IFFSZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7 CgoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0tMSApIGNvbnN0 OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp bnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAgICAgICAgICAg ICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50IGNvbnRhaW5z KCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBjb250YWlu cyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29u dGFpbnMoIGNvbnN0IFFSZWdFeHAgJiApIGNvbnN0OwoKCiAgICBlbnVtIFNlY3Rpb25GbGFncyB7 CiAgICAgICAgU2VjdGlvbkRlZmF1bHQgPSAweDAwLAogICAgICAgIFNlY3Rpb25Ta2lwRW1wdHkg PSAweDAxLAogICAgICAgIFNlY3Rpb25JbmNsdWRlTGVhZGluZ1NlcCA9IDB4MDIsCiAgICAgICAg U2VjdGlvbkluY2x1ZGVUcmFpbGluZ1NlcCA9IDB4MDQsCiAgICAgICAgU2VjdGlvbkNhc2VJbnNl bnNpdGl2ZVNlcHMgPSAweDA4CiAgICB9OwogICAgUVN0cmluZyBzZWN0aW9uKCBRQ2hhciBzZXAs IGludCBzdGFydCwgaW50IGVuZCA9IDB4ZmZmZmZmZmYsIGludCBmbGFncyA9IFNlY3Rpb25EZWZh dWx0ICkgY29uc3Q7CiAgICBRU3RyaW5nIHNlY3Rpb24oIGNoYXIgc2VwLCBpbnQgc3RhcnQsIGlu dCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoK ICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3QgY2hhciAqaW5fc2VwLCBpbnQgc3RhcnQsIGludCBl bmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAg IFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVN0cmluZyAmaW5fc2VwLCBpbnQgc3RhcnQsIGludCBl bmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAg IFFTdHJpbmcgc2VjdGlvbiggY29uc3QgUVJlZ0V4cCAmcmVnLCBpbnQgc3RhcnQsIGludCBlbmQg PSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKCiAgICBR U3RyaW5nIGxlZnQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxl biApIGNvbnN0OwogICAgUVN0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZm ZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZp bGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyByaWdodEp1c3RpZnko IHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAg UVN0cmluZyBsb3dlcigpIGNvbnN0OwogICAgUVN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFT dHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVT cGFjZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUVN0 cmluZyAmICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwg dWludCBsZW4gKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgUUNoYXIgKTsKICAg IFFTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGlu ZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0cmluZyAmYXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5n ICZhcHBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiAp OwoKICAgIFFTdHJpbmcgJmFwcGVuZCggY29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICBRU3RyaW5n ICZhcHBlbmQoIGNvbnN0IGNoYXIgKiApOwoKCiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IHN0 ZDo6c3RyaW5nJiApOwoKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcg JnByZXBlbmQoIFFDaGFyICk7CiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYg KTsKCiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKICAgIFFTdHJp bmcgJnByZXBlbmQoIGNvbnN0IGNoYXIgKiApOwoKCiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25z dCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQg bGVuICk7CiAgICBRU3RyaW5nICZyZW1vdmUoIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJnJlbW92 ZSggY2hhciBjICkgeyByZXR1cm4gcmVtb3ZlKCBRQ2hhcihjKSApOyB9CiAgICBRU3RyaW5nICZy ZW1vdmUoIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJnJlbW92ZSggY29uc3QgUVJl Z0V4cCAmICk7CgoKICAgIFFTdHJpbmcgJnJlbW92ZSggY29uc3QgY2hhciAqICk7CgogICAgUVN0 cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwog ICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwg dWludCBjbGVuICk7CiAgICBRU3RyaW5nICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwg UUNoYXIgKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjaGFy IGMgKQogICAgeyByZXR1cm4gcmVwbGFjZSggaW5kZXgsIGxlbiwgUUNoYXIoYykgKTsgfQogICAg UVN0cmluZyAmcmVwbGFjZSggUUNoYXIgYywgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5n ICZyZXBsYWNlKCBjaGFyIGMsIGNvbnN0IFFTdHJpbmcgJiBhZnRlciApCiAgICB7IHJldHVybiBy ZXBsYWNlKCBRQ2hhcihjKSwgYWZ0ZXIgKTsgfQogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3Qg UVN0cmluZyAmLCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nICZyZXBsYWNlKCBjb25z dCBRUmVnRXhwICYsIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJnJlcGxhY2UoIFFD aGFyLCBRQ2hhciApOwoKICAgIHNob3J0IHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEw ICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkg Y29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAg ICB1aW50IHRvVUludCggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGxvbmcg dG9Mb25nKCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9u ZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJv b2wgKm9rPTAgKSBjb25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0 OwoKICAgIFFTdHJpbmcgJnNldE51bSggc2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5n ICZzZXROdW0oIHVzaG9ydCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggaW50 LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1aW50LCBpbnQgYmFzZT0xMCAp OwogICAgUVN0cmluZyAmc2V0TnVtKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAm c2V0TnVtKCB1bG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZmxvYXQs IGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZG91YmxlLCBj aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25n LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJh c2U9MTApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAg ICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBR U3RyaW5nIG51bWJlciggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9p ZCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRv cis9KCBjb25zdCBRU3RyaW5nICZzdHIgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25z dCBRQnl0ZUFycmF5ICZzdHIgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0IGNoYXIg KnN0ciApOwoKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBzdGQ6OnN0cmluZyYgKTsK CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRv cis9KCBjaGFyIGMgKTsKCiAgICBRQ2hhciBhdCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJl dHVybiBpIDwgZC0+bGVuID8gZC0+dW5pY29kZVtpXSA6IFFDaGFyOjpudWxsOyB9CiAgICBRQ2hh ciBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJuIGF0KCh1aW50KWkpOyB9CiAgICBR Q2hhclJlZiBhdCggdWludCBpICk7CiAgICBRQ2hhclJlZiBvcGVyYXRvcltdKCBpbnQgaSApOwoK ICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiBhdChpKTsg fQogICAgUUNoYXImIHJlZih1aW50IGkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoIGQtPmNv dW50ICE9IDEgfHwgaSA+PSBkLT5sZW4gKQogICAgICAgICAgICAgICAgc3ViYXQoIGkgKTsKICAg ICAgICAgICAgZC0+c2V0RGlydHkoKTsKICAgICAgICAgICAgcmV0dXJuIGQtPnVuaWNvZGVbaV07 CiAgICAgICAgfQoKICAgIGNvbnN0IFFDaGFyKiB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gZC0+ dW5pY29kZTsgfQogICAgY29uc3QgY2hhciogYXNjaWkoKSBjb25zdDsKICAgIHN0YXRpYyBRU3Ry aW5nIGZyb21Bc2NpaShjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CiAgICBjb25zdCBjaGFyKiBs YXRpbjEoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3QgY2hhcios IGludCBsZW49LTEpOwogICAgUUNTdHJpbmcgdXRmOCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJp bmcgZnJvbVV0ZjgoY29uc3QgY2hhciosIGludCBsZW49LTEpOwogICAgUUNTdHJpbmcgbG9jYWw4 Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIq LCBpbnQgbGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3Ig Y29uc3QgY2hhciAqKCkgY29uc3QgeyByZXR1cm4gYXNjaWkoKTsgfQoKCiAgICBvcGVyYXRvciBz dGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIGFzY2lpKCk7IH0KCgogICAgc3RhdGljIFFTdHJp bmcgZnJvbVVjczIoIGNvbnN0IHVuc2lnbmVkIHNob3J0ICp1Y3MyICk7CiAgICBjb25zdCB1bnNp Z25lZCBzaG9ydCAqdWNzMigpIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNldFVuaWNvZGUoIGNvbnN0 IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0VW5pY29kZUNvZGVz KCBjb25zdCB1c2hvcnQqIHVuaWNvZGVfYXNfdXNob3J0cywgdWludCBsZW4gKTsKICAgIFFTdHJp bmcgJnNldEFzY2lpKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwogICAgUVN0cmluZyAmc2V0 TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25z dCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJp bmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5jb21wYXJlKCBzMiAp OyB9CgogICAgaW50IGxvY2FsZUF3YXJlQ29tcGFyZSggY29uc3QgUVN0cmluZyYgcyApIGNvbnN0 OwogICAgc3RhdGljIGludCBsb2NhbGVBd2FyZUNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBj b25zdCBRU3RyaW5nJiBzMiApCiAgICB7IHJldHVybiBzMS5sb2NhbGVBd2FyZUNvbXBhcmUoIHMy ICk7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm LCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CgoKICAgIGNvbnN0IGNoYXIqIGRh dGEoKSBjb25zdCB7IHJldHVybiBhc2NpaSgpOyB9CgoKICAgIGJvb2wgc3RhcnRzV2l0aCggY29u c3QgUVN0cmluZyYgKSBjb25zdDsKICAgIGJvb2wgZW5kc1dpdGgoIGNvbnN0IFFTdHJpbmcmICkg Y29uc3Q7CgogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgbmV3TGVuZ3RoICk7CgogICAgYm9vbCBz aW1wbGVUZXh0KCkgY29uc3QgeyBpZiAoICFkLT5pc3NpbXBsZXRleHQgKSBjaGVja1NpbXBsZVRl eHQoKTsgcmV0dXJuIChib29sKWQtPmlzc2ltcGxldGV4dDsgfQogICAgYm9vbCBpc1JpZ2h0VG9M ZWZ0KCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sICk7Cgog ICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzdWJhdCgg dWludCApOwogICAgYm9vbCBmaW5kQXJnKGludCYgcG9zLCBpbnQmIGxlbikgY29uc3Q7CgogICAg dm9pZCBjaGVja1NpbXBsZVRleHQoKSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGxhdGluMVRv VW5pY29kZSggY29uc3QgY2hhciosIHVpbnQgKiBsZW4sIHVpbnQgbWF4bGVuPSh1aW50KS0xICk7 CiAgICBzdGF0aWMgUUNoYXIqIGxhdGluMVRvVW5pY29kZSggY29uc3QgUUJ5dGVBcnJheSYsIHVp bnQgKiBsZW4gKTsKICAgIHN0YXRpYyBjaGFyKiB1bmljb2RlVG9MYXRpbjEoIGNvbnN0IFFDaGFy KiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0 YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7 CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dFN0 cmVhbTsKICAgIFFTdHJpbmcoIFFTdHJpbmdEYXRhKiBkZCwgYm9vbCApIDogZChkZCkgeyB9CgoK ICAgIHZvaWQgZGV0YWNoKCk7CiAgICBmcmllbmQgY2xhc3MgUURlZXBDb3B5PFFTdHJpbmc+Owp9 OwoKY2xhc3MgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5n JiBzOwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBz KCpzdHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBjb25z dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEoKSBj b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVmIG9w ZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJS ZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAg UUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsg fQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihwKT1j LnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNob3J0 IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRv cj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVm IG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBR Q2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9 CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsgfQoK CiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9v bCBpc1ByaW50KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0KICAg IGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgpOyB9 CiAgICBib29sIGlzU3BhY2UoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3BhY2Uo KTsgfQogICAgYm9vbCBpc01hcmsoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTWFy aygpOyB9CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5p c0xldHRlcigpOyB9CiAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl ZihwKS5pc051bWJlcigpOyB9CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVybiBz LmNvbnN0cmVmKHApLmlzTGV0dGVyT3JOdW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkgY29u c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRWYWx1 ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBRQ2hh ciBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNo YXIgdXBwZXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBR Q2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNh dGVnb3J5KCk7IH0KICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1 cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rpb24oKTsgfQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmlu ZygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuam9pbmluZygpOyB9CiAgICBib29sIG1p cnJvcmVkKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBR Q2hhciBtaXJyb3JlZENoYXIoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVk Q2hhcigpOyB9CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1 cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNvbXBvc2l0 aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29t cG9zaXRpb25UYWcoKTsgfQogICAgdW5zaWduZWQgY2hhciBjb21iaW5pbmdDbGFzcygpIGNvbnN0 IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuY29tYmluaW5nQ2xhc3MoKTsgfQoKCiAgICB1Y2hhciBj ZWxsKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJv dygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNo YXJSZWYgUVN0cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0K aW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQo KHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJs aWM6CiAgICBRQ29uc3RTdHJpbmcoIGNvbnN0IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCAp OwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3Qg eyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0 YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5nICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR RGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKIyA3NjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpRU3RyaW5nKCkgOgogICAgZChzaGFyZWRf bnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51bGwoKSkKewogICAgZC0+cmVmKCk7Cn0K CmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAgIGlmICggZC0+ZGVyZWYoKSApIHsKICAg ICAgICBpZiAoIGQgIT0gc2hhcmVkX251bGwgKQogICAgICAgICAgICBkLT5kZWxldGVTZWxmKCk7 CiAgICB9Cn0KCgppbmxpbmUgdm9pZCBRU3RyaW5nOjpkZXRhY2goKQp7IHJlYWxfZGV0YWNoKCk7 IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OnNlY3Rpb24oIFFDaGFyIHNlcCwgaW50IHN0YXJ0 LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVybiBzZWN0aW9uKFFTdHJpbmcoc2Vw KSwgc3RhcnQsIGVuZCwgZmxhZ3MpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9u KCBjaGFyIHNlcCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVy biBzZWN0aW9uKFFDaGFyKHNlcCksIHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3Ry aW5nIFFTdHJpbmc6OnNlY3Rpb24oIGNvbnN0IGNoYXIgKmluX3NlcCwgaW50IHN0YXJ0LCBpbnQg ZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVybiBzZWN0aW9uKFFTdHJpbmcoaW5fc2VwKSwg c3RhcnQsIGVuZCwgZmxhZ3MpOyB9CgoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9y PSggUUNoYXIgYyApCnsgKnRoaXMgPSBRU3RyaW5nKGMpOyByZXR1cm4gKnRoaXM7IH0KCmlubGlu ZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgKnRoaXMgPSBRU3RyaW5n KFFDaGFyKGMpKTsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc051bGwo KSBjb25zdAp7IHJldHVybiB1bmljb2RlKCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUVN0cmluZzo6 b3BlcmF0b3IhKCkgY29uc3QKeyByZXR1cm4gaXNOdWxsKCk7IH0KCmlubGluZSB1aW50IFFTdHJp bmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIGQtPmxlbjsgfQoKaW5saW5lIGJvb2wgUVN0cmlu Zzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGxlbmd0aCgpID09IDA7IH0KCmlubGluZSBRU3Ry aW5nIFFTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRU3RyaW5nKCAqdGhpcyApOyB9Cgpp bmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY29uc3QgUVN0cmluZyAmIHMgKQp7IHJl dHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIFFD aGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxjKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6 OnByZXBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMpOyB9CgoKaW5saW5lIFFTdHJp bmcgJlFTdHJpbmc6OnByZXBlbmQoIGNvbnN0IFFCeXRlQXJyYXkgJiBzICkKeyByZXR1cm4gaW5z ZXJ0KDAscy5kYXRhKCkpOyB9CgoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBj b25zdCBzdGQ6OnN0cmluZyYgcyApCnsgcmV0dXJuIGluc2VydCgwLCBzKTsgfQoKCmlubGluZSBR U3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3Bl cmF0b3IrPShzKTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IFFC eXRlQXJyYXkgJnMgKQp7IHJldHVybiBvcGVyYXRvcis9KHMuZGF0YSgpKTsgfQoKaW5saW5lIFFT dHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hhciAqIHMgKQp7IHJldHVybiBvcGVyYXRv cis9KHMpOyB9CgoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsg cmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQo IGNoYXIgYyApCnsgcmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0 cmluZzo6b3BlcmF0b3IrPSggY29uc3QgUUJ5dGVBcnJheSAmcyApCnsgcmV0dXJuIG9wZXJhdG9y Kz0ocy5kYXRhKCkpOyB9CgoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0 IHN0ZDo6c3RyaW5nJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQppbmxpbmUgUVN0cmlu ZyAmUVN0cmluZzo6b3BlcmF0b3IrPSggY29uc3Qgc3RkOjpzdHJpbmcmIHMgKQp7IHJldHVybiBv cGVyYXRvcis9KHMuY19zdHIoKSk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVt KCBzaG9ydCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgobG9uZyluLCBiYXNlKTsgfQoK aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggdXNob3J0IG4sIGludCBiYXNlICkKeyBy ZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6 OnNldE51bSggaW50IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2Up OyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1aW50IG4sIGludCBiYXNlICkK eyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJp bmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQgcHJlYyApCnsgcmV0dXJuIHNldE51bSgo ZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKGludCBhLCBp bnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVs ZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVpbnQgYSwgaW50 IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxk d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoc2hvcnQgYSwgaW50 IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKGxvbmcpYSwgZmllbGR3 aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyh1c2hvcnQgYSwgaW50 IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVybiBhcmcoKHVsb25nKWEsIGZpZWxk d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmQoIGNoYXIgYywgaW50IGlu ZGV4LCBib29sIGNzICkgY29uc3QKeyByZXR1cm4gZmluZChRQ2hhcihjKSwgaW5kZXgsIGNzKTsg fQoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRleCwgYm9vbCBj cykgY29uc3QKeyByZXR1cm4gZmluZFJldiggUUNoYXIoYyksIGluZGV4LCBjcyApOyB9CgoKaW5s aW5lIGludCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0 CnsgcmV0dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUFzY2lpKHN0ciksIGluZGV4KTsgfQoKaW5saW5l IGludCBRU3RyaW5nOjpmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0 CnsgcmV0dXJuIGZpbmRSZXYoUVN0cmluZzo6ZnJvbUFzY2lpKHN0ciksIGluZGV4KTsgfQoKCgoK CgoKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMy ICk7CiBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMy ICk7CiBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZz MiApOwogYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAm czIgKTsKIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAm czIgKTsKIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcg JnMyICk7CgogYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAq czIgKTsKIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIg KTsKIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7 CiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwog Ym9vbCBvcGVyYXRvcj4oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogYm9v bCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKIGJvb2wg b3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9w ZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJh dG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRv cj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiBib29sIG9wZXJhdG9y Pj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKCiBpbmxpbmUgY29uc3Qg UVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiAp CnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsK fQoKCiBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBj b25zdCBjaGFyICpzMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IFFTdHJp bmc6OmZyb21Bc2NpaShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJp bmcgb3BlcmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBR U3RyaW5nIHRtcCA9IFFTdHJpbmc6OmZyb21Bc2NpaSggczEgKTsKICAgIHRtcCArPSBzMjsKICAg IHJldHVybiB0bXA7Cn0KCgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBR U3RyaW5nICZzMSwgUUNoYXIgYzIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCAr PSBjMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvciso IGNvbnN0IFFTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAg ICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3Bl cmF0b3IrKCBRQ2hhciBjMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5nIHRtcDsK ICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUg Y29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewog ICAgUVN0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4g dG1wOwp9CiMgNDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAy CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FuYW1lc3BhY2UuaCIgMQojIDQyICIv dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5hbWVzcGFjZS5oIgojIDEgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3FuYW1lc3BhY2UuaCIgMgoKCgpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDdXJzb3I7CgoK Y2xhc3MgUXQgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IwOwogICAg c3RhdGljIGNvbnN0IFFDb2xvciAmIGNvbG9yMTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBi bGFjazsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB3aGl0ZTsKICAgIHN0YXRpYyBjb25zdCBR Q29sb3IgJiBkYXJrR3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmF5OwogICAgc3Rh dGljIGNvbnN0IFFDb2xvciAmIGxpZ2h0R3JheTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBy ZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZ3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNv bG9yICYgYmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjeWFuOwogICAgc3RhdGljIGNv bnN0IFFDb2xvciAmIG1hZ2VudGE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgeWVsbG93Owog ICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtSZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9y ICYgZGFya0dyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtCbHVlOwogICAgc3Rh dGljIGNvbnN0IFFDb2xvciAmIGRhcmtDeWFuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRh cmtNYWdlbnRhOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtZZWxsb3c7CgoKICAgIGVu dW0gQnV0dG9uU3RhdGUgewogICAgICAgIE5vQnV0dG9uID0gMHgwMDAwLAogICAgICAgIExlZnRC dXR0b24gPSAweDAwMDEsCiAgICAgICAgUmlnaHRCdXR0b24gPSAweDAwMDIsCiAgICAgICAgTWlk QnV0dG9uID0gMHgwMDA0LAogICAgICAgIE1vdXNlQnV0dG9uTWFzayA9IDB4MDAwNywKICAgICAg ICBTaGlmdEJ1dHRvbiA9IDB4MDEwMCwKICAgICAgICBDb250cm9sQnV0dG9uID0gMHgwMjAwLAog ICAgICAgIEFsdEJ1dHRvbiA9IDB4MDQwMCwKICAgICAgICBNZXRhQnV0dG9uID0gMHgwODAwLAog ICAgICAgIEtleUJ1dHRvbk1hc2sgPSAweDBmMDAsCiAgICAgICAgS2V5cGFkID0gMHg0MDAwCiAg ICB9OwoKCgogICAgZW51bSBPcmllbnRhdGlvbiB7CiAgICAgICAgSG9yaXpvbnRhbCA9IDAsCiAg ICAgICAgVmVydGljYWwKICAgIH07CgoKCgoKCiAgICBlbnVtIEFsaWdubWVudEZsYWdzIHsKICAg ICAgICBBbGlnbkF1dG8gPSAweDAwMDAsCiAgICAgICAgQWxpZ25MZWZ0ID0gMHgwMDAxLAogICAg ICAgIEFsaWduUmlnaHQgPSAweDAwMDIsCiAgICAgICAgQWxpZ25IQ2VudGVyID0gMHgwMDA0LAog ICAgICAgIEFsaWduSnVzdGlmeSA9IDB4MDAwOCwKICAgICAgICBBbGlnbkhvcml6b250YWxfTWFz ayA9IEFsaWduTGVmdCB8IEFsaWduUmlnaHQgfCBBbGlnbkhDZW50ZXIgfCBBbGlnbkp1c3RpZnks CiAgICAgICAgQWxpZ25Ub3AgPSAweDAwMTAsCiAgICAgICAgQWxpZ25Cb3R0b20gPSAweDAwMjAs CiAgICAgICAgQWxpZ25WQ2VudGVyID0gMHgwMDQwLAogICAgICAgIEFsaWduVmVydGljYWxfTWFz ayA9IEFsaWduVG9wIHwgQWxpZ25Cb3R0b20gfCBBbGlnblZDZW50ZXIsCiAgICAgICAgQWxpZ25D ZW50ZXIgPSBBbGlnblZDZW50ZXIgfCBBbGlnbkhDZW50ZXIKICAgIH07CgoKICAgIGVudW0gVGV4 dEZsYWdzIHsKICAgICAgICBTaW5nbGVMaW5lID0gMHgwMDgwLAogICAgICAgIERvbnRDbGlwID0g MHgwMTAwLAogICAgICAgIEV4cGFuZFRhYnMgPSAweDAyMDAsCiAgICAgICAgU2hvd1ByZWZpeCA9 IDB4MDQwMCwKICAgICAgICBXb3JkQnJlYWsgPSAweDA4MDAsCiAgICAgICAgQnJlYWtBbnl3aGVy ZSA9IDB4MTAwMCwKICAgICAgICBEb250UHJpbnQgPSAweDIwMDAsCiAgICAgICAgTm9BY2NlbCA9 IDB4NDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdTdGF0ZTsKCgogICAgZW51bSBXaWRn ZXRTdGF0ZSB7CiAgICAgICAgV1N0YXRlX0NyZWF0ZWQgPSAweDAwMDAwMDAxLAogICAgICAgIFdT dGF0ZV9EaXNhYmxlZCA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1N0YXRlX1Zpc2libGUgPSAweDAw MDAwMDA0LAogICAgICAgIFdTdGF0ZV9Gb3JjZUhpZGUgPSAweDAwMDAwMDA4LAogICAgICAgIFdT dGF0ZV9Pd25DdXJzb3IgPSAweDAwMDAwMDEwLAogICAgICAgIFdTdGF0ZV9Nb3VzZVRyYWNraW5n ID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3RhdGVfQ29tcHJlc3NLZXlzID0gMHgwMDAwMDA0MCwK ICAgICAgICBXU3RhdGVfQmxvY2tVcGRhdGVzID0gMHgwMDAwMDA4MCwKICAgICAgICBXU3RhdGVf SW5QYWludEV2ZW50ID0gMHgwMDAwMDEwMCwKICAgICAgICBXU3RhdGVfUmVwYXJlbnRlZCA9IDB4 MDAwMDAyMDAsCiAgICAgICAgV1N0YXRlX0NvbmZpZ1BlbmRpbmcgPSAweDAwMDAwNDAwLAogICAg ICAgIFdTdGF0ZV9SZXNpemVkID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3RhdGVfQXV0b01hc2sg PSAweDAwMDAxMDAwLAogICAgICAgIFdTdGF0ZV9Qb2xpc2hlZCA9IDB4MDAwMDIwMDAsCiAgICAg ICAgV1N0YXRlX0RORCA9IDB4MDAwMDQwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMCA9IDB4 MDAwMDgwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMSA9IDB4MDAwMTAwMDAsCiAgICAgICAg V1N0YXRlX1Jlc2VydmVkMiA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1N0YXRlX0NyZWF0ZWRIaWRk ZW4gPSAweDAwMDQwMDAwLAogICAgICAgIFdTdGF0ZV9NYXhpbWl6ZWQgPSAweDAwMDgwMDAwLAog ICAgICAgIFdTdGF0ZV9NaW5pbWl6ZWQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3Jj ZURpc2FibGVkID0gMHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAw MDAsCiAgICAgICAgV1N0YXRlX0hhc01vdXNlID0gMHgwMDgwMDAwMAogICAgfTsKCgogICAgdHlw ZWRlZiB1aW50IFdGbGFnczsKCgogICAgZW51bSBXaWRnZXRGbGFncyB7CiAgICAgICAgV1R5cGVf VG9wTGV2ZWwgPSAweDAwMDAwMDAxLAogICAgICAgIFdUeXBlX0RpYWxvZyA9IDB4MDAwMDAwMDIs CiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rlc2t0b3Ag PSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAgICAgICBX U3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFsQm9yZGVy ID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAwMDA0MCwK ICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdHlsZV9UaXRs ZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAwLAogICAg ICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01heGltaXpl ID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmltaXplIHwg V1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwKICAgICAg ICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRI ZWxwID0gMHgwMDAwNDAwMCwKICAgICAgICBXU3R5bGVfUmVzZXJ2ZWQgPSAweDAwMDA4MDAwLAog ICAgICAgIFdTdHlsZV9NYXNrID0gMHgwMDAwZmZmMCwKCiAgICAgICAgV0Rlc3RydWN0aXZlQ2xv c2UgPSAweDAwMDEwMDAwLAogICAgICAgIFdQYWludERlc2t0b3AgPSAweDAwMDIwMDAwLAogICAg ICAgIFdQYWludFVuY2xpcHBlZCA9IDB4MDAwNDAwMDAsCiAgICAgICAgV1BhaW50Q2xldmVyID0g MHgwMDA4MDAwMCwKICAgICAgICBXUmVzaXplTm9FcmFzZSA9IDB4MDAxMDAwMDAsCiAgICAgICAg V01vdXNlTm9NYXNrID0gMHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGljQ29udGVudHMgPSAweDAw NDAwMDAwLAogICAgICAgIFdSZXBhaW50Tm9FcmFzZSA9IDB4MDA4MDAwMDAsCgogICAgICAgIFdY MTFCeXBhc3NXTSA9IDB4MDEwMDAwMDAsCiAgICAgICAgV1dpbk93bkRDID0gMHgwMDAwMDAwMCwK ICAgICAgICBXTWFjU2hlZXQgPSAweDAwMDAwMDAwLAojIDIwMyAiL3Vzci9sb2NhbC9xdC0zLjEu MS9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKICAgICAgICBXR3JvdXBMZWFkZXIgPSAweDAyMDAwMDAw LAogICAgICAgIFdTaG93TW9kYWwgPSAweDA0MDAwMDAwLAogICAgICAgIFdOb01vdXNlUHJvcGFn YXRpb24gPSAweDA4MDAwMDAwLAogICAgICAgIFdTdWJXaW5kb3cgPSAweDEwMDAwMDAwLAogICAg ICAgIFdTdHlsZV9TcGxhc2ggPSBXU3R5bGVfTm9Cb3JkZXIgfCBXU3R5bGVfU3RheXNPblRvcAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBXU3R5bGVfVG9vbCB8IFdYMTFCeXBh c3NXTSB8IFdXaW5Pd25EQwoKICAgICAgICAsCiAgICAgICAgV05vcnRoV2VzdEdyYXZpdHkgPSBX U3RhdGljQ29udGVudHMsCiAgICAgICAgV1R5cGVfTW9kYWwgPSBXVHlwZV9EaWFsb2cgfCBXU2hv d01vZGFsLAogICAgICAgIFdTdHlsZV9EaWFsb2cgPSBXVHlwZV9EaWFsb2csCiAgICAgICAgV1N0 eWxlX05vQm9yZGVyRXggPSBXU3R5bGVfTm9Cb3JkZXIKCiAgICB9OwoKCgoKCiAgICBlbnVtIElt YWdlQ29udmVyc2lvbkZsYWdzIHsKICAgICAgICBDb2xvck1vZGVfTWFzayA9IDB4MDAwMDAwMDMs CiAgICAgICAgQXV0b0NvbG9yID0gMHgwMDAwMDAwMCwKICAgICAgICBDb2xvck9ubHkgPSAweDAw MDAwMDAzLAogICAgICAgIE1vbm9Pbmx5ID0gMHgwMDAwMDAwMiwKCgogICAgICAgIEFscGhhRGl0 aGVyX01hc2sgPSAweDAwMDAwMDBjLAogICAgICAgIFRocmVzaG9sZEFscGhhRGl0aGVyID0gMHgw MDAwMDAwMCwKICAgICAgICBPcmRlcmVkQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA0LAogICAgICAg IERpZmZ1c2VBbHBoYURpdGhlciA9IDB4MDAwMDAwMDgsCiAgICAgICAgTm9BbHBoYSA9IDB4MDAw MDAwMGMsCgogICAgICAgIERpdGhlcl9NYXNrID0gMHgwMDAwMDAzMCwKICAgICAgICBEaWZmdXNl RGl0aGVyID0gMHgwMDAwMDAwMCwKICAgICAgICBPcmRlcmVkRGl0aGVyID0gMHgwMDAwMDAxMCwK ICAgICAgICBUaHJlc2hvbGREaXRoZXIgPSAweDAwMDAwMDIwLAoKCiAgICAgICAgRGl0aGVyTW9k ZV9NYXNrID0gMHgwMDAwMDBjMCwKICAgICAgICBBdXRvRGl0aGVyID0gMHgwMDAwMDAwMCwKICAg ICAgICBQcmVmZXJEaXRoZXIgPSAweDAwMDAwMDQwLAogICAgICAgIEF2b2lkRGl0aGVyID0gMHgw MDAwMDA4MAogICAgfTsKCgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRyYW5zcGFyZW50TW9k ZSwKICAgICAgICBPcGFxdWVNb2RlCiAgICB9OwoKCgogICAgZW51bSBQYWludFVuaXQgewogICAg ICAgIFBpeGVsVW5pdCwKICAgICAgICBMb01ldHJpY1VuaXQsCiAgICAgICAgSGlNZXRyaWNVbml0 LAogICAgICAgIExvRW5nbGlzaFVuaXQsCiAgICAgICAgSGlFbmdsaXNoVW5pdCwKICAgICAgICBU d2lwc1VuaXQKICAgIH07CiMgMjcyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5hbWVz cGFjZS5oIgogICAgZW51bSBHVUlTdHlsZSB7CiAgICAgICAgTWFjU3R5bGUsCiAgICAgICAgV2lu ZG93c1N0eWxlLAogICAgICAgIFdpbjNTdHlsZSwKICAgICAgICBQTVN0eWxlLAogICAgICAgIE1v dGlmU3R5bGUKICAgIH07CgoKCiAgICBlbnVtIFNlcXVlbmNlTWF0Y2ggewogICAgICAgIE5vTWF0 Y2gsCiAgICAgICAgUGFydGlhbE1hdGNoLAogICAgICAgIElkZW50aWNhbAogICAgfTsKCgogICAg ZW51bSBNb2RpZmllciB7CiAgICAgICAgTUVUQSA9IDB4MDAxMDAwMDAsCiAgICAgICAgU0hJRlQg PSAweDAwMjAwMDAwLAogICAgICAgIENUUkwgPSAweDAwNDAwMDAwLAogICAgICAgIEFMVCA9IDB4 MDA4MDAwMDAsCiAgICAgICAgTU9ESUZJRVJfTUFTSyA9IDB4MDBmMDAwMDAsCiAgICAgICAgVU5J Q09ERV9BQ0NFTCA9IDB4MTAwMDAwMDAsCgogICAgICAgIEFTQ0lJX0FDQ0VMID0gVU5JQ09ERV9B Q0NFTAogICAgfTsKCgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2NhcGUgPSAweDEwMDAs CiAgICAgICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3RhYiA9IDB4MTAwMiwg S2V5X0JhY2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3NwYWNlID0gMHgxMDAz LCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlfUmV0dXJuID0gMHgx MDA0LAogICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlfSW5zZXJ0ID0gMHgx MDA2LAogICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5X1BhdXNlID0gMHgx MDA4LAogICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlfU3lzUmVxID0gMHgx MDBhLAogICAgICAgIEtleV9DbGVhciA9IDB4MTAwYiwKICAgICAgICBLZXlfSG9tZSA9IDB4MTAx MCwKICAgICAgICBLZXlfRW5kID0gMHgxMDExLAogICAgICAgIEtleV9MZWZ0ID0gMHgxMDEyLAog ICAgICAgIEtleV9VcCA9IDB4MTAxMywKICAgICAgICBLZXlfUmlnaHQgPSAweDEwMTQsCiAgICAg ICAgS2V5X0Rvd24gPSAweDEwMTUsCiAgICAgICAgS2V5X1ByaW9yID0gMHgxMDE2LCBLZXlfUGFn ZVVwID0gS2V5X1ByaW9yLAogICAgICAgIEtleV9OZXh0ID0gMHgxMDE3LCBLZXlfUGFnZURvd24g PSBLZXlfTmV4dCwKICAgICAgICBLZXlfU2hpZnQgPSAweDEwMjAsCiAgICAgICAgS2V5X0NvbnRy b2wgPSAweDEwMjEsCiAgICAgICAgS2V5X01ldGEgPSAweDEwMjIsCiAgICAgICAgS2V5X0FsdCA9 IDB4MTAyMywKICAgICAgICBLZXlfQ2Fwc0xvY2sgPSAweDEwMjQsCiAgICAgICAgS2V5X051bUxv Y2sgPSAweDEwMjUsCiAgICAgICAgS2V5X1Njcm9sbExvY2sgPSAweDEwMjYsCiAgICAgICAgS2V5 X0YxID0gMHgxMDMwLAogICAgICAgIEtleV9GMiA9IDB4MTAzMSwKICAgICAgICBLZXlfRjMgPSAw eDEwMzIsCiAgICAgICAgS2V5X0Y0ID0gMHgxMDMzLAogICAgICAgIEtleV9GNSA9IDB4MTAzNCwK ICAgICAgICBLZXlfRjYgPSAweDEwMzUsCiAgICAgICAgS2V5X0Y3ID0gMHgxMDM2LAogICAgICAg IEtleV9GOCA9IDB4MTAzNywKICAgICAgICBLZXlfRjkgPSAweDEwMzgsCiAgICAgICAgS2V5X0Yx MCA9IDB4MTAzOSwKICAgICAgICBLZXlfRjExID0gMHgxMDNhLAogICAgICAgIEtleV9GMTIgPSAw eDEwM2IsCiAgICAgICAgS2V5X0YxMyA9IDB4MTAzYywKICAgICAgICBLZXlfRjE0ID0gMHgxMDNk LAogICAgICAgIEtleV9GMTUgPSAweDEwM2UsCiAgICAgICAgS2V5X0YxNiA9IDB4MTAzZiwKICAg ICAgICBLZXlfRjE3ID0gMHgxMDQwLAogICAgICAgIEtleV9GMTggPSAweDEwNDEsCiAgICAgICAg S2V5X0YxOSA9IDB4MTA0MiwKICAgICAgICBLZXlfRjIwID0gMHgxMDQzLAogICAgICAgIEtleV9G MjEgPSAweDEwNDQsCiAgICAgICAgS2V5X0YyMiA9IDB4MTA0NSwKICAgICAgICBLZXlfRjIzID0g MHgxMDQ2LAogICAgICAgIEtleV9GMjQgPSAweDEwNDcsCiAgICAgICAgS2V5X0YyNSA9IDB4MTA0 OCwKICAgICAgICBLZXlfRjI2ID0gMHgxMDQ5LAogICAgICAgIEtleV9GMjcgPSAweDEwNGEsCiAg ICAgICAgS2V5X0YyOCA9IDB4MTA0YiwKICAgICAgICBLZXlfRjI5ID0gMHgxMDRjLAogICAgICAg IEtleV9GMzAgPSAweDEwNGQsCiAgICAgICAgS2V5X0YzMSA9IDB4MTA0ZSwKICAgICAgICBLZXlf RjMyID0gMHgxMDRmLAogICAgICAgIEtleV9GMzMgPSAweDEwNTAsCiAgICAgICAgS2V5X0YzNCA9 IDB4MTA1MSwKICAgICAgICBLZXlfRjM1ID0gMHgxMDUyLAogICAgICAgIEtleV9TdXBlcl9MID0g MHgxMDUzLAogICAgICAgIEtleV9TdXBlcl9SID0gMHgxMDU0LAogICAgICAgIEtleV9NZW51ID0g MHgxMDU1LAogICAgICAgIEtleV9IeXBlcl9MID0gMHgxMDU2LAogICAgICAgIEtleV9IeXBlcl9S ID0gMHgxMDU3LAogICAgICAgIEtleV9IZWxwID0gMHgxMDU4LAogICAgICAgIEtleV9EaXJlY3Rp b25fTCA9IDB4MTA1OSwKICAgICAgICBLZXlfRGlyZWN0aW9uX1IgPSAweDEwNjAsCiAgICAgICAg S2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBLZXlfQW55ID0gS2V5X1NwYWNlLAogICAgICAgIEtl eV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtleV9RdW90ZURibCA9IDB4MjIsCiAgICAgICAgS2V5 X051bWJlclNpZ24gPSAweDIzLAogICAgICAgIEtleV9Eb2xsYXIgPSAweDI0LAogICAgICAgIEtl eV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBLZXlfQW1wZXJzYW5kID0gMHgyNiwKICAgICAgICBL ZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAgICAgS2V5X1BhcmVuTGVmdCA9IDB4MjgsCiAgICAg ICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAogICAgICAgIEtleV9Bc3RlcmlzayA9IDB4MmEsCiAg ICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAgICAgIEtleV9Db21tYSA9IDB4MmMsCiAgICAgICAg S2V5X01pbnVzID0gMHgyZCwKICAgICAgICBLZXlfUGVyaW9kID0gMHgyZSwKICAgICAgICBLZXlf U2xhc2ggPSAweDJmLAogICAgICAgIEtleV8wID0gMHgzMCwKICAgICAgICBLZXlfMSA9IDB4MzEs CiAgICAgICAgS2V5XzIgPSAweDMyLAogICAgICAgIEtleV8zID0gMHgzMywKICAgICAgICBLZXlf NCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAweDM1LAogICAgICAgIEtleV82ID0gMHgzNiwKICAg ICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAgS2V5XzggPSAweDM4LAogICAgICAgIEtleV85ID0g MHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAweDNhLAogICAgICAgIEtleV9TZW1pY29sb24gPSAw eDNiLAogICAgICAgIEtleV9MZXNzID0gMHgzYywKICAgICAgICBLZXlfRXF1YWwgPSAweDNkLAog ICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwKICAgICAgICBLZXlfUXVlc3Rpb24gPSAweDNmLAog ICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAgICAgS2V5X0EgPSAweDQxLAogICAgICAgIEtleV9C ID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4NDMsCiAgICAgICAgS2V5X0QgPSAweDQ0LAogICAg ICAgIEtleV9FID0gMHg0NSwKICAgICAgICBLZXlfRiA9IDB4NDYsCiAgICAgICAgS2V5X0cgPSAw eDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwKICAgICAgICBLZXlfSSA9IDB4NDksCiAgICAgICAg S2V5X0ogPSAweDRhLAogICAgICAgIEtleV9LID0gMHg0YiwKICAgICAgICBLZXlfTCA9IDB4NGMs CiAgICAgICAgS2V5X00gPSAweDRkLAogICAgICAgIEtleV9OID0gMHg0ZSwKICAgICAgICBLZXlf TyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAweDUwLAogICAgICAgIEtleV9RID0gMHg1MSwKICAg ICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAgS2V5X1MgPSAweDUzLAogICAgICAgIEtleV9UID0g MHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUsCiAgICAgICAgS2V5X1YgPSAweDU2LAogICAgICAg IEtleV9XID0gMHg1NywKICAgICAgICBLZXlfWCA9IDB4NTgsCiAgICAgICAgS2V5X1kgPSAweDU5 LAogICAgICAgIEtleV9aID0gMHg1YSwKICAgICAgICBLZXlfQnJhY2tldExlZnQgPSAweDViLAog ICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVjLAogICAgICAgIEtleV9CcmFja2V0UmlnaHQgPSAw eDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1bSA9IDB4NWUsCiAgICAgICAgS2V5X1VuZGVyc2Nv cmUgPSAweDVmLAogICAgICAgIEtleV9RdW90ZUxlZnQgPSAweDYwLAogICAgICAgIEtleV9CcmFj ZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9CYXIgPSAweDdjLAogICAgICAgIEtleV9CcmFjZVJp Z2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNjaWlUaWxkZSA9IDB4N2UsCgoKCiAgICAgICAgS2V5 X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAgICAgIEtleV9leGNsYW1kb3duID0gMHgwYTEsCiAg ICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAgICAgICBLZXlfc3RlcmxpbmcgPSAweDBhMywKICAg ICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwKICAgICAgICBLZXlfeWVuID0gMHgwYTUsCiAgICAg ICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAogICAgICAgIEtleV9zZWN0aW9uID0gMHgwYTcsCiAg ICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4LAogICAgICAgIEtleV9jb3B5cmlnaHQgPSAweDBh OSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUgPSAweDBhYSwKICAgICAgICBLZXlfZ3VpbGxlbW90 bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9ub3RzaWduID0gMHgwYWMsCiAgICAgICAgS2V5X2h5 cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9yZWdpc3RlcmVkID0gMHgwYWUsCiAgICAgICAgS2V5 X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtleV9kZWdyZWUgPSAweDBiMCwKICAgICAgICBLZXlf cGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAgS2V5X3R3b3N1cGVyaW9yID0gMHgwYjIsCiAgICAg ICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBiMywKICAgICAgICBLZXlfYWN1dGUgPSAweDBiNCwK ICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAgICAgICBLZXlfcGFyYWdyYXBoID0gMHgwYjYsCiAg ICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0gMHgwYjcsCiAgICAgICAgS2V5X2NlZGlsbGEgPSAw eDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJpb3IgPSAweDBiOSwKICAgICAgICBLZXlfbWFzY3Vs aW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1aWxsZW1vdHJpZ2h0ID0gMHgwYmIsCiAgICAgICAg S2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAgICAgICBLZXlfb25laGFsZiA9IDB4MGJkLAogICAg ICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgwYmUsCiAgICAgICAgS2V5X3F1ZXN0aW9uZG93biA9 IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUgPSAweDBjMCwKICAgICAgICBLZXlfQWFjdXRlID0g MHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1mbGV4ID0gMHgwYzIsCiAgICAgICAgS2V5X0F0aWxk ZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlhZXJlc2lzID0gMHgwYzQsCiAgICAgICAgS2V5X0Fy aW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FFID0gMHgwYzYsCiAgICAgICAgS2V5X0NjZWRpbGxh ID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2ZSA9IDB4MGM4LAogICAgICAgIEtleV9FYWN1dGUg PSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1bWZsZXggPSAweDBjYSwKICAgICAgICBLZXlfRWRp YWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtleV9JZ3JhdmUgPSAweDBjYywKICAgICAgICBLZXlf SWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5X0ljaXJjdW1mbGV4ID0gMHgwY2UsCiAgICAgICAg S2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAgICAgICBLZXlfRVRIID0gMHgwZDAsCiAgICAgICAg S2V5X050aWxkZSA9IDB4MGQxLAogICAgICAgIEtleV9PZ3JhdmUgPSAweDBkMiwKICAgICAgICBL ZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAgS2V5X09jaXJjdW1mbGV4ID0gMHgwZDQsCiAgICAg ICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAgICAgIEtleV9PZGlhZXJlc2lzID0gMHgwZDYsCiAg ICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcsCiAgICAgICAgS2V5X09vYmxpcXVlID0gMHgwZDgs CiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5LAogICAgICAgIEtleV9VYWN1dGUgPSAweDBkYSwK ICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAweDBkYiwKICAgICAgICBLZXlfVWRpYWVyZXNpcyA9 IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUgPSAweDBkZCwKICAgICAgICBLZXlfVEhPUk4gPSAw eDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0gMHgwZGYsCiAgICAgICAgS2V5X2FncmF2ZSA9IDB4 MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAweDBlMSwKICAgICAgICBLZXlfYWNpcmN1bWZsZXgg PSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRlID0gMHgwZTMsCiAgICAgICAgS2V5X2FkaWFlcmVz aXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJpbmcgPSAweDBlNSwKICAgICAgICBLZXlfYWUgPSAw eDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEgPSAweDBlNywKICAgICAgICBLZXlfZWdyYXZlID0g MHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9IDB4MGU5LAogICAgICAgIEtleV9lY2lyY3VtZmxl eCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlhZXJlc2lzID0gMHgwZWIsCiAgICAgICAgS2V5X2ln cmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9pYWN1dGUgPSAweDBlZCwKICAgICAgICBLZXlfaWNp cmN1bWZsZXggPSAweDBlZSwKICAgICAgICBLZXlfaWRpYWVyZXNpcyA9IDB4MGVmLAogICAgICAg IEtleV9ldGggPSAweDBmMCwKICAgICAgICBLZXlfbnRpbGRlID0gMHgwZjEsCiAgICAgICAgS2V5 X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtleV9vYWN1dGUgPSAweDBmMywKICAgICAgICBLZXlf b2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAgICBLZXlfb3RpbGRlID0gMHgwZjUsCiAgICAgICAg S2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAgICAgICBLZXlfZGl2aXNpb24gPSAweDBmNywKICAg ICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAgICAgICAgS2V5X3VncmF2ZSA9IDB4MGY5LAogICAg ICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAgICAgICBLZXlfdWNpcmN1bWZsZXggPSAweDBmYiwK ICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAogICAgICAgIEtleV95YWN1dGUgPSAweDBm ZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBmZSwKICAgICAgICBLZXlfeWRpYWVyZXNpcyA9IDB4 MGZmLAoKCgogICAgICAgIEtleV9CYWNrID0gMHgxMDYxLAogICAgICAgIEtleV9Gb3J3YXJkID0g MHgxMDYyLAogICAgICAgIEtleV9TdG9wID0gMHgxMDYzLAogICAgICAgIEtleV9SZWZyZXNoID0g MHgxMDY0LAoKICAgICAgICBLZXlfVm9sdW1lRG93biA9IDB4MTA3MCwKICAgICAgICBLZXlfVm9s dW1lTXV0ZSA9IDB4MTA3MSwKICAgICAgICBLZXlfVm9sdW1lVXAgPSAweDEwNzIsCiAgICAgICAg S2V5X0Jhc3NCb29zdCA9IDB4MTA3MywKICAgICAgICBLZXlfQmFzc1VwID0gMHgxMDc0LAogICAg ICAgIEtleV9CYXNzRG93biA9IDB4MTA3NSwKICAgICAgICBLZXlfVHJlYmxlVXAgPSAweDEwNzYs CiAgICAgICAgS2V5X1RyZWJsZURvd24gPSAweDEwNzcsCgogICAgICAgIEtleV9NZWRpYVBsYXkg PSAweDEwODAsCiAgICAgICAgS2V5X01lZGlhU3RvcCA9IDB4MTA4MSwKICAgICAgICBLZXlfTWVk aWFQcmV2ID0gMHgxMDgyLAogICAgICAgIEtleV9NZWRpYU5leHQgPSAweDEwODMsCiAgICAgICAg S2V5X01lZGlhUmVjb3JkID0gMHgxMDg0LAoKICAgICAgICBLZXlfSG9tZVBhZ2UgPSAweDEwOTAs CiAgICAgICAgS2V5X0Zhdm9yaXRlcyA9IDB4MTA5MSwKICAgICAgICBLZXlfU2VhcmNoID0gMHgx MDkyLAogICAgICAgIEtleV9TdGFuZGJ5ID0gMHgxMDkzLAogICAgICAgIEtleV9PcGVuVXJsID0g MHgxMDk0LAoKICAgICAgICBLZXlfTGF1bmNoTWFpbCA9IDB4MTBhMCwKICAgICAgICBLZXlfTGF1 bmNoTWVkaWEgPSAweDEwYTEsCiAgICAgICAgS2V5X0xhdW5jaDAgPSAweDEwYTIsCiAgICAgICAg S2V5X0xhdW5jaDEgPSAweDEwYTMsCiAgICAgICAgS2V5X0xhdW5jaDIgPSAweDEwYTQsCiAgICAg ICAgS2V5X0xhdW5jaDMgPSAweDEwYTUsCiAgICAgICAgS2V5X0xhdW5jaDQgPSAweDEwYTYsCiAg ICAgICAgS2V5X0xhdW5jaDUgPSAweDEwYTcsCiAgICAgICAgS2V5X0xhdW5jaDYgPSAweDEwYTgs CiAgICAgICAgS2V5X0xhdW5jaDcgPSAweDEwYTksCiAgICAgICAgS2V5X0xhdW5jaDggPSAweDEw YWEsCiAgICAgICAgS2V5X0xhdW5jaDkgPSAweDEwYWIsCiAgICAgICAgS2V5X0xhdW5jaEEgPSAw eDEwYWMsCiAgICAgICAgS2V5X0xhdW5jaEIgPSAweDEwYWQsCiAgICAgICAgS2V5X0xhdW5jaEMg PSAweDEwYWUsCiAgICAgICAgS2V5X0xhdW5jaEQgPSAweDEwYWYsCiAgICAgICAgS2V5X0xhdW5j aEUgPSAweDEwYjAsCiAgICAgICAgS2V5X0xhdW5jaEYgPSAweDEwYjEsCgogICAgICAgIEtleV9N ZWRpYUxhc3QgPSAweDFmZmYsCgogICAgICAgIEtleV91bmtub3duID0gMHhmZmZmCiAgICB9OwoK CiAgICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAgICAgICBEb3duQXJyb3cs CiAgICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAgIH07CgoKICAgIGVudW0g UmFzdGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1AsCiAgICAgICAgWG9yUk9Q LAogICAgICAgIE5vdEFuZFJPUCwgRXJhc2VST1A9Tm90QW5kUk9QLAogICAgICAgIE5vdENvcHlS T1AsCiAgICAgICAgTm90T3JST1AsCiAgICAgICAgTm90WG9yUk9QLAogICAgICAgIEFuZFJPUCwg Tm90RXJhc2VST1A9QW5kUk9QLAogICAgICAgIE5vdFJPUCwKICAgICAgICBDbGVhclJPUCwKICAg ICAgICBTZXRST1AsCiAgICAgICAgTm9wUk9QLAogICAgICAgIEFuZE5vdFJPUCwKICAgICAgICBP ck5vdFJPUCwKICAgICAgICBOYW5kUk9QLAogICAgICAgIE5vclJPUCwgTGFzdFJPUD1Ob3JST1AK ICAgIH07CgoKICAgIGVudW0gUGVuU3R5bGUgewogICAgICAgIE5vUGVuLAogICAgICAgIFNvbGlk TGluZSwKICAgICAgICBEYXNoTGluZSwKICAgICAgICBEb3RMaW5lLAogICAgICAgIERhc2hEb3RM aW5lLAogICAgICAgIERhc2hEb3REb3RMaW5lLAogICAgICAgIE1QZW5TdHlsZSA9IDB4MGYKICAg IH07CgoKICAgIGVudW0gUGVuQ2FwU3R5bGUgewogICAgICAgIEZsYXRDYXAgPSAweDAwLAogICAg ICAgIFNxdWFyZUNhcCA9IDB4MTAsCiAgICAgICAgUm91bmRDYXAgPSAweDIwLAogICAgICAgIE1Q ZW5DYXBTdHlsZSA9IDB4MzAKICAgIH07CgoKICAgIGVudW0gUGVuSm9pblN0eWxlIHsKICAgICAg ICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9pbiA9IDB4NDAsCiAgICAgICAgUm91 bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxlID0gMHhjMAogICAgfTsKCgogICAg ZW51bSBCcnVzaFN0eWxlIHsKICAgICAgICBOb0JydXNoLAogICAgICAgIFNvbGlkUGF0dGVybiwK ICAgICAgICBEZW5zZTFQYXR0ZXJuLAogICAgICAgIERlbnNlMlBhdHRlcm4sCiAgICAgICAgRGVu c2UzUGF0dGVybiwKICAgICAgICBEZW5zZTRQYXR0ZXJuLAogICAgICAgIERlbnNlNVBhdHRlcm4s CiAgICAgICAgRGVuc2U2UGF0dGVybiwKICAgICAgICBEZW5zZTdQYXR0ZXJuLAogICAgICAgIEhv clBhdHRlcm4sCiAgICAgICAgVmVyUGF0dGVybiwKICAgICAgICBDcm9zc1BhdHRlcm4sCiAgICAg ICAgQkRpYWdQYXR0ZXJuLAogICAgICAgIEZEaWFnUGF0dGVybiwKICAgICAgICBEaWFnQ3Jvc3NQ YXR0ZXJuLAogICAgICAgIEN1c3RvbVBhdHRlcm49MjQKICAgIH07CgoKICAgIGVudW0gTWFjaW50 b3NoVmVyc2lvbiB7CgogICAgICAgIE1WX1Vua25vd24gPSAweDAwMDAsCgoKICAgICAgICBNVl85 ID0gMHgwMDAxLAogICAgICAgIE1WXzEwX0RPVF8xID0gMHgwMDAyLAogICAgICAgIE1WXzEwX0RP VF8yID0gMHgwMDAzLAoKCiAgICAgICAgTVZfSkFHVUFSID0gTVZfMTBfRE9UXzIKICAgIH07CgoK ICAgIGVudW0gV2luZG93c1ZlcnNpb24gewogICAgICAgIFdWXzMycyA9IDB4MDAwMSwKICAgICAg ICBXVl85NSA9IDB4MDAwMiwKICAgICAgICBXVl85OCA9IDB4MDAwMywKICAgICAgICBXVl9NZSA9 IDB4MDAwNCwKICAgICAgICBXVl9ET1NfYmFzZWQgPSAweDAwMGYsCgogICAgICAgIFdWX05UID0g MHgwMDEwLAogICAgICAgIFdWXzIwMDAgPSAweDAwMjAsCiAgICAgICAgV1ZfWFAgPSAweDAwMzAs CiAgICAgICAgV1ZfTlRfYmFzZWQgPSAweDAwZjAKICAgIH07CgoKICAgIGVudW0gVUlFZmZlY3Qg ewogICAgICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUsCiAgICAgICAgVUlf RmFkZU1lbnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJX0FuaW1hdGVUb29s dGlwLAogICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCiAgICBlbnVtIEN1cnNvclNoYXBl IHsKICAgICAgICBBcnJvd0N1cnNvciwKICAgICAgICBVcEFycm93Q3Vyc29yLAogICAgICAgIENy b3NzQ3Vyc29yLAogICAgICAgIFdhaXRDdXJzb3IsCiAgICAgICAgSWJlYW1DdXJzb3IsCiAgICAg ICAgU2l6ZVZlckN1cnNvciwKICAgICAgICBTaXplSG9yQ3Vyc29yLAogICAgICAgIFNpemVCRGlh Z0N1cnNvciwKICAgICAgICBTaXplRkRpYWdDdXJzb3IsCiAgICAgICAgU2l6ZUFsbEN1cnNvciwK ICAgICAgICBCbGFua0N1cnNvciwKICAgICAgICBTcGxpdFZDdXJzb3IsCiAgICAgICAgU3BsaXRI Q3Vyc29yLAogICAgICAgIFBvaW50aW5nSGFuZEN1cnNvciwKICAgICAgICBGb3JiaWRkZW5DdXJz b3IsCiAgICAgICAgV2hhdHNUaGlzQ3Vyc29yLAogICAgICAgIExhc3RDdXJzb3IgPSBXaGF0c1Ro aXNDdXJzb3IsCiAgICAgICAgQml0bWFwQ3Vyc29yID0gMjQKICAgIH07CgoKCiAgICBzdGF0aWMg Y29uc3QgUUN1cnNvciAmIGFycm93Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiB1 cEFycm93Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBjcm9zc0N1cnNvcjsKICAg IHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgd2FpdEN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vy c29yICYgaWJlYW1DdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVWZXJDdXJz b3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVIb3JDdXJzb3I7CiAgICBzdGF0aWMg Y29uc3QgUUN1cnNvciAmIHNpemVCRGlhZ0N1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29y ICYgc2l6ZUZEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXplQWxsQ3Vy c29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBibGFua0N1cnNvcjsKICAgIHN0YXRpYyBj b25zdCBRQ3Vyc29yICYgc3BsaXRWQ3Vyc29yOwoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYg c3BsaXRIQ3Vyc29yOwoKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgcG9pbnRpbmdIYW5kQ3Vy c29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBmb3JiaWRkZW5DdXJzb3I7CiAgICBzdGF0 aWMgY29uc3QgUUN1cnNvciAmIHdoYXRzVGhpc0N1cnNvcjsKCgogICAgZW51bSBUZXh0Rm9ybWF0 IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQsCiAgICAgICAgQXV0b1RleHQs CiAgICAgICAgTG9nVGV4dAogICAgfTsKCgogICAgZW51bSBBbmNob3JBdHRyaWJ1dGUgewogICAg ICAgIEFuY2hvck5hbWUsCiAgICAgICAgQW5jaG9ySHJlZgogICAgfTsKCgogICAgZW51bSBEb2Nr IHsKICAgICAgICBEb2NrVW5tYW5hZ2VkLAogICAgICAgIERvY2tUb3JuT2ZmLAogICAgICAgIERv Y2tUb3AsCiAgICAgICAgRG9ja0JvdHRvbSwKICAgICAgICBEb2NrUmlnaHQsCiAgICAgICAgRG9j a0xlZnQsCiAgICAgICAgRG9ja01pbmltaXplZAoKICAgICAgICAsCiAgICAgICAgVW5tYW5hZ2Vk ID0gRG9ja1VubWFuYWdlZCwKICAgICAgICBUb3JuT2ZmID0gRG9ja1Rvcm5PZmYsCiAgICAgICAg VG9wID0gRG9ja1RvcCwKICAgICAgICBCb3R0b20gPSBEb2NrQm90dG9tLAogICAgICAgIFJpZ2h0 ID0gRG9ja1JpZ2h0LAogICAgICAgIExlZnQgPSBEb2NrTGVmdCwKICAgICAgICBNaW5pbWl6ZWQg PSBEb2NrTWluaW1pemVkCgogICAgfTsKCiAgICB0eXBlZGVmIERvY2sgVG9vbEJhckRvY2s7CgoK ICAgIGVudW0gRGF0ZUZvcm1hdCB7CiAgICAgICAgVGV4dERhdGUsCiAgICAgICAgSVNPRGF0ZSwK ICAgICAgICBMb2NhbERhdGUKICAgIH07CgoKICAgIGVudW0gVGltZVNwZWMgewogICAgICAgIExv Y2FsVGltZSwKICAgICAgICBVVEMKICAgIH07CgoKICAgIGVudW0gQmFja2dyb3VuZE1vZGUgewog ICAgICAgIEZpeGVkQ29sb3IsCiAgICAgICAgRml4ZWRQaXhtYXAsCiAgICAgICAgTm9CYWNrZ3Jv dW5kLAogICAgICAgIFBhbGV0dGVGb3JlZ3JvdW5kLAogICAgICAgIFBhbGV0dGVCdXR0b24sCiAg ICAgICAgUGFsZXR0ZUxpZ2h0LAogICAgICAgIFBhbGV0dGVNaWRsaWdodCwKICAgICAgICBQYWxl dHRlRGFyaywKICAgICAgICBQYWxldHRlTWlkLAogICAgICAgIFBhbGV0dGVUZXh0LAogICAgICAg IFBhbGV0dGVCcmlnaHRUZXh0LAogICAgICAgIFBhbGV0dGVCYXNlLAogICAgICAgIFBhbGV0dGVC YWNrZ3JvdW5kLAogICAgICAgIFBhbGV0dGVTaGFkb3csCiAgICAgICAgUGFsZXR0ZUhpZ2hsaWdo dCwKICAgICAgICBQYWxldHRlSGlnaGxpZ2h0ZWRUZXh0LAogICAgICAgIFBhbGV0dGVCdXR0b25U ZXh0LAogICAgICAgIFBhbGV0dGVMaW5rLAogICAgICAgIFBhbGV0dGVMaW5rVmlzaXRlZCwKICAg ICAgICBYMTFQYXJlbnRSZWxhdGl2ZQogICAgfTsKCiAgICB0eXBlZGVmIHVpbnQgQ29tcGFyaXNv bkZsYWdzOwoKCiAgICBlbnVtIFN0cmluZ0NvbXBhcmlzb25Nb2RlIHsKICAgICAgICBDYXNlU2Vu c2l0aXZlID0gMHgwMDAwMSwKICAgICAgICBCZWdpbnNXaXRoID0gMHgwMDAwMiwKICAgICAgICBF bmRzV2l0aCA9IDB4MDAwMDQsCiAgICAgICAgQ29udGFpbnMgPSAweDAwMDA4LAogICAgICAgIEV4 YWN0TWF0Y2ggPSAweDAwMDEwCiAgICB9OwojIDg0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3FuYW1lc3BhY2UuaCIKICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07 CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgogICAgZW51bSBQYWludERldmljZUZsYWdzIHsK ICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAwLAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAg ICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQcmludGVyID0gMHgwMywKICAgICAgICBQaWN0 dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAweDA1LAogICAgICAgIERldmljZVR5cGVNYXNr ID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmljZSA9IDB4MTAsCgogICAgICAgIENvbXBhdGli aWxpdHlNb2RlID0gMHgyMAogICAgfTsKfTsKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3F3aW5kb3dkZWZzLmgiIDIKCgoKCmNsYXNzIFFQYWludERldmljZTsKY2xhc3MgUVBhaW50 RGV2aWNlTWV0cmljczsKY2xhc3MgUVdpZGdldDsKY2xhc3MgUVdpZGdldE1hcHBlcjsKY2xhc3Mg UURpYWxvZzsKY2xhc3MgUUNvbG9yOwpjbGFzcyBRQ29sb3JHcm91cDsKY2xhc3MgUVBhbGV0dGU7 CmNsYXNzIFFDdXJzb3I7CmNsYXNzIFFQb2ludDsKY2xhc3MgUVNpemU7CmNsYXNzIFFSZWN0Owpj bGFzcyBRUG9pbnRBcnJheTsKY2xhc3MgUVBhaW50ZXI7CmNsYXNzIFFSZWdpb247CmNsYXNzIFFG b250OwpjbGFzcyBRRm9udE1ldHJpY3M7CmNsYXNzIFFGb250SW5mbzsKY2xhc3MgUVBlbjsKY2xh c3MgUUJydXNoOwpjbGFzcyBRV01hdHJpeDsKY2xhc3MgUVBpeG1hcDsKY2xhc3MgUUJpdG1hcDsK Y2xhc3MgUU1vdmllOwpjbGFzcyBRSW1hZ2U7CmNsYXNzIFFJbWFnZUlPOwpjbGFzcyBRUGljdHVy ZTsKY2xhc3MgUVByaW50ZXI7CmNsYXNzIFFBY2NlbDsKY2xhc3MgUVRpbWVyOwpjbGFzcyBRVGlt ZTsKY2xhc3MgUUNsaXBib2FyZDsKCgoKCmNsYXNzIFFXaWRnZXRMaXN0OwpjbGFzcyBRV2lkZ2V0 TGlzdEl0OwojIDE0MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aW5kb3dkZWZzLmgi CnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5Owp0eXBlZGVmIHVuaW9uIF9YRXZlbnQg WEV2ZW50Owp0eXBlZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24g KlJlZ2lvbjsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFdJZDsKCiBEaXNwbGF5ICpxdF94ZGlzcGxh eSgpOwogaW50IHF0X3hzY3JlZW4oKTsKIFdJZCBxdF94cm9vdHdpbigpOwogV0lkIHF0X3hyb290 d2luKCBpbnQgc2NybiApOwogR0MgcXRfeGdldF9yZWFkb25seV9nYyggaW50IHNjcm4sIGJvb2wg bW9ub2Nocm9tZSApOwogR0MgcXRfeGdldF90ZW1wX2djKCBpbnQgc2NybiwgYm9vbCBtb25vY2hy b21lICk7CiMgMTY0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIK Y2xhc3MgUUFwcGxpY2F0aW9uOwoKCgoKCgoKdHlwZWRlZiBRX0lOVDMyIFFDT09SRDsKY29uc3Qg UUNPT1JEIFFDT09SRF9NQVggPSAyMTQ3NDgzNjQ3Owpjb25zdCBRQ09PUkQgUUNPT1JEX01JTiA9 IC1RQ09PUkRfTUFYIC0gMTsKCnR5cGVkZWYgdW5zaWduZWQgaW50IFFSZ2I7CgogY29uc3QgY2hh ciAqcUFwcE5hbWUoKTsKCgoKdHlwZWRlZiB2b2lkICgqUXRDbGVhblVwRnVuY3Rpb24pKCk7CiB2 b2lkIHFBZGRQb3N0Um91dGluZSggUXRDbGVhblVwRnVuY3Rpb24gKTsKIHZvaWQgcVJlbW92ZVBv c3RSb3V0aW5lKCBRdENsZWFuVXBGdW5jdGlvbiApOwoKCgp0eXBlZGVmIFF0Q2xlYW5VcEZ1bmN0 aW9uIFFfQ2xlYW5VcEZ1bmN0aW9uOwojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FvYmplY3QuaCIg MQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi91c3Iv bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZXZlbnQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcWV2ZW50LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fy ZWdpb24uaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXJlZ2lvbi5oIgoj IDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVjdC5oIiAxCiMgNDIgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVjdC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xc2l6ZS5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZS5o IgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcG9pbnQuaCIgMQojIDQ2ICIvdXNy L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBvaW50LmgiCmNsYXNzIFFQb2ludAp7CnB1YmxpYzoK ICAgIFFQb2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKTsKCiAgICBib29s IGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0Owog ICAgdm9pZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIGludCBt YW5oYXR0YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAgICBRQ09PUkQgJnJ5 KCk7CgogICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2lu dCAmb3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0o IGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7CiAgICBRUG9pbnQg Jm9wZXJhdG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGRvdWJsZSBjICk7 CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmLCBjb25z dCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQ b2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQg b3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBp bmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2lu dCAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQ b2ludCAmLCBpbnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKigg aW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3Bl cmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0 IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBp bmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVu ZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICYsIGludCApOwog ICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwg ZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0RpdkJ5WmVybygpOwoK CgoKCiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgogUURhdGFTdHJlYW0g Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQb2ludCAmICk7CiBRRGF0YVN0cmVh bSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50ICYgKTsKCgoKCgoKaW5saW5lIFFQ b2ludDo6UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9CgppbmxpbmUgUVBvaW50OjpRUG9pbnQoIGlu dCB4cG9zLCBpbnQgeXBvcyApCnsgeHA9KFFDT09SRCl4cG9zOyB5cD0oUUNPT1JEKXlwb3M7IH0K CmlubGluZSBib29sIFFQb2ludDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geHAgPT0gMCAmJiB5 cCA9PSAwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eCgpIGNvbnN0CnsgcmV0dXJuIHhwOyB9Cgpp bmxpbmUgaW50IFFQb2ludDo6eSgpIGNvbnN0CnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgdm9pZCBR UG9pbnQ6OnNldFgoIGludCB4ICkKeyB4cCA9IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVBv aW50OjpzZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNPT1JEKXk7IH0KCmlubGluZSBRQ09PUkQgJlFQ b2ludDo6cngoKQp7IHJldHVybiB4cDsgfQoKaW5saW5lIFFDT09SRCAmUVBvaW50OjpyeSgpCnsg cmV0dXJuIHlwOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKz0oIGNvbnN0IFFQ b2ludCAmcCApCnsgeHArPXAueHA7IHlwKz1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBR UG9pbnQgJlFQb2ludDo6b3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICkKeyB4cC09cC54cDsg eXAtPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRv cio9KCBpbnQgYyApCnsgeHAqPShRQ09PUkQpYzsgeXAqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlz OyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB4cD0o UUNPT1JEKSh4cCpjKTsgeXA9KFFDT09SRCkoeXAqYyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5l IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsg cmV0dXJuIHAxLnhwID09IHAyLnhwICYmIHAxLnlwID09IHAyLnlwOyB9CgppbmxpbmUgYm9vbCBv cGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g cDEueHAgIT0gcDIueHAgfHwgcDEueXAgIT0gcDIueXA7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg b3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g UVBvaW50KHAxLnhwK3AyLnhwLCBwMS55cCtwMi55cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg b3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4g UVBvaW50KHAxLnhwLXAyLnhwLCBwMS55cC1wMi55cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQg b3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGludCBjICkKeyByZXR1cm4gUVBvaW50KHAueHAq YywgcC55cCpjKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGludCBjLCBjb25z dCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMpOyB9CgppbmxpbmUg Y29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICZwLCBkb3VibGUgYyApCnsgcmV0 dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAoUUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5l IGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJl dHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0KCmlubGlu ZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9p bnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvci89KCBp bnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoK ICAgIHhwLz0oUUNPT1JEKWM7CiAgICB5cC89KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9 CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGRvdWJsZSBjICkKewoKICAgIGlm ICggYyA9PSAwLjAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4cD0oUUNPT1JE KSh4cC9jKTsKICAgIHlwPShRQ09PUkQpKHlwL2MpOwogICAgcmV0dXJuICp0aGlzOwp9Cgppbmxp bmUgY29uc3QgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsKCiAg ICBpZiAoIGMgPT0gMCApCiAgICAgICAgUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAg cmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBjb25zdCBRUG9pbnQgb3Bl cmF0b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9PSAwLjAg KQogICAgICAgIFFQb2ludDo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQo KFFDT09SRCkocC54cC9jKSwgKFFDT09SRCkocC55cC9jKSk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3FzaXplLmgiIDIKCgpjbGFzcyBRU2l6ZQoKewpwdWJsaWM6CgogICAg ZW51bSBTY2FsZU1vZGUgewogICAgICAgIFNjYWxlRnJlZSwKICAgICAgICBTY2FsZU1pbiwKICAg ICAgICBTY2FsZU1heAogICAgfTsKCiAgICBRU2l6ZSgpOwogICAgUVNpemUoIGludCB3LCBpbnQg aCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50 IGhlaWdodCgpIGNvbnN0OwogICAgdm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0 SGVpZ2h0KCBpbnQgaCApOwogICAgdm9pZCB0cmFuc3Bvc2UoKTsKCiAgICB2b2lkIHNjYWxlKCBp bnQgdywgaW50IGgsIFNjYWxlTW9kZSBtb2RlICk7CiAgICB2b2lkIHNjYWxlKCBjb25zdCBRU2l6 ZSAmcywgU2NhbGVNb2RlIG1vZGUgKTsKCiAgICBRU2l6ZSBleHBhbmRlZFRvKCBjb25zdCBRU2l6 ZSAmICkgY29uc3Q7CiAgICBRU2l6ZSBib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgKSBjb25zdDsK CiAgICBRQ09PUkQgJnJ3aWR0aCgpOwogICAgUUNPT1JEICZyaGVpZ2h0KCk7CgogICAgUVNpemUg Jm9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICYgKTsKICAgIFFTaXplICZvcGVyYXRvci09KCBjb25z dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAgIFFTaXplICZv cGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVNpemUgJm9wZXJhdG9yLz0oIGludCBjICk7CiAg ICBRU2l6ZSAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5saW5lIGJvb2wg b3BlcmF0b3I9PSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlu bGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAg IGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3IrKCBjb25zdCBRU2l6ZSAmLCBjb25z dCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLSggY29u c3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6 ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25z dCBRU2l6ZSBvcGVyYXRvciooIGludCwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGlu ZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGRvdWJsZSApOwogICAgZnJp ZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVNpemUgJiAp OwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICYs IGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFT aXplICYsIGRvdWJsZSApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lkIHdhcm5pbmdEaXZCeVpl cm8oKTsKCiAgICBRQ09PUkQgd2Q7CiAgICBRQ09PUkQgaHQ7Cn07CgoKCgoKCiBRRGF0YVN0cmVh bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogUURhdGFTdHJl YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTaXplICYgKTsKCgoKCgoKaW5saW5lIFFT aXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9CgppbmxpbmUgUVNpemU6OlFTaXplKCBpbnQg dywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUgYm9vbCBR U2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAgJiYgaHQ9PTA7IH0KCmlubGluZSBi b29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gd2Q8MSB8fCBodDwxOyB9Cgppbmxp bmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHdkPj0wICYmIGh0Pj0wOyB9 CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHdkOyB9CgppbmxpbmUg aW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBodDsgfQoKaW5saW5lIHZvaWQgUVNp emU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3OyB9CgppbmxpbmUgdm9pZCBRU2l6 ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUgUUNPT1JEICZR U2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBRQ09PUkQgJlFTaXplOjpyaGVp Z2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKz0oIGNv bnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7IHJldHVybiAqdGhpczsgfQoKaW5s aW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3QgUVNpemUgJnMgKQp7IHdkLT1zLndk OyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRv cio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlz OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBkb3VibGUgYyApCnsgd2Q9KFFD T09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBi b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1 cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7IH0KCmlubGluZSBib29sIG9wZXJh dG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gczEud2Qg IT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRv cisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYgczIgKQp7IHJldHVybiBRU2l6ZShz MS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3It KCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIFFTaXplKHMxLndk LXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNv bnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5odCpjKTsgfQoK aW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFTaXplICZzICkKeyBy ZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0 b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShz LndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9y KiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1cm4gUVNpemUoKFFDT09SRCkocy53 ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9y Lz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICB3YXJuaW5nRGl2QnlaZXJv KCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQpYzsKICAgIHJldHVybiAqdGhpczsK fQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7CgogICAgaWYg KCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHdkPShRQ09PUkQp KHdkL2MpOyBodD0oUUNPT1JEKShodC9jKTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNv bnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGludCBjICkKewoKICAgIGlmICgg YyA9PSAwICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBR U2l6ZShzLndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvci8oIGNv bnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICBR U2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndk L2MpLCAoUUNPT1JEKShzLmh0L2MpKTsKfQoKaW5saW5lIFFTaXplIFFTaXplOjpleHBhbmRlZFRv KCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggKChv dGhlclNpemUud2QpIDwgKHdkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndkKSksICgob3RoZXJTaXpl Lmh0KSA8IChodCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0KCmlubGluZSBRU2l6ZSBR U2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJl dHVybiBRU2l6ZSggKCh3ZCkgPCAob3RoZXJTaXplLndkKSA/ICh3ZCkgOiAob3RoZXJTaXplLndk KSksICgoaHQpIDwgKG90aGVyU2l6ZS5odCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkpICk7Cn0K IyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyZWN0LmgiIDIKCgoKCgoKCmNsYXNz IFFSZWN0CnsKcHVibGljOgogICAgUVJlY3QoKSB7IHgxID0geTEgPSAwOyB4MiA9IHkyID0gLTE7 IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFQb2ludCAmYm90dG9t cmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxlZnQsIGNvbnN0IFFTaXplICZz aXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo dCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgUVJlY3Qgbm9ybWFsaXplKCkgY29uc3Q7Cgog ICAgaW50IGxlZnQoKSBjb25zdDsKICAgIGludCB0b3AoKSBjb25zdDsKICAgIGludCByaWdodCgp IGNvbnN0OwogICAgaW50IGJvdHRvbSgpIGNvbnN0OwoKICAgIFFDT09SRCAmckxlZnQoKTsKICAg IFFDT09SRCAmclRvcCgpOwogICAgUUNPT1JEICZyUmlnaHQoKTsKICAgIFFDT09SRCAmckJvdHRv bSgpOwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0OwogICAgdm9pZCBzZXRM ZWZ0KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFRvcCggaW50IHBvcyApOwogICAgdm9pZCBzZXRS aWdodCggaW50IHBvcyApOwogICAgdm9pZCBzZXRCb3R0b20oIGludCBwb3MgKTsKICAgIHZvaWQg c2V0WCggaW50IHggKTsKICAgIHZvaWQgc2V0WSggaW50IHkgKTsKCiAgICB2b2lkIHNldFRvcExl ZnQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBzZXRCb3R0b21SaWdodCggY29uc3QgUVBv aW50ICZwICk7CiAgICB2b2lkIHNldFRvcFJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZv aWQgc2V0Qm90dG9tTGVmdCggY29uc3QgUVBvaW50ICZwICk7CgogICAgUVBvaW50IHRvcExlZnQo KSBjb25zdDsKICAgIFFQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwogICAgUVBvaW50IHRvcFJp Z2h0KCkgY29uc3Q7CiAgICBRUG9pbnQgYm90dG9tTGVmdCgpIGNvbnN0OwogICAgUVBvaW50IGNl bnRlcigpIGNvbnN0OwoKICAgIHZvaWQgcmVjdCggaW50ICp4LCBpbnQgKnksIGludCAqdywgaW50 ICpoICkgY29uc3Q7CiAgICB2b2lkIGNvb3JkcyggaW50ICp4MSwgaW50ICp5MSwgaW50ICp4Miwg aW50ICp5MiApIGNvbnN0OwoKICAgIHZvaWQgbW92ZUxlZnQoIGludCBwb3MgKTsKICAgIHZvaWQg bW92ZVRvcCggaW50IHBvcyApOwogICAgdm9pZCBtb3ZlUmlnaHQoIGludCBwb3MgKTsKICAgIHZv aWQgbW92ZUJvdHRvbSggaW50IHBvcyApOwogICAgdm9pZCBtb3ZlVG9wTGVmdCggY29uc3QgUVBv aW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0b21SaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAg ICB2b2lkIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVCb3R0 b21MZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUNlbnRlciggY29uc3QgUVBv aW50ICZwICk7CiAgICB2b2lkIG1vdmVCeSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICB2b2lkIHNl dFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNldENvb3Jkcygg aW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGFkZENvb3JkcyggaW50 IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7CgogICAgUVNpemUgc2l6ZSgpIGNvbnN0Owog ICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNl dFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRIZWlnaHQoIGludCBoICk7CiAgICB2b2lkIHNl dFNpemUoIGNvbnN0IFFTaXplICZzICk7CgogICAgUVJlY3Qgb3BlcmF0b3J8KGNvbnN0IFFSZWN0 ICZyKSBjb25zdDsKICAgIFFSZWN0IG9wZXJhdG9yJihjb25zdCBRUmVjdCAmcikgY29uc3Q7CiAg ICBRUmVjdCYgb3BlcmF0b3J8PShjb25zdCBRUmVjdCAmcik7CiAgICBRUmVjdCYgb3BlcmF0b3Im PShjb25zdCBRUmVjdCAmcik7CgogICAgYm9vbCBjb250YWlucyggY29uc3QgUVBvaW50ICZwLCBi b29sIHByb3Blcj1GQUxTRSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggaW50IHgsIGludCB5 ICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkg Y29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwgYm9vbCBwcm9wZXI9RkFM U0UgKSBjb25zdDsKICAgIFFSZWN0IHVuaXRlKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAg UVJlY3QgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwogICAgYm9vbCBpbnRlcnNl Y3RzKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwoKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0o IGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9y IT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZhdGU6CgoKCgoKCiAgICBR Q09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAgICBRQ09PUkQgeTI7Cgp9 OwoKIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwogYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CgoKCgoKCiBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlY3QgJiApOwogUURh dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWN0ICYgKTsKCgoKCgoKaW5s aW5lIFFSZWN0OjpRUmVjdCggaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdo dCApCnsKICAgIHgxID0gKFFDT09SRClsZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRvcDsKICAgIHgy ID0gKFFDT09SRCkobGVmdCt3aWR0aC0xKTsKICAgIHkyID0gKFFDT09SRCkodG9wK2hlaWdodC0x KTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHgyID09IHgx LTEgJiYgeTIgPT0geTEtMTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHkoKSBjb25zdAp7 IHJldHVybiB4MSA+IHgyIHx8IHkxID4geTI7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc1ZhbGlk KCkgY29uc3QKeyByZXR1cm4geDEgPD0geDIgJiYgeTEgPD0geTI7IH0KCmlubGluZSBpbnQgUVJl Y3Q6OmxlZnQoKSBjb25zdAp7IHJldHVybiB4MTsgfQoKaW5saW5lIGludCBRUmVjdDo6dG9wKCkg Y29uc3QKeyByZXR1cm4geTE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkgY29uc3QKeyBy ZXR1cm4geDI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmJvdHRvbSgpIGNvbnN0CnsgcmV0dXJuIHky OyB9CgppbmxpbmUgUUNPT1JEICZRUmVjdDo6ckxlZnQoKQp7IHJldHVybiB4MTsgfQoKaW5saW5l IFFDT09SRCAmIFFSZWN0OjpyVG9wKCkKeyByZXR1cm4geTE7IH0KCmlubGluZSBRQ09PUkQgJiBR UmVjdDo6clJpZ2h0KCkKeyByZXR1cm4geDI7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6ckJv dHRvbSgpCnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp4KCkgY29uc3QKeyByZXR1 cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OnkoKSBjb25zdAp7IHJldHVybiB5MTsgfQoKaW5s aW5lIHZvaWQgUVJlY3Q6OnNldExlZnQoIGludCBwb3MgKQp7IHgxID0gKFFDT09SRClwb3M7IH0K CmlubGluZSB2b2lkIFFSZWN0OjpzZXRUb3AoIGludCBwb3MgKQp7IHkxID0gKFFDT09SRClwb3M7 IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRSaWdodCggaW50IHBvcyApCnsgeDIgPSAoUUNPT1JE KXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldEJvdHRvbSggaW50IHBvcyApCnsgeTIgPSAo UUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFgoIGludCB4ICkKeyB4MSA9IChR Q09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldFkoIGludCB5ICkKeyB5MSA9IChRQ09P UkQpeTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6dG9wTGVmdCgpIGNvbnN0CnsgcmV0dXJuIFFQ b2ludCh4MSwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0 CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BSaWdo dCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0 Ojpib3R0b21MZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0KCmlubGluZSBR UG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCgoeDEreDIpLzIsICh5 MSt5MikvMik7IH0KCmlubGluZSBpbnQgUVJlY3Q6OndpZHRoKCkgY29uc3QKeyByZXR1cm4geDIg LSB4MSArIDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIHky IC0geTEgKyAxOyB9CgppbmxpbmUgUVNpemUgUVJlY3Q6OnNpemUoKSBjb25zdAp7IHJldHVybiBR U2l6ZSh4Mi14MSsxLCB5Mi15MSsxKTsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmNvbnRhaW5zKCBp bnQgeCwgaW50IHksIGJvb2wgcHJvcGVyICkgY29uc3QKewogICAgaWYgKCBwcm9wZXIgKQogICAg ICAgIHJldHVybiB4ID4geDEgJiYgeCA8IHgyICYmCiAgICAgICAgICAgICAgIHkgPiB5MSAmJiB5 IDwgeTI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4MiAmJgogICAg ICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0KCmlubGluZSBib29sIFFSZWN0Ojpjb250 YWlucyggaW50IHgsIGludCB5ICkgY29uc3QKewogICAgcmV0dXJuIHggPj0geDEgJiYgeCA8PSB4 MiAmJgogICAgICAgICAgIHkgPj0geTEgJiYgeSA8PSB5MjsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcXJlZ2lvbi5oIiAyCgoKCnN0cnVjdCBRUmVnaW9uUHJpdmF0ZTsKCgpj bGFzcyBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsgUmVjdGFuZ2xlLCBF bGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFS ZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFQb2lu dEFycmF5ICYsIGJvb2wgd2luZGluZz1GQUxTRSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJlZ2lv biAmICk7CiAgICBRUmVnaW9uKCBjb25zdCBRQml0bWFwICYgKTsKICAgflFSZWdpb24oKTsKICAg IFFSZWdpb24gJm9wZXJhdG9yPSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9vbCBpc051bGwo KSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoKICAgIGJvb2wgY29udGFpbnMoIGNv bnN0IFFQb2ludCAmcCApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3QgUVJlY3QgJnIg KSBjb25zdDsKCiAgICB2b2lkIHRyYW5zbGF0ZSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICBRUmVn aW9uIHVuaXRlKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gaW50ZXJzZWN0 KCBjb25zdCBRUmVnaW9uICYpIGNvbnN0OwogICAgUVJlZ2lvbiBzdWJ0cmFjdCggY29uc3QgUVJl Z2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGVvciggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7 CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICBRTWVtQXJyYXk8UVJlY3Q+IHJl Y3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBjb25zdCBRUmVjdCAqLCBpbnQgKTsKCiAg ICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBj b25zdCBRUmVnaW9uIG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25z dCBRUmVnaW9uIG9wZXJhdG9yJiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBR UmVnaW9uIG9wZXJhdG9yLSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBRUmVn aW9uIG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVy YXRvcnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0 IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7 CiAgICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24m IG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29u c3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWdpb24g JnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0o cikpOyB9CgoKCgogICAgUmVnaW9uIGhhbmRsZSgpIGNvbnN0IHsgaWYoIWRhdGEtPnJnbikgdXBk YXRlWDExUmVnaW9uKCk7IHJldHVybiBkYXRhLT5yZ247IH0KIyAxMDggIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xcmVnaW9uLmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9y PDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3Ry ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAg ICBRUmVnaW9uKCBib29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0 YWNoKCk7CgoKCgogICAgdm9pZCB1cGRhdGVYMTFSZWdpb24oKSBjb25zdDsKICAgIHZvaWQgKmNs aXBSZWN0YW5nbGVzKCBpbnQgJm51bSApIGNvbnN0OwogICAgZnJpZW5kIHZvaWQgKnF0X2dldENs aXBSZWN0cyggY29uc3QgUVJlZ2lvbiAmLCBpbnQgJiApOwoKICAgIHZvaWQgZXhlYyggY29uc3Qg UUJ5dGVBcnJheSAmLCBpbnQgdmVyID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDogcHVi bGljIFFTaGFyZWQgewoKCgogICAgICAgIFJlZ2lvbiByZ247CiAgICAgICAgdm9pZCAqeHJlY3Rh bmdsZXM7CiAgICAgICAgUVJlZ2lvblByaXZhdGUgKnJlZ2lvbjsKCgoKCgoKCiAgICAgICAgYm9v bCBpc19udWxsOwogICAgfSAqZGF0YTsKCgoKCgoKCn07CiMgMTY3ICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcXJlZ2lvbi5oIgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3Ry ZWFtICYsIGNvbnN0IFFSZWdpb24gJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh U3RyZWFtICYsIFFSZWdpb24gJiApOwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cWV2ZW50LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiIDEK IyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiCiMgMSAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FtYXAuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcW1hcC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgi IDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtYXAuaCIgMgoKIyAxICIvdXNy L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMQojIDQyICIvdXNyL2xvY2Fs L3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcWlvZGV2aWNlLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl L3Fpb2RldmljZS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgi IDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fpb2RldmljZS5oIiAyCiMgODgg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaW9kZXZpY2UuaCIKY2xhc3MgUUlPRGV2aWNl CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRX1VMT05HIE9mZnNldDsKCgogICAgUUlPRGV2aWNl KCk7CiAgICB2aXJ0dWFsIH5RSU9EZXZpY2UoKTsKCiAgICBpbnQgZmxhZ3MoKSBjb25zdCB7IHJl dHVybiBpb01vZGU7IH0KICAgIGludCBtb2RlKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlICYgMHgw MGZmOyB9CiAgICBpbnQgc3RhdGUoKSBjb25zdCB7IHJldHVybiBpb01vZGUgJiAweGYwMDA7IH0K CiAgICBib29sIGlzRGlyZWN0QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAx MDApID09IDB4MDEwMCk7IH0KICAgIGJvb2wgaXNTZXF1ZW50aWFsQWNjZXNzKCkgY29uc3QgeyBy ZXR1cm4gKChpb01vZGUgJiAweDAyMDApID09IDB4MDIwMCk7IH0KICAgIGJvb2wgaXNDb21iaW5l ZEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMzAwKSA9PSAweDAzMDApOyB9 CiAgICBib29sIGlzQnVmZmVyZWQoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkg IT0gMHgwMDQwKTsgfQogICAgYm9vbCBpc1JhdygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYg MHgwMDQwKSA9PSAweDAwNDApOyB9CiAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdCB7IHJl dHVybiAoKGlvTW9kZSAmIDB4MDA4MCkgIT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc0FzeW5jaHJv bm91cygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDgwKSA9PSAweDAwODApOyB9CiAg ICBib29sIGlzVHJhbnNsYXRlZCgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDEwKSA9 PSAweDAwMTApOyB9CiAgICBib29sIGlzUmVhZGFibGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9k ZSAmIDB4MDAwMSkgPT0gMHgwMDAxKTsgfQogICAgYm9vbCBpc1dyaXRhYmxlKCkgY29uc3QgeyBy ZXR1cm4gKChpb01vZGUgJiAweDAwMDIpID09IDB4MDAwMik7IH0KICAgIGJvb2wgaXNSZWFkV3Jp dGUoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAwMykgPT0gMHgwMDAzKTsgfQogICAg Ym9vbCBpc0luYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAwOyB9CiAgICBib29s IGlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gMHgxMDAwOyB9CgogICAgaW50IHN0 YXR1cygpIGNvbnN0IHsgcmV0dXJuIGlvU3Q7IH0KICAgIHZvaWQgcmVzZXRTdGF0dXMoKSB7IGlv U3QgPSAwOyB9CgogICAgdmlydHVhbCBib29sIG9wZW4oIGludCBtb2RlICkgPSAwOwogICAgdmly dHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOwoKICAg IHZpcnR1YWwgT2Zmc2V0IHNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIE9mZnNldCBhdCgp IGNvbnN0OwogICAgdmlydHVhbCBib29sIGF0KCBPZmZzZXQgKTsKICAgIHZpcnR1YWwgYm9vbCBh dEVuZCgpIGNvbnN0OwogICAgYm9vbCByZXNldCgpIHsgcmV0dXJuIGF0KDApOyB9CgogICAgdmly dHVhbCBRX0xPTkcgcmVhZEJsb2NrKCBjaGFyICpkYXRhLCBRX1VMT05HIG1heGxlbiApID0gMDsK ICAgIHZpcnR1YWwgUV9MT05HIHdyaXRlQmxvY2soIGNvbnN0IGNoYXIgKmRhdGEsIFFfVUxPTkcg bGVuICkgPSAwOwogICAgdmlydHVhbCBRX0xPTkcgcmVhZExpbmUoIGNoYXIgKmRhdGEsIFFfVUxP TkcgbWF4bGVuICk7CiAgICBRX0xPTkcgd3JpdGVCbG9jayggY29uc3QgUUJ5dGVBcnJheSYgZGF0 YSApOwogICAgdmlydHVhbCBRQnl0ZUFycmF5IHJlYWRBbGwoKTsKCiAgICB2aXJ0dWFsIGludCBn ZXRjaCgpID0gMDsKICAgIHZpcnR1YWwgaW50IHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFs IGludCB1bmdldGNoKCBpbnQgKSA9IDA7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldEZsYWdzKCBp bnQgZiApIHsgaW9Nb2RlID0gZjsgfQogICAgdm9pZCBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQg c2V0TW9kZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXRlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3Rh dHVzKCBpbnQgKTsKICAgIE9mZnNldCBpb0luZGV4OwoKcHJpdmF0ZToKICAgIGludCBpb01vZGU7 CiAgICBpbnQgaW9TdDsKCnByaXZhdGU6CgogICAgUUlPRGV2aWNlKCBjb25zdCBRSU9EZXZpY2Ug JiApOwogICAgUUlPRGV2aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFJT0RldmljZSAmICk7Cgp9Owoj IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIgMgoKCgoKY2xh c3MgUURhdGFTdHJlYW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURhdGFTdHJl YW0oIFFJT0RldmljZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50IG1vZGUg KTsKICAgIHZpcnR1YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZpY2UoKSBj b25zdDsKICAgIHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1bnNldERl dmljZSgpOwoKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29uc3Q7Cgog ICAgZW51bSBCeXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAgaW50IGJ5 dGVPcmRlcigpIGNvbnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAgIGJvb2wg aXNQcmludGFibGVEYXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEoIGJvb2wg KTsKCiAgICBpbnQgdmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBpbnQgKTsK CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVh bSAmb3BlcmF0b3I+PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o IFFfSU5UMTYgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSAp OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFEYXRhU3Ry ZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y Pj4oIFFfTE9ORyAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUxPTkcgJmkg KTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAgIFFEYXRhU3Ry ZWFtICZvcGVyYXRvcj4+KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+ KCBjaGFyIComc3RyICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UOCBpICk7 CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBRRGF0YVN0cmVh bSAmb3BlcmF0b3I8PCggUV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg UV9VSU5UMTYgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMzIgaSApOwog ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFt ICZvcGVyYXRvcjw8KCBRX0xPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFf VUxPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFE YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh dG9yPDwoIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNo YXIgKiYsIHVpbnQgJmxlbiApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAq LCB1aW50IGxlbiApOwoKICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICos IHVpbnQgbGVuICk7CiAgICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAq LCB1aW50IGxlbiApOwoKcHJpdmF0ZToKICAgIFFJT0RldmljZSAqZGV2OwogICAgYm9vbCBvd25k ZXY7CiAgICBpbnQgYnl0ZW9yZGVyOwogICAgYm9vbCBwcmludGFibGU7CiAgICBib29sIG5vc3dh cDsKICAgIGludCB2ZXI7Cgpwcml2YXRlOgoKICAgIFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0 cmVhbSAmICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAm ICk7Cgp9OwoKCgoKCgppbmxpbmUgUUlPRGV2aWNlICpRRGF0YVN0cmVhbTo6ZGV2aWNlKCkgY29u c3QKeyByZXR1cm4gZGV2OyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6YXRFbmQoKSBjb25z dAp7IHJldHVybiBkZXYgPyBkZXYtPmF0RW5kKCkgOiBUUlVFOyB9CgppbmxpbmUgYm9vbCBRRGF0 YVN0cmVhbTo6ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoKaW5saW5lIGludCBRRGF0 YVN0cmVhbTo6Ynl0ZU9yZGVyKCkgY29uc3QKeyByZXR1cm4gYnl0ZW9yZGVyOyB9CgppbmxpbmUg Ym9vbCBRRGF0YVN0cmVhbTo6aXNQcmludGFibGVEYXRhKCkgY29uc3QKeyByZXR1cm4gcHJpbnRh YmxlOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0UHJpbnRhYmxlRGF0YSggYm9vbCBw ICkKeyBwcmludGFibGUgPSBwOyB9CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjp2ZXJzaW9uKCkg Y29uc3QKeyByZXR1cm4gdmVyOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0VmVyc2lv biggaW50IHYgKQp7IHZlciA9IHY7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06 Om9wZXJhdG9yPj4oIFFfVUlOVDggJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ4JilpOyB9 CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQxNiAm aSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDE2JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0g JlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApCnsgcmV0dXJuICp0aGlzID4+ IChRX0lOVDMyJilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRv cj4+KCBRX1VMT05HICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfTE9ORyYpaTsgfQoKaW5saW5l IFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UOCBpICkKeyByZXR1 cm4gKnRoaXMgPDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFt OjpvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMTYpaTsg fQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMzIg aSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAm UURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUxPTkcgaSApCnsgcmV0dXJuICp0aGlzIDw8IChR X0xPTkcpaTsgfQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1hcC5oIiAyCiMg MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWlyLmgiIDEKIyA0MCAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FwYWlyLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3FnbG9iYWwuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBhaXIu aCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgpzdHJ1Y3QgUVBhaXIKewogICAg dHlwZWRlZiBUMSBmaXJzdF90eXBlOwogICAgdHlwZWRlZiBUMiBzZWNvbmRfdHlwZTsKCiAgICBR UGFpcigpCiAgICAgICAgOiBmaXJzdCggVDEoKSApLCBzZWNvbmQoIFQyKCkgKQogICAge30KICAg IFFQYWlyKCBjb25zdCBUMSYgdDEsIGNvbnN0IFQyJiB0MiApCiAgICAgICAgOiBmaXJzdCggdDEg KSwgc2Vjb25kKCB0MiApCiAgICB7fQoKICAgIFQxIGZpcnN0OwogICAgVDIgc2Vjb25kOwp9OwoK dGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBh aXI8VDEsIFQyPiYgeCwgY29uc3QgUVBhaXI8VDEsIFQyPiYgeSApCnsKICAgIHJldHVybiB4LmZp cnN0ID09IHkuZmlyc3QgJiYgeC5zZWNvbmQgPT0geS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFz cyBUMSwgY2xhc3MgVDI+CiBib29sIG9wZXJhdG9yPCggY29uc3QgUVBhaXI8VDEsIFQyPiYgeCwg Y29uc3QgUVBhaXI8VDEsIFQyPiYgeSApCnsKICAgIHJldHVybiB4LmZpcnN0IDwgeS5maXJzdCB8 fAogICAgICAgICAgICggISggeS5maXJzdCA8IHguZmlyc3QgKSAmJiB4LnNlY29uZCA8IHkuc2Vj b25kICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiBRUGFpcjxUMSwgVDI+IHFN YWtlUGFpciggY29uc3QgVDEmIHgsIGNvbnN0IFQyJiB5ICkKewogICAgcmV0dXJuIFFQYWlyPFQx LCBUMj4oIHgsIHkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CmlubGluZSBR RGF0YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIFFQYWlyPFQxLCBUMj4mIHAg KQp7CiAgICBzID4+IHAuZmlyc3QgPj4gcC5zZWNvbmQ7CiAgICByZXR1cm4gczsKfQoKdGVtcGxh dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBR RGF0YVN0cmVhbSYgcywgY29uc3QgUVBhaXI8VDEsIFQyPiYgcCApCnsKICAgIHMgPDwgcC5maXJz dCA8PCBwLnNlY29uZDsKICAgIHJldHVybiBzOwp9CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVl bGlzdC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFsdWVsaXN0Lmgi CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0bC5oIiAxCiMgNDIgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIg MgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIiAxCiMgNDgg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGV4dHN0cmVhbS5oIgpjbGFzcyBRVGV4dENv ZGVjOwpjbGFzcyBRVGV4dERlY29kZXI7CgpjbGFzcyBRVGV4dFN0cmVhbVByaXZhdGU7CgpjbGFz cyBRVGV4dFN0cmVhbQp7CnB1YmxpYzoKICAgIGVudW0gRW5jb2RpbmcgeyBMb2NhbGUsIExhdGlu MSwgVW5pY29kZSwgVW5pY29kZU5ldHdvcmtPcmRlciwKICAgICAgICAgICAgICAgICAgICBVbmlj b2RlUmV2ZXJzZSwgUmF3VW5pY29kZSwgVW5pY29kZVVURjggfTsKCiAgICB2b2lkIHNldEVuY29k aW5nKCBFbmNvZGluZyApOwoKICAgIHZvaWQgc2V0Q29kZWMoIFFUZXh0Q29kZWMqICk7CiAgICBR VGV4dENvZGVjICpjb2RlYygpOwoKCiAgICBRVGV4dFN0cmVhbSgpOwogICAgUVRleHRTdHJlYW0o IFFJT0RldmljZSAqICk7CiAgICBRVGV4dFN0cmVhbSggUVN0cmluZyosIGludCBtb2RlICk7CiAg ICBRVGV4dFN0cmVhbSggUVN0cmluZyYsIGludCBtb2RlICk7CiAgICBRVGV4dFN0cmVhbSggUUJ5 dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBGSUxFICosIGludCBtb2RlICk7 CiAgICB2aXJ0dWFsIH5RVGV4dFN0cmVhbSgpOwoKICAgIFFJT0RldmljZSAqZGV2aWNlKCkgY29u c3Q7CiAgICB2b2lkIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQgdW5zZXREZXZp Y2UoKTsKCiAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIGVvZigpIGNvbnN0OwoKICAg IFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3Bl cmF0b3I+PiggY2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIHNo b3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBzaG9ydCAmICk7 CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIGludCAmICk7CiAgICBRVGV4dFN0 cmVhbSAmb3BlcmF0b3I+PiggdW5zaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVy YXRvcj4+KCBzaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggdW5z aWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJiApOwog ICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmICk7CiAgICBRVGV4dFN0cmVhbSAm b3BlcmF0b3I+PiggY2hhciAqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVN0cmlu ZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUUNTdHJpbmcgJiApOwoKICAgIFFU ZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRQ2hhciApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9y PDwoIGNoYXIgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQgc2hvcnQgKTsK ICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBzaG9ydCApOwogICAgUVRleHRT dHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRv cjw8KCB1bnNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQg bG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGxvbmcgKTsKICAg IFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCApOwogICAgUVRleHRTdHJlYW0gJm9wZXJh dG9yPDwoIGRvdWJsZSApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0IGNoYXIq ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUVN0cmluZyAmICk7CiAgICBR VGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUUNTdHJpbmcgJiApOwogICAgUVRleHRTdHJl YW0gJm9wZXJhdG9yPDwoIHZvaWQgKiApOwoKICAgIFFUZXh0U3RyZWFtICZyZWFkUmF3Qnl0ZXMo IGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZVJhd0J5dGVzKCBjb25z dCBjaGFyKiAsIHVpbnQgbGVuICk7CgogICAgUVN0cmluZyByZWFkTGluZSgpOwogICAgUVN0cmlu ZyByZWFkKCk7CiAgICB2b2lkIHNraXBXaGl0ZVNwYWNlKCk7CgogICAgZW51bSB7CiAgICAgICAg c2tpcHdzID0gMHgwMDAxLAogICAgICAgIGxlZnQgPSAweDAwMDIsCiAgICAgICAgcmlnaHQgPSAw eDAwMDQsCiAgICAgICAgaW50ZXJuYWwgPSAweDAwMDgsCiAgICAgICAgYmluID0gMHgwMDEwLAog ICAgICAgIG9jdCA9IDB4MDAyMCwKICAgICAgICBkZWMgPSAweDAwNDAsCiAgICAgICAgaGV4ID0g MHgwMDgwLAogICAgICAgIHNob3diYXNlID0gMHgwMTAwLAogICAgICAgIHNob3dwb2ludCA9IDB4 MDIwMCwKICAgICAgICB1cHBlcmNhc2UgPSAweDA0MDAsCiAgICAgICAgc2hvd3BvcyA9IDB4MDgw MCwKICAgICAgICBzY2llbnRpZmljPSAweDEwMDAsCiAgICAgICAgZml4ZWQgPSAweDIwMDAKICAg IH07CgogICAgc3RhdGljIGNvbnN0IGludCBiYXNlZmllbGQ7CiAgICBzdGF0aWMgY29uc3QgaW50 IGFkanVzdGZpZWxkOwogICAgc3RhdGljIGNvbnN0IGludCBmbG9hdGZpZWxkOwoKICAgIGludCBm bGFncygpIGNvbnN0OwogICAgaW50IGZsYWdzKCBpbnQgZiApOwogICAgaW50IHNldGYoIGludCBi aXRzICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMsIGludCBtYXNrICk7CiAgICBpbnQgdW5zZXRm KCBpbnQgYml0cyApOwoKICAgIHZvaWQgcmVzZXQoKTsKCiAgICBpbnQgd2lkdGgoKSBjb25zdDsK ICAgIGludCB3aWR0aCggaW50ICk7CiAgICBpbnQgZmlsbCgpIGNvbnN0OwogICAgaW50IGZpbGwo IGludCApOwogICAgaW50IHByZWNpc2lvbigpIGNvbnN0OwogICAgaW50IHByZWNpc2lvbiggaW50 ICk7Cgpwcml2YXRlOgogICAgbG9uZyBpbnB1dF9pbnQoKTsKICAgIHZvaWQgaW5pdCgpOwogICAg UVRleHRTdHJlYW0gJm91dHB1dF9pbnQoIGludCwgdWxvbmcsIGJvb2wgKTsKICAgIFFJT0Rldmlj ZSAqZGV2OwoKICAgIGludCBmZmxhZ3M7CiAgICBpbnQgZndpZHRoOwogICAgaW50IGZpbGxjaGFy OwogICAgaW50IGZwcmVjOwogICAgYm9vbCBkb1VuaWNvZGVIZWFkZXI7CiAgICBib29sIG93bmRl djsKICAgIFFUZXh0Q29kZWMgKm1hcHBlcjsKICAgIFFUZXh0U3RyZWFtUHJpdmF0ZSAqIGQ7CiAg ICBRQ2hhciB1bnVzZWQxOwogICAgYm9vbCBsYXRpbjE7CiAgICBib29sIGludGVybmFsT3JkZXI7 CiAgICBib29sIG5ldHdvcmtPcmRlcjsKICAgIHZvaWQgKnVudXNlZDI7CgogICAgUUNoYXIgZWF0 X3dzKCk7CiAgICB1aW50IHRzX2dldGxpbmUoIFFDaGFyKiApOwogICAgdm9pZCB0c191bmdldGMo IFFDaGFyICk7CiAgICBRQ2hhciB0c19nZXRjKCk7CiAgICB1aW50IHRzX2dldGJ1ZiggUUNoYXIq LCB1aW50ICk7CiAgICB2b2lkIHRzX3B1dGMoaW50KTsKICAgIHZvaWQgdHNfcHV0YyhRQ2hhcik7 CiAgICBib29sIHRzX2lzc3BhY2UoUUNoYXIpOwogICAgYm9vbCB0c19pc2RpZ2l0KFFDaGFyKTsK ICAgIHVsb25nIGlucHV0X2JpbigpOwogICAgdWxvbmcgaW5wdXRfb2N0KCk7CiAgICB1bG9uZyBp bnB1dF9kZWMoKTsKICAgIHVsb25nIGlucHV0X2hleCgpOwogICAgZG91YmxlIGlucHV0X2RvdWJs ZSgpOwogICAgUVRleHRTdHJlYW0gJndyaXRlQmxvY2soIGNvbnN0IGNoYXIqIHAsIHVpbnQgbGVu ICk7CiAgICBRVGV4dFN0cmVhbSAmd3JpdGVCbG9jayggY29uc3QgUUNoYXIqIHAsIHVpbnQgbGVu ICk7Cgpwcml2YXRlOgoKICAgIFFUZXh0U3RyZWFtKCBjb25zdCBRVGV4dFN0cmVhbSAmICk7CiAg ICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRVGV4dFN0cmVhbSAmICk7Cgp9OwoKdHlw ZWRlZiBRVGV4dFN0cmVhbSBRVFM7CgpjbGFzcyBRVGV4dElTdHJlYW0gOiBwdWJsaWMgUVRleHRT dHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dElTdHJlYW0oIGNvbnN0IFFTdHJpbmcqIHMgKSA6CiAg ICAgICAgUVRleHRTdHJlYW0oKFFTdHJpbmcqKXMsMHgwMDAxKSB7IH0KICAgIFFUZXh0SVN0cmVh bSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0cmVhbShiYSwweDAwMDEpIHsgfQog ICAgUVRleHRJU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGYsMHgwMDAx KSB7IH0KCnByaXZhdGU6CgogICAgUVRleHRJU3RyZWFtKCBjb25zdCBRVGV4dElTdHJlYW0gJiAp OwogICAgUVRleHRJU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0IFFUZXh0SVN0cmVhbSAmICk7Cgp9 OwoKY2xhc3MgUVRleHRPU3RyZWFtIDogcHVibGljIFFUZXh0U3RyZWFtIHsKcHVibGljOgogICAg UVRleHRPU3RyZWFtKCBRU3RyaW5nKiBzICkgOgogICAgICAgIFFUZXh0U3RyZWFtKHMsMHgwMDAy KSB7IH0KICAgIFFUZXh0T1N0cmVhbSggUUJ5dGVBcnJheSBiYSApIDoKICAgICAgICBRVGV4dFN0 cmVhbShiYSwweDAwMDIpIHsgfQogICAgUVRleHRPU3RyZWFtKCBGSUxFICpmICkgOgogICAgICAg IFFUZXh0U3RyZWFtKGYsMHgwMDAyKSB7IH0KCnByaXZhdGU6CgogICAgUVRleHRPU3RyZWFtKCBj b25zdCBRVGV4dE9TdHJlYW0gJiApOwogICAgUVRleHRPU3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0 IFFUZXh0T1N0cmVhbSAmICk7Cgp9OwoKCgoKCmlubGluZSBRSU9EZXZpY2UgKlFUZXh0U3RyZWFt OjpkZXZpY2UoKSBjb25zdAp7IHJldHVybiBkZXY7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFt OjphdEVuZCgpIGNvbnN0CnsgcmV0dXJuIGRldiA/IGRldi0+YXRFbmQoKSA6IEZBTFNFOyB9Cgpp bmxpbmUgYm9vbCBRVGV4dFN0cmVhbTo6ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoK aW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmxhZ3MoKSBjb25zdAp7IHJldHVybiBmZmxhZ3M7IH0K CmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZsYWdzKCBpbnQgZiApCnsgaW50IG9sZGYgPSBmZmxh Z3M7IGZmbGFncyA9IGY7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpz ZXRmKCBpbnQgYml0cyApCnsgaW50IG9sZGYgPSBmZmxhZ3M7IGZmbGFncyB8PSBiaXRzOyByZXR1 cm4gb2xkZjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6c2V0ZiggaW50IGJpdHMsIGludCBt YXNrICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzID0gKGZmbGFncyAmIH5tYXNrKSB8IChi aXRzICYgbWFzayk7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjp1bnNl dGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzICY9IH5iaXRzOyByZXR1 cm4gb2xkZjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6d2lkdGgoKSBjb25zdAp7IHJldHVy biBmd2lkdGg7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OndpZHRoKCBpbnQgdyApCnsgaW50 IG9sZHcgPSBmd2lkdGg7IGZ3aWR0aCA9IHc7IHJldHVybiBvbGR3OyB9CgppbmxpbmUgaW50IFFU ZXh0U3RyZWFtOjpmaWxsKCkgY29uc3QKeyByZXR1cm4gZmlsbGNoYXI7IH0KCmlubGluZSBpbnQg UVRleHRTdHJlYW06OmZpbGwoIGludCBmICkKeyBpbnQgb2xkYyA9IGZpbGxjaGFyOyBmaWxsY2hh ciA9IGY7IHJldHVybiBvbGRjOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24o KSBjb25zdAp7IHJldHVybiBmcHJlYzsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6cHJlY2lz aW9uKCBpbnQgcCApCnsgaW50IG9sZHAgPSBmcHJlYzsgZnByZWMgPSBwOyByZXR1cm4gb2xkcDsg fQoKCgoKaW5saW5lIFFDaGFyIFFUZXh0U3RyZWFtOjp0c19nZXRjKCkKeyBRQ2hhciByOyByZXR1 cm4gKCB0c19nZXRidWYoICZyLDEgKSA9PSAxID8gciA6IFFDaGFyKCh1c2hvcnQpMHhmZmZmKSAp OyB9CgoKCgoKdHlwZWRlZiBRVGV4dFN0cmVhbSAmICgqUVRTRlVOQykoUVRleHRTdHJlYW0gJik7 CnR5cGVkZWYgaW50IChRVGV4dFN0cmVhbTo6KlFUU01GSSkoaW50KTsKCmNsYXNzIFFUU01hbmlw IHsKcHVibGljOgogICAgUVRTTWFuaXAoIFFUU01GSSBtLCBpbnQgYSApIHsgbWY9bTsgYXJnPWE7 IH0KICAgIHZvaWQgZXhlYyggUVRleHRTdHJlYW0gJnMgKSB7IChzLiptZikoYXJnKTsgfQpwcml2 YXRlOgogICAgUVRTTUZJIG1mOwogICAgaW50IGFyZzsKfTsKCiBpbmxpbmUgUVRleHRTdHJlYW0g Jm9wZXJhdG9yPj4oIFFUZXh0U3RyZWFtICZzLCBRVFNGVU5DIGYgKQp7IHJldHVybiAoKmYpKCBz ICk7IH0KCiBpbmxpbmUgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIFFUZXh0U3RyZWFtICZzLCBR VFNGVU5DIGYgKQp7IHJldHVybiAoKmYpKCBzICk7IH0KCiBpbmxpbmUgUVRleHRTdHJlYW0gJm9w ZXJhdG9yPDwoIFFUZXh0U3RyZWFtICZzLCBRVFNNYW5pcCBtICkKeyBtLmV4ZWMocyk7IHJldHVy biBzOyB9CgogUVRleHRTdHJlYW0gJmJpbiggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFt ICZvY3QoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmZGVjKCBRVGV4dFN0cmVhbSAm cyApOwogUVRleHRTdHJlYW0gJmhleCggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3RyZWFtICZl bmRsKCBRVGV4dFN0cmVhbSAmcyApOwogUVRleHRTdHJlYW0gJmZsdXNoKCBRVGV4dFN0cmVhbSAm cyApOwogUVRleHRTdHJlYW0gJndzKCBRVGV4dFN0cmVhbSAmcyApOwogUVRleHRTdHJlYW0gJnJl c2V0KCBRVGV4dFN0cmVhbSAmcyApOwoKIGlubGluZSBRVFNNYW5pcCBxU2V0VyggaW50IHcgKQp7 CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6d2lkdGg7CiAgICByZXR1cm4gUVRTTWFu aXAoZnVuYyx3KTsKfQoKIGlubGluZSBRVFNNYW5pcCBxU2V0RmlsbCggaW50IGYgKQp7CiAgICBR VFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6ZmlsbDsKICAgIHJldHVybiBRVFNNYW5pcChmdW5j LGYpOwp9CgogaW5saW5lIFFUU01hbmlwIHFTZXRQcmVjaXNpb24oIGludCBwICkKewogICAgUVRT TUZJIGZ1bmMgPSAmUVRleHRTdHJlYW06OnByZWNpc2lvbjsKICAgIHJldHVybiBRVFNNYW5pcChm dW5jLHApOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGwuaCIgMgoKCgoK dGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFUZXh0T1N0cmVhbUl0ZXJhdG9yCnsKcHJvdGVjdGVk OgogICAgUVRleHRPU3RyZWFtJiBzdHJlYW07CiAgICBRU3RyaW5nIHNlcGFyYXRvcjsKCnB1Ymxp YzoKICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMpIDogc3RyZWFtKCBz ICkge30KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMsIGNvbnN0IFFT dHJpbmcmIHNlcCApCiAgICAgICAgOiBzdHJlYW0oIHMgKSwgc2VwYXJhdG9yKCBzZXAgKSB7fQog ICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFQmIHggKSB7CiAg ICAgICAgc3RyZWFtIDw8IHg7CiAgICAgICAgaWYgKCAhc2VwYXJhdG9yLmlzRW1wdHkoKSApCiAg ICAgICAgICAgIHN0cmVhbSA8PCBzZXBhcmF0b3I7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg fQogICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz OyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0 aGlzOyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0 dXJuICp0aGlzOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91 dHB1dEl0ZXJhdG9yPgppbmxpbmUgT3V0cHV0SXRlcmF0b3IgcUNvcHkoIElucHV0SXRlcmF0b3Ig X2JlZ2luLCBJbnB1dEl0ZXJhdG9yIF9lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0SXRlcmF0b3IgX2Rlc3QgKQp7CiAgICB3aGlsZSggX2JlZ2luICE9IF9lbmQgKQogICAg ICAgICpfZGVzdCsrID0gKl9iZWdpbisrOwogICAgcmV0dXJuIF9kZXN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgQmlJdGVyYXRvciwgY2xhc3MgQmlPdXRwdXRJdGVyYXRvcj4KaW5saW5lIEJpT3V0cHV0 SXRlcmF0b3IgcUNvcHlCYWNrd2FyZCggQmlJdGVyYXRvciBfYmVnaW4sIEJpSXRlcmF0b3IgX2Vu ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlPdXRwdXRJdGVyYXRv ciBfZGVzdCApCnsKICAgIHdoaWxlICggX2JlZ2luICE9IF9lbmQgKQogICAgICAgICotLV9kZXN0 ID0gKi0tX2VuZDsKICAgIHJldHVybiBfZGVzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRl cmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMj4KaW5saW5lIGJvb2wgcUVxdWFsKCBJbnB1dEl0 ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLCBJbnB1dEl0ZXJhdG9yMiBmaXJz dDIgKQp7CgogICAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxLCArK2ZpcnN0MiAp CiAgICAgICAgaWYgKCAqZmlyc3QxICE9ICpmaXJzdDIgKQogICAgICAgICAgICByZXR1cm4gRkFM U0U7CiAgICByZXR1cm4gVFJVRTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJdGVyYXRvciwg Y2xhc3MgVD4KaW5saW5lIHZvaWQgcUZpbGwoIEZvcndhcmRJdGVyYXRvciBmaXJzdCwgRm9yd2Fy ZEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbCApCnsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFz dDsgKytmaXJzdCApCiAgICAgICAgKmZpcnN0ID0gdmFsOwp9CiMgMTIxICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcXRsLmgiCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFz cyBUPgppbmxpbmUgSW5wdXRJdGVyYXRvciBxRmluZCggSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5w dXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgdmFs ICkKewogICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICYmICpmaXJzdCAhPSB2YWwgKQogICAgICAg ICsrZmlyc3Q7CiAgICByZXR1cm4gZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJh dG9yLCBjbGFzcyBULCBjbGFzcyBTaXplPgppbmxpbmUgdm9pZCBxQ291bnQoIElucHV0SXRlcmF0 b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwgY29uc3QgVCYgdmFsdWUsCiAgICAgICAgICAg ICAgICAgICAgU2l6ZSYgbiApCnsKICAgIGZvciAoIDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCAp CiAgICAgICAgaWYgKCAqZmlyc3QgPT0gdmFsdWUgKQogICAgICAgICAgICArK247Cn0KCnRlbXBs YXRlIDxjbGFzcyBUPgppbmxpbmUgdm9pZCBxU3dhcCggVCYgX3ZhbHVlMSwgVCYgX3ZhbHVlMiAp CnsKICAgIFQgdG1wID0gX3ZhbHVlMTsKICAgIF92YWx1ZTEgPSBfdmFsdWUyOwogICAgX3ZhbHVl MiA9IHRtcDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogdm9pZCBxQnViYmxl U29ydCggSW5wdXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9yIGUgKQp7CgogICAgSW5wdXRJdGVy YXRvciBsYXN0ID0gZTsKICAgIC0tbGFzdDsKCiAgICBpZiAoIGxhc3QgPT0gYiApCiAgICAgICAg cmV0dXJuOwoKCiAgICB3aGlsZSggYiAhPSBsYXN0ICkgewogICAgICAgIGJvb2wgc3dhcHBlZCA9 IEZBTFNFOwogICAgICAgIElucHV0SXRlcmF0b3Igc3dhcF9wb3MgPSBiOwogICAgICAgIElucHV0 SXRlcmF0b3IgeCA9IGU7CiAgICAgICAgSW5wdXRJdGVyYXRvciB5ID0geDsKICAgICAgICB5LS07 CiAgICAgICAgZG8gewogICAgICAgICAgICAtLXg7CiAgICAgICAgICAgIC0teTsKICAgICAgICAg ICAgaWYgKCAqeCA8ICp5ICkgewogICAgICAgICAgICAgICAgc3dhcHBlZCA9IFRSVUU7CiAgICAg ICAgICAgICAgICBxU3dhcCggKngsICp5ICk7CiAgICAgICAgICAgICAgICBzd2FwX3BvcyA9IHk7 CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKCB5ICE9IGIgKTsKICAgICAgICBpZiAoICFz d2FwcGVkICkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGIgPSBzd2FwX3BvczsKICAgICAg ICBiKys7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUgdm9pZCBx QnViYmxlU29ydCggQ29udGFpbmVyICZjICkKewogIHFCdWJibGVTb3J0KCBjLmJlZ2luKCksIGMu ZW5kKCkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4KIHZvaWQgcUhlYXBTb3J0UHVzaERv d24oIFZhbHVlKiBoZWFwLCBpbnQgZmlyc3QsIGludCBsYXN0ICkKewogICAgaW50IHIgPSBmaXJz dDsKICAgIHdoaWxlICggciA8PSBsYXN0IC8gMiApIHsKICAgICAgICBpZiAoIGxhc3QgPT0gMiAq IHIgKSB7CgogICAgICAgICAgICBpZiAoIGhlYXBbMiAqIHJdIDwgaGVhcFtyXSApCiAgICAgICAg ICAgICAgICBxU3dhcCggaGVhcFtyXSwgaGVhcFsyICogcl0gKTsKICAgICAgICAgICAgciA9IGxh c3Q7CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIGlmICggaGVhcFsyICogcl0gPCBoZWFw W3JdICYmICEoaGVhcFsyICogciArIDFdIDwgaGVhcFsyICogcl0pICkgewoKICAgICAgICAgICAg ICAgIHFTd2FwKCBoZWFwW3JdLCBoZWFwWzIgKiByXSApOwogICAgICAgICAgICAgICAgciAqPSAy OwogICAgICAgICAgICB9IGVsc2UgaWYgKCBoZWFwWzIgKiByICsgMV0gPCBoZWFwW3JdCiAgICAg ICAgICAgICAgICAgICAgICAgICYmIGhlYXBbMiAqIHIgKyAxXSA8IGhlYXBbMiAqIHJdICkgewoK ICAgICAgICAgICAgICAgIHFTd2FwKCBoZWFwW3JdLCBoZWFwWzIgKiByICsgMV0gKTsKICAgICAg ICAgICAgICAgIHIgPSAyICogciArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICByID0gbGFzdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCnRlbXBsYXRl IDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBWYWx1ZT4KIHZvaWQgcUhlYXBTb3J0SGVscGVy KCBJbnB1dEl0ZXJhdG9yIGIsIElucHV0SXRlcmF0b3IgZSwgVmFsdWUsIHVpbnQgbiApCnsKCiAg ICBJbnB1dEl0ZXJhdG9yIGluc2VydCA9IGI7CiAgICBWYWx1ZSogcmVhbGhlYXAgPSBuZXcgVmFs dWVbbl07CgogICAgVmFsdWUqIGhlYXAgPSByZWFsaGVhcCAtIDE7CiAgICBpbnQgc2l6ZSA9IDA7 CiAgICBmb3IoIDsgaW5zZXJ0ICE9IGU7ICsraW5zZXJ0ICkgewogICAgICAgIGhlYXBbKytzaXpl XSA9ICppbnNlcnQ7CiAgICAgICAgaW50IGkgPSBzaXplOwogICAgICAgIHdoaWxlKCBpID4gMSAm JiBoZWFwW2ldIDwgaGVhcFtpIC8gMl0gKSB7CiAgICAgICAgICAgIHFTd2FwKCBoZWFwW2ldLCBo ZWFwW2kgLyAyXSApOwogICAgICAgICAgICBpIC89IDI7CiAgICAgICAgfQogICAgfQoKCiAgICBm b3IoIHVpbnQgaSA9IG47IGkgPiAwOyBpLS0gKSB7CiAgICAgICAgKmIrKyA9IGhlYXBbMV07CiAg ICAgICAgaWYgKCBpID4gMSApIHsKICAgICAgICAgICAgaGVhcFsxXSA9IGhlYXBbaV07CiAgICAg ICAgICAgIHFIZWFwU29ydFB1c2hEb3duKCBoZWFwLCAxLCAoaW50KWkgLSAxICk7CiAgICAgICAg fQogICAgfQoKICAgIGRlbGV0ZVtdIHJlYWxoZWFwOwp9CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0 SXRlcmF0b3I+CiB2b2lkIHFIZWFwU29ydCggSW5wdXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9y IGUgKQp7CgogICAgaWYgKCBiID09IGUgKQogICAgICAgIHJldHVybjsKCgogICAgSW5wdXRJdGVy YXRvciBpdCA9IGI7CiAgICB1aW50IG4gPSAwOwogICAgd2hpbGUgKCBpdCAhPSBlICkgewogICAg ICAgICsrbjsKICAgICAgICArK2l0OwogICAgfQoKCgogICAgcUhlYXBTb3J0SGVscGVyKCBiLCBl LCAqYiwgbiApOwp9CgoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KIHZvaWQgcUhlYXBTb3J0 KCBDb250YWluZXIgJmMgKQp7CiAgICBpZiAoIGMuYmVnaW4oKSA9PSBjLmVuZCgpICkKICAgICAg ICByZXR1cm47CgoKCiAgICBxSGVhcFNvcnRIZWxwZXIoIGMuYmVnaW4oKSwgYy5lbmQoKSwgKihj LmJlZ2luKCkpLCAodWludCljLmNvdW50KCkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5l cj4KY2xhc3MgUUJhY2tJbnNlcnRJdGVyYXRvcgp7CnB1YmxpYzoKICAgIGV4cGxpY2l0IFFCYWNr SW5zZXJ0SXRlcmF0b3IoIENvbnRhaW5lciAmYyApCiAgICAgICAgOiBjb250YWluZXIoICZjICkK ICAgIHsKICAgIH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4mCiAgICBvcGVy YXRvcj0oIGNvbnN0IHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAmdmFsdWUgKQogICAg ewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKCB2YWx1ZSApOwogICAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9y KigpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFCYWNrSW5zZXJ0SXRl cmF0b3I8Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICAgIFFCYWNrSW5zZXJ0SXRlcmF0b3I8Q29udGFpbmVyPiYgb3BlcmF0b3IrKyhp bnQpCiAgICB7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKcHJvdGVjdGVkOgogICAgQ29u dGFpbmVyICpjb250YWluZXI7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUg UUJhY2tJbnNlcnRJdGVyYXRvcjxDb250YWluZXI+IHFCYWNrSW5zZXJ0ZXIoIENvbnRhaW5lciAm YyApCnsKICAgIHJldHVybiBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4oIGMgKTsKfQoj IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCgoKCgoKIyAx ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDEgMwojIDY1ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDMKCgoKCgojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMK IyAzNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvY2xvY2FsZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9j bG9jYWxlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5j bHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl L2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcg Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0KewogIF9fTENfQ1RZUEUgPSAwLAog IF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAzLAog IF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0gNiwK ICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDksCiAg X19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19JREVO VElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpleHRl cm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoK ICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFy ICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5j eV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5k c19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hh ciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGln aXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNo YXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBf c2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVz OwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsK CiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247 CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMK fTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hh ciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYg KHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVybiBf X2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9tYXNrLCBfX2NvbnN0IGNoYXIg Kl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jh c2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVf dCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9j YWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6 Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDM3 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwojIDI0 ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5o IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKdHlw ZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2Nh dGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQs IGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJp bmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0 aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5mby5o IiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZW51 bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlf MiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJE QVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUs CgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8z LAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1P Tl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoK CgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9O XzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoK ICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoK ICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFf RF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBf TkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9X QUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwK ICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9X REFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dE QVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05M X1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81 LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9X QUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8x MiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9O XzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05f OCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9O XzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9O TF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lF QVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9G TVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVf V0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dF RUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9O LAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoK ICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRF X05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9S VUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAog IF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09M TEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxf Q09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VY VFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hf U0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VY VFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywK ICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NU WVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9V UFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVf R0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVf R0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xB U1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05M X0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0g X05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZ UEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9P RkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMw X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwK ICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05M X0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQ RV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5E SUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElH SVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJf V0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAog IF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxf Q1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBF X0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRE SUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQz X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwK ICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05M X0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQ RV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VU RElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU NF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0Ms CiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9O TF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9O TF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkws CiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJM LAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9U UkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4s CiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAg X05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84 LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9O TF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19D VFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikg fCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQs CgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BP U0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRT LAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBf QllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoK CiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9D Uk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFD RSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoK CgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9N T05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lf U1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFS WV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9O TF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BS RUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZ X0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9T UEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFS WV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04s CiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9Q X1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9O RVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxf TU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBf TkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5U X1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RF U0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19M Q19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lO VCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgog IF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVN RVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9M Q19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkp LAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FH RVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0g KCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BB UEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAo KChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05B TUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAg X05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwK CiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDAp KSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NU LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAog IF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9O TF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FE RFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFO R19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9O TF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDAp KSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVD VCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAog IF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAo KChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RF U0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRM RSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJ Q0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJ RklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5U SUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNB VElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVO VElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAg X05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVW SVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NB VEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJ RklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg MwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKIyA1 ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZv X2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2lj b252LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5o IiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4g aWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIg Kl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29u dl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAg IHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29u dl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0 ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9t YWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hh ciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAq X19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIp KSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2Nh dGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIg Kl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f bXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFy ICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsK CgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9f Y29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2Fy Z19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2Rv bWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19f ICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9t YWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25z dCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9t YWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsK IyAxMTUgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKfQojIDQwICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAz CgoKCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwp9CiMg NDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAy IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMSAzCiMg NDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKCgojIDEgIi91 c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0 ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmVudW0KewogIF9JU3VwcGVy ID0gKCgwKSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBf SVNsb3dlciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4 KSksCiAgX0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgy KSkgPj4gOCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgo MSA8PCAoMykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8 IDgpIDogKCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwg KDUpKSA8PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8g KCgxIDw8ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcp IDwgOCA/ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5r ID0gKCg4KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBf SVNjbnRybCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4 KSksCiAgX0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwg KDEwKSkgPj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgp IDogKCgxIDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpl eHRlcm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29u c3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAq X19jdHlwZV90b3VwcGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50 IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQg KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhy b3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3Nw YWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4 dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChp bnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBf X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRl cm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDIyMyAiL3Vzci9pbmNsdWRlL2N0eXBl LmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93 ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp OwojIDI3NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07 CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7 CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7 CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7 CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVy Owp9CiMgNDkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3 ZC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZv aWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf YWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAog IF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxv d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0 IGNoYXIqIF9fcyk7Cn0KIyA1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2Jp dHMvbG9jYWxlZndkLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2Fs ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNh bHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hh clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25z dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2Fs ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0 b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNs YXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CgoKICBjbGFz cyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJhaXRzOwogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz IGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVf dD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVt X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K ICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIg PSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1l OwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9u ZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBv c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlw dW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAg IGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUK ICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBj bGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNs YXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0 IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJv b2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMg Y29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUg PSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNv bnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1v bmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFM IDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8 IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51 bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxv Y2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAgIGxv Y2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwg Y29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2Fs ZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy LCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxl JgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxv Y2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAg IGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAo KTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIp IGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikp OyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBz dGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0 IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsK CgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2ds b2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKCiAg ICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5l IHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAg ICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFs aXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBs b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07 CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNz IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0 KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp ZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZh dGU6CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0 czsKICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsKICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19T X251bV9jYXRlZ29yaWVzXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p ZF9jdHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVy aWNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107 CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3Rh dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMg Y29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25z dCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlu bGluZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19h ZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9y ZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9N X3JlZmVyZW5jZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQog ICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1w bChjb25zdCBjaGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7 CgogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9p ZAogICAgb3BlcmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2No ZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3Ig KHNpemVfdCBpID0gMDsgX19yZXQgJiYgaSA8IF9TX251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQog ICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0g MCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2Nh dGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFj ZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAg dm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQq KTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNl dCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAg ICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNl dCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19m KQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwog ICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBm b3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAg ICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6 ZmFjZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQg Y2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAg cHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCiAgICBleHBs aWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAog ICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2Nf bG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICBf X2NfbG9jYWxlIF9fb2xkID0gMCk7CgogICAgc3RhdGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25l X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rl c3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQK ICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9y ZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAog ICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAg ewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxv Y2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0 IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAg ICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRv cj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBpZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7 CgogICAgaW5saW5lIHNpemVfdAogICAgX01faWQoKSBjb25zdAogICAgewogICAgICBpZiAoIV9N X2luZGV4KQogICAgICAgIF9NX2luZGV4ID0gMSArIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX1NfaGln aHdhdGVyLCAxKTsKICAgICAgcmV0dXJuIF9NX2luZGV4IC0gMTsKICAgIH0KICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29u c3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wK ICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDkgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2Fs L2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCgoKCm5hbWVzcGFjZSBz dGQKewoKCgoKICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwg PDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFn cyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGlj X2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lv c19GbXRmbGFncwogIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBf X2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0 aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3Je KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0Zt dGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwg X0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGlu ZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10 ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19G bXRmbGFncwogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9f YikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MK ICBvcGVyYXRvcn4oX0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+ c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9z X29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3Bl cmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBf SW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19i KSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBf X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nh c3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19P cGVubW9kZQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2Ip CiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShf SW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f YSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVu bW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7 IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9f YSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu bGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0 dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lv c19Jb3N0YXRlIHsgX01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9J b3NfSW9zdGF0ZQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19i KQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lv c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo c3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0 ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0 YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y fD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0g X19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9z dGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg fQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwg X0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5l IF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9J b3NfSW9zdGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2Rp ciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQog IHsKICBwdWJsaWM6CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7 CiAgICBwdWJsaWM6CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcm IF9fc3RyKSB0aHJvdygpOwoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3co KTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7 CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hh ciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFn cyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg ZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAg c3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0 ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRm bGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3Mp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFn czo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19J b3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRl KF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0 ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0 YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRp YyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3Nf T3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1v ZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0g b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg YmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qg b3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNv bnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3Rh dGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5j KTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBz ZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBz ZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAy MjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMK ICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50 LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2Nh bGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9j YWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoK CiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7CiAg ICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwogICAgaW9zdGF0 ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsK CiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2Fs bGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgX0F0b21pY193b3JkIF9NX3Jl ZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9f Zm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19j YikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCks IF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkg eyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKCiAgICAgIGludAogICAgICBfTV9y ZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZjb3Vu dCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAg IHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9p ZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAg IHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICAgIF9Xb3Jk cygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQogICAgfTsKCgogICAgX1dvcmRzIF9N X3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkX3NpemUgPSA4 OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxfd29yZF9zaXplXTsKCgogICAgaW50 IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsKCiAgICBfV29yZHMmCiAgICBfTV9n cm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAg dm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsK ICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAg ICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wg X19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAg cHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMg Ym9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFncwog ICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRmbGFn cwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7 CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAg ICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9f Zm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAg IHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBmbXRm bGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAgICBf TV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K CiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFncyAm PSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0 IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVj aXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBf TV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9f b2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0 dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVhbXNp emUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAgICAg IF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3RhdGlj IGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBsb2Nh bGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUKICAg IGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGljIGlu dAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBf X2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQog ICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9f aXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKICAgIGlubGluZSB2b2lk KiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4 IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0g OiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAg fQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgoKICBw cml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAg IG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNlJgog IGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl Ojpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9z X2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh c2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo aW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z X2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv c19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu c2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu c2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm KGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo aW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf YmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNl dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNl dGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS51 bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5s aW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICBy ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVz dGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmln aHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQs IGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGlu ZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNl OjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um CiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i YXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNl OwogIH0KCn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMSAzCiMg NDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoKCgoK Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5 cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6 b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5 cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaW9z PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVh bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJl YW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtYnVm X2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mgb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVuZCBz dHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1 Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVjdGVk OgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6 ZTsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91 bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBl KiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUq IF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBl KiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAg IGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoK CgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAgICBj aGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01fcGJh Y2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJv b2wgX01fcGJhY2tfaW5pdDsKCgogICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoKCgoK ICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFf TV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0gX01f aW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1NfcGJh Y2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ss IF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2lu X2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAg ICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAg ICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAg ICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01f cGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIgPSBf TV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0gMDsK ICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAg ICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7 CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAg X19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+ c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAg ICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01f cGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0g X19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAg ICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAg ICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5f Y3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAg ICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAyMDIgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3Vy X21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2lu X2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYm IF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAo X01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9l bmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAg IF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBl CiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9 IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAo X01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsg X01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg IF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0 dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf c3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAg ICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAg X01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2lu aXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBs b2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygp KTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg ICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlm IChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAg ICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0 cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3Nf dHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBf X3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29m ZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9z X3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3Bv cyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRo aXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAg ewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9p bl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19p bml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0g X01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNp emVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAg X19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0 cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hv d21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQog ICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+ c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkp OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBl CiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlm IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0 cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAg ICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsK ICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgog ICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRf dHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90 eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19u KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9i dWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAg X01fYnVmX3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5f ZW5kKDApLAogICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDAp LAogICAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9j YWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2 ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAg ICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBf TV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJu IF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0 dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2lu X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywg Y2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9N X2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9N X2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAm JiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9k ZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2Uo KSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBw dHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAg IGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBw YnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNl dHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAg X01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9f cGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYm IF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAg ICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xv YykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYg KF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7 CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0 cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0 aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv c19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBl KC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwK ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz ZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2 aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0 cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7Cgog ICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRy YWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1Zmxvdygp CiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg ICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRl cmZsb3coKSwgX19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAm JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0 cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f aW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAg ICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAg ICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg ICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0g dHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0K CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJm bG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNf dHlwZTo6ZW9mKCk7IH0KIyA0ODUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9z dHJlYW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0 cmVhbWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0 b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9 CgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1i dWYudGNjIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYg KF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAg Y2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFj a2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wg X190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9v bCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0 cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0 ID0gcGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0g dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6 aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdl dGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBf TV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUo LTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1 cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwo KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7 CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0 X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0 ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19j KSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8 IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0g X01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAg ICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAg ICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAg ICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9f cmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhp cy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl KF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdo aWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4g PSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsK ICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5n KTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVu KTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19s ZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoK ICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlu dF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19z KSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFp dHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19f cmV0OwogICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMo YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAg ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0 cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+ aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1 dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7 CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIo KSwgX19idWZzaXplKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAg ICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9f eHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp ZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19zYmluLT5zZ2V0YygpLCBfVHJhaXRzOjplb2YoKSkp CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIF9fYnVmc2l6ZSA9 IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUo aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19z dHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2Nv cHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAog ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4m LCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPHdjaGFyX3Q+Kik7Cn0KIyA0OTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9zdHJlYW1idWYiIDIgMwojIDUxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9p dGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAg ICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5 cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1f dHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJlYW1idWZfdHlwZSog X01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01fYyh0cmFpdHNfdHlw ZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9f cykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBl Ojplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBf X3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigp KSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0KCiAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaWYgKF9NX3NidWYg JiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygpLCBfX2VvZikpCiAg ICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9jID0gX19lb2Y7 CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9y CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29s ZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYmIHRyYWl0c190eXBl OjplcV9pbnRfdHlwZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYg PSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4g X19vbGQ7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1 Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSB0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBib29sIF9fYmVvZiA9 IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBy ZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwog ICAgICB9CgoKICAgIHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9NX2dldCgpIGNvbnN0 CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlmIChfTV9zYnVmKQog ICAgICAgICAgewogICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9j LCBfX2VvZikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19yZXQgPSBfTV9zYnVm LT5zZ2V0YygpKSwgX19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAg ICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAg ICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBf X2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj b25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAg ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAg ICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBw dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p ZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg ICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAgIHB1 YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBl JiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZCgh X01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBf X3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsg fQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2Mp OwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9z dHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAg ICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+Ojpv cGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAg ICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVv ZigpKSkKICAgICAgICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 Cn0KIyA0MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL2xvY2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2N3Y3R5cGUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIv dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3Iv aW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdjdHlwZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvd2N0eXBl LmgiIDMKZW51bQp7CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19JU3dh bHBoYSA9IDIsCiAgX19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3c3Bh Y2UgPSA1LAogIF9fSVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3Ymxhbmsg PSA4LAogIF9fSVN3Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVtID0g MTEsCgogIF9JU3d1cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3dXBwZXIpKSA8PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo X19JU3d1cHBlcikpIDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3dXBwZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gMjQp KSkpLAogIF9JU3dsb3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3bG93ZXIpKSA8PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo X19JU3dsb3dlcikpIDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3bG93ZXIpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gMjQp KSkpLAogIF9JU3dhbHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YWxwaGEpKSA8PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo X19JU3dhbHBoYSkpIDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3YWxwaGEpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gMjQp KSkpLAogIF9JU3dkaWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAo X19JU3dkaWdpdCkpIDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwg KF9fSVN3ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gMjQp KSkpLAogIF9JU3d4ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAo X19JU3d4ZGlnaXQpKSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3eGRpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQp KSA+PiAyNCkpKSksCiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dzcGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2Up KSA+PiAyNCkpKSksCiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dwcmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQp KSA+PiAyNCkpKSksCiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dncmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgp KSA+PiAyNCkpKSksCiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dibGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Ymxhbmsp KSA+PiAyNCkpKSksCiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3djbnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwp KSA+PiAyNCkpKSksCiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dwdW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3Qp KSA+PiAyNCkpKSksCiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAoKDFV TCA8PCAoX19JU3dhbG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQpICgo MVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50KSAo KDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0p KSA+PiAyNCkpKSkKfTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVt ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90 IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAo d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9f d2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNyL2luY2x1ZGUv d2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlwZSAoX19jb25zdCBjaGFyICpfX3Byb3Bl cnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZSAod2ludF90IF9fd2MsIHdjdHlw ZV90IF9fZGVzYykgdGhyb3cgKCk7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlw ZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93 ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50 X3QgX193YykgdGhyb3cgKCk7CiMgMjc1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4 OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFu c190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJu IHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgX19pc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVf dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3 Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IF9faXN3ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9j YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f aXN3cHJpbnRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193Yywg X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzd3hkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19j b25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVz YywgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50 X3QgX190b3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cg KCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19j b25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgp OwoKCmV4dGVybiB3aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBf X2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkg dGhyb3cgKCk7CgoKCn0KIyA1MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2N3 Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY3djdHlw ZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVf dDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAgdXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlz d2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6 Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3JhcGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2lu ZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1 c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7 CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2luZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBw ZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAgdXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0 eXBlOwp9CiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lv cyIgMSAzCiMgNDggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0 eXBlX2Jhc2UuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNl CiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVu c2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVy OwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25z dCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9J U2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3Rh dGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHBy aW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwog ICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBt YXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2Fs bnVtOwogIH07CiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0 eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90 eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19o aSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9f aGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAg ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5 cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg IHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91 cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90 eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xv d2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIo X19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hh ciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAg IGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f aGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4o X19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBf X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf X2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29u c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg Y2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f bmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAw KTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlw ZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFz ayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFy X3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rv bG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh cikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5 cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciog X19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg aWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVh bCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193 aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRv X3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19k ZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBl LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog ICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0Owog ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxf Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGlj IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9N X2NfbG9jYWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3Rv dXBwZXI7CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90 YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0 aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9 IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGlj aXQKICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAw LCBib29sIF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg ICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAg ICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hh ciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg ICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7 IHJldHVybiBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNz aWNfdGFibGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAg IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBj b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNv bnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBf X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hh cl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh cl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBj aGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFy cm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k ZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+Jgog ICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVt cGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFj dF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3Qg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoK ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShz aXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxl IF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFz a190eXBlCiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoK ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoK ICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlw ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj My4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5o IiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlz KG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtzdGF0aWNfY2Fz dDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo YXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBf X3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysr ID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKICAgIHJl dHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX2lz KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAog IHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmICEoX01fdGFibGVbc3Rh dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pKQogICAgICArK19fbG93Owog ICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nh bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNv bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxl W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyldICYgX19tKSAhPSAwKQogICAgICAr K19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJU PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAg ICBleHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y ZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5h bWUoKSB7IH07CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+Ojpj dHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAg Y3R5cGVfYnluYW1lPHdjaGFyX3Q+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBy ZWZzKTsKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVj dnQuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Nv ZGVjdnQuaCIgMwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g cmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAg bm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJz dHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK CiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBf X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAg ICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2Vu ZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGlu dGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2lu KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBp bnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRo cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBp bnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf dCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9f ZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25z dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHBy b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh bAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVz dWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190 bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAg ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90 IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro KCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj dnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu VCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0 X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJl c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu YW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf U3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0 IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0 ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6 ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5 bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY29kZWN2dF9zcGVjaWFsaXph dGlvbnMuaCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2 LXBjLWxpbnV4LWdudS9iaXRzL2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBjbGFzcyBf X2VuY190cmFpdHMKICB7CiAgcHVibGljOgoKCgogICAgdHlwZWRlZiBpY29udl90IF9fZGVzY190 eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3NpemUgPSAz MjsKCiAgICBjaGFyIF9NX2ludF9lbmNbX1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01fZXh0X2Vu Y1tfU19tYXhfc2l6ZV07CgoKICAgIF9fZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAgX19kZXNj X3R5cGUgX01fb3V0X2Rlc2M7CgoKICAgIGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQgX01faW50 X2JvbTsKCiAgcHVibGljOgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDogX01faW5f ZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAg IHsKICAgICAgbWVtc2V0KF9NX2ludF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgICAgbWVtc2V0 KF9NX2V4dF9lbmMsIDAsIF9TX21heF9zaXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBfX2VuY190 cmFpdHMoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5f ZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAg IHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBz dHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBf X2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2MoMCksIF9N X291dF9kZXNjKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50 X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4 dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207 CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBfX2VuY190 cmFpdHMmCiAgICBvcGVyYXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAg ICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAg ICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwog ICAgICBfTV9pbl9kZXNjID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBfTV9leHRf Ym9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9i b207CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsK ICAgICAgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsK ICAgICAgaWYgKF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycikKICAgICAgICBpY29u dl9jbG9zZShfTV9pbl9kZXNjKTsKICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNj ICE9IF9fZXJyKQogICAgICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCiAgICB2 b2lkCiAgICBfTV9pbml0KCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSBy ZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNjKQogICAg ICAgIHsKICAgICAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4 dF9lbmMpOwogICAgICAgICAgaWYgKF9NX2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9f dGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRvciBmYWls ZWQuIik7CiAgICAgICAgfQogICAgICBpZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsKICAgICAg ICAgIF9NX291dF9kZXNjID0gaWNvbnZfb3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5jKTsKICAg ICAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50 aW1lX2Vycm9yKCJjcmVhdGluZyBpY29udiBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAg ICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICBjb25zdCBf X2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBi b29sIF9fdGVzdCA9IF9NX2luX2Rlc2MgJiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAgICAgX190 ZXN0ICY9IF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyOwogICAgICByZXR1cm4g X190ZXN0OwogICAgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2luX2Rlc2Ny aXB0b3IoKQogICAgeyByZXR1cm4gJl9NX2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlw ZSoKICAgIF9NX2dldF9vdXRfZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0X2Rlc2M7 IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0 X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBf TV9pbnRfYm9tOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQog ICAgeyByZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0 ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0 PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAg ICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBl eHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAg dHlwZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBl ZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAg OiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRl X3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9f ZW5jX3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJz dHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykK ICAgICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkg eyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90 eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0 CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8s CiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9f dG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90 eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4 dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwK ICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBi b29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVh bCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlw ZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgp IGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0 ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAg IGlubGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZf dCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNv bnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAgICAgICAg ICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7IHJldHVy biBfX2Z1bmMoX19jZCwgKF9UKV9faW5idWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9fb3V0Ynl0 ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K ICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X19lbmNfdHJhaXRzPjo6CiAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2Vu ZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICBleHRlcm5fdHlw ZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAg aWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVf dHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlw ZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNv bnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBz aXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAg ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAg ICAgICAgICBzaXplX3QgX190Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8p OwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Rv KTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoK CgogICAgICAgICAgaW50IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgp OwogICAgICAgICAgaWYgKF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNp emVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90 eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9j YShzaXplb2YoaW50ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19j Zml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAg ICAgICBjaGFyX3RyYWl0czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20s IF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+ KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYs ICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJl9fZmJ5dGVzLCAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAg IGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9 IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20g PSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252 ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWlu dGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0g b2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlmIChfX2ZieXRlcyA8IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAg X190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAg ICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNv ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7 CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkp CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rl c2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9N X2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgc2l6ZV90IF9fY29udiA9IF9faWNv bnZfYWRhcHRvcihpY29udiwqX19kZXNjLCBfX251bGwsIF9fbnVsbCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBp ZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3Rv X25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAg ICAgIGlmIChfX3RsZW4gPT0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAg ICAgICAgICAgIF9fcmV0ID0gbm9jb252OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9 PSAwKQogICAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgog ICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf X2VuY190cmFpdHM+OjoKICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBf X3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChf X3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6 Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9f ZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNp emVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3Qg X19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBj b25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAg c2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAg ICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAg ICAgY2hhciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAg ICBpbnQgX19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAg ICBpZiAoX19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6 ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2Zp eGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihl eHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9 IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJf dHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsK ICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQp OwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywg Jl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4s ICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0 ZXJuX3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAg ICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihf X2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVy bl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBz dGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg ZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp bnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19y ZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf dHJhaXRzPjo6CiAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50 IF9fcmV0ID0gMDsKICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5U KSkKICAgICAgICBfX3JldCA9IHNpemVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAg ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg cmV0dXJuIDE7IH0KIyAzMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L2NvZGVjdnQuaCIgMiAzCiMgNDI2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCgogIGNsYXNzIF9fbnVtX2Jhc2UKICB7CiAgcHJv dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgY2hhciBfU19hdG9tc1tdOwoKICAgIGVudW0KICAg IHsKICAgICAgX01femVybywKICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwKICAgICAgX01fRSA9 IF9NX3plcm8gKyAxMSwKICAgICAgX01fc2l6ZSA9IDIxICsgMQogICAgfTsKCgoKICAgIHN0YXRp YyBib29sCiAgICBfU19mb3JtYXRfZmxvYXQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9f ZnB0ciwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7 CgoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19mb3JtYXRfaW50KGNvbnN0IGlvc19iYXNlJiBfX2lv LCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsKTsKICB9OwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpm YWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3Rh dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2lt YWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBj aGFyKiBfTV9ncm91cGluZzsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV90cnVlbmFtZTsKICAg ICAgY29uc3QgY2hhcl90eXBlKiBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgogICAgICBleHBs aWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f cmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0 CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBs b2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xv Yyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAg ICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5k c19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1 ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9CgogICAg ICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ bnVtcHVuY3QoKTsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9p bnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3Jv dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVh bCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFt ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAg ICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxl KTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVt cHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVt cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAg bnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg ICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9f Y2xvYyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9i eW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xvY2FsZSBf TV9jX2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNp emVfdCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7 CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwog ICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAg ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUo KQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj bGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm YWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1 bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z aWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3Vi bGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAg IHN0cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0 X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYs CiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg IHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUm KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUs IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OmlkOwojIDcyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVt X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjpp ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f cywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f ZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg ICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNv bnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19m LCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9mbG9hdChpdGVy X3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2lu dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3Q7 CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAg ICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV93aWRlbl9pbnQo aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywK ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAg ICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBfX2xlbikgY29uc3Q7 CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVy X3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs LCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo aXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl JiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg X19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu ZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy X3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9w dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2Nh bGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6 OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkK ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRl ID0gX1NfY19sb2NhbGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2Nh bGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9j KTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg X0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBf Q2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8x LCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNm b3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAg ICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAg ICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAg c2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3Qp IGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAg ICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpCiAgICAg ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOwogICAgICB9Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0 ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNv bnN0IGNoYXIqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPGNo YXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0OwoKCiAg dGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0 IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIHNpemVf dAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqLCBjb25zdCB3Y2hh cl90Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVi bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRl X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvbGxh dGU8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfY29sbGF0 ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2Nh bGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxh dGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv bGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1Ymxp YzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9Owog IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDog cHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No YXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29u c3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xv Y2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfdGlt ZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBf Q2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zv cm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRl X3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3Qg X0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hh clQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0 IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo MDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBf TV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250 aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hh clQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGlt ZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwg X01fbmFtZV90aW1lcHVuY3QoIkMiKQogICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7 IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBj b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoX19zKQogICAgICB7IF9NX2luaXRpYWxpemVfdGlt ZXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBz aXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25z dCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25z dCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01f ZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAg ICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3Rp bWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAg ICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lk CiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAg ICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0K CiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19k dCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsK ICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAg IHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsK ICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7 CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0 OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5 NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAg IF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7 CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2Rh eV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0g X01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNb NV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9Cgog ICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QK ICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRo c1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAg ICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21v bnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhz WzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAg ICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9u dGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhz WzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2Fi YnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAg X19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250 aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250 aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7 CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0g PSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAg ICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9t b250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9f bW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRp YWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUpOwogICAgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5jdDxf Q2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIF9fdGltZXB1bmN0PGNoYXI+Ojp+X190aW1l cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNo YXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVw dW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoK ICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIq LCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAgdGVtcGxhdGU8Pgog ICAgX190aW1lcHVuY3Q8d2NoYXJfdD46On5fX3RpbWVwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAg ICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sx NF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9p bml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAg IHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwg Y29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRt KikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJU KiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJs aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0 KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9Cgog ICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF90aW1lKGl0 ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7 IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9k YXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfd2Vla2RheShfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9t b250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9fZW5k LCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfeWVhcihp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0p OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpIHsgfQoK ICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRf d2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRy YWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVy LAogICAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVu LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCgogICAg ICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm IF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU KiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFj dF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19mb3JtYXQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh c3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5 bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog ICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9j YWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9w dXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAg ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAg ICAgICAgICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190bSwg X19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qg dG0qIF9fdG0sCiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdDsK ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5 bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy IGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBj aGFyKiAsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0 ZXI+KF9fcmVmcykKICAgICAgeyB9OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgbW9uZXlfYmFzZQogIHsK ICBwdWJsaWM6CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1 ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBj b25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAg ICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hh ciBfX3Bvc24pOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K ICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5 X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNoYXJf dHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsK ICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsKICAgICAgY29uc3QgY2hhcl90 eXBlKiBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX25lZ2F0aXZl X3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9y bWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBs aWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBs aWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3Ms IHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7 IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KCiAgICAgIGNoYXJfdHlw ZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVj aW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3Ry aW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBp bmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQog ICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRp dmVfc2lnbigpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQK ICAgICAgZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2Rp Z2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVn X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpOwoKICAgICAg dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg IGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2Vw OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg IGRvX2N1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0K CiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5n X3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25l Z2F0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0 dGVybgogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zv cm1hdDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25z dAogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgIHZvaWQKICAgICAgIF9N X2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVs bCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBs b2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJU LCBfSW50bD46OmludGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46 On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNo YXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hh ciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6 X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRl bXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7Cgog IHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgp OwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojpf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBs YXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFs aXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBw dWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9N X2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAog ICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAg ICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAg ICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAg ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFt ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsg fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29u c3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0 IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBs b2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3Jl ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91Ymxl JiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwg X19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBf X2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9f aW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcg ZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5 cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRl cj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy IGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw ZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9u ZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0 cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBf X2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2Zp bGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUg X191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl cl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LAogICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2Nh bGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2Fn ZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg cHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdf dHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNz YWdlczsKCgogICAgICBjb25zdCBjaGFyKiBfTV9uYW1lX21lc3NhZ2VzOwoKCiAgICBwdWJsaWM6 CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn ZXMoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9u YW1lX21lc3NhZ2VzKCJDIikKICAgICAgeyBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2NfbG9j YWxlOyB9CgoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2Ms IGNvbnN0IGNoYXIqIF9fbmFtZSwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpm YWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19uYW1lOwog ICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsK ICAgICAgfQoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy PiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19vcGVuKF9fcywgX19sb2MpOyB9CgoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJh c2ljX3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYsIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAg ICAgIHN0cmluZ190eXBlCiAgICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19t c2dpZCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0KCiAgICAgIHZvaWQKICAgICAgY2xv c2UoY2F0YWxvZyBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3NlKF9fYyk7 IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzKCkKICAgICAg IHsKICAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQogICAg ICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAg fQoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5n PGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl CiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZh dWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBj b25zdDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIoY29uc3Qgc3RyaW5n X3R5cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHJldHVybiByZWludGVycHJldF9j YXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNfc3RyKCkpKTsKICAgICAgfQoK CiAgICAgIHN0cmluZ190eXBlCiAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqIF9fbXNn KSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXI+ OjpsZW5ndGgoX19tc2cpIC0gMTsKIyAxNzMwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUo KTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs ZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAg IG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYp IGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMt bGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVt YmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2Fn ZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNp Y19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0 ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9f cywgX19sb2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFt ZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVu KGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNf c3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUKICAgIG1lc3NhZ2Vz PF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0CiAgICB7CgoKCgoKCiAg ICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAg ICAgIHNldGxvY2FsZShfX0xDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CiAgICAgIGNoYXIqIF9f bXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKICAgICAgc2V0bG9j YWxlKF9fTENfQUxMLCBfX29sZCk7CiAgICAgIGZyZWUoX19vbGQpOwogICAgICByZXR1cm4gX01f Y29udmVydF9mcm9tX2NoYXIoX19tc2cpOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgdm9pZAogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29u c3QKICAgIHsgfQojIDE3NDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3Nh Z2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1l c3NhZ2VzPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9 IF9fczsKICAgICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpCiAg ICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKICAgICAg ICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgIH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCiAg ICAgIHsgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6 c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50 LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg ICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19j KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1 cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hh clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9f YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBs b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv YykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p cyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9s b3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9Cn0KIyA0MiAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90 eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5 cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0 ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7 CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7 CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9 IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0 KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MudGNjIiAzCgpu YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0 ZSBfX3N0YXRlKQogICAgewogICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJl YW1idWZfc3RhdGUgPSBfX3N0YXRlOwogICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZf c3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRo aXMtPmV4Y2VwdGlvbnMoKSkpCiAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9z OjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0 cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz Pjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRz KiBfX3dvcmRzID0gKF9fcmhzLl9NX3dvcmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8K ICAgICAgICBfTV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoK CiAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBp ZiAoX19jYikKICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxf Y2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29y ZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dv cmQgPSAwOwogICAgICAgIH0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9N X2NhbGxiYWNrcyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9N X3dvcmRfc2l6ZTsgKytfX2kpCiAgICAgICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtf X2ldOwogICAgICBpZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAg ICAgIGRlbGV0ZSBbXSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQog ICAgICBfTV93b3JkID0gX193b3JkczsKICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29y ZF9zaXplOwoKICAgICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndp ZHRoKF9fcmhzLndpZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9u KCkpOwogICAgICB0aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhz LmZpbGwoKSk7CgogICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7Cgog ICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjaGFyCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBf X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVs dDsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBf TV9mY3R5cGUtPm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hh clQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QK ICAgIHsKICAgICAgY2hhcl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihf X2MpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19v bGQodGhpcy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBf TV9jYWNoZV9mYWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAg ICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2 b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7 CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsK IyAxNTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50 Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxz ZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9f c2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2 b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihf X2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9j KTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0 PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxf X251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsK ICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51 bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAg ICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNp Y19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsK fQojIDIwOCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z LmgiIDIgMwojIDUyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMK IyA0NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwoKbmFt ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No YXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lv czxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlw ZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAg ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQK ICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMt PmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0K CgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYp KF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y PDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlv c19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZp ZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz ZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz dDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0 aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBf X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAg IHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19u KSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAg ICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYg aW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8 IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8 KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAg ICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGlu dCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv cGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j YXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv cjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0 ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07 CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xh c3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAgICAgIGJv b2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9vczsKCiAg ICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAgICBpZiAo X01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNlcHRpb24o KSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJk YnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgp CiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9D aGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyByZXR1cm4g KF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1wbGF0ZTxj bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJh dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBjaGFyIF9f YykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0 ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2ln bmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9f YykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAg dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25z dCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nh c3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg cmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdc bicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9CgoKCgoK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIg MSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0u dGNjIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEg MwojIDQzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbG9jYWxlIiAzCgoKCiMg MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh bGVfZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Y2Vycm5vIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NlcnJu byIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9l cnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgi IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAz CiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUv Yml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRl cm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5v LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3Jh bV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQoj IDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDQ5ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY2Vycm5vIiAyIDMKIyAzOSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoK CiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuICJD IiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMK IyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRl ZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0 MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2lu IChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nv cyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFu IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194 LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBf X3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBz aW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91 YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChk b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h dGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEw IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4 cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQg Kl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gs IGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUg X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYg KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21v ZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs ZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xv Z2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cg KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91 YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChk b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9v ciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg X19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192 YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi bGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs ZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWdu aWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWdu IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBu YW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRv dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBk b3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQs IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91 YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAo aW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91 YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUp IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2Ft bWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdh bW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50 IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQg KGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy biBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19p bG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRv dWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxu IChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5l YXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVv IChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg bG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJv dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0 IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUg X196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9f eSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoj IDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh bGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4g ZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm bG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNp bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z ZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0 ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv c3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs b2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm bG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy biBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5o ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f ZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhy b3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25l bnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhw b25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQg Kl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0 ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n MXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpl eHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Nx cnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19jZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0 IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg X19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQg X194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp bnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm bG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZp Y2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19j b25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9f dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu dCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChp bnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJv dyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195 MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50 LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0 IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQp IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2Ft bWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1w KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25n YW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194 LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVy biBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYg KGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9f eSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBf X24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19u KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24p IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2Fs YmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19z Y2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxv YXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5 aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9m IChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25n IGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBf X2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRm IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBf X3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVl KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZs b2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAo KTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwg bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChs b25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg c2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lu bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgp OyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9f c2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv dWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg c2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9f eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBs IChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVy biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25n IGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBk b3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk b3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxv b3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9v cmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2Rs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxv bmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmlj YW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBj b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAo bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIg Kl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g aW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4 dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBq bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwg KGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25n IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUp IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g bG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAo bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBk b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBp bnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2Nh bGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91 YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBp bnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxv bmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBs b25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4g bG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Zm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRl cm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25n IGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg Zm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNs dWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQg c2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05B TiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAg ICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBl bnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9J U09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9M SUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0 aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7 CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1h dGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDQxMSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9jbWF0 aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21h dGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJs ZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQK ICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlu bGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls dGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJl dHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25n IGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0K CgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7 IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2lu KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6 OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFu ZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBf X3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlu bGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4y ZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBk b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsg fQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194 KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBj ZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2lu ZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1 aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJs ZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7 CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gp OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsg cmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxv YXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGlu ZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gp OyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJs ZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gp OyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gp IHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBm bG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVz aW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kp IHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs ZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1v ZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAog IGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4 cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gs IGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNp bmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhw KSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4 cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAog IGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxv bmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0K CgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gp IHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBs b2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVz aW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19p cHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAiL3Vzci9sb2NhbC9n Y2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9k Zihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwo X194LCBfX2lwdHIpOyB9CiMgMzg4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Y21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf cG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAog IHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoK CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91 YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9f eCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQgX19uKQogIHsg cmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg cG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194 LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9 CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJl dHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNx cnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUg X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoK CiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0K CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVy biA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAg dGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7 IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAo c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNp emVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2Zw Y2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg IF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNp emVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJl dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBz aXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZs IChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVy ZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp ID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19p c25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVv ZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2Yg KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNz aWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09 IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRl cihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5 cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7 ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9m X18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXpl b2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9m IChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFz c2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsgfSkpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwo X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlw ZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsg IShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2Zf XyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19m cGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw Y2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVv ZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2Yg KF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNz aWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2Yx LCBfVHAgX19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf X3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9u X18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0g KF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChf X3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191 KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNp emVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXpl b2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9 PSBGUF9OQU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19m MikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9 IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAo eyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195 KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkg OiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDog X19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9m IChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAo ZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQ X05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2Yy KQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0g KF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7 IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kp OyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6 IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBf X2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2Yg KGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChk b3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBf TkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19m MSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhf X2YxKSBfX3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9m IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7 IH0KfQojIDU4MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5h bWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg ZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikg eyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYo X19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBf X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lz bm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWdu Yml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2Yy KSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBf X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBf VHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAg X19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9f ZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwg X19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJl ZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQo X19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNs YXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojpp c2luZjsKICB1c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3Jt YWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVh dGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4 Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9j eHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDEg MwojIDM1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2Mi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBf X2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBf X3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAg ewogICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAg ICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAg fQp9CiMgNjU1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwoj IDQyICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRz LnRjYyIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMi IDEgMwojIDQ3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCgoj IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlCiAgewog ICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAog ICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAog ICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0X2Rlbm9y bV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5vcm1fYWJz ZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBfX251bWVy aWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9 IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAgIHN0YXRp YyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg IHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9 CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVy biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJv dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBxdWll dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh dGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJl dHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZh bHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKCgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAgICAgICAgICAgfHwgdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4KICAg IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg c3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEp OyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIp MTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7 IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBj aGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTA3MSAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBj aGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0 aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQog ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQg Y2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWdu ZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMTI4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz PHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln bmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGlj IHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3 TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9 IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBz dGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgp OyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5v cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1 ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAx MjQxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxh dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNo b3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0 OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3Rh dGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh dGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0 X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hv cnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAg ICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQo KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf emVybzsKICAgIH07CiMgMTI5OCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xp bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBz aG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBz aG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0 IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz aG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw ID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhy b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBp bnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDAp OyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVl OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE0 MTAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5z aWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3Rh dGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCko MjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50 IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5 bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0 eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsg fQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWdu ZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv OwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9u Zz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2 NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy biAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu aXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog ICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigw KTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l cmljX2xpbWl0czx1bnNpZ25lZCBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxv bmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgw N0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcg bG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBs b25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHko KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAg ICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxp bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDAp OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTYzNCAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0 cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoOTIyMzM3 MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs b25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl ZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0 IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAg ICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEY7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGZs b2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRp YyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAg c3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7 IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf dG93YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91 YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUw NzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0 YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDky NTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3Owog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQog ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxp bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJs ZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs c2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRf emVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xp bWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJs ZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy4z NjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1h eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50 IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogICAgICBzdGF0aWMg bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAg ICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBk b3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh dGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsg fQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCn0KIyA0NCAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDEgMwojIDQw ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKZXh0ZXJuICJD KysiIHsKCm5hbWVzcGFjZSBfX2N4eGFiaXYxCnsKICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsK fQojIDU1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdHlwZWluZm8iIDMKbmFt ZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2 aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9y PShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAg cHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBs aWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1Ymxp YzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9 CiMgOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAg Ym9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9f bmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5m byYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9Cgog ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJl dHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wg X19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9w KCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9p bmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3Vw Y2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoK ICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFk X2Nhc3QoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAg fTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK ICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgp IHRocm93KCk7CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1w bCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01f aW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1wKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAg ewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAg ICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0PF9fY29sbGF0ZV90 eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCks IF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2Vf ZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNl dDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01f aW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNl dHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAg ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChj b25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFj ZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9N X2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9m YWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBj aGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0No YXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0 IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICBpbnQgX19wb3Mg PSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAoKF9fdHJhaXRzX3R5 cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQog ICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9 IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196 ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGJvb2wgX19mb3Vu ZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVy bykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgfQogICAgICBpZiAoX19m b3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJv XTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IHNpemVfdCBfX2xl biA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19fbGVuXTsK ICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMp OwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAgICAgIGJvb2wgX19mb3VuZF9zY2kg PSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5kZWNpbWFsX3BvaW50 KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9f Z3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9 IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3Qg Y2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CgogICAgICB3aGlsZSAoX19i ZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0g X190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7CgoKICAgICAgICAgIGlmIChf X3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7 CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21z W19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Ry YWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAgICAgICAgICAgJiYgX19jaGVja19n cm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIGlm IChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZm91bmRf Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg ICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYgIV9fZm91bmRfZGVjKQogICAgICAg ICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg ICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9w b3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJjICs9ICcuJzsK ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfZGVj ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoKF9fdHJhaXRzX3R5cGU6 OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAgICAgICAgICAgICAgICAmJiAhX19m b3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3BvczsK ICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAg ICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAgICAgICAgICBpZiAoX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6 OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsr X19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo YXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2No ZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAg ICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0 YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3Vw aW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAg ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy Pjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNo YXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9j ID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hh clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAg aW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6 OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAg ICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Omhl eCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAgICAgIF9fYmFzZSA9IDEwOwoK CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAg IGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgIGNvbnN0 IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwoKICAgICAgaWYgKChfX3Ry YWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21p bnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9f eHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwog ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90 eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBjb25z dCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBjb25zdCBjaGFyX3R5 cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNlID09IDEwKQogICAg ICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgICAgICB3aGls ZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBf X2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19mb3VuZF96 ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl cm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxk ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlw ZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQp CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9f Y3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgICAgICsrX19wb3M7 CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg ICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gODsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNlID09IDE2KQogICAg ICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19i ZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRv bXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAq KCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gp IHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAgICAgICAgJiYgX19i ZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyYyAr PSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICsrX19wb3M7 CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVfdCBfX2xlbjsKICAgICAgaWYgKF9f YmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7CiAgICAgIGVsc2UKICAgICAgICBf X2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX01fc2l6ZV07CiAgICAg IF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAg ICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n ID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3Vw aW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l bmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190 eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAh X190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAg ICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAg ICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5 cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0g KigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAo X19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7Cgog ICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3Mp OwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dy b3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg fQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICBpZiAoIShf X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAgICAgICB7CgoKICAgICAgICAg IHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAgICAgX19iZWcgPSBf TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7 CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICAgICAgX19jb252ZXJ0X3RvX3Yo X194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAg ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fdWwgPD0gMSkKICAgICAg ICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgICAgICBsb2Nh bGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJU PiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAg Y29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgICAgICBj b25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qg c2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVf dCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBf X24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0g X19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190 eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgYm9vbCBf X3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAg IGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9f biA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0g MDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkK ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAg ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg dW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg ICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsK ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xv Y2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAg ICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkK ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVs c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVn OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgewog ICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4 dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAg ICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIo KSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1 bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp bnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7 CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg X194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192 LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0 ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmlu ZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZl cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7 CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25n IGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9f YmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigp LCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewogICAgICBzdHJp bmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0 cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2Nv bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0 CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAg ICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f eHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBf U19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs b25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBf X3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywg X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu Y19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsKCiAgICAgIHR5cGVk ZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2ZtdCA9IF9f aW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3Bv cyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdz KF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up KTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0g X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up OwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwog ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9j YWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKICAg ICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAgICAgZWxzZQogICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CiMgNjE4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj ZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1f cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9mbG9hdChfT3V0SXRlciBf X3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAg ICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKICAgICAgICBjb25zdCBp bnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICsgMTsK ICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICAgIGlm IChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpKQogICAgICAg ICAgX19wcmVjID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKTsKCgogICAg ICAgIGNoYXIgX19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsKCgoKICAgICAgICBpbnQg X19jc19zaXplID0gX19tYXhfZGlnaXRzICogMzsKICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGlj X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CgogICAgICAgIGNvbnN0 IGJvb2wgX19mcCA9IF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX3ByZWMp OwogICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f Y3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4g PSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsIF9TX2NfbG9j YWxlKTsKCgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19j YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBpZiAo X19mcCkKICAgICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19z aXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2xl biA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg fQojIDY4MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDMKICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2Zp bGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091 dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRf aW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19t b2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QK ICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50 KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0g NjQ7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAg ICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBf X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg ICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1 ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp OwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19p bywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xl bikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRz X3R5cGU7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193 czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu LCBfX3dzKTsKCgogICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBpZiAoX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRl bignLicpKSkKICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7 CgoKCgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh c2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAg ICAgICAgIF9DaGFyVCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAt IF9fd3MgOiBfX2xlbjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19u cC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91 cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu Y19zdHIoKSArIF9fZ3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3Ay IC0gX193czI7CgoKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAg ICAgICAgICAgX19uZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAg ICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAg IH0KCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVu KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVu X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBf X2NzLAogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25z dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+ JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv bnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+ KF9fbG9jKTsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7 CiAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3Mo KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAg ICAgICB7CgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChf X2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2Vm aWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9f b2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0K ICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193 czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwog ICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19h ZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVu KTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3My OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193 cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwg Y29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsK ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBz dHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cp KTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAg ICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywg X19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nh c3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9f aW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f aiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5 cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0 CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwog ICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsK ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2Nv bnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo KTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVt cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwog ICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAg ICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwg X19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0 dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2ln bmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lv LCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0 X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Yp IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3Un LCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRv dWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywg X19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+ OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j b252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1f cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNv bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp OwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg aW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh Z3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2Up KTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19z LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8u ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAg ICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsK ICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9f ZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBk b3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf X2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdl dGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5j X3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkg KyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBf X2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5 X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7Cgog ICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAg IHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0 eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJp bmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFj ZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBm ID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0No YXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAg Y29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0 KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u ZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwg PyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlw ZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog ICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50 KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5k c19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91 c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f bXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9f c2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3Mg PSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRl Y2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAg Y2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nh c3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAo aW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsr X19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+ KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAg ICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAg ICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAg ICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFz ZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAg ICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlw ZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5 bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wu c2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAg ICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5m bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190 ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAg ICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAg ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2ln blswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19z aWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChf X2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAg X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6 ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAg ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdf c2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug bW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9f ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpk aWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYm ICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0g X19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChf X2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAg ICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNl OgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAg ICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNw YWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlm IChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4g PSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBm b3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hp bGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAg IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5p dHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShf X3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24g PT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5i ZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo KSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Zl cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9f dGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlk IHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls Yml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVy Pjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0 CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0 aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9f bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAg IGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0g X19sZW4gKyAxOwogICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5f YWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9f Y3MsIF9fY3Nfc2l6ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCog X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4s IF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRo aXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl cgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg X19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBl ZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8 c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh clQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg ZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1 c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK CgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBj b25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1v bmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlm ICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9 IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAg ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRp dmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9 IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAg ICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRp dmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBf X2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBp ZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19y ZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5n X3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7 CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0 cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdp dHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs X3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19l bmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192 YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg ICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAg ICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAg ICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywg X196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9f bXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6 ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUg X19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7 CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBp bmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19i ZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAg ICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJU KSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3Jv dXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAg ICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu c2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAg ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFk anVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBf X3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl OjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3Rp cGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAg ICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19f aV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBp ZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAg IF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2ln bi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6 CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAg ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9u ZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAg X19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAg ICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBl KF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBf X3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAg ICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVs c2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAt IF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAg ICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsr X19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAg ICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3Jk ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAog ICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J bkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVy X3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAg PSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5 cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwog ICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQp OwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19s ZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9y bWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAg ICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9 IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09 ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBf Q2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAu X01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf dHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIp OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50 bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgog ICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJl dmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl ZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19t b250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f bW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoK ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAg ICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAg ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAg ICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4o X19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFf Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251 bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0 X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRy YWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9f ZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAg ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwg MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAg ICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAg ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6 JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3dj cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug J1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3Rt LT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0 eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09 ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAg ICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2Nz LCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3Jt YXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRl cyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs IF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg Y2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07 CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNb MF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoK ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95 ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwg X19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1kn OgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwg MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6 bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy KTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3Rt LT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5 cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAg IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJy ICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5 cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19j dHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k LCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAg ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7Cgog ICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAg ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9l eHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVt YmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl biwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0 dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAo X19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMo Y3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0g X19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg ICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewog ICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAg aWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19t ZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9 IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7 CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy PgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0 X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRl eGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0 CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwog ICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsK ICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl ZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kx KQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hl c1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAg ICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6 ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21p bmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNf dHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChf X3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAg ICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hl c1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAg ICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVz XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAg IHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBj b25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAg ICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bv c10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlm IChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQog ICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2 YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193 Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAg ICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUu d2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0 KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVn ID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf dHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVu Y3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4o X19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9k YXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4 dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoK CgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9 IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3Rw Ll9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19k YXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg ICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNf dHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4g JiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9 PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAg IGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm YWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBf X3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9f ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21v bnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAg ICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190 eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5j dDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihf X2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9N X21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAg X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19l cnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAg ICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g PT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChf X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9f bmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsK ICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikK ICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYg KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg ICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBj b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0g MDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAh PSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsK ICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19p ID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAg ICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2Fs ZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0g MjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8g X19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nh c3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0 SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNv bnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAg IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUg KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5u YXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09 ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAg ICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAg ICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAg ICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAg ICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19w dXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19f czsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg ICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hh ciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0g X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAg ICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0K ICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihj aGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwog ICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAg ICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0g PSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf X2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAg IF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19y ZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90 cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0g MDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsK ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25z dCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hh clQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAg IGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29u c3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9N X2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlw ZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0g KF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nh c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAg ICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAg IGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAg ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog KF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsg MSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAg ZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAg IHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19o aTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAg ICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+ OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwog ICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRf dG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jh c2UgPSAxMCk7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29u dmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9f Zm10LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50 IF9fcHJlYyA9IC0xKQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0g c3RyZHVwKHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKSk7CiAgICAgIHNldGxvY2FsZShfX0xD X0FMTCwgIkMiKTsKICAgICAgaWYgKF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmlu dGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAg IF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiAgICAgIHNldGxv Y2FsZShfX0xDX0FMTCwgX19vbGQpOwogICAgICBmcmVlKF9fb2xkKTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQojIDIwMTkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAg IF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xl biwKICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19u dW0pOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdm9pZAogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBf X2lvLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D aGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wg X19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9f bmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAg X1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBf X2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAg c2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lv LmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0g aW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxf Q2hhclQqPihfX29sZHMpOwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAg IF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9z X2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQogICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBf X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0 eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBf Q2hhclQgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFy VCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24g PSBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fbWludXMpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBf X3Rlc3RoZXggPSBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gn KSwgX19vbGRzWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6 ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3Ro ZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAg ICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9 IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3Bh ZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQg PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9U cmFpdHM6OmVxKChfX25ld3NbMF0gPSBfX29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19t aW51czsKICAgICAgICAgICAgICArK19fbW9kOwogICAgICAgICAgICAgICsrX19uZXdzOwogICAg ICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVu OwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21v ZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAg ICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAg ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9f cGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25z dF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9f bmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2Jl Z2xlbiwgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xl biAtIF9fbW9kKTsKICAgIH0KIyAyMTE0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8z LjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+ JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4m IF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBpbnQgX19pID0gMDsKICAgICAgaW50IF9faiA9 IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25z dCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRy dWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9y IChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2os KytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdf dG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7 CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0g X19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3Ms IF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29u c3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0 LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywg X19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dl bmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0g X19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAg ICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1v bmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Rf YnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9i eW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFy PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hh cj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl IGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgdGltZV9wdXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dl dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRp bWVfcHV0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8 d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90 PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg bWVzc2FnZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFt ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBj b2xsYXRlPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3 Y2hhcl90PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIs IG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxj aGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVt cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z dCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2Nh bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNl X2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVu Y3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj b25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNo YXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0 IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBs b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAg ICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0 ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1l cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z dCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAg dXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1w bGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0 PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90 LCBjaGFyLCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNvbnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQog ICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8 d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNl X2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l eXB1bmN0PHdjaGFyX3QsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwg dHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25l eXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3Qs IGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1v bmV5X3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJf dD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2Vf ZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1 dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0 IHRpbWVfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJf dD4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgog IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29u c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNv ZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0 PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg aGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNo YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8 Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsKCiBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m YWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4g Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj ZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFy X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz X2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs YXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9w dXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh Y2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdj aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cn0KIyA0NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVk ZS9jKysvMy4yL2xvY2FsZSIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoK ICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2go KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v c3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhp cyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9f aW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7 IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz ZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikK ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwo bG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg Y2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10 ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlm ICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9f bCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAg ICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZh aWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAg ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl OjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwog ICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYg aW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAg IF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFp bGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0 aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp LCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRv dWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAg ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0 aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpw dXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1Zigp LT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1 dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3Jp dGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAg aWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3lu YygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAg ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNl ZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhp cy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y ZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYg KF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19k KQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBv c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJU IF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19j ZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsK ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBf X3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAg ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwg X19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVu KTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQu ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj aGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7 CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRp bl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19s ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFp dHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsK ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lk dGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25z dCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9 IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFp dHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3Bh ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAg ICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAg ICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0 LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAg dHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUg X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYm IF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQq PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAg ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAg ICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9f c3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAg ICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hh clQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m KF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19w YWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAg ICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVu KTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9f b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQu ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAg ICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v dXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19j YXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNp emUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7 CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmls bCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19w YWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53 aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBf X29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAg ICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9f cGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJl YW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19z ID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAg ICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7 CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikK ICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFt Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0 ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJl YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFt JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUg b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1w bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJu IHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNo YXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29u c3Qgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFt PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwog IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w bGF0ZSB3b3N0cmVhbSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl YW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29z dHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29z dHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRl bXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQoj IDI3NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDcx ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQK ewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVm IGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVh bXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj X2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmlu aXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAg ICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3Ry ZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNl bnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3Nf YmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBf X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYg X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24p OwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg bG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9h dCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYg X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9f cCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkg Y29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBn ZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19j KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5 cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf X2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt YnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRl bignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlw ZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5l IF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4o J1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUg X19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBp bnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJl YWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAg ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0 cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7Cgog ICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog ICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2co b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0 cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2Vu dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdz ID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAg cHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwg X0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJh aXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVy biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2lu ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg cmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19p b3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAg ICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6 CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpv ZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgog ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw ZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFt X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwg X19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNp Y19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdz KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzNiAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoK Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNl bnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3 cykKICAgIHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChf X2luLnRpZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYg KCFfX25vc2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi dWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICAgICAgICAgIGlmIChfX2luLl9NX2NoZWNrX2ZhY2V0KF9faW4uX01fZmN0eXBlKSkKICAgICAg ICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAg ICAgICAgICAgICAgICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNw YWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNf dHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5z bmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f YywgX19lb2YpKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0 KTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAg ICAgX01fb2sgPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBm YWxzZTsKICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19p c3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190 eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7 CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv cGVyYXRvcj4+KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq dGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl OjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+Ojpt aW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0 czxzaG9ydD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsKICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4oaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlm IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEo X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNf bGltaXRzPGludD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9 IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKICAgICAgICAgICAgICAgIF9fbiA9IF9fbDsK ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp bGJpdDsKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6 aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9u ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0 KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZs b2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh c2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0 KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJy LCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl cmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19u KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewog ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICAgaWYgKF9fY2VyYikKICAg ICAgICAgewogICAgICAgICAgIHRyeQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBzdHJl YW1zaXplIF9feHRyY3QgPSAwOwogICAgICAgICAgICAgICBpZiAoX19zYm91dCkKICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0 aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1i dWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVu YW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9fYyA9 IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAg ICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg ICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7Cgog ICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYnVmdmFsLCBfX2Vv ZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAg ICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAg ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAg aW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2dj b3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAg ICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx X2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3Vu dCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFy X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9 IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90 eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19j MiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKCiAgICAgICAgICAgICAgd2hpbGUg KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAg ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQogICAgICAgICAg ICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2Iuc3B1dGMoX19jMiks IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7 CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c25leHRjKCk7CiAgICAgICAgICAg ICAgICAgIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f ZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp OwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAg ICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAgICAgICYmICF0 cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAg JiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw ZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAg ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYg KHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX2MsIF9faWRlbGltKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKQogICAg ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK ICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJk YnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg ICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgp KTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCiAgICAgICAgICAgICAgICAg ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAg ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgIGVsc2Ug aWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZGVsaW0pKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAg KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQogICAgewogICAgICBpbnRfdHlwZSBf X2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewog ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19uKTsKICAg ICAgICAgICAgICBpZiAoX01fZ2NvdW50ICE9IF9fbikKICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVh ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291 bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAg IGlmIChfX251bSA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbnVt ID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0pCiAgICAgICAg ICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+ cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJh aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnNwdXRiYWNrYyhfX2MpLCBfX2VvZikpCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90 eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAg ICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3VuZ2V0Yygp LCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIF9NX2djb3Vu dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKF9f c2IpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3NiLT5wdWJzeW5j KCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JldCA9 IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBw b3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYo MCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlw ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7 CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz ZWVrZGlyIF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y ZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAg ICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0 eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5n ZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g X19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl IGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg Y3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQg PSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAg ICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVy aWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlw ZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7 CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAg ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAg ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxl IChfX2V4dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiBfX2MgIT0g X19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAg KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAg ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAg Kl9fcyA9IGNoYXJfdHlwZSgpOwoKICAgICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9f ZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFz aWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf X2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90 eXBlIF9faW50X3R5cGU7CgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2Vf ZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgY29uc3QgX19pbnRfdHlw ZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g X19pbi5yZGJ1ZigpOwogICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAg ICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9f YykpCiAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgIGlmIChfX2MgPT0gX19lb2Yp CiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBf X2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg ICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBf X2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVh bWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9f aW4ud2lkdGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9f dyA+IDAgPyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7 CgogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5 cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9m ID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19p bi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAg ICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgogICAgICAgICAgICAgICAgICYmIF9fYyAh PSBfX2VvZiAmJiAhX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwog ICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l eHRjKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAg ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRo KDApOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0 c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90 eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5 cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6 ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwog ICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAg ICAgICAgX19zaXplX3R5cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2lu dF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAg ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRf dHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19l b2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFf aW50X3R5cGUoX19jLCBfX2lkZWxpbSk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9 IF9fbgogICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m KQogICAgICAgICAgICAgICAgICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg ICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAg ICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGlt KTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywg X19lb2YpKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAg ICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19p bi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoK ICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAg IGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4s IF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVh bSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFy Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIq KTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWdu ZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0m LCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlz dHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJh dG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfaXN0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdzKHdp c3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt Jiwgd2NoYXJfdCYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0 cmVhbSYsIHdjaGFyX3QqKTsKCn0KIyAyOTggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9pc3RyZWFtIiAyIDMKIyA3MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2l0ZXJhdG9yIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdHJlYW1faXRlcmF0b3IuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCiAgICAgICAgICAgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sIHR5cGVuYW1lIF9EaXN0ID0gcHRy ZGlmZl90PgogICAgY2xhc3MgaXN0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRv cjxpbnB1dF9pdGVyYXRvcl90YWcsIF9UcCwgX0Rpc3QsIGNvbnN0IF9UcCosIGNvbnN0IF9UcCY+ CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgaXN0cmVh bV90eXBlKiBfTV9zdHJlYW07CiAgICAgIF9UcCBfTV92YWx1ZTsKICAgICAgYm9vbCBfTV9vazsK CiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01f b2soZmFsc2UpIHt9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6 IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICAgICAgaXN0cmVhbV9pdGVyYXRvcihj b25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX29iaikKICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01f c3RyZWFtKSwgX01fdmFsdWUoX19vYmouX01fdmFsdWUpLAogICAgICAgIF9NX29rKF9fb2JqLl9N X29rKQogICAgICB7IH0KCiAgICAgIGNvbnN0IF9UcCYKICAgICAgb3BlcmF0b3IqKCkgY29uc3Qg eyByZXR1cm4gX01fdmFsdWU7IH0KCiAgICAgIGNvbnN0IF9UcCoKICAgICAgb3BlcmF0b3ItPigp IGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9y JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgeyBfTV9yZWFkKCk7IHJldHVybiAqdGhpczsgfQoK ICAgICAgaXN0cmVhbV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAg ICAgIGlzdHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9yZWFkKCk7CiAg ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2VxdWFsKGNv bnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgICAgeyByZXR1cm4gKF9NX29rID09 IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7fQoK ICAgIHByaXZhdGU6CiAgICAgIHZvaWQKICAgICAgX01fcmVhZCgpCiAgICAgIHsKICAgICAgICBf TV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAg aWYgKF9NX29rKQogICAgICAgICAgewogICAgICAgICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVl OwogICAgICAgICAgICBfTV9vayA9ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICAgICAg ICB9CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRGlzdD4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMs IF9EaXN0PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwg X0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChf X3kpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0 cywgY2xhc3MgX0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3Ry ZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAg ICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+ JiBfX3kpCiAgICB7IHJldHVybiAhX194Ll9NX2VxdWFsKF9feSk7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwKICAgICAgICAgICB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtX2l0ZXJhdG9y CiAgICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQs IHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToK ICAgICAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fc3Ry aW5nOwoKICAgIHB1YmxpYzoKICAgICAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9f cykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQoKICAgICAgb3N0cmVhbV9pdGVy YXRvcihvc3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICAgIDogX01fc3Ry ZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3IoY29u c3Qgb3N0cmVhbV9pdGVyYXRvciYgX19vYmopCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0 cmVhbSksIF9NX3N0cmluZyhfX29iai5fTV9zdHJpbmcpIHsgfQoKICAgICAgb3N0cmVhbV9pdGVy YXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkKICAgICAgewogICAgICAg ICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgICAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFt IDw8IF9NX3N0cmluZzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIG9zdHJl YW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBv c3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAg ICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp czsgfQogICAgfTsKfQojIDczICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvaXRl cmF0b3IiIDIgMwojIDQ5ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5o IiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2xpc3QiIDEgMwojIDY1 ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGlzdCIgMwoKIyAxICIvdXNyL2xv Y2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5o IiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY3ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvbGlzdCIgMiAzCgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDY2ICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbGlzdC5oIiAzCm5hbWVz cGFjZSBzdGQKewoKICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCiAgewogICAgX0xpc3Rfbm9kZV9i YXNlKiBfTV9uZXh0OwogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2OwogIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGljIF9MaXN0X25v ZGVfYmFzZQogICAgewogICAgICBfVHAgX01fZGF0YTsKICAgIH07CgogIHN0cnVjdCBfTGlzdF9p dGVyYXRvcl9iYXNlCiAgewogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25v ZGU7CgogICAgX0xpc3RfaXRlcmF0b3JfYmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkKICAgIDog X01fbm9kZShfX3gpCiAgICB7IH0KCiAgICBfTGlzdF9pdGVyYXRvcl9iYXNlKCkKICAgIHsgfQoK ICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsg fQoKICAgIHZvaWQKICAgIF9NX2RlY3IoKQogICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fcHJl djsgfQoKICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYg X194KSBjb25zdAogICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQoKICAgIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAog ICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQogIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfTGlz dF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNlCiAgICB7CiAgICAgIHR5cGVk ZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYg X0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7 CiAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogICAg ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAg ICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4g X05vZGU7CgogICAgICBfTGlzdF9pdGVyYXRvcihfTm9kZSogX194KQogICAgICA6IF9MaXN0X2l0 ZXJhdG9yX2Jhc2UoX194KQogICAgICB7IH0KCiAgICAgIF9MaXN0X2l0ZXJhdG9yKCkKICAgICAg eyB9CgogICAgICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgICA6IF9M aXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpCiAgICAgIHsgfQoKICAgICAgcmVmZXJlbmNl CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2Rl KS0+X01fZGF0YTsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QKICAg ICAgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRv cisrKCkKICAgICAgewogICAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAg ICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICAg ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgp CiAgICAgIHsKICAgICAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwog ICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAg IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgdGhpcy0+X01fZGVjcigpOwogICAgICAgIHJl dHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKIyAxODUgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5 cGVuYW1lIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgogICAgY2xhc3MgX0xpc3RfYWxsb2Nf YmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgICBhbGxvY2F0 b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25z dAogICAgICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9MaXN0X2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTm9kZV9hbGxvY2F0b3IoX19h KQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAg X01fZ2V0X25vZGUoKQogICAgICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7 IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAg ICAgIHsgX05vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3Rl ZDoKICAgICAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgICAgICBfTm9kZV9hbGxvY2F0b3I7CgogICAg ICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIGNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1Rw LCBfQWxsb2NhdG9yLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9h bGxvY2F0b3IoKSBjb25zdAogICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAg ICBfTGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgICAgeyB9CgogICAg cHJvdGVjdGVkOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9k ZTxfVHA+LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgICAgICBfQWxsb2NfdHlw ZTsKCiAgICAgIF9MaXN0X25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKQogICAgICB7IHJl dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0 X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh dGUoX19wLCAxKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9u b2RlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBjbGFzcyBfTGlzdF9iYXNlCiAgICAgIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBf QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAs IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl ZiBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAg ICAgICAgICBfQmFzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5 cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl JiBfX2EpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7CiAgICAgICAgX01fbm9kZSA9IF9NX2dl dF9ub2RlKCk7CiAgICAgICAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICAgICAgX01f bm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICAgIH0KCiAgICAgIH5fTGlzdF9iYXNlKCkKICAg ICAgewogICAgICAgIGNsZWFyKCk7CiAgICAgICAgX01fcHV0X25vZGUoX01fbm9kZSk7CiAgICAg IH0KCiAgICAgIHZvaWQgY2xlYXIoKTsKICAgIH07CiMgMjg5ICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CiAgICBjbGFzcyBsaXN0IDogcHJv dGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRl ZiBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICAgIHByb3RlY3RlZDoKICAgICAgdHlw ZWRlZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBl ZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdmFsdWVf dHlwZSYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3Jl ZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CiAgICAgIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh dG9yX3R5cGU7CgogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0 ZXJhdG9yOwogICAgICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0 IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVy c2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgog ICAgICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2Rl OwogICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CgogICAgcHJvdGVjdGVkOgogICAgICBf Tm9kZSoKICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgICAgIHsKICAgICAg ICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkgewogICAgICAgICAgX0Nv bnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgICAgIH0KICAgICAgICBjYXRjaCguLi4p CiAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX19wKTsKICAgICAgICAgIHRocm93Owog ICAgICAgIH0KICAgICAgICByZXR1cm4gX19wOwogICAgICB9CgogICAgICBfTm9kZSoKICAgICAg X01fY3JlYXRlX25vZGUoKQogICAgICB7CiAgICAgICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2Rl KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAg ICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfTV9wdXRfbm9k ZShfX3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX3A7CiAg ICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0 b3IoKSBjb25zdAogICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAg ICBleHBsaWNpdAogICAgICBsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0 b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyB9CgogICAgICBpdGVyYXRvcgog ICAgICBiZWdpbigpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+ X01fbmV4dCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKICAg ICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQoKICAgICAg Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbm9kZTsg fQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiBy ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog ICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIHNpemUoKSBjb25zdAogICAgICB7IHJldHVybiBkaXN0YW5jZShiZWdpbigpLCBlbmQo KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBmcm9udCgpCiAgICAg IHsgcmV0dXJuICpiZWdpbigpOyB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgZnJvbnQo KSBjb25zdAogICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAg IGJhY2soKQogICAgICB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogICAgICBjb25zdF9yZWZlcmVu Y2UKICAgICAgYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgICAg IHZvaWQKICAgICAgc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICB7IHN0ZDo6c3dh cChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgICAgewogICAgICAgIF9Ob2Rl KiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICAgICAgX190bXAtPl9NX25leHQgPSBf X3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9N X25vZGUtPl9NX3ByZXY7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9u ZXh0ID0gX190bXA7CiAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7 CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNl cnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24s IF9UcCgpKTsgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZv aWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19mYWxzZV90eXBlKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yPgogICAgICAgIHZvaWQKICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7CiAgICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs IF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQo aXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgICB7IF9N X2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZmls bF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsK CiAgICAgIHZvaWQKICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkKICAgICAgeyBpbnNl cnQoYmVnaW4oKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2Zyb250KCkKICAgICAg eyBpbnNlcnQoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IF9U cCYgX194KQogICAgICB7IGluc2VydChlbmQoKSwgX194KTsgfQoKICAgICAgdm9pZAogICAgICBw dXNoX2JhY2soKQogICAgICB7IGluc2VydChlbmQoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAg IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBfTGlzdF9ub2RlX2Jh c2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0OwogICAgICAgIF9M aXN0X25vZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7 CiAgICAgICAgX05vZGUqIF9fbiA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3NpdGlvbi5fTV9u b2RlKTsKICAgICAgICBfX3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgICAg IF9fbmV4dF9ub2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgICAgX0Rlc3Ryb3koJl9f bi0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX19uKTsKICAgICAgICByZXR1cm4gaXRl cmF0b3Ioc3RhdGljX2Nhc3Q8X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgICB9CgogICAgICBp dGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoK ICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgICAg IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7 CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkKICAgICAgeyB0 aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogICAgICB2b2lkCiAgICAgIHBvcF9m cm9udCgpCiAgICAgIHsgZXJhc2UoYmVnaW4oKSk7IH0KCiAgICAgIHZvaWQKICAgICAgcG9wX2Jh Y2soKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgICAgICBlcmFz ZSgtLV9fdG1wKTsKICAgICAgfQoKICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAm IF9fdmFsdWUsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IGluc2VydChiZWdpbigpLCBfX24s IF9fdmFsdWUpOyB9CgogICAgICBleHBsaWNpdAogICAgICBsaXN0KHNpemVfdHlwZSBfX24pCiAg ICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19u LCBfVHAoKSk7IH0KCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAg ICAgIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog ICAgICA6IF9CYXNlKF9fYSkKICAgICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0 KTsgfQoKICAgICAgbGlzdChjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgICA6IF9C YXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdp bigpLCBfX3guZW5kKCkpOyB9CgogICAgICB+bGlzdCgpCiAgICAgIHsgfQoKICAgICAgbGlzdDxf VHAsIF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194 KTsKCiAgICBwdWJsaWM6CgoKCgoKICAgICAgdm9pZAogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9f biwgY29uc3QgX1RwJiBfX3ZhbCkKICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsg fQoKICAgICAgdm9pZAogICAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBf VHAmIF9fdmFsKTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg ICAgIHZvaWQKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0KQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01f YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0K CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICAgIHZvaWQKICAgICAgICBf TV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5 cGUpCiAgICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs KTsgfQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9p ZAogICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw ZSk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX3RyYW5zZmVyKGl0ZXJhdG9y IF9fcG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewog ICAgICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgICAgIF9fbGFzdC5fTV9u b2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgICAgX19m aXJzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICAg ICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7 CgoKICAgICAgICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bvc2l0aW9uLl9NX25vZGUt Pl9NX3ByZXY7CiAgICAgICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3Qu X01fbm9kZS0+X01fcHJldjsKICAgICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19m aXJzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2 ID0gX190bXA7CiAgICAgICAgfQogICAgICB9CgogICAgcHVibGljOgogICAgICB2b2lkCiAgICAg IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpCiAgICAgIHsKICAgICAgICBp ZiAoIV9feC5lbXB0eSgpKQogICAgICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwg X194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3BsaWNl KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpCiAgICAgIHsKICAgICAg ICBpdGVyYXRvciBfX2ogPSBfX2k7CiAgICAgICAgKytfX2o7CiAgICAgICAgaWYgKF9fcG9zaXRp b24gPT0gX19pIHx8IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICAgICAgdGhpcy0+X01f dHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOwogICAgICB9CgogICAgICB2b2lkCiAgICAg IHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRl cmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAg ICAgICAgdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKICAg ICAgfQoKICAgICAgdm9pZAogICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKCiAgICAg IHZvaWQKICAgICAgdW5pcXVlKCk7CgogICAgICB2b2lkCiAgICAgIG1lcmdlKGxpc3QmIF9feCk7 CgogICAgICB2b2lkCiAgICAgIHJldmVyc2UoKTsKCiAgICAgIHZvaWQKICAgICAgc29ydCgpOwoK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAg cmVtb3ZlX2lmKF9QcmVkaWNhdGUpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVBy ZWRpY2F0ZT4KICAgICAgICB2b2lkCiAgICAgICAgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwoK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lk CiAgICAgICAgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgICB2b2lkCiAgICAgICAgc29y dChfU3RyaWN0V2Vha09yZGVyaW5nKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbGlz dDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29u c3RfaXRlcmF0b3I7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICAg ICAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICAgICAgY29uc3RfaXRlcmF0 b3IgX19pMSA9IF9feC5iZWdpbigpOwogICAgICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJl Z2luKCk7CiAgICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAq X19pMSA9PSAqX19pMikgewogICAgICAgICsrX19pMTsKICAgICAgICArK19faTI7CiAgICAgIH0K ICAgICAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxf QWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf X3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg bGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7 IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxf QWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9f eSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwg Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0 PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dh cChsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQogICAgeyBf X3guc3dhcChfX3kpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB2b2lkIF9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OgogICAgY2xlYXIoKQogICAgewog ICAgICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gc3RhdGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+ Kj4oX01fbm9kZS0+X01fbmV4dCk7CiAgICAgIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAg ICAgICAgX0xpc3Rfbm9kZTxfVHA+KiBfX3RtcCA9IF9fY3VyOwogICAgICAgIF9fY3VyID0gc3Rh dGljX2Nhc3Q8X0xpc3Rfbm9kZTxfVHA+Kj4oX19jdXItPl9NX25leHQpOwogICAgICAgIF9EZXN0 cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICB9 CiAgICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgICBfTV9ub2RlLT5fTV9wcmV2 ID0gX01fbm9kZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9U cCwgX0FsbG9jPjo6CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9u LCBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAg IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2VydChf X3Bvc2l0aW9uLCAqX19maXJzdCk7CgogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxs X2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f eCkKICAgIHsKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgICAgICBpbnNlcnQoX19w b3NpdGlvbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwg X0FsbG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg ICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBlcmFzZShfX2ZpcnN0 KyspOwogICAgICByZXR1cm4gX19sYXN0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVzaXpl KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaXRlcmF0 b3IgX19pID0gYmVnaW4oKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZm9yICgg OyBfX2kgIT0gZW5kKCkgJiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAg ICAgICA7CiAgICAgIGlmIChfX2xlbiA9PSBfX25ld19zaXplKQogICAgICAgIGVyYXNlKF9faSwg ZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19s ZW4sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j PgogICAgbGlzdDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgIG9wZXJhdG9y PShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQogICAgewogICAgICBpZiAodGhpcyAhPSAm X194KSB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh dG9yIF9fbGFzdDEgPSBlbmQoKTsKICAgICAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9f eC5iZWdpbigpOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAg ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK ICAgICAgICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3QyKys7CiAgICAgICAgaWYgKF9fZmlyc3Qy ID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAgICAg ZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fz c2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICAgIGl0ZXJhdG9yIF9f aSA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19p LCAtLV9fbikKICAgICAgICAqX19pID0gX192YWw7CiAgICAgIGlmIChfX24gPiAwKQogICAgICAg IGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAgICAgIGVsc2UKICAgICAgICBlcmFzZShfX2ks IGVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZCBsaXN0PF9UcCwg X0FsbG9jPjo6CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBf SW5wdXRJdGVyIF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIGl0ZXJhdG9y IF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAg ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7 ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgICAqX19maXJzdDEgPSAqX19maXJzdDI7 CiAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICBlcmFzZShfX2ZpcnN0 MSwgX19sYXN0MSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmly c3QyLCBfX2xhc3QyKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgcmVtb3ZlKGNvbnN0IF9U cCYgX192YWx1ZSkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAg IGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp IHsKICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0Owog ICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgICAgICBf X2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICB1bmlxdWUo KQogICAgewogICAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgaXRlcmF0b3Ig X19sYXN0ID0gZW5kKCk7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAg ICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19s YXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICBlcmFzZShf X25leHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAg X19uZXh0ID0gX19maXJzdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OgogICAgbWVyZ2Uo bGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBi ZWdpbigpOwogICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9f Zmlyc3QyID0gX194LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7 CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgaXRlcmF0b3Ig X19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJz dDIsICsrX19uZXh0KTsKICAgICAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgICAgIH0KICAg ICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICBpZiAoX19maXJzdDIgIT0gX19s YXN0MikgX01fdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgfQoKICBp bmxpbmUgdm9pZAogIF9fTGlzdF9iYXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCiAg ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcDsKICAgIGRvIHsKICAgICAgc3RkOjpz d2FwKF9fdG1wLT5fTV9uZXh0LCBfX3RtcC0+X01fcHJldik7CiAgICAgIF9fdG1wID0gX190bXAt Pl9NX3ByZXY7CiAgICB9IHdoaWxlIChfX3RtcCAhPSBfX3ApOwogIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIHZvaWQgbGlzdDxfVHAsIF9BbGxv Yz46OgogIHJldmVyc2UoKQogIHsgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlzLT5fTV9ub2RlKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgbGlz dDxfVHAsIF9BbGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01f bmV4dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkg ewogICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICAgICAgbGlzdDxfVHAsIF9B bGxvYz4gX19jb3VudGVyWzY0XTsKICAgICAgICBpbnQgX19maWxsID0gMDsKICAgICAgICB3aGls ZSAoIWVtcHR5KCkpIHsKICAgICAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwg KnRoaXMsIGJlZ2luKCkpOwogICAgICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShf X2kgPCBfX2ZpbGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICAgICAgX19j b3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2Nv dW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50 ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAg fQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAg ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICAgICAgc3dhcChf X2NvdW50ZXJbX19maWxsLTFdKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfUHJlZGljYXRlPgog ICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUg X19wcmVkKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAg ICAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSB7CiAgICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICAgKytf X25leHQ7CiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAg ICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAgIH0KICAgICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQmlu YXJ5UHJlZGljYXRlPgogICAgICB2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjoKICAgICAgdW5pcXVl KF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgICAgewogICAgICAgIGl0ZXJhdG9y IF9fZmlyc3QgPSBiZWdpbigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogICAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICAgIGl0ZXJhdG9yIF9fbmV4 dCA9IF9fZmlyc3Q7CiAgICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAg ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgICBlcmFz ZShfX25leHQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0Owog ICAgICAgICAgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAgICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0 cmljdFdlYWtPcmRlcmluZz4KICAgICAgdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6CiAgICAgIG1l cmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQog ICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgICAgIGl0ZXJh dG9yIF9fbGFzdDEgPSBlbmQoKTsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdp bigpOwogICAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICAgIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9f bmV4dCA9IF9fZmlyc3QyOwogICAgICAgICAgICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJz dDIsICsrX19uZXh0KTsKICAgICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmly c3QyICE9IF9fbGFzdDIpIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsK ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRl bXBsYXRlIDx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgogICAgdm9pZCBsaXN0PF9UcCwg X0FsbG9jPjo6CiAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQogICAgewoKICAg ICAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5f TV9uZXh0ICE9IF9NX25vZGUpIHsKICAgICAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5Owog ICAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9fZmls bCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgICAgICBfX2NhcnJ5LnNwbGlj ZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgICAgIGludCBfX2kgPSAw OwogICAgICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgp KSB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAg ICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgICAgIH0KICAg ICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgICAgICBpZiAoX19pID09 IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBf X2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3Vu dGVyW19faS0xXSwgX19jb21wKTsKICAgICAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwog ICAgICB9CiAgICB9Cgp9CiMgNzIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9s aXN0IiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIg MgojIDU4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdE5vZGUKewpwdWJsaWM6CiAgICBRVmFsdWVMaXN0 Tm9kZSggY29uc3QgVCYgdCApIDogZGF0YSggdCApIHsgfQogICAgUVZhbHVlTGlzdE5vZGUoKSB7 IH0KCgoKCgogICAgUVZhbHVlTGlzdE5vZGU8VD4qIG5leHQ7CiAgICBRVmFsdWVMaXN0Tm9kZTxU PiogcHJldjsKICAgIFQgZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxp c3RJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+KiBO b2RlUHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVy YXRvcl9jYXRlZ29yeTsKCiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgc2l6 ZV90IHNpemVfdHlwZTsKCiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoK CiAgICB0eXBlZGVmIFQqIHBvaW50ZXI7CiAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKCgoKCiAg ICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkg e30KICAgIFFWYWx1ZUxpc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2RlKCBwICkge30KICAg IFFWYWx1ZUxpc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDog bm9kZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0 SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBi b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7 IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0 IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIFQmIG9wZXJhdG9yKigpIHsgcmV0dXJuIG5vZGUt PmRhdGE7IH0KCgoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAg ICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAg UVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlz dEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAg ICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRv ci0tKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAg ICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUt PnByZXY7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8 VD4mIG9wZXJhdG9yKz0oIGludCBqICkgewogICAgICAgIHdoaWxlICggai0tICkKICAgICAgICAg ICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFW YWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItPSggaW50IGogKSB7CiAgICAgICAgd2hpbGUg KCBqLS0gKQogICAgICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICB9Cgp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdENvbnN0SXRl cmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0 cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAg dHlwZWRlZiBjb25zdCBUKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7 CgoKCgogICAgTm9kZVB0ciBub2RlOwoKCgoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCkg OiBub2RlKCAwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBOb2RlUHRyIHAgKSA6 IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxp c3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9kZSggaXQubm9kZSApIHt9CiAgICBRVmFsdWVM aXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIDogbm9k ZSggaXQubm9kZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVMaXN0Q29u c3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAg IGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkg Y29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcioo KSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVy YXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gb3Bl cmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0bXAgPSAq dGhpczsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1wOwogICAg fQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewogICAgICAg IG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFs dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFWYWx1ZUxp c3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2 OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3Mg UVZhbHVlTGlzdFByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKCgoKICAgIHR5cGVk ZWYgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0 Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9k ZTxUPiBOb2RlOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsKICAgIHR5 cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZSgpOwogICAg UVZhbHVlTGlzdFByaXZhdGUoIGNvbnN0IFFWYWx1ZUxpc3RQcml2YXRlPFQ+JiBfcCApOwoKICAg IHZvaWQgZGVyZWZBbmREZWxldGUoKQogICAgewogICAgICAgIGlmICggZGVyZWYoKSApCiAgICAg ICAgICAgIGRlbGV0ZSB0aGlzOwogICAgfQoKCgoKCiAgICB+UVZhbHVlTGlzdFByaXZhdGUoKTsK CiAgICBJdGVyYXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICk7CiAgICBJdGVy YXRvciByZW1vdmUoIEl0ZXJhdG9yIGl0ICk7CiAgICBOb2RlUHRyIGZpbmQoIE5vZGVQdHIgc3Rh cnQsIGNvbnN0IFQmIHggKSBjb25zdDsKICAgIGludCBmaW5kSW5kZXgoIE5vZGVQdHIgc3RhcnQs IGNvbnN0IFQmIHggKSBjb25zdDsKICAgIHVpbnQgY29udGFpbnMoIGNvbnN0IFQmIHggKSBjb25z dDsKICAgIHVpbnQgcmVtb3ZlKCBjb25zdCBUJiB4ICk7CiAgICBOb2RlUHRyIGF0KCBzaXplX3R5 cGUgaSApIGNvbnN0OwogICAgdm9pZCBjbGVhcigpOwoKICAgIE5vZGVQdHIgbm9kZTsKICAgIHNp emVfdHlwZSBub2RlczsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgogUVZhbHVlTGlzdFByaXZhdGU8 VD46OlFWYWx1ZUxpc3RQcml2YXRlKCkKewogICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0 ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVzID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBR VmFsdWVMaXN0UHJpdmF0ZTxUPjo6UVZhbHVlTGlzdFByaXZhdGUoIGNvbnN0IFFWYWx1ZUxpc3RQ cml2YXRlPFQ+JiBfcCApCiAgICA6IFFTaGFyZWQoKQp7CiAgICBub2RlID0gbmV3IE5vZGU7IG5v ZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAwOwogICAgSXRlcmF0b3IgYigg X3Aubm9kZS0+bmV4dCApOwogICAgSXRlcmF0b3IgZSggX3Aubm9kZSApOwogICAgSXRlcmF0b3Ig aSggbm9kZSApOwogICAgd2hpbGUoIGIgIT0gZSApCiAgICAgICAgaW5zZXJ0KCBpLCAqYisrICk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogUVZhbHVlTGlzdFByaXZhdGU8VD46On5RVmFsdWVMaXN0 UHJpdmF0ZSgpIHsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICB3aGlsZSggcCAhPSBu b2RlICkgewogICAgICAgIE5vZGVQdHIgeCA9IHAtPm5leHQ7CiAgICAgICAgZGVsZXRlIHA7CiAg ICAgICAgcCA9IHg7CiAgICB9CiAgICBkZWxldGUgbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ CiB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6SXRlcmF0b3IgUVZhbHVlTGlzdFByaXZh dGU8VD46Omluc2VydCggdHlwZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIGl0 LCBjb25zdCBUJiB4ICkKewogICAgTm9kZVB0ciBwID0gbmV3IE5vZGUoIHggKTsKICAgIHAtPm5l eHQgPSBpdC5ub2RlOwogICAgcC0+cHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICBpdC5ub2RlLT5w cmV2LT5uZXh0ID0gcDsKICAgIGl0Lm5vZGUtPnByZXYgPSBwOwogICAgbm9kZXMrKzsKICAgIHJl dHVybiBwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRl PFQ+OjpJdGVyYXRvciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6cmVtb3ZlKCB0eXBlbmFtZSBRVmFs dWVMaXN0UHJpdmF0ZTxUPjo6SXRlcmF0b3IgaXQgKQp7CiAgICAoKGl0Lm5vZGUgIT0gbm9kZSkg PyAodm9pZCkwIDogcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpdC5ub2Rl ICE9IG5vZGUiLCIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiwzMDEp KTsKICAgIE5vZGVQdHIgbmV4dCA9IGl0Lm5vZGUtPm5leHQ7CiAgICBOb2RlUHRyIHByZXYgPSBp dC5ub2RlLT5wcmV2OwogICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICBuZXh0LT5wcmV2ID0gcHJl djsKICAgIGRlbGV0ZSBpdC5ub2RlOwogICAgbm9kZXMtLTsKICAgIHJldHVybiBJdGVyYXRvcigg bmV4dCApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRl PFQ+OjpOb2RlUHRyIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpmaW5kKCB0eXBlbmFtZSBRVmFsdWVM aXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0CnsKICAgIENv bnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CiAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5vZGUg KTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3QgPT0geCAp CiAgICAgICAgICAgIHJldHVybiBmaXJzdC5ub2RlOwogICAgICAgICsrZmlyc3Q7CiAgICB9CiAg ICByZXR1cm4gbGFzdC5ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGludCBRVmFsdWVMaXN0 UHJpdmF0ZTxUPjo6ZmluZEluZGV4KCB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Tm9k ZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0CnsKICAgIENvbnN0SXRlcmF0b3IgZmlyc3Qo IHN0YXJ0ICk7CiAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5vZGUgKTsKICAgIGludCBwb3MgPSAw OwogICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkK ICAgICAgICAgICAgcmV0dXJuIHBvczsKICAgICAgICArK2ZpcnN0OwogICAgICAgICsrcG9zOwog ICAgfQogICAgcmV0dXJuIC0xOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHVpbnQgUVZhbHVlTGlz dFByaXZhdGU8VD46OmNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgdWludCByZXN1 bHQgPSAwOwogICAgSXRlcmF0b3IgZmlyc3QgPSBJdGVyYXRvciggbm9kZS0+bmV4dCApOwogICAg SXRlcmF0b3IgbGFzdCA9IEl0ZXJhdG9yKCBub2RlICk7CiAgICB3aGlsZSggZmlyc3QgIT0gbGFz dCkgewogICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICArK3Jlc3VsdDsKICAg ICAgICArK2ZpcnN0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IFQ+CiB1aW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpyZW1vdmUoIGNvbnN0IFQmIHggKQp7CiAg ICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJzdCA9IEl0ZXJhdG9yKCBub2RlLT5u ZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3IoIG5vZGUgKTsKICAgIHdoaWxlKCBm aXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAqZmlyc3QgPT0geCApIHsKICAgICAgICAgICAg Zmlyc3QgPSByZW1vdmUoIGZpcnN0ICk7CiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgIH0g ZWxzZQogICAgICAgICAgICArK2ZpcnN0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKdGVt cGxhdGUgPGNsYXNzIFQ+CiB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBR VmFsdWVMaXN0UHJpdmF0ZTxUPjo6YXQoIHNpemVfdHlwZSBpICkgY29uc3QKewogICAgKChpIDw9 IG5vZGVzKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIs ImkgPD0gbm9kZXMiLCIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbHVlbGlzdC5oIiwz NzIpKTsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICBmb3IoIHNpemVfdHlwZSB4ID0g MDsgeCA8IGk7ICsreCApCiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICByZXR1cm4gcDsKfQoKdGVt cGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpjbGVhcigpCnsKICAg IG5vZGVzID0gMDsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICB3aGlsZSggcCAhPSBu b2RlICkgewogICAgICAgIE5vZGVQdHIgbmV4dCA9IHAtPm5leHQ7CiAgICAgICAgZGVsZXRlIHA7 CiAgICAgICAgcCA9IG5leHQ7CiAgICB9CiAgICBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5v ZGU7Cn0KIyA0MDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFsdWVsaXN0LmgiCnRl bXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRRGVlcENvcHk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh c3MgUVZhbHVlTGlzdAp7CnB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9y PFQ+IGl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBjb25z dF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90 eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy OwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGNvbnN0IHZh bHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCgoKCgogICAgUVZhbHVl TGlzdCgpIHsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47IH0KICAgIFFWYWx1ZUxpc3Qo IGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSB7IHNoID0gbC5zaDsgc2gtPnJlZigpOyB9CgoKCgoK ICAgIFFWYWx1ZUxpc3QoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bGlzdDxUPiYgbCApCiAgICB7CiAg ICAgICAgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47CiAgICAgICAgcUNvcHkoIGwuYmVn aW4oKSwgbC5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKCAqdGhpcyApICk7CiAgICB9CgogICAg flFWYWx1ZUxpc3QoKSB7IHNoLT5kZXJlZkFuZERlbGV0ZSgpOyB9CgogICAgUVZhbHVlTGlzdDxU PiYgb3BlcmF0b3I9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CiAgICAgICAgbC5z aC0+cmVmKCk7CiAgICAgICAgc2gtPmRlcmVmQW5kRGVsZXRlKCk7CiAgICAgICAgc2ggPSBsLnNo OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0PFQ+JiBvcGVyYXRv cj0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwgKQogICAgewogICAgICAgIGRldGFj aCgpOwogICAgICAgIHFDb3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRl ciggKnRoaXMgKSApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGJvb2wgb3BlcmF0 b3I9PSAoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bGlzdDxUPiYgbCApIGNvbnN0CiAgICB7CiAgICAg ICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkgKQogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAg ICAgICAgY29uc3RfaXRlcmF0b3IgaXQyID0gYmVnaW4oKTsKCiAgICAgICAgdHlwZW5hbWUKCiAg ICAgICAgc3RkOjpsaXN0PFQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKICAgICAg ICBmb3IgKCA7IGl0MiAhPSBlbmQoKTsgKytpdDIsICsraXQgKQogICAgICAgIGlmICggISgoKml0 MikgPT0gKCppdCkpICkKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBU UlVFOwogICAgfQoKCgoKCiAgICBib29sIG9wZXJhdG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+ JiBsICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBs ICkgY29uc3QgeyByZXR1cm4gISggKnRoaXMgPT0gbCApOyB9CiAgICBpdGVyYXRvciBiZWdpbigp IHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPm5vZGUtPm5leHQgKTsgfQogICAgY29u c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciggc2gtPm5v ZGUtPm5leHQgKTsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJh dG9yKCBzaC0+bm9kZSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy biBjb25zdF9pdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgaXRlcmF0b3IgaW5zZXJ0KCBpdGVy YXRvciBpdCwgY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBpdCwg eCApOyB9CiAgICB1aW50IHJlbW92ZSggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBz aC0+cmVtb3ZlKCB4ICk7IH0KICAgIHZvaWQgY2xlYXIoKTsKCiAgICBRVmFsdWVMaXN0PFQ+JiBv cGVyYXRvcjw8ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAgICAgYXBwZW5kKCB4ICk7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1 cm4gc2gtPm5vZGVzOyB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGVz ID09IDA7IH0KICAgIHZvaWQgcHVzaF9mcm9udCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHNo LT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQogICAgdm9pZCBwdXNoX2JhY2soIGNvbnN0IFQmIHgg KSB7IGRldGFjaCgpOyBzaC0+aW5zZXJ0KCBlbmQoKSwgeCApOyB9CiAgICBpdGVyYXRvciBlcmFz ZSggaXRlcmF0b3IgcG9zICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5yZW1vdmUoIHBvcyApOyB9 CiAgICBpdGVyYXRvciBlcmFzZSggaXRlcmF0b3IgZmlyc3QsIGl0ZXJhdG9yIGxhc3QgKTsKICAg IHJlZmVyZW5jZSBmcm9udCgpIHsgOyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVy ZW5jZSBmcm9udCgpIGNvbnN0IHsgOyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBi YWNrKCkgeyA7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygp IGNvbnN0IHsgOyByZXR1cm4gKigtLWVuZCgpKTsgfQogICAgdm9pZCBwb3BfZnJvbnQoKSB7IDsg ZXJhc2UoIGJlZ2luKCkgKTsgfQogICAgdm9pZCBwb3BfYmFjaygpIHsKICAgICAgICA7CiAgICAg ICAgaXRlcmF0b3IgdG1wID0gZW5kKCk7CiAgICAgICAgZXJhc2UoIC0tdG1wICk7CiAgICB9CiAg ICB2b2lkIGluc2VydCggaXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgbiwgY29uc3QgVCYgeCApOwoj IDUyMiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIKICAgIFFWYWx1 ZUxpc3Q8VD4gb3BlcmF0b3IrICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0OwogICAg UVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKTsKCiAg ICBpdGVyYXRvciBmcm9tTGFzdCgpIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPm5v ZGUtPnByZXYgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZnJvbUxhc3QoKSBjb25zdCB7IHJldHVy biBjb25zdF9pdGVyYXRvciggc2gtPm5vZGUtPnByZXYgKTsgfQoKICAgIGJvb2wgaXNFbXB0eSgp IGNvbnN0IHsgcmV0dXJuICggc2gtPm5vZGVzID09IDAgKTsgfQoKICAgIGl0ZXJhdG9yIGFwcGVu ZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBlbmQoKSwgeCAp OyB9CiAgICBpdGVyYXRvciBwcmVwZW5kKCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJu IHNoLT5pbnNlcnQoIGJlZ2luKCksIHggKTsgfQoKICAgIGl0ZXJhdG9yIHJlbW92ZSggaXRlcmF0 b3IgaXQgKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPnJlbW92ZSggaXQgKTsgfQoKICAgIFQmIGZp cnN0KCkgeyA7IGRldGFjaCgpOyByZXR1cm4gc2gtPm5vZGUtPm5leHQtPmRhdGE7IH0KICAgIGNv bnN0IFQmIGZpcnN0KCkgY29uc3QgeyA7IHJldHVybiBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQog ICAgVCYgbGFzdCgpIHsgOyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5kYXRhOyB9 CiAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyA7IHJldHVybiBzaC0+bm9kZS0+cHJldi0+ZGF0 YTsgfQoKICAgIFQmIG9wZXJhdG9yW10gKCBzaXplX3R5cGUgaSApIHsgOyBkZXRhY2goKTsgcmV0 dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXSAoIHNpemVfdHlw ZSBpICkgY29uc3QgeyA7IHJldHVybiBzaC0+YXQoaSktPmRhdGE7IH0KICAgIGl0ZXJhdG9yIGF0 KCBzaXplX3R5cGUgaSApIHsgOyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+YXQoaSkg KTsgfQogICAgY29uc3RfaXRlcmF0b3IgYXQoIHNpemVfdHlwZSBpICkgY29uc3QgeyA7IHJldHVy biBjb25zdF9pdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIGl0ZXJhdG9yIGZpbmQgKCBjb25z dCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggc2gtPm5vZGUt Pm5leHQsIHgpICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdCBUJiB4ICkgY29u c3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwgeCkg KTsgfQogICAgaXRlcmF0b3IgZmluZCAoIGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBkZXRh Y2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAgIGNv bnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdF9pdGVyYXRvciBpdCwgY29uc3QgVCYgeCApIGNvbnN0 IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAg IGludCBmaW5kSW5kZXgoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZEluZGV4 KCBzaC0+bm9kZS0+bmV4dCwgeCkgOyB9CiAgICBzaXplX3R5cGUgY29udGFpbnMoIGNvbnN0IFQm IHggKSBjb25zdCB7IHJldHVybiBzaC0+Y29udGFpbnMoIHggKTsgfQoKICAgIHNpemVfdHlwZSBj b3VudCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQoKICAgIFFWYWx1ZUxpc3Q8VD4mIG9w ZXJhdG9yKz0gKCBjb25zdCBUJiB4ICkKICAgIHsKICAgICAgICBhcHBlbmQoIHggKTsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBJ dGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gQ29uc3RJdGVy YXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7Cgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRl dGFjaCgpIHsgaWYgKCBzaC0+Y291bnQgPiAxICkgZGV0YWNoSW50ZXJuYWwoKTsgfQoKCgoKICAg IFFWYWx1ZUxpc3RQcml2YXRlPFQ+KiBzaDsKCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaEludGVy bmFsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFEZWVwQ29weTwgUVZhbHVlTGlzdDxUPiA+Owp9OwoK dGVtcGxhdGUgPGNsYXNzIFQ+CiBib29sIFFWYWx1ZUxpc3Q8VD46Om9wZXJhdG9yPT0gKCBjb25z dCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKewogICAgaWYgKCBzaXplKCkgIT0gbC5zaXplKCkg KQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7 CiAgICBjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBsLmVu ZCgpOyArK2l0LCArK2l0MiApCiAgICAgICAgaWYgKCAhKCAqaXQgPT0gKml0MiApICkKICAgICAg ICAgICAgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU Pgogdm9pZCBRVmFsdWVMaXN0PFQ+OjpjbGVhcigpCnsKICAgIGlmICggc2gtPmNvdW50ID09IDEg KSBzaC0+Y2xlYXIoKTsgZWxzZSB7IHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJp dmF0ZTxUPjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5cGVuYW1lIFFWYWx1ZUxpc3Q8VD46 Oml0ZXJhdG9yIFFWYWx1ZUxpc3Q8VD46OmVyYXNlKCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+Ojpp dGVyYXRvciBmaXJzdCwgdHlwZW5hbWUgUVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgbGFzdCApCnsK ICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgICAgZXJhc2UoIGZpcnN0KysgKTsKICAg IHJldHVybiBsYXN0Owp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3Q8VD46 Omluc2VydCggdHlwZW5hbWUgUVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgcG9zLCBzaXplX3R5cGUg biwgY29uc3QgVCYgeCApCnsKICAgIGZvciAoIDsgbiA+IDA7IC0tbiApCiAgICAgICAgaW5zZXJ0 KCBwb3MsIHggKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+IFFWYWx1ZUxp c3Q8VD46Om9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBR VmFsdWVMaXN0PFQ+IGwyKCAqdGhpcyApOwogICAgZm9yKCBjb25zdF9pdGVyYXRvciBpdCA9IGwu YmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsK ICAgIHJldHVybiBsMjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiBRVmFsdWVMaXN0PFQ+JiBRVmFs dWVMaXN0PFQ+OjpvcGVyYXRvcis9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGZv ciggY29uc3RfaXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQog ICAgICAgIGFwcGVuZCggKml0ICk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz cyBUPgogdm9pZCBRVmFsdWVMaXN0PFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJl ZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0UHJpdmF0ZTxUPiggKnNoICk7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYgcywgUVZhbHVl TGlzdDxUPiYgbCApCnsKICAgIGwuY2xlYXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+IGM7 CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkKICAgIHsKICAgICAgICBUIHQ7 CiAgICAgICAgcyA+PiB0OwogICAgICAgIGwuYXBwZW5kKCB0ICk7CiAgICAgICAgaWYgKCBzLmF0 RW5kKCkgKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBzOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29u c3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIHMgPDwgKFFfVUlOVDMyKWwuc2l6ZSgpOwogICAg UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gaXQgPSBsLmJlZ2luKCk7CiAgICBmb3IoIDsgaXQg IT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCAqaXQ7CiAgICByZXR1cm4gczsKfQojIDQ3 ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1hcC5oIiAyCgoKCgojIDEgIi91c3IvbG9j YWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tYXAiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvbWFwIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfdHJlZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1Ji X3RyZWVfY29sb3IgeyBfTV9yZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVj dCBfUmJfdHJlZV9ub2RlX2Jhc2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSog X0Jhc2VfcHRyOwoKICAgIF9SYl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9N X3BhcmVudDsKICAgIF9CYXNlX3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoK ICAgIHN0YXRpYyBfQmFzZV9wdHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsK ICAgICAgd2hpbGUgKF9feC0+X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAg IHJldHVybiBfX3g7CiAgICB9CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShf QmFzZV9wdHIgX194KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3gg PSBfX3gtPl9NX3JpZ2h0OwogICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9WYWw+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJl ZV9ub2RlX2Jhc2UKICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlu a190eXBlOwogICAgICBfVmFsIF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90 cmVlX2Jhc2VfaXRlcmF0b3IKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jh c2VfcHRyIF9CYXNlX3B0cjsKICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CgogICAgX0Jhc2VfcHRyIF9NX25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAg IHsKICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAg X01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9N X2xlZnQgIT0gMCkKICAgICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAg ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25v ZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAg IF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9k ZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0K ICAgIH0KCiAgICB2b2lkCiAgICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9k ZS0+X01fY29sb3IgPT0gX01fcmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9N X3BhcmVudCA9PSBfTV9ub2RlKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsK ICAgICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAg IF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+ X01fcmlnaHQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAg IF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg X0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9u b2RlID09IF9feS0+X01fbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUg PSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0K ICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3Qg X1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewog ICAgICB0eXBlZGVmIF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5j ZTsKICAgICAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRl cmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJl ZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0 ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+ IF9TZWxmOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7Cgog ICAgICBfUmJfdHJlZV9pdGVyYXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5r X3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29u c3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVm ZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9k ZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBj b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJh dG9yKysoKQogICAgICB7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0 aGlzOwogICAgICB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewog ICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAg ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgp IHsgX01fZGVjcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3Bl cmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAg IF9NX2RlY3JlbWVudCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf UmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsLCBfUmVmLCBfUHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25z dCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1Zh bCwgX1ZhbCYsIF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9f eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh bCYsIGNvbnN0IF9WYWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N X25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5h bWUgX1B0cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0 ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90 cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29u c3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJl ZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1Zh bCYsIF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01f bm9kZSAhPSBfX3kuX01fbm9kZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9s ZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3Qp CiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194 LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAg ICBfX3ktPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194 LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsK ICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5f TV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5f TV9yaWdodCA9IF9feTsKICAgIF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50 ID0gX195OwogIH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3Ry ZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBf UmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9 IF9feS0+X01fcmlnaHQ7CiAgICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9N X3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFy ZW50OwoKICAgIGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNl IGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVu dC0+X01fcmlnaHQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0 ID0gX195OwogICAgX195LT5fTV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195 OwogIH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2Nv bG9yID0gX01fcmVkOwogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gt Pl9NX3BhcmVudC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+ X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAg ICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQt Pl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xv ciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJl bnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0g X01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9j b2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9w YXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsK ICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xv ciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+ X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQo X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAg ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAg ICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg ICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gt Pl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAg IF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gt Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3Jv dGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAg X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAg ICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jv b3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9j b2xvciA9IF9NX2JsYWNrOwogIH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJf dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9z dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9f cmlnaHRtb3N0KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1Ji X3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFy ZW50ID0gMDsKICAgIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9y aWdodDsKICAgIGVsc2UKICAgICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3gg PSBfX3ktPl9NX2xlZnQ7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195 LT5fTV9yaWdodDsKICAgICAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAg ICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAg ICAgICB9CiAgICBpZiAoX195ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQt Pl9NX3BhcmVudCA9IF9feTsKICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAg ICAgICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBf X3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01f cGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9s ZWZ0ID0gX194OwogICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAg ICAgICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAg ICAgIGVsc2UKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9 PSBfX3opCiAgICAgICAgICBfX3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9w YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg PSBfX3k7CiAgICAgICAgZWxzZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g X195OwogICAgICAgIF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3Rk Ojpzd2FwKF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsK CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3Bh cmVudDsKICAgICAgICBpZiAoX194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9N X3BhcmVudDsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9f eDsKICAgICAgICBlbHNlCiAgICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0g X196KQogICAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAg IGVsc2UKICAgICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAg IGlmIChfX2xlZnRtb3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDAp CiAgICAgICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0o X194KTsKICAgICAgICBpZiAoX19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+ X01fbGVmdCA9PSAwKQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoK ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jh c2U6Ol9TX21heGltdW0oX194KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01f cmVkKQogICAgICB7CiAgICAgICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8 IF9feC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFy ZW50LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5f TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f dy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01f Y29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9f eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9N X3JpZ2h0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0 ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01f YmxhY2spICYmCiAgICAgICAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAg ICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3Bh cmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9N X3JpZ2h0ID09IDAKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2Nv bG9yID09IF9NX2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsK ICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAg ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAg ICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29s b3I7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg ICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9f dy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90 cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg ICAgICAgIHsKCiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFy ZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2Js YWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7 CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAg ICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAg ICAgICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+ X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3gg PSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+ X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+ X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2Nv bG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01f cmVkOwogICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jv b3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hf cGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3Ig PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAg ICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAg ICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg IGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9f eTsKICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBi b29sIF9TX2luc3RhbmNlbGVzcz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsK ICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv Yz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUK ICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9 CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAg ICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVj dGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0Fs bG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJf dHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAg ICAgX01fZ2V0X25vZGUoKSB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsg fQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkK ICAgICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90 cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv bnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3Rl ZDoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2Nf dHlwZQogICAgICBfQWxsb2NfdHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAg X01fZ2V0X25vZGUoKSB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAg IHZvaWQKICAgICAgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9j X3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBf UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAg IHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2Ms IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK CiAgICAgIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBf QmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVf YmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4g PgogICAgY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxs b2M+CiAgICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNl OwoKICAgIHByb3RlY3RlZDoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNl X3B0cjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7Cgog ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1Zh bCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5 cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1 ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3Rf cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAg IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg YWxsb2NhdG9yX3R5cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAg ICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9k ZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAg X01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xp bmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9D b25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4u LikKICAgICAgICAgIHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRo cm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xp bmtfdHlwZQogICAgICBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAg ICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQp OwogICAgICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAt Pl9NX2xlZnQgPSAwOwogICAgICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJu IF9fdG1wOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBl IF9fcCkKICAgICAgewogICAgICAgIF9EZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAg ICAgICBfTV9wdXRfbm9kZShfX3ApOwogICAgICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9j b3VudDsKICAgICAgX0NvbXBhcmUgX01fa2V5X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgog ICAgICBfTV9yb290KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N X3BhcmVudDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7 IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtf dHlwZSYKICAgICAgX01fcmlnaHRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBf TV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1Nf bGVmdChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQp OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBf X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRp YyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChf TGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAg ICAgIF9TX3ZhbHVlKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxk OyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194 KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMg X1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBf X3gtPl9NX2NvbG9yOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChf QmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAg ICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJl dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtf dHlwZSYKICAgICAgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBl JikoX194LT5fTV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3Zh bHVlKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9m aWVsZDsgfQoKICAgICAgc3RhdGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIg X194KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30K CiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9f eCkgeyByZXR1cm4gKF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMg X0xpbmtfdHlwZQogICAgICBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVy biAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAg ICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAg ICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0o X194KTsgfQoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1 ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90 cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4K ICAgICAgY29uc3RfaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29u c3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJz ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAg ICBpdGVyYXRvcgogICAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwg Y29uc3QgdmFsdWVfdHlwZSYgX192KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShf TGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFz ZShfTGlua190eXBlIF9feCk7CgogICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAg IDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w YXJlKCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNv bnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwg X01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5 X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwg Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVf Y291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFs aXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9j YXRvcigpKSwgX01fbm9kZV9jb3VudCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFy ZShfX3guX01fa2V5X2NvbXBhcmUpCiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9 PSAwKQogICAgICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAg ICAgIHsKICAgICAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAg ICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICAg ICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBf TV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAg ICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJf dHJlZSgpIHsgY2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAg ICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IoX01f aGVhZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0 bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwog ICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2NvbXAoKSBjb25z dCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4o KSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBi ZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAg ICAgIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAg ICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CgogICAgICByZXZlcnNlX2l0ZXJh dG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Cgog ICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9y CiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAg ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkg Y29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAg IHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpzd2FwKF9NX2hlYWRlciwgX190Ll9N X2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2Nv dW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFy ZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlx dWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9l cXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0 X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAg ICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0 IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv cj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRl cmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXplX3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5 X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0 ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBf X2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIo KQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkKICAgICAgICAgIHsKICAg ICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9 IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmln aHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAg ICAgICAgfQogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlf dHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQo Y29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9i b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRl cmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFp cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0 IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBj b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5 cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAg ICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJl dHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQog ICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj b25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBf X3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25z dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQog IHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8 X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1Ji X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg X194LnN3YXAoX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw ZW5hbWUgX0FsbG9jPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz4mCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAg ICAgICB7CgogICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwog ICAgICAgICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBp ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9v dCgpID0gMDsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAg ICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9f eC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9T X21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h eGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25v ZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195Xywg Y29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl KSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBf TGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8 CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kp KSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAg ICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX196OwogICAgICAgICAgICAg IF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChf X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9k ZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195 ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAg ICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAgICBfU19sZWZ0KF9feikgPSAw OwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwg X01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVfY291bnQ7CiAgICAgIHJldHVy biBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoY29uc3QgX1Zh bCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7 CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5 T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6 IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195 LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0 eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h bWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICBib29sPgogICAgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShj b25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwog ICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVl OwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194Owog ICAgICAgICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19r ZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdo dChfX3gpOwogICAgICAgIH0KICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAg ICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1 cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwog ICAgICAgIGVsc2UKICAgICAgICAgIC0tX19qOwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nf a2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFp cjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICBy ZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJh dG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxv Yz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBf X3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9s ZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAg IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01f bm9kZSkpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwg X19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0 dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9f cG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChf TV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp KQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwog ICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0 OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVm b3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01f a2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikp CiAgICAgICAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tl eShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf U19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9N X2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0 aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0 ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6CiAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192 KQogICAgewogICAgICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVm dCkKICAgICAgICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAh X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCko X192KSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBf X3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1 cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9u Ll9NX25vZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9j b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAg ICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRp b247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShf S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAg ICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAg ICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsK ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAg ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl bmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHRlbXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWws X0tvVixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBf X2xhc3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAg dHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgog ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGlu c2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2Zp cnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAg ICAgX0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFu Y2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xl ZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f aGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kpOwogICAgICAtLV9NX25v ZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQogICAgewogICAg ICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogICAgICBz aXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgZXJh c2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1Ji X3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUKICAg IF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01fY29weShf TGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApCiAgICB7CgogICAgICBfTGlua190eXBlIF9f dG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICBfX3RvcC0+X01fcGFyZW50ID0gX19wOwoK ICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAg ICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAg ICAgICAgX19wID0gX190b3A7CiAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CgogICAgICAg ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0xpbmtfdHlw ZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgICAgICAgICAgX19wLT5fTV9sZWZ0ID0g X195OwogICAgICAgICAgICAgIF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICAgICAgICAgIGlm IChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHko X1NfcmlnaHQoX194KSwgX195KTsKICAgICAgICAgICAgICBfX3AgPSBfX3k7CiAgICAgICAgICAg ICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRj aCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX190b3ApOwogICAgICAgICAgdGhy b3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX190b3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X01fZXJhc2UoX0xpbmtf dHlwZSBfX3gpCiAgICB7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAg ICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9T X2xlZnQoX194KTsKICAgICAgICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgICAgICAgX194ID0g X195OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJh dG9yIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3Qg PT0gZW5kKCkpCiAgICAgICAgY2xlYXIoKTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVl PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGNvbnN0 IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9f Zmlyc3QgIT0gX19sYXN0KQogICAgICAgIGVyYXNlKCpfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5h bWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJh dG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6 ZmluZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVh ZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3gg IT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAg ICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAg ICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9f eSk7CiAgICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nf a2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p dGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz46OgogICAgZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5 cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAg ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJl KF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChf X3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAg IH0KICAgICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJl dHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9u b2RlKSkpID8KICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29u c3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25z dF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9 IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xp bmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp OwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nf a2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsK ICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJu IGl0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXks X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0 IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7 CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAw KQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAg ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBf X3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAg X0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9v dCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShf X2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gp OwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1 cm4gaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h bWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh cmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBwZXJfYm91bmQoY29u c3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRl cjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9 IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAg ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAg X194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lCiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcj4KICAg IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVx dWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKICAgIHsgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0 ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lCiAgcGFpcjx0eXBl bmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3Rf aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29t cGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+CiAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tv ViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29u c3QKICB7CiAgICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93 ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1cHBlcl9ib3VuZChfX2spKTsKICB9CgogIGlubGluZSBpbnQKICBfX2JsYWNrX2NvdW50 KF9SYl90cmVlX25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkK ICB7CiAgICBpZiAoX19ub2RlID09IDApCiAgICAgIHJldHVybiAwOwogICAgaW50IF9fc3VtID0g MDsKICAgIGRvCiAgICAgIHsKICAgICAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfTV9ibGFj aykKICAgICAgICAgICsrX19zdW07CiAgICAgICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAg ICAgICBicmVhazsKICAgICAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICAgICAgfQog ICAgd2hpbGUgKDEpOwogICAgcmV0dXJuIF9fc3VtOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIF9SYl90cmVlPF9L ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0 CiAgICB7CiAgICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAg ICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAg ICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdo dCA9PSBfTV9oZWFkZXI7CgogICAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9z dCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsg X19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAo X0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVm dChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAg aWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5f TV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9y ID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAm JiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0 dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiks IF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wg JiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90 cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgICByZXR1cm4gZmFsc2U7 CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVt KF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9 CiMgNjcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9tYXAiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMSAzCiMgNjYg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX21hcC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWly PGNvbnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG1hcAp7CgogCiAgOwoKcHVibGljOgoKICB0eXBl ZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1Rw IG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7 CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQog ICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+ IHsKICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj dGVkIDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykg OiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVf dHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNv bXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYg X1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0 MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90 eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBw b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0 X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVu Y2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9y OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZl cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw X3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChf Q29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29t cGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t cCwgX19hKSB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNv bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkg e30KCiAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1h cDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5f TV90OwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNv bnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29t cCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxv Y2F0b3IoKTsgfQoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7 IH0KCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdp bigpOyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoK CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoK CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoK CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90 LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01f dC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7 IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZW1wdHkoKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6 ZSgpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3Np emUoKTsgfQojIDIyMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0 ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBr ZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFs dWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZv aWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChf X3guX01fdCk7IH0KIyAyNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9tYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5 cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiMgMjYxICIv dXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBpdGVy YXRvciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAg IHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQoKCgoKCgoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlx dWUoX19maXJzdCwgX19sYXN0KTsKICB9CiMgMjg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRp b24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDMwOSAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgdm9pZCBlcmFz ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19m aXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoj IDMzMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAz CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQo X194KTsgfQojIDM0NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X21hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM1NCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtl eV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVu ZCgpID8gMCA6IDE7CiAgfQojIDM2OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KIyAzODIgIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9y IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90 Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQojIDM5MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA0MDMgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0 ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxf cmFuZ2UoX194KTsKICB9CiMgNDQzICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfbWFwLmgiIDMKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBl cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5l cXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBj bGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtYXA8 X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw PF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEs IGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFw PF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFw PF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0o Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0 dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8 IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg ICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194 LnN3YXAoX195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIv bWFwIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf bXVsdGltYXAuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9tdWx0aW1hcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9L ZXksIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAg ICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+ CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0 aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwojIDkwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7Cgog CiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBk YXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0 IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoK ICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBl LCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9D b21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVl X2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wg b3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkg Y29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAg fTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAg ICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpj b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw ZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7 IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90 Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f dChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAg bXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6 IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5 X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2 YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9N X3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkg eyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj b25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0 dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJl dHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVn aW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVy YXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCiAgYm9vbCBl bXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKCiAgc2l6ZV90eXBlIHNpemUo KSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKCiAgc2l6ZV90eXBlIG1heF9zaXplKCkg Y29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CgogIHZvaWQgc3dhcChtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoj IDI0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHJldHVybiBf TV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiMgMjU5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmlu c2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KIyAyNzAgIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19s YXN0KTsKICB9CiMgMjg0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfbXVsdGltYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90 LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMjk3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf dHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyAzMDkgIi91c3IvbG9jYWwv Z2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBlcmFz ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19m aXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoj IDMzMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu ZmluZChfX3gpOyB9CiMgMzQ1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KCgoKCgoKICBzaXplX3R5cGUg Y291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gp OyB9CiMgMzY1ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs dGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHty ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4ICIvdXNyL2xvY2FsL2djYzMuMi9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxv d2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxv d2VyX2JvdW5kKF9feCk7CiAgfQoKCgoKCgogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtl eV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogIGNv bnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQojIDQxMyAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBwYWlyPGl0ZXJhdG9y LGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4g X01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyA0MzEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixj b25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf SzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0 b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBs YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k IGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4m KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f dCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy biBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+ KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y Pj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAo bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9f eSk7Cn0KCn0KIyA2OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL21hcCIgMiAz CiMgNTIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFwLmgiIDIKCgoKCnN0cnVjdCBR TWFwTm9kZUJhc2UKewogICAgZW51bSBDb2xvciB7IFJlZCwgQmxhY2sgfTsKCiAgICBRTWFwTm9k ZUJhc2UqIGxlZnQ7CiAgICBRTWFwTm9kZUJhc2UqIHJpZ2h0OwogICAgUU1hcE5vZGVCYXNlKiBw YXJlbnQ7CgogICAgQ29sb3IgY29sb3I7CgogICAgUU1hcE5vZGVCYXNlKiBtaW5pbXVtKCkgewog ICAgICAgIFFNYXBOb2RlQmFzZSogeCA9IHRoaXM7CiAgICAgICAgd2hpbGUgKCB4LT5sZWZ0ICkK ICAgICAgICAgICAgeCA9IHgtPmxlZnQ7CiAgICAgICAgcmV0dXJuIHg7CiAgICB9CgogICAgUU1h cE5vZGVCYXNlKiBtYXhpbXVtKCkgewogICAgICAgIFFNYXBOb2RlQmFzZSogeCA9IHRoaXM7CiAg ICAgICAgd2hpbGUgKCB4LT5yaWdodCApCiAgICAgICAgICAgIHggPSB4LT5yaWdodDsKICAgICAg ICByZXR1cm4geDsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4Kc3RydWN0 IFFNYXBOb2RlIDogcHVibGljIFFNYXBOb2RlQmFzZQp7CiAgICBRTWFwTm9kZSggY29uc3QgSyYg X2tleSwgY29uc3QgVCYgX2RhdGEgKSB7IGRhdGEgPSBfZGF0YTsga2V5ID0gX2tleTsgfQogICAg UU1hcE5vZGUoIGNvbnN0IEsmIF9rZXkgKSB7IGtleSA9IF9rZXk7IH0KICAgIFFNYXBOb2RlKCBj b25zdCBRTWFwTm9kZTxLLFQ+JiBfbiApIHsga2V5ID0gX24ua2V5OyBkYXRhID0gX24uZGF0YTsg fQogICAgUU1hcE5vZGUoKSB7IH0KICAgIFQgZGF0YTsKICAgIEsga2V5Owp9OwoKCnRlbXBsYXRl PGNsYXNzIEssIGNsYXNzIFQ+CmNsYXNzIFFNYXBJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0 eXBlZGVmIFFNYXBOb2RlPCBLLCBUID4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGly ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2 YWx1ZV90eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKICAg IHR5cGVkZWYgVCogcG9pbnRlcjsKICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwoKCgoKICAgIFFN YXBOb2RlPEssVD4qIG5vZGU7CgoKCgogICAgUU1hcEl0ZXJhdG9yKCkgOiBub2RlKCAwICkge30K ICAgIFFNYXBJdGVyYXRvciggUU1hcE5vZGU8SyxUPiogcCApIDogbm9kZSggcCApIHt9CiAgICBR TWFwSXRlcmF0b3IoIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIDogbm9kZSggaXQubm9k ZSApIHt9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQg KSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSgg Y29uc3QgUU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5u b2RlOyB9CiAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiBub2RlLT5kYXRhOyB9CiAgICBjb25z dCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBjb25z dCBLJiBrZXkoKSBjb25zdCB7IHJldHVybiBub2RlLT5rZXk7IH0KICAgIFQmIGRhdGEoKSB7IHJl dHVybiBub2RlLT5kYXRhOyB9CiAgICBjb25zdCBUJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbm9k ZS0+ZGF0YTsgfQoKcHJpdmF0ZToKICAgIGludCBpbmMoKTsKICAgIGludCBkZWMoKTsKCnB1Ymxp YzoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAgIGluYygpOwog ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiBvcGVyYXRv cisrKGludCkgewogICAgICAgIFFNYXBJdGVyYXRvcjxLLFQ+IHRtcCA9ICp0aGlzOwogICAgICAg IGluYygpOwogICAgICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUU1hcEl0ZXJhdG9yPEssVD4m IG9wZXJhdG9yLS0oKSB7CiAgICAgICAgZGVjKCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUU1hcEl0 ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgZGVjKCk7CiAgICAgICAgcmV0dXJuIHRt cDsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBUPgogaW50IFFNYXBJdGVyYXRv cjxLLFQ+OjppbmMoKQp7CiAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAoIHRt cC0+cmlnaHQgKSB7CiAgICAgICAgdG1wID0gdG1wLT5yaWdodDsKICAgICAgICB3aGlsZSAoIHRt cC0+bGVmdCApCiAgICAgICAgICAgIHRtcCA9IHRtcC0+bGVmdDsKICAgIH0gZWxzZSB7CiAgICAg ICAgUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5 LT5yaWdodCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0geS0+cGFyZW50 OwogICAgICAgIH0KICAgICAgICBpZiAodG1wLT5yaWdodCAhPSB5KQogICAgICAgICAgICB0bXAg PSB5OwogICAgfQogICAgbm9kZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4KIGludCBRTWFwSXRlcmF0b3I8SyxUPjo6ZGVjKCkKewog ICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKHRtcC0+Y29sb3IgPT0gUU1hcE5v ZGVCYXNlOjpSZWQgJiYKICAgICAgICB0bXAtPnBhcmVudC0+cGFyZW50ID09IHRtcCApIHsKICAg ICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgfSBlbHNlIGlmICh0bXAtPmxlZnQgIT0gMCkgewog ICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+bGVmdDsKICAgICAgICB3aGlsZSAoIHktPnJp Z2h0ICkKICAgICAgICAgICAgeSA9IHktPnJpZ2h0OwogICAgICAgIHRtcCA9IHk7CiAgICB9IGVs c2UgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAgIHdoaWxl ICh0bXAgPT0geS0+bGVmdCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0g eS0+cGFyZW50OwogICAgICAgIH0KICAgICAgICB0bXAgPSB5OwogICAgfQogICAgbm9kZSA9IChO b2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBUPgpj bGFzcyBRTWFwQ29uc3RJdGVyYXRvcgp7CiBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFNYXBOb2Rl PCBLLCBUID4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwoKICAg IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKICAgIHR5cGVkZWYgY29uc3Qg VCogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgVCYgcmVmZXJlbmNlOwoKCgoKCiAgICBRTWFw Tm9kZTxLLFQ+KiBub2RlOwoKCgoKICAgIFFNYXBDb25zdEl0ZXJhdG9yKCkgOiBub2RlKCAwICkg e30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBRTWFwTm9kZTxLLFQ+KiBwICkgOiBub2RlKCBwICkg e30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBp dCApIDogbm9kZSggaXQubm9kZSApIHt9CiAgICBRTWFwQ29uc3RJdGVyYXRvciggY29uc3QgUU1h cEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9wZXJh dG9yPT0oIGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4g bm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFNYXBDb25zdEl0 ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBj b25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCiAgICBj b25zdCBLJiBrZXkoKSBjb25zdCB7IHJldHVybiBub2RlLT5rZXk7IH0KICAgIGNvbnN0IFQmIGRh dGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpwcml2YXRlOgogICAgaW50IGluYygp OwogICAgaW50IGRlYygpOwoKcHVibGljOgogICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgb3Bl cmF0b3IrKygpIHsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog ICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiBvcGVyYXRvcisrKGludCkgewogICAgICAgIFFNYXBD b25zdEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0 dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvci0tKCkg ewogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29u c3RJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUU1hcENvbnN0SXRlcmF0 b3I8SyxUPiB0bXAgPSAqdGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gdG1wOwog ICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcENvbnN0SXRlcmF0 b3I8SyxUPjo6aW5jKCkKewogICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKCB0 bXAtPnJpZ2h0ICkgewogICAgICAgIHRtcCA9IHRtcC0+cmlnaHQ7CiAgICAgICAgd2hpbGUgKCB0 bXAtPmxlZnQgKQogICAgICAgICAgICB0bXAgPSB0bXAtPmxlZnQ7CiAgICB9IGVsc2UgewogICAg ICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAgIHdoaWxlICh0bXAgPT0g eS0+cmlnaHQpIHsKICAgICAgICAgICAgdG1wID0geTsKICAgICAgICAgICAgeSA9IHktPnBhcmVu dDsKICAgICAgICB9CiAgICAgICAgaWYgKHRtcC0+cmlnaHQgIT0geSkKICAgICAgICAgICAgdG1w ID0geTsKICAgIH0KICAgIG5vZGUgPSAoTm9kZVB0cil0bXA7CiAgICByZXR1cm4gMDsKfQoKdGVt cGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcENvbnN0SXRlcmF0b3I8SyxUPjo6ZGVj KCkKewogICAgUU1hcE5vZGVCYXNlKiB0bXAgPSBub2RlOwogICAgaWYgKHRtcC0+Y29sb3IgPT0g UU1hcE5vZGVCYXNlOjpSZWQgJiYKICAgICAgICB0bXAtPnBhcmVudC0+cGFyZW50ID09IHRtcCAp IHsKICAgICAgICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgfSBlbHNlIGlmICh0bXAtPmxlZnQgIT0g MCkgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+bGVmdDsKICAgICAgICB3aGlsZSAo IHktPnJpZ2h0ICkKICAgICAgICAgICAgeSA9IHktPnJpZ2h0OwogICAgICAgIHRtcCA9IHk7CiAg ICB9IGVsc2UgewogICAgICAgIFFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwogICAgICAg IHdoaWxlICh0bXAgPT0geS0+bGVmdCkgewogICAgICAgICAgICB0bXAgPSB5OwogICAgICAgICAg ICB5ID0geS0+cGFyZW50OwogICAgICAgIH0KICAgICAgICB0bXAgPSB5OwogICAgfQogICAgbm9k ZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9CgpjbGFzcyBRTWFwUHJpdmF0ZUJhc2Ug OiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKICAgIFFNYXBQcml2YXRlQmFzZSgpIHsKICAgICAg ICBub2RlX2NvdW50ID0gMDsKICAgIH0KICAgIFFNYXBQcml2YXRlQmFzZSggY29uc3QgUU1hcFBy aXZhdGVCYXNlKiBfbWFwKSB7CiAgICAgICAgbm9kZV9jb3VudCA9IF9tYXAtPm5vZGVfY291bnQ7 CiAgICB9CgoKCgogICAgdm9pZCByb3RhdGVMZWZ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2Rl QmFzZSomIHJvb3QpOwogICAgdm9pZCByb3RhdGVSaWdodCggUU1hcE5vZGVCYXNlKiB4LCBRTWFw Tm9kZUJhc2UqJiByb290ICk7CiAgICB2b2lkIHJlYmFsYW5jZSggUU1hcE5vZGVCYXNlKiB4LCBR TWFwTm9kZUJhc2UqJiByb290ICk7CiAgICBRTWFwTm9kZUJhc2UqIHJlbW92ZUFuZFJlYmFsYW5j ZSggUU1hcE5vZGVCYXNlKiB6LCBRTWFwTm9kZUJhc2UqJiByb290LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFNYXBOb2RlQmFzZSomIGxlZnRtb3N0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNYXBOb2RlQmFzZSomIHJpZ2h0bW9zdCApOwoK CgoKICAgIGludCBub2RlX2NvdW50Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+ CmNsYXNzIFFNYXBQcml2YXRlIDogcHVibGljIFFNYXBQcml2YXRlQmFzZQp7CnB1YmxpYzoKCgoK ICAgIHR5cGVkZWYgUU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYg UU1hcENvbnN0SXRlcmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFFN YXBOb2RlPCBLZXksIFQgPiBOb2RlOwogICAgdHlwZWRlZiBRTWFwTm9kZTwgS2V5LCBUID4qIE5v ZGVQdHI7CgoKCgogICAgUU1hcFByaXZhdGUoKTsKICAgIFFNYXBQcml2YXRlKCBjb25zdCBRTWFw UHJpdmF0ZTwgS2V5LCBUID4qIF9tYXAgKTsKICAgIH5RTWFwUHJpdmF0ZSgpIHsgY2xlYXIoKTsg ZGVsZXRlIGhlYWRlcjsgfQoKICAgIE5vZGVQdHIgY29weSggTm9kZVB0ciBwICk7CiAgICB2b2lk IGNsZWFyKCk7CiAgICB2b2lkIGNsZWFyKCBOb2RlUHRyIHAgKTsKCiAgICBJdGVyYXRvciBiZWdp bigpIHsgcmV0dXJuIEl0ZXJhdG9yKCAoTm9kZVB0cikoaGVhZGVyLT5sZWZ0ICkgKTsgfQogICAg SXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gSXRlcmF0b3IoIGhlYWRlciApOyB9CiAgICBDb25zdEl0 ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvciggKE5vZGVQdHIpKGhl YWRlci0+bGVmdCApICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g Q29uc3RJdGVyYXRvciggaGVhZGVyICk7IH0KCiAgICBDb25zdEl0ZXJhdG9yIGZpbmQoY29uc3Qg S2V5JiBrKSBjb25zdDsKCiAgICB2b2lkIHJlbW92ZSggSXRlcmF0b3IgaXQgKSB7CiAgICAgICAg Tm9kZVB0ciBkZWwgPSAoTm9kZVB0cikgcmVtb3ZlQW5kUmViYWxhbmNlKCBpdC5ub2RlLCBoZWFk ZXItPnBhcmVudCwgaGVhZGVyLT5sZWZ0LCBoZWFkZXItPnJpZ2h0ICk7CiAgICAgICAgZGVsZXRl IGRlbDsKICAgICAgICAtLW5vZGVfY291bnQ7CiAgICB9CiMgNDEzICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcW1hcC5oIgogICAgSXRlcmF0b3IgaW5zZXJ0U2luZ2xlKCBjb25zdCBLZXkm IGsgKTsKICAgIEl0ZXJhdG9yIGluc2VydCggUU1hcE5vZGVCYXNlKiB4LCBRTWFwTm9kZUJhc2Uq IHksIGNvbnN0IEtleSYgayApOwoKcHJvdGVjdGVkOgoKCgogICAgY29uc3QgS2V5JiBrZXkoIFFN YXBOb2RlQmFzZSogYiApIGNvbnN0IHsgcmV0dXJuICgoTm9kZVB0ciliKS0+a2V5OyB9CgoKCgog ICAgTm9kZVB0ciBoZWFkZXI7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFN YXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUoKSB7CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsK ICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJhc2U6OlJlZDsKICAgIGhlYWRlci0+cGFyZW50 ID0gMDsKICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+cmlnaHQgPSBoZWFkZXI7Cn0KdGVtcGxh dGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUo IGNvbnN0IFFNYXBQcml2YXRlPCBLZXksIFQgPiogX21hcCApIDogUU1hcFByaXZhdGVCYXNlKCBf bWFwICkgewogICAgaGVhZGVyID0gbmV3IE5vZGU7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5v ZGVCYXNlOjpSZWQ7CiAgICBpZiAoIF9tYXAtPmhlYWRlci0+cGFyZW50ID09IDAgKSB7CiAgICAg ICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+cmln aHQgPSBoZWFkZXI7CiAgICB9IGVsc2UgewogICAgICAgIGhlYWRlci0+cGFyZW50ID0gY29weSgg KE5vZGVQdHIpKF9tYXAtPmhlYWRlci0+cGFyZW50KSApOwogICAgICAgIGhlYWRlci0+cGFyZW50 LT5wYXJlbnQgPSBoZWFkZXI7CiAgICAgICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5wYXJlbnQt Pm1pbmltdW0oKTsKICAgICAgICBoZWFkZXItPnJpZ2h0ID0gaGVhZGVyLT5wYXJlbnQtPm1heGlt dW0oKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFN YXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBRTWFwUHJpdmF0ZTxLZXksVD46OmNvcHkoIHR5cGVu YW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBwICkKewogICAgaWYgKCAhcCApCiAgICAg ICAgcmV0dXJuIDA7CiAgICBOb2RlUHRyIG4gPSBuZXcgTm9kZSggKnAgKTsKICAgIG4tPmNvbG9y ID0gcC0+Y29sb3I7CiAgICBpZiAoIHAtPmxlZnQgKSB7CiAgICAgICAgbi0+bGVmdCA9IGNvcHko IChOb2RlUHRyKShwLT5sZWZ0KSApOwogICAgICAgIG4tPmxlZnQtPnBhcmVudCA9IG47CiAgICB9 IGVsc2UgewogICAgICAgIG4tPmxlZnQgPSAwOwogICAgfQogICAgaWYgKCBwLT5yaWdodCApIHsK ICAgICAgICBuLT5yaWdodCA9IGNvcHkoIChOb2RlUHRyKShwLT5yaWdodCkgKTsKICAgICAgICBu LT5yaWdodC0+cGFyZW50ID0gbjsKICAgIH0gZWxzZSB7CiAgICAgICAgbi0+cmlnaHQgPSAwOwog ICAgfQogICAgcmV0dXJuIG47Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lk IFFNYXBQcml2YXRlPEtleSxUPjo6Y2xlYXIoKQp7CiAgICBjbGVhciggKE5vZGVQdHIpKGhlYWRl ci0+cGFyZW50KSApOwogICAgaGVhZGVyLT5jb2xvciA9IFFNYXBOb2RlQmFzZTo6UmVkOwogICAg aGVhZGVyLT5wYXJlbnQgPSAwOwogICAgaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhl YWRlcjsKICAgIG5vZGVfY291bnQgPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBU Pgogdm9pZCBRTWFwUHJpdmF0ZTxLZXksVD46OmNsZWFyKCB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxL ZXksVD46Ok5vZGVQdHIgcCApCnsKICAgIHdoaWxlICggcCAhPSAwICkgewogICAgICAgIGNsZWFy KCAoTm9kZVB0cilwLT5yaWdodCApOwogICAgICAgIE5vZGVQdHIgeSA9IChOb2RlUHRyKXAtPmxl ZnQ7CiAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgcCA9IHk7CiAgICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxLZXksVD46OkNvbnN0SXRl cmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjpmaW5kKGNvbnN0IEtleSYgaykgY29uc3QKewogICAg UU1hcE5vZGVCYXNlKiB5ID0gaGVhZGVyOwogICAgUU1hcE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5w YXJlbnQ7CgogICAgd2hpbGUgKCB4ICE9IDAgKSB7CgogICAgICAgIGlmICggISgga2V5KHgpIDwg ayApICkgewogICAgICAgICAgICB5ID0geDsKICAgICAgICAgICAgeCA9IHgtPmxlZnQ7CiAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIH0KICAgIH0KCgoK ICAgIGlmICggeSA9PSBoZWFkZXIgfHwgayA8IGtleSh5KSApCiAgICAgICAgcmV0dXJuIENvbnN0 SXRlcmF0b3IoIGhlYWRlciApOwogICAgcmV0dXJuIENvbnN0SXRlcmF0b3IoIChOb2RlUHRyKXkg KTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXBQcml2YXRl PEtleSxUPjo6SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjppbnNlcnRTaW5nbGUoIGNvbnN0 IEtleSYgayApCnsKCiAgICBRTWFwTm9kZUJhc2UqIHkgPSBoZWFkZXI7CiAgICBRTWFwTm9kZUJh c2UqIHggPSBoZWFkZXItPnBhcmVudDsKICAgIGJvb2wgcmVzdWx0ID0gVFJVRTsKICAgIHdoaWxl ICggeCAhPSAwICkgewogICAgICAgIHJlc3VsdCA9ICggayA8IGtleSh4KSApOwogICAgICAgIHkg PSB4OwogICAgICAgIHggPSByZXN1bHQgPyB4LT5sZWZ0IDogeC0+cmlnaHQ7CiAgICB9CgogICAg SXRlcmF0b3IgaiggKE5vZGVQdHIpeSApOwogICAgaWYgKCByZXN1bHQgKSB7CgogICAgICAgIGlm ICggaiA9PSBiZWdpbigpICkgewogICAgICAgICAgICByZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsK ICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLS1qOwogICAgICAgIH0KICAgIH0KCiAgICBp ZiAoIChqLm5vZGUtPmtleSkgPCBrICkKICAgICAgICByZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsK CiAgICByZXR1cm4gajsKfQoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFt ZSBRTWFwUHJpdmF0ZTxLZXksVD46Okl0ZXJhdG9yIFFNYXBQcml2YXRlPEtleSxUPjo6aW5zZXJ0 KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSogeSwgY29uc3QgS2V5JiBrICkKewogICAg Tm9kZVB0ciB6ID0gbmV3IE5vZGUoIGsgKTsKICAgIGlmICh5ID09IGhlYWRlciB8fCB4ICE9IDAg fHwgayA8IGtleSh5KSApIHsKICAgICAgICB5LT5sZWZ0ID0gejsKICAgICAgICBpZiAoIHkgPT0g aGVhZGVyICkgewogICAgICAgICAgICBoZWFkZXItPnBhcmVudCA9IHo7CiAgICAgICAgICAgIGhl YWRlci0+cmlnaHQgPSB6OwogICAgICAgIH0gZWxzZSBpZiAoIHkgPT0gaGVhZGVyLT5sZWZ0ICkK ICAgICAgICAgICAgaGVhZGVyLT5sZWZ0ID0gejsKICAgIH0gZWxzZSB7CiAgICAgICAgeS0+cmln aHQgPSB6OwogICAgICAgIGlmICggeSA9PSBoZWFkZXItPnJpZ2h0ICkKICAgICAgICAgICAgaGVh ZGVyLT5yaWdodCA9IHo7CiAgICB9CiAgICB6LT5wYXJlbnQgPSB5OwogICAgei0+bGVmdCA9IDA7 CiAgICB6LT5yaWdodCA9IDA7CiAgICByZWJhbGFuY2UoIHosIGhlYWRlci0+cGFyZW50ICk7CiAg ICArK25vZGVfY291bnQ7CiAgICByZXR1cm4gSXRlcmF0b3Ioeik7Cn0KIyA1ODYgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFwLmgiCnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRRGVl cENvcHk7Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CmNsYXNzIFFNYXAKewpwdWJsaWM6 CgoKCiAgICB0eXBlZGVmIEtleSBrZXlfdHlwZTsKICAgIHR5cGVkZWYgVCBtYXBwZWRfdHlwZTsK ICAgIHR5cGVkZWYgUVBhaXI8Y29uc3Qga2V5X3R5cGUsIG1hcHBlZF90eXBlPiB2YWx1ZV90eXBl OwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2YWx1 ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7 CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKCiAgICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgoKCiAgICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgICB0eXBlZGVmIFFNYXBJdGVyYXRvcjxLZXksVD4gaXRlcmF0b3I7CiAgICB0eXBl ZGVmIFFNYXBDb25zdEl0ZXJhdG9yPEtleSxUPiBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYg UVBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3BhaXI7CgogICAgdHlwZWRlZiBRTWFwSXRlcmF0 b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjwgS2V5 LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CiAgICB0eXBlZGVm IFFNYXBQcml2YXRlPCBLZXksIFQgPiBQcml2OwoKCgoKICAgIFFNYXAoKQogICAgewogICAgICAg IHNoID0gbmV3IFFNYXBQcml2YXRlPCBLZXksIFQgPjsKICAgIH0KICAgIFFNYXAoIGNvbnN0IFFN YXA8S2V5LFQ+JiBtICkKICAgIHsKICAgICAgICBzaCA9IG0uc2g7IHNoLT5yZWYoKTsKICAgIH0K CgoKCgoKICAgIFFNYXAoIGNvbnN0IHR5cGVuYW1lIHN0ZDo6bWFwPEtleSxUPiYgbSApCiAgICB7 CiAgICAgICAgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+OwoKCgogICAgICAgIFFNYXBDb25z dEl0ZXJhdG9yPEtleSxUPiBpdCA9IG0uYmVnaW4oKTsKCiAgICAgICAgZm9yICggOyBpdCAhPSBt LmVuZCgpOyArK2l0ICkgewogICAgICAgICAgICB2YWx1ZV90eXBlIHAoICgqaXQpLmZpcnN0LCAo Kml0KS5zZWNvbmQgKTsKICAgICAgICAgICAgaW5zZXJ0KCBwICk7CiAgICAgICAgfQogICAgfQoK ICAgIH5RTWFwKCkKICAgIHsKICAgICAgICBpZiAoIHNoLT5kZXJlZigpICkKICAgICAgICAgICAg ZGVsZXRlIHNoOwogICAgfQogICAgUU1hcDxLZXksVD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFNYXA8 S2V5LFQ+JiBtICk7CgogICAgUU1hcDxLZXksVD4mIG9wZXJhdG9yPSAoIGNvbnN0IHR5cGVuYW1l IHN0ZDo6bWFwPEtleSxUPiYgbSApCiAgICB7CiAgICAgICAgY2xlYXIoKTsKCgoKICAgICAgICBR TWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7CgogICAgICAgIGZvciAoIDsg aXQgIT0gbS5lbmQoKTsgKytpdCApIHsKICAgICAgICAgICAgdmFsdWVfdHlwZSBwKCAoKml0KS5m aXJzdCwgKCppdCkuc2Vjb25kICk7CiAgICAgICAgICAgIGluc2VydCggcCApOwogICAgICAgIH0K ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICBpdGVyYXRvciBiZWdpbigpIHsg ZGV0YWNoKCk7IHJldHVybiBzaC0+YmVnaW4oKTsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyBkZXRh Y2goKTsgcmV0dXJuIHNoLT5lbmQoKTsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z dCB7IHJldHVybiAoKGNvbnN0IFByaXYqKXNoKS0+YmVnaW4oKTsgfQogICAgY29uc3RfaXRlcmF0 b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmVuZCgpOyB9CiAgICBp dGVyYXRvciByZXBsYWNlKCBjb25zdCBLZXkmIGssIGNvbnN0IFQmIHYgKQogICAgewogICAgICAg IHJlbW92ZSggayApOwogICAgICAgIHJldHVybiBpbnNlcnQoIGssIHYgKTsKICAgIH0KCiAgICBz aXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHNoLT5ub2RlX2NvdW50 OwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHNoLT5u b2RlX2NvdW50ID09IDA7CiAgICB9CiAgICBRUGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoIGNv bnN0IHZhbHVlX3R5cGUmIHggKTsKCiAgICB2b2lkIGVyYXNlKCBpdGVyYXRvciBpdCApCiAgICB7 CiAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgc2gtPnJlbW92ZSggaXQgKTsKICAgIH0KICAgIHZv aWQgZXJhc2UoIGNvbnN0IGtleV90eXBlJiBrICk7CiAgICBzaXplX3R5cGUgY291bnQoIGNvbnN0 IGtleV90eXBlJiBrICkgY29uc3Q7CiAgICBUJiBvcGVyYXRvcltdICggY29uc3QgS2V5JiBrICk7 CiAgICB2b2lkIGNsZWFyKCk7CgogICAgaXRlcmF0b3IgZmluZCAoIGNvbnN0IEtleSYgayApCiAg ICB7CiAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCgg ayApLm5vZGUgKTsKICAgIH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdCBLZXkmIGsg KSBjb25zdCB7IHJldHVybiBzaC0+ZmluZCggayApOyB9CgogICAgY29uc3QgVCYgb3BlcmF0b3Jb XSAoIGNvbnN0IEtleSYgayApIGNvbnN0CiAgICAgICAgeyA7IHJldHVybiBzaC0+ZmluZCggayAp LmRhdGEoKTsgfQogICAgYm9vbCBjb250YWlucyAoIGNvbnN0IEtleSYgayApIGNvbnN0CiAgICAg ICAgeyByZXR1cm4gZmluZCggayApICE9IGVuZCgpOyB9CgoKICAgIHNpemVfdHlwZSBjb3VudCgp IGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlX2NvdW50OyB9CgogICAgUVZhbHVlTGlzdDxLZXk+IGtl eXMoKSBjb25zdCB7CiAgICAgICAgUVZhbHVlTGlzdDxLZXk+IHI7CiAgICAgICAgZm9yIChjb25z dF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyArK2kpCiAgICAgICAgICAgIHIuYXBwZW5k KGkua2V5KCkpOwogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8VD4gdmFs dWVzKCkgY29uc3QgewogICAgICAgIFFWYWx1ZUxpc3Q8VD4gcjsKICAgICAgICBmb3IgKGNvbnN0 X2l0ZXJhdG9yIGk9YmVnaW4oKTsgaSE9ZW5kKCk7ICsraSkKICAgICAgICAgICAgci5hcHBlbmQo KmkpOwogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg cmV0dXJuIHNoLT5ub2RlX2NvdW50ID09IDA7IH0KCiAgICBpdGVyYXRvciBpbnNlcnQoIGNvbnN0 IEtleSYga2V5LCBjb25zdCBUJiB2YWx1ZSwgYm9vbCBvdmVyd3JpdGUgPSBUUlVFICk7CiAgICB2 b2lkIHJlbW92ZSggaXRlcmF0b3IgaXQgKSB7IGRldGFjaCgpOyBzaC0+cmVtb3ZlKCBpdCApOyB9 CiAgICB2b2lkIHJlbW92ZSggY29uc3QgS2V5JiBrICk7CiMgNzQ3ICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcW1hcC5oIgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRldGFjaCgpIHsgaWYg KCBzaC0+Y291bnQgPiAxICkgZGV0YWNoSW50ZXJuYWwoKTsgfQoKICAgIFByaXYqIHNoOwpwcml2 YXRlOgogICAgdm9pZCBkZXRhY2hJbnRlcm5hbCgpOwoKICAgIGZyaWVuZCBjbGFzcyBRRGVlcENv cHk8IFFNYXA8S2V5LFQ+ID47Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBRTWFw PEtleSxUPiYgUU1hcDxLZXksVD46Om9wZXJhdG9yPSAoIGNvbnN0IFFNYXA8S2V5LFQ+JiBtICkK ewogICAgbS5zaC0+cmVmKCk7CiAgICBpZiAoIHNoLT5kZXJlZigpICkKICAgICAgICBkZWxldGUg c2g7CiAgICBzaCA9IG0uc2g7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIEtl eSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXA8S2V5LFQ+OjppbnNlcnRfcGFpciBRTWFwPEtleSxU Pjo6aW5zZXJ0KCBjb25zdCB0eXBlbmFtZSBRTWFwPEtleSxUPjo6dmFsdWVfdHlwZSYgeCApCnsK ICAgIGRldGFjaCgpOwogICAgc2l6ZV90eXBlIG4gPSBzaXplKCk7CiAgICBpdGVyYXRvciBpdCA9 IHNoLT5pbnNlcnRTaW5nbGUoIHguZmlyc3QgKTsKICAgIGJvb2wgaW5zZXJ0ZWQgPSBGQUxTRTsK ICAgIGlmICggbiA8IHNpemUoKSApIHsKICAgICAgICBpbnNlcnRlZCA9IFRSVUU7CiAgICAgICAg aXQuZGF0YSgpID0geC5zZWNvbmQ7CiAgICB9CiAgICByZXR1cm4gUVBhaXI8aXRlcmF0b3IsYm9v bD4oIGl0LCBpbnNlcnRlZCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lk IFFNYXA8S2V5LFQ+OjplcmFzZSggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBp dGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkK ICAgICAgICBzaC0+cmVtb3ZlKCBpdCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+ CiB0eXBlbmFtZSBRTWFwPEtleSxUPjo6c2l6ZV90eXBlIFFNYXA8S2V5LFQ+Ojpjb3VudCggY29u c3QgS2V5JiBrICkgY29uc3QKewogICAgY29uc3RfaXRlcmF0b3IgaXQoIHNoLT5maW5kKCBrICku bm9kZSApOwogICAgaWYgKCBpdCAhPSBlbmQoKSApIHsKICAgICAgICBzaXplX3R5cGUgYyA9IDA7 CiAgICAgICAgd2hpbGUgKCBpdCAhPSBlbmQoKSApIHsKICAgICAgICAgICAgKytpdDsKICAgICAg ICAgICAgKytjOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYzsKICAgIH0KICAgIHJldHVybiAw Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBUJiBRTWFwPEtleSxUPjo6b3BlcmF0 b3JbXSAoIGNvbnN0IEtleSYgayApCnsKICAgIGRldGFjaCgpOwogICAgUU1hcE5vZGU8S2V5LFQ+ KiBwID0gc2gtPmZpbmQoIGsgKS5ub2RlOwogICAgaWYgKCBwICE9IHNoLT5lbmQoKS5ub2RlICkK ICAgICAgICByZXR1cm4gcC0+ZGF0YTsKICAgIHJldHVybiBpbnNlcnQoIGssIFQoKSApLmRhdGEo KTsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdm9pZCBRTWFwPEtleSxUPjo6Y2xl YXIoKQp7CiAgICBpZiAoIHNoLT5jb3VudCA9PSAxICkKICAgICAgICBzaC0+Y2xlYXIoKTsKICAg IGVsc2UgewogICAgICAgIHNoLT5kZXJlZigpOwogICAgICAgIHNoID0gbmV3IFFNYXBQcml2YXRl PEtleSxUPjsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdHlwZW5hbWUg UU1hcDxLZXksVD46Oml0ZXJhdG9yIFFNYXA8S2V5LFQ+OjppbnNlcnQoIGNvbnN0IEtleSYga2V5 LCBjb25zdCBUJiB2YWx1ZSwgYm9vbCBvdmVyd3JpdGUgKQp7CiAgICBkZXRhY2goKTsKICAgIHNp emVfdHlwZSBuID0gc2l6ZSgpOwogICAgaXRlcmF0b3IgaXQgPSBzaC0+aW5zZXJ0U2luZ2xlKCBr ZXkgKTsKICAgIGlmICggb3ZlcndyaXRlIHx8IG4gPCBzaXplKCkgKQogICAgICAgIGl0LmRhdGEo KSA9IHZhbHVlOwogICAgcmV0dXJuIGl0Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+ CiB2b2lkIFFNYXA8S2V5LFQ+OjpyZW1vdmUoIGNvbnN0IEtleSYgayApCnsKICAgIGRldGFjaCgp OwogICAgaXRlcmF0b3IgaXQoIHNoLT5maW5kKCBrICkubm9kZSApOwogICAgaWYgKCBpdCAhPSBl bmQoKSApCiAgICAgICAgc2gtPnJlbW92ZSggaXQgKTsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBj bGFzcyBUPgogdm9pZCBRTWFwPEtleSxUPjo6ZGV0YWNoSW50ZXJuYWwoKQp7CiAgICBzaC0+ZGVy ZWYoKTsgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+KCBzaCApOwp9CgoKCnRlbXBsYXRlPGNs YXNzIEtleSwgY2xhc3MgVD4KIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSYg cywgUU1hcDxLZXksVD4mIG0gKSB7CiAgICBtLmNsZWFyKCk7CiAgICBRX1VJTlQzMiBjOwogICAg cyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBpID0gMDsgaSA8IGM7ICsraSApIHsKICAgICAgICBL ZXkgazsgVCB0OwogICAgICAgIHMgPj4gayA+PiB0OwogICAgICAgIG0uaW5zZXJ0KCBrLCB0ICk7 CiAgICAgICAgaWYgKCBzLmF0RW5kKCkgKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJl dHVybiBzOwp9CgoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogUURhdGFTdHJlYW0mIG9w ZXJhdG9yPDwoIFFEYXRhU3RyZWFtJiBzLCBjb25zdCBRTWFwPEtleSxUPiYgbSApIHsKICAgIHMg PDwgKFFfVUlOVDMyKW0uc2l6ZSgpOwogICAgUU1hcENvbnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0g bS5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQgKQogICAgICAgIHMgPDwg aXQua2V5KCkgPDwgaXQuZGF0YSgpOwogICAgcmV0dXJuIHM7Cn0KIyA0NCAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3FtaW1lLmgiIDIKCgoKCmNsYXNzIFFJbWFnZURyYWc7CmNsYXNzIFFU ZXh0RHJhZzsKCmNsYXNzIFFNaW1lU291cmNlCnsKICAgIGZyaWVuZCBjbGFzcyBRQ2xpcGJvYXJk RGF0YTsKCnB1YmxpYzoKICAgIFFNaW1lU291cmNlKCk7CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJj ZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0gMCApIGNvbnN0ID0g MDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsKICAgIHZp cnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25zdCA9IDA7CiAg ICBpbnQgc2VyaWFsTnVtYmVyKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgaW50IHNlcl9ubzsKICAg IGVudW0geyBOb0NhY2hlLCBUZXh0LCBHcmFwaGljcyB9IGNhY2hlVHlwZTsKICAgIHVuaW9uCiAg ICB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICBRU3RyaW5nICpzdHI7CiAg ICAgICAgICAgIFFDU3RyaW5nICpzdWJ0eXBlOwogICAgICAgIH0gdHh0OwogICAgICAgIHN0cnVj dAogICAgICAgIHsKICAgICAgICAgICAgUUltYWdlICppbWc7CiAgICAgICAgICAgIFFQaXhtYXAg KnBpeDsKICAgICAgICB9IGdmeDsKICAgIH0gY2FjaGU7CiAgICB2b2lkIGNsZWFyQ2FjaGUoKTsK CgogICAgZnJpZW5kIGNsYXNzIFFJbWFnZURyYWc7CiAgICBmcmllbmQgY2xhc3MgUVRleHREcmFn OwoKfTsKCmlubGluZSBpbnQgUU1pbWVTb3VyY2U6OnNlcmlhbE51bWJlcigpIGNvbnN0CnsgcmV0 dXJuIHNlcl9ubzsgfQoKY2xhc3MgUVN0cmluZ0xpc3Q7CmNsYXNzIFFNaW1lU291cmNlRmFjdG9y eURhdGE7CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWltZVNvdXJj ZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAgIHN0YXRp YyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBz ZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiApOwogICAgc3RhdGljIFFNaW1l U291cmNlRmFjdG9yeSogdGFrZURlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBhZGRG YWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkgKmYgKTsKICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZh Y3RvcnkoIFFNaW1lU291cmNlRmFjdG9yeSAqZiApOwoKICAgIHZpcnR1YWwgY29uc3QgUU1pbWVT b3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNvbnN0OwogICAgdmlydHVhbCBR U3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0 IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29u c3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3RyaW5nJiBjb250ZXh0KSBjb25z dDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNv bnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZSggY29uc3QgUVN0 cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQ aXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBRUGl4bWFwJiBwbSApOwogICAg dmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBRTWltZVNvdXJj ZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRoKCBjb25zdCBRU3RyaW5nTGlz dCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBjb25zdDsKICAgIHZvaWQg YWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZW5z aW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFyKiBtaW1ldHlwZSApOwoKcHJp dmF0ZToKICAgIFFNaW1lU291cmNlICpkYXRhSW50ZXJuYWwoY29uc3QgUVN0cmluZyYgYWJzX25h bWUsIGNvbnN0IFFNYXA8UVN0cmluZywgUVN0cmluZz4gJmV4dGVuc2lvbnMgKSBjb25zdDsKICAg IFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xZXZlbnQuaCIgMgoKCgpjbGFzcyBRRXZlbnQ6IHB1YmxpYyBRdAp7CnB1YmxpYzoK ICAgIGVudW0gVHlwZSB7CiMgNjEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZXZlbnQu aCIKICAgICAgICBOb25lID0gMCwKCgogICAgICAgIFRpbWVyID0gMSwKICAgICAgICBNb3VzZUJ1 dHRvblByZXNzID0gMiwKICAgICAgICBNb3VzZUJ1dHRvblJlbGVhc2UgPSAzLAogICAgICAgIE1v dXNlQnV0dG9uRGJsQ2xpY2sgPSA0LAogICAgICAgIE1vdXNlTW92ZSA9IDUsCiAgICAgICAgS2V5 UHJlc3MgPSA2LAogICAgICAgIEtleVJlbGVhc2UgPSA3LAogICAgICAgIEZvY3VzSW4gPSA4LAog ICAgICAgIEZvY3VzT3V0ID0gOSwKICAgICAgICBFbnRlciA9IDEwLAogICAgICAgIExlYXZlID0g MTEsCiAgICAgICAgUGFpbnQgPSAxMiwKICAgICAgICBNb3ZlID0gMTMsCiAgICAgICAgUmVzaXpl ID0gMTQsCiAgICAgICAgQ3JlYXRlID0gMTUsCiAgICAgICAgRGVzdHJveSA9IDE2LAogICAgICAg IFNob3cgPSAxNywKICAgICAgICBIaWRlID0gMTgsCiAgICAgICAgQ2xvc2UgPSAxOSwKICAgICAg ICBRdWl0ID0gMjAsCiAgICAgICAgUmVwYXJlbnQgPSAyMSwKICAgICAgICBTaG93TWluaW1pemVk ID0gMjIsCiAgICAgICAgU2hvd05vcm1hbCA9IDIzLAogICAgICAgIFdpbmRvd0FjdGl2YXRlID0g MjQsCiAgICAgICAgV2luZG93RGVhY3RpdmF0ZSA9IDI1LAogICAgICAgIFNob3dUb1BhcmVudCA9 IDI2LAogICAgICAgIEhpZGVUb1BhcmVudCA9IDI3LAogICAgICAgIFNob3dNYXhpbWl6ZWQgPSAy OCwKICAgICAgICBTaG93RnVsbFNjcmVlbiA9IDI5LAogICAgICAgIEFjY2VsID0gMzAsCiAgICAg ICAgV2hlZWwgPSAzMSwKICAgICAgICBBY2NlbEF2YWlsYWJsZSA9IDMyLAogICAgICAgIENhcHRp b25DaGFuZ2UgPSAzMywKICAgICAgICBJY29uQ2hhbmdlID0gMzQsCiAgICAgICAgUGFyZW50Rm9u dENoYW5nZSA9IDM1LAogICAgICAgIEFwcGxpY2F0aW9uRm9udENoYW5nZSA9IDM2LAogICAgICAg IFBhcmVudFBhbGV0dGVDaGFuZ2UgPSAzNywKICAgICAgICBBcHBsaWNhdGlvblBhbGV0dGVDaGFu Z2UgPSAzOCwKICAgICAgICBQYWxldHRlQ2hhbmdlID0gMzksCiAgICAgICAgQ2xpcGJvYXJkID0g NDAsCiAgICAgICAgU3BlZWNoID0gNDIsCiAgICAgICAgU29ja0FjdCA9IDUwLAogICAgICAgIEFj Y2VsT3ZlcnJpZGUgPSA1MSwKICAgICAgICBEZWZlcnJlZERlbGV0ZSA9IDUyLAogICAgICAgIERy YWdFbnRlciA9IDYwLAogICAgICAgIERyYWdNb3ZlID0gNjEsCiAgICAgICAgRHJhZ0xlYXZlID0g NjIsCiAgICAgICAgRHJvcCA9IDYzLAogICAgICAgIERyYWdSZXNwb25zZSA9IDY0LAogICAgICAg IENoaWxkSW5zZXJ0ZWQgPSA3MCwKICAgICAgICBDaGlsZFJlbW92ZWQgPSA3MSwKICAgICAgICBM YXlvdXRIaW50ID0gNzIsCiAgICAgICAgU2hvd1dpbmRvd1JlcXVlc3QgPSA3MywKICAgICAgICBB Y3RpdmF0ZUNvbnRyb2wgPSA4MCwKICAgICAgICBEZWFjdGl2YXRlQ29udHJvbCA9IDgxLAogICAg ICAgIENvbnRleHRNZW51ID0gODIsCiAgICAgICAgSU1TdGFydCA9IDgzLAogICAgICAgIElNQ29t cG9zZSA9IDg0LAogICAgICAgIElNRW5kID0gODUsCiAgICAgICAgQWNjZXNzaWJpbGl0eSA9IDg2 LAogICAgICAgIFRhYmxldE1vdmUgPSA4NywKICAgICAgICBMb2NhbGVDaGFuZ2UgPSA4OCwKICAg ICAgICBMYW5ndWFnZUNoYW5nZSA9IDg5LAogICAgICAgIExheW91dERpcmVjdGlvbkNoYW5nZSA9 IDkwLAogICAgICAgIFN0eWxlID0gOTEsCiAgICAgICAgVGFibGV0UHJlc3MgPSA5MiwKICAgICAg ICBUYWJsZXRSZWxlYXNlID0gOTMsCiAgICAgICAgVXNlciA9IDEwMDAsCiAgICAgICAgTWF4VXNl ciA9IDY1NTM1CiAgICB9OwoKCiAgICBRRXZlbnQoIFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9z dGVkKEZBTFNFKSwgc3BvbnQoRkFMU0UpIHt9CiAgICB2aXJ0dWFsIH5RRXZlbnQoKTsKICAgIFR5 cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHQ7IH0KICAgIGJvb2wgc3BvbnRhbmVvdXMoKSBjb25z dCB7IHJldHVybiBzcG9udDsgfQpwcm90ZWN0ZWQ6CiAgICBUeXBlIHQ7CnByaXZhdGU6CiAgICB1 aW50IHBvc3RlZCA6IDE7CiAgICB1aW50IHNwb250IDogMTsKCgogICAgZnJpZW5kIGNsYXNzIFFB cHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQWNjZWxNYW5hZ2VyOwogICAgZnJpZW5kIGNs YXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUVUV2lkZ2V0Owp9OwoKCmNs YXNzIFFUaW1lckV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFUaW1lckV2ZW50 KCBpbnQgdGltZXJJZCApCiAgICAgICAgOiBRRXZlbnQoVGltZXIpLCBpZCh0aW1lcklkKSB7fQog ICAgaW50IHRpbWVySWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQpwcm90ZWN0ZWQ6CiAgICBpbnQg aWQ7Cn07CgoKY2xhc3MgUU1vdXNlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAg UU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50ICZwb3MsIGludCBidXR0b24sIGlu dCBzdGF0ZSApOwoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAmcG9z LCBjb25zdCBRUG9pbnQmZ2xvYmFsUG9zLAogICAgICAgICAgICAgICAgIGludCBidXR0b24sIGlu dCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBi KCh1c2hvcnQpYnV0dG9uKSxzKCh1c2hvcnQpc3RhdGUpLGFjY3B0KFRSVUUpIHt9OwoKICAgIGNv bnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZn bG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBnOyB9CiAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJu IHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAueSgpOyB9CiAgICBpbnQgZ2xv YmFsWCgpIGNvbnN0IHsgcmV0dXJuIGcueCgpOyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsg cmV0dXJuIGcueSgpOyB9CiAgICBCdXR0b25TdGF0ZSBidXR0b24oKSBjb25zdCB7IHJldHVybiAo QnV0dG9uU3RhdGUpIGI7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g KEJ1dHRvblN0YXRlKSBzOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAg ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCBhY2Nl cHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7 IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIHVzaG9ydCBiOwog ICAgdXNob3J0IHM7CiAgICB1aW50IGFjY3B0OjE7Cn07CgoKCmNsYXNzIFFXaGVlbEV2ZW50IDog cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBv cywgaW50IGRlbHRhLCBpbnQgc3RhdGUsIE9yaWVudGF0aW9uIG9yaWVudCA9IFZlcnRpY2FsICk7 CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCYgZ2xvYmFs UG9zLCBpbnQgZGVsdGEsIGludCBzdGF0ZSwgT3JpZW50YXRpb24gb3JpZW50ID0gVmVydGljYWwg KQogICAgICAgIDogUUV2ZW50KFdoZWVsKSwgcChwb3MpLCBnKGdsb2JhbFBvcyksIGQoZGVsdGEp LCBzKCh1c2hvcnQpc3RhdGUpLAogICAgICAgICAgYWNjcHQoVFJVRSksIG8ob3JpZW50KSB7fQog ICAgaW50IGRlbHRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgY29uc3QgUVBvaW50ICZwb3Mo KSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0 IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGlu dCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyBy ZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZKCkgY29uc3QgeyByZXR1cm4gZy55KCk7IH0K ICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0K ICAgIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbzsgfQogICAgYm9v bCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkg eyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnBy b3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7CiAgICBpbnQgZDsKICAgIHVzaG9y dCBzOwogICAgYm9vbCBhY2NwdDsKICAgIE9yaWVudGF0aW9uIG87Cn07CgoKY2xhc3MgUVRhYmxl dEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIGVudW0gVGFibGV0RGV2aWNlIHsg Tm9EZXZpY2UgPSAtMSwgUHVjaywgU3R5bHVzLCBFcmFzZXIgfTsKICAgIFFUYWJsZXRFdmVudCgg VHlwZSB0LCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MsIGludCBk ZXZpY2UsCiAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRp bHQsIGNvbnN0IFFQYWlyPGludCxpbnQ+ICZ1SWQgKTsKICAgIFFUYWJsZXRFdmVudCggY29uc3Qg UVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zLCBpbnQgZGV2aWNlLAogICAgICAg ICAgICAgICAgICBpbnQgcHJlc3N1cmUsIGludCB4VGlsdCwgaW50IHlUaWx0LCBjb25zdCBRUGFp cjxpbnQsaW50PiAmdUlkICkKICAgICAgICA6IFFFdmVudCggVGFibGV0TW92ZSApLCBtUG9zKCBw b3MgKSwgbUdQb3MoIGdsb2JhbFBvcyApLCBtRGV2KCBkZXZpY2UgKSwKICAgICAgICAgIG1QcmVz cyggcHJlc3N1cmUgKSwgbVhUKCB4VGlsdCApLCBtWVQoIHlUaWx0ICksIG1UeXBlKCB1SWQuZmly c3QgKSwKICAgICAgICAgIG1QaHkoIHVJZC5zZWNvbmQgKQogICAge30KICAgIGludCBwcmVzc3Vy ZSgpIGNvbnN0IHsgcmV0dXJuIG1QcmVzczsgfQogICAgaW50IHhUaWx0KCkgY29uc3QgeyByZXR1 cm4gbVhUOyB9CiAgICBpbnQgeVRpbHQoKSBjb25zdCB7IHJldHVybiBtWVQ7IH0KICAgIGNvbnN0 IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gbVBvczsgfQogICAgY29uc3QgUVBvaW50ICZn bG9iYWxQb3MoKSBjb25zdCB7IHJldHVybiBtR1BvczsgfQogICAgaW50IHgoKSBjb25zdCB7IHJl dHVybiBtUG9zLngoKTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBtUG9zLnkoKTsgfQog ICAgaW50IGdsb2JhbFgoKSBjb25zdCB7IHJldHVybiBtR1Bvcy54KCk7IH0KICAgIGludCBnbG9i YWxZKCkgY29uc3QgeyByZXR1cm4gbUdQb3MueSgpOyB9CiAgICBUYWJsZXREZXZpY2UgZGV2aWNl KCkgY29uc3QgeyByZXR1cm4gVGFibGV0RGV2aWNlKG1EZXYpOyB9CiAgICBpbnQgaXNBY2NlcHRl ZCgpIGNvbnN0IHsgcmV0dXJuIG1iQWNjOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgbWJBY2MgPSBU UlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgbWJBY2MgPSBGQUxTRTsgfQogICAgUVBhaXI8aW50 LGludD4gdW5pcXVlSWQoKSB7IHJldHVybiBRUGFpcjxpbnQsaW50PiggbVR5cGUsIG1QaHkpOyB9 CnByb3RlY3RlZDoKICAgIFFQb2ludCBtUG9zOwogICAgUVBvaW50IG1HUG9zOwogICAgaW50IG1E ZXYsCiAgICAgICAgbVByZXNzLAogICAgICAgIG1YVCwKICAgICAgICBtWVQsCiAgICAgICAgbVR5 cGUsCiAgICAgICAgbVBoeTsKICAgIGJvb2wgbWJBY2M7Cgp9OwoKY2xhc3MgUUtleUV2ZW50IDog cHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFLZXlFdmVudCggVHlwZSB0eXBlLCBpbnQga2V5 LCBpbnQgYXNjaWksIGludCBzdGF0ZSwKICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRl eHQ9UVN0cmluZzo6bnVsbCwgYm9vbCBhdXRvcmVwPUZBTFNFLCB1c2hvcnQgY291bnQ9MSApCiAg ICAgICAgOiBRRXZlbnQodHlwZSksIHR4dCh0ZXh0KSwgaygodXNob3J0KWtleSksIHMoKHVzaG9y dClzdGF0ZSksCiAgICAgICAgICAgIGEoKHVjaGFyKWFzY2lpKSwgYWNjcHQoVFJVRSksIGF1dG9y KGF1dG9yZXApLCBjKGNvdW50KQogICAgewogICAgICAgIGlmICgga2V5ID49IEtleV9CYWNrICYm IGtleSA8PSBLZXlfTWVkaWFMYXN0ICkKICAgICAgICAgICAgYWNjcHQgPSBGQUxTRTsKICAgIH0K ICAgIGludCBrZXkoKSBjb25zdCB7IHJldHVybiBrOyB9CiAgICBpbnQgYXNjaWkoKSBjb25zdCB7 IHJldHVybiBhOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIEJ1dHRv blN0YXRlKHMpOyB9CiAgICBCdXR0b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29s IGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgUVN0cmluZyB0ZXh0KCkg Y29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBib29sIGlzQXV0b1JlcGVhdCgpIGNvbnN0IHsgcmV0 dXJuIGF1dG9yOyB9CiAgICBpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBpbnQoYyk7IH0KICAg IHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBhY2Nw dCA9IEZBTFNFOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRU3RyaW5nIHR4dDsKICAgIHVzaG9ydCBrLCBz OwogICAgdWNoYXIgYTsKICAgIHVpbnQgYWNjcHQ6MTsKICAgIHVpbnQgYXV0b3I6MTsKICAgIHVz aG9ydCBjOwp9OwoKCmNsYXNzIFFGb2N1c0V2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK CiAgICBRRm9jdXNFdmVudCggVHlwZSB0eXBlICkKICAgICAgICA6IFFFdmVudCh0eXBlKSB7fQoK ICAgIGJvb2wgZ290Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQog ICAgYm9vbCBsb3N0Rm9jdXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNPdXQ7IH0K CiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBUYWIsIEJhY2t0YWIsIEFjdGl2ZVdpbmRvdywgUG9w dXAsIFNob3J0Y3V0LCBPdGhlciB9OwogICAgc3RhdGljIFJlYXNvbiByZWFzb24oKTsKICAgIHN0 YXRpYyB2b2lkIHNldFJlYXNvbiggUmVhc29uIHJlYXNvbiApOwogICAgc3RhdGljIHZvaWQgcmVz ZXRSZWFzb24oKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgUmVhc29uIG1fcmVhc29uOwogICAgc3Rh dGljIFJlYXNvbiBwcmV2X3JlYXNvbjsKfTsKCgpjbGFzcyBRUGFpbnRFdmVudCA6IHB1YmxpYyBR RXZlbnQKewpwdWJsaWM6CiAgICBRUGFpbnRFdmVudCggY29uc3QgUVJlZ2lvbiYgcGFpbnRSZWdp b24sIGJvb2wgZXJhc2VkID0gVFJVRSkKICAgICAgICA6IFFFdmVudChQYWludCksCiAgICAgICAg ICByZWMocGFpbnRSZWdpb24uYm91bmRpbmdSZWN0KCkpLAogICAgICAgICAgcmVnKHBhaW50UmVn aW9uKSwKICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFS ZWN0ICZwYWludFJlY3QsIGJvb2wgZXJhc2VkID0gVFJVRSApCiAgICAgICAgOiBRRXZlbnQoUGFp bnQpLAogICAgICAgICAgcmVjKHBhaW50UmVjdCksCiAgICAgICAgICByZWcocGFpbnRSZWN0KSwK ICAgICAgICAgIGVyYXNlKGVyYXNlZCl7fQogICAgY29uc3QgUVJlY3QgJnJlY3QoKSBjb25zdCB7 IHJldHVybiByZWM7IH0KICAgIGNvbnN0IFFSZWdpb24gJnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJu IHJlZzsgfQogICAgYm9vbCBlcmFzZWQoKSBjb25zdCB7IHJldHVybiBlcmFzZTsgfQpwcm90ZWN0 ZWQ6CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNl QXBwbGljYXRpb247CiAgICBRUmVjdCByZWM7CiAgICBRUmVnaW9uIHJlZzsKICAgIGJvb2wgZXJh c2U7Cn07CgoKY2xhc3MgUU1vdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR TW92ZUV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZvbGRQb3MgKQogICAg ICAgIDogUUV2ZW50KE1vdmUpLCBwKHBvcyksIG9sZHAob2xkUG9zKSB7fQogICAgY29uc3QgUVBv aW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJm9sZFBvcygp Y29uc3QgeyByZXR1cm4gb2xkcDt9CnByb3RlY3RlZDoKICAgIFFQb2ludCBwLCBvbGRwOwogICAg ZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0 aW9uOwp9OwoKCmNsYXNzIFFSZXNpemVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAg ICBRUmVzaXplRXZlbnQoIGNvbnN0IFFTaXplICZzaXplLCBjb25zdCBRU2l6ZSAmb2xkU2l6ZSAp CiAgICAgICAgOiBRRXZlbnQoUmVzaXplKSwgcyhzaXplKSwgb2xkcyhvbGRTaXplKSB7fQogICAg Y29uc3QgUVNpemUgJnNpemUoKSBjb25zdCB7IHJldHVybiBzOyB9CiAgICBjb25zdCBRU2l6ZSAm b2xkU2l6ZSgpY29uc3QgeyByZXR1cm4gb2xkczt9CnByb3RlY3RlZDoKICAgIFFTaXplIHMsIG9s ZHM7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNl QXBwbGljYXRpb247Cn07CgoKY2xhc3MgUUNsb3NlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVi bGljOgogICAgUUNsb3NlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KENsb3NlKSwgYWNjcHQoRkFM U0UpIHt9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAg dm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0 ID0gRkFMU0U7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhY2NwdDsKfTsKCgpjbGFzcyBRU2hvd0V2 ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFTaG93RXZlbnQoKQogICAgICAgIDog UUV2ZW50KFNob3cpIHt9Cn07CgoKY2xhc3MgUUhpZGVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpw dWJsaWM6CiAgICBRSGlkZUV2ZW50KCkKICAgICAgICA6IFFFdmVudChIaWRlKSB7fQp9OwoKY2xh c3MgUUNvbnRleHRNZW51RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgZW51bSBS ZWFzb24geyBNb3VzZSwgS2V5Ym9hcmQsIE90aGVyIH07CiAgICBRQ29udGV4dE1lbnVFdmVudCgg UmVhc29uIHJlYXNvbiwgY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9z LCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KCBDb250ZXh0TWVudSApLCBwKCBwb3MgKSwg Z3AoIGdsb2JhbFBvcyApLCBhY2NwdCggRkFMU0UgKSwgY29uc3VtKEZBTFNFKSwKICAgICAgICBy ZWFzKCByZWFzb24gKSwgcygodXNob3J0KXN0YXRlKSB7fQogICAgUUNvbnRleHRNZW51RXZlbnQo IFJlYXNvbiByZWFzb24sIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgc3RhdGUgKTsKCiAgICBpbnQg eCgpIGNvbnN0IHsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHAu eSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJuIGdwLngoKTsgfQogICAgaW50 IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBncC55KCk7IH0KCiAgICBjb25zdCBRUG9pbnQmIHBv cygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCYgZ2xvYmFsUG9zKCkgY29u c3QgeyByZXR1cm4gZ3A7IH0KCiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu IChCdXR0b25TdGF0ZSkgczsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4g YWNjcHQ7IH0KICAgIGJvb2wgaXNDb25zdW1lZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN1bTsgfQog ICAgdm9pZCBjb25zdW1lKCkgeyBjb25zdW0gPSBUUlVFOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsg YWNjcHQgPSBUUlVFOyBjb25zdW0gPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQg PSBGQUxTRTsgY29uc3VtID0gRkFMU0U7IH0KCiAgICBSZWFzb24gcmVhc29uKCkgY29uc3QgeyBy ZXR1cm4gUmVhc29uKCByZWFzICk7IH0KCnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBv aW50IGdwOwogICAgYm9vbCBhY2NwdDsKICAgIGJvb2wgY29uc3VtOwogICAgdWludCByZWFzOjg7 CiAgICB1c2hvcnQgczsKfTsKCgpjbGFzcyBRSU1FdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs aWM6CiAgICBRSU1FdmVudCggVHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgY3Vy c29yUG9zaXRpb24gKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGNwb3MoY3Vy c29yUG9zaXRpb24pLCBhKEZBTFNFKSB7fQogICAgY29uc3QgUVN0cmluZyAmdGV4dCgpIGNvbnN0 IHsgcmV0dXJuIHR4dDsgfQogICAgaW50IGN1cnNvclBvcygpIGNvbnN0IHsgcmV0dXJuIGNwb3M7 IH0KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KICAgIHZvaWQgYWNj ZXB0KCkgeyBhID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGEgPSBGQUxTRTsgfQogICAg aW50IHNlbGVjdGlvbkxlbmd0aCgpIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcgdHh0Owog ICAgaW50IGNwb3M7CiAgICBib29sIGE7Cn07CgpjbGFzcyBRSU1Db21wb3NlRXZlbnQgOiBwdWJs aWMgUUlNRXZlbnQKewpwdWJsaWM6CiAgICBRSU1Db21wb3NlRXZlbnQoIFR5cGUgdHlwZSwgY29u c3QgUVN0cmluZyAmdGV4dCwgaW50IGN1cnNvclBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICBpbnQgc2VsTGVuZ3RoICkKICAgICAgICA6IFFJTUV2ZW50KCB0eXBlLCB0ZXh0LCBjdXJzb3JQ b3NpdGlvbiApLCBzZWxMZW4oIHNlbExlbmd0aCApIHsgfQoKcHJpdmF0ZToKICAgIGludCBzZWxM ZW47CgogICAgZnJpZW5kIGNsYXNzIFFJTUV2ZW50Owp9OwoKaW5saW5lIGludCBRSU1FdmVudDo6 c2VsZWN0aW9uTGVuZ3RoKCkgY29uc3QKewogICAgaWYgKCB0eXBlKCkgIT0gSU1Db21wb3NlICkg cmV0dXJuIDA7CiAgICBRSU1Db21wb3NlRXZlbnQgKnRoYXQgPSAoUUlNQ29tcG9zZUV2ZW50ICop IHRoaXM7CiAgICByZXR1cm4gdGhhdC0+c2VsTGVuOwp9CiMgNDc5ICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcWV2ZW50LmgiCmNsYXNzIFFEcm9wRXZlbnQgOiBwdWJsaWMgUUV2ZW50LCBw dWJsaWMgUU1pbWVTb3VyY2UKewpwdWJsaWM6CiAgICBRRHJvcEV2ZW50KCBjb25zdCBRUG9pbnQm IHBvcywgVHlwZSB0eXA9RHJvcCApCiAgICAgICAgOiBRRXZlbnQodHlwKSwgcChwb3MpLAogICAg ICAgICAgYWN0KDApLCBhY2NwdCgwKSwgYWNjcHRhY3QoMCksIHJlc3YoMCksCiAgICAgICAgICBk KDApCiAgICAgICAge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsg fQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQgfHwgYWNjcHRhY3Q7 IH0KICAgIHZvaWQgYWNjZXB0KGJvb2wgeT1UUlVFKSB7IGFjY3B0ID0geTsgfQogICAgdm9pZCBp Z25vcmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCiAgICBib29sIGlzQWN0aW9uQWNjZXB0ZWQoKSBj b25zdCB7IHJldHVybiBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHRBY3Rpb24oYm9vbCB5PVRS VUUpIHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7IENvcHksIExpbmssIE1vdmUs IFByaXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNldEFjdGlvbiggQWN0aW9uIGEg KSB7IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBB Y3Rpb24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNvbnN0OwogICAgY29uc3QgY2hh ciogZm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEo IGNvbnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNv bnN0OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBmKSBjb25zdCB7IHJldHVybiBl bmNvZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNvbnN0IFFQb2ludCYgbnAgKSB7 IHAgPSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICB1aW50IGFjdDo4OwogICAg dWludCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAgdWludCByZXN2OjU7CiAgICB2 b2lkICogZDsKfTsKCgoKY2xhc3MgUURyYWdNb3ZlRXZlbnQgOiBwdWJsaWMgUURyb3BFdmVudAp7 CnB1YmxpYzoKICAgIFFEcmFnTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcywgVHlwZSB0eXA9 RHJhZ01vdmUgKQogICAgICAgIDogUURyb3BFdmVudChwb3MsdHlwKSwKICAgICAgICAgIHJlY3Qo IHBvcywgUVNpemUoIDEsIDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29uc3QgeyBy ZXR1cm4gcmVjdDsgfQogICAgdm9pZCBhY2NlcHQoIGJvb2wgeT1UUlVFICkgeyBRRHJvcEV2ZW50 OjphY2NlcHQoeSk7IH0KICAgIHZvaWQgYWNjZXB0KCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQg PSBUUlVFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYgcikgeyBh Y2NwdCA9RkFMU0U7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgUURyb3BFdmVudDo6 aWdub3JlKCk7IH0KCnByb3RlY3RlZDoKICAgIFFSZWN0IHJlY3Q7Cn07CgoKY2xhc3MgUURyYWdF bnRlckV2ZW50IDogcHVibGljIFFEcmFnTW92ZUV2ZW50CnsKcHVibGljOgogICAgUURyYWdFbnRl ckV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcyApIDoKICAgICAgICBRRHJhZ01vdmVFdmVudChwb3Ms IERyYWdFbnRlcikgeyB9Cn07CgoKCmNsYXNzIFFEcmFnUmVzcG9uc2VFdmVudCA6IHB1YmxpYyBR RXZlbnQKewpwdWJsaWM6CiAgICBRRHJhZ1Jlc3BvbnNlRXZlbnQoIGJvb2wgYWNjZXB0ZWQgKQog ICAgICAgIDogUUV2ZW50KERyYWdSZXNwb25zZSksIGEoYWNjZXB0ZWQpIHt9CiAgICBib29sIGRy YWdBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhOwp9 OwoKCmNsYXNzIFFEcmFnTGVhdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR RHJhZ0xlYXZlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KERyYWdMZWF2ZSkge30KfTsKCgoKY2xh c3MgUUNoaWxkRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNoaWxkRXZlbnQo IFR5cGUgdHlwZSwgUU9iamVjdCAqY2hpbGQgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBjKGNo aWxkKSB7fQogICAgUU9iamVjdCAqY2hpbGQoKSBjb25zdCB7IHJldHVybiBjOyB9CiAgICBib29s IGluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZEluc2VydGVkOyB9CiAgICBib29s IHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkUmVtb3ZlZDsgfQpwcm90ZWN0ZWQ6 CiAgICBRT2JqZWN0ICpjOwp9OwoKCmNsYXNzIFFDdXN0b21FdmVudCA6IHB1YmxpYyBRRXZlbnQK ewpwdWJsaWM6CiAgICBRQ3VzdG9tRXZlbnQoIGludCB0eXBlICk7CiAgICBRQ3VzdG9tRXZlbnQo IFR5cGUgdHlwZSwgdm9pZCAqZGF0YSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGQoZGF0YSkg e307CiAgICB2b2lkICpkYXRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgdm9pZCBzZXREYXRh KCB2b2lkKiBkYXRhICkgeyBkID0gZGF0YTsgfQpwcml2YXRlOgogICAgdm9pZCAqZDsKfTsKIyA0 NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FvYmplY3QuaCIgMgoKCgoKCgpjbGFzcyBR TWV0YU9iamVjdDsKY2xhc3MgUVZhcmlhbnQ7CmNsYXNzIFFNZXRhUHJvcGVydHk7CmNsYXNzIFFQ b3N0RXZlbnRMaXN0OwpjbGFzcyBRU2VuZGVyT2JqZWN0TGlzdDsKY2xhc3MgUU9iamVjdFByaXZh dGU7CgpjbGFzcyBRT2JqZWN0VXNlckRhdGE7CgpzdHJ1Y3QgUVVPYmplY3Q7CgpjbGFzcyBRT2Jq ZWN0OiBwdWJsaWMgUXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2Jq ZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3Qg Y2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hh ciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi b29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSgg aW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVy dHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3Qq IHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0 Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9 IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9 IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKCnB1YmxpYzoK ICAgIFFPYmplY3QoIFFPYmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAg IHZpcnR1YWwgflFPYmplY3QoKTsKIyA3OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fv YmplY3QuaCIKICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwg Ym9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGJvb2wgaXNBKCBj b25zdCBjaGFyICogKSBjb25zdDsKICAgIGJvb2wgaW5oZXJpdHMoIGNvbnN0IGNoYXIgKiApIGNv bnN0OwoKICAgIGNvbnN0IGNoYXIgKm5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIgKm5hbWUo IGNvbnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRO YW1lKCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sIGlzV2lkZ2V0VHlwZSgpIGNvbnN0IHsg cmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sIGhpZ2hQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu IEZBTFNFOyB9CgogICAgYm9vbCBzaWduYWxzQmxvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGJsb2Nr U2lnOyB9CiAgICB2b2lkIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50IHN0YXJ0VGlt ZXIoIGludCBpbnRlcnZhbCApOwogICAgdm9pZCBraWxsVGltZXIoIGludCBpZCApOwogICAgdm9p ZCBraWxsVGltZXJzKCk7CgogICAgUU9iamVjdCAqY2hpbGQoIGNvbnN0IGNoYXIgKm9iak5hbWUs IGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLCBib29sIHJlY3Vyc2l2ZVNlYXJjaCA9IFRS VUUgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNo aWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAqb2JqZWN0VHJlZXMo KTsKCiAgICBRT2JqZWN0TGlzdCAqcXVlcnlMaXN0KCBjb25zdCBjaGFyICppbmhlcml0c0NsYXNz ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9iak5h bWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWdleHBNYXRj aCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2 ZVNlYXJjaCA9IFRSVUUgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGQoIFFP YmplY3QgKiApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKCBRT2JqZWN0ICogKTsKCiAg ICB2b2lkIGluc3RhbGxFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CiAgICB2b2lkIHJl bW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9vbCBjb25u ZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVt YmVyICk7CiAgICBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hh ciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciAp IGNvbnN0OwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVy LCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbCBkaXNjb25u ZWN0KCBjb25zdCBjaGFyICpzaWduYWw9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBRT2JqZWN0ICpyZWNlaXZlcj0wLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwogICAgYm9v bCBkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVy PTAgKTsKICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVjdCAqc2Vu ZGVyLCBpbnQgc2lnbmFsX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP YmplY3QgKnJlY2VpdmVyLCBpbnQgbWVtYmNvZGUsIGludCBtZW1iZXJfaW5kZXggKTsKICAgIHN0 YXRpYyBib29sIGRpc2Nvbm5lY3RJbnRlcm5hbCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBpbnQg c2lnbmFsX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg KnJlY2VpdmVyLCBpbnQgbWVtYmNvZGUsIGludCBtZW1iZXJfaW5kZXggKTsKCiAgICB2b2lkIGR1 bXBPYmplY3RUcmVlKCk7CiAgICB2b2lkIGR1bXBPYmplY3RJbmZvKCk7CgoKICAgIHZpcnR1YWwg Ym9vbCBzZXRQcm9wZXJ0eSggY29uc3QgY2hhciAqbmFtZSwgY29uc3QgUVZhcmlhbnQmIHZhbHVl ICk7CiAgICB2aXJ0dWFsIFFWYXJpYW50IHByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lICkgY29u c3Q7CiMgMTQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW9iamVjdC5oIgogICAgc3Rh dGljIHVpbnQgcmVnaXN0ZXJVc2VyRGF0YSgpOwogICAgdm9pZCBzZXRVc2VyRGF0YSggdWludCBp ZCwgUU9iamVjdFVzZXJEYXRhKiBkYXRhKTsKICAgIFFPYmplY3RVc2VyRGF0YSogdXNlckRhdGEo IHVpbnQgaWQgKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRlc3Ryb3llZCgpOwogICAg dm9pZCBkZXN0cm95ZWQoIFFPYmplY3QqIG9iaiApOwoKcHVibGljOgogICAgUU9iamVjdCAqcGFy ZW50KCkgY29uc3QgeyByZXR1cm4gcGFyZW50T2JqOyB9CgpwdWJsaWMgOgogICAgdm9pZCBkZWxl dGVMYXRlcigpOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNsZWFudXBFdmVudEZpbHRlciggUU9iamVj dCogKTsKCnByb3RlY3RlZDoKICAgIGJvb2wgYWN0aXZhdGVfZmlsdGVycyggUUV2ZW50ICogKTsK ICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBjb25zdCBjaGFyKiBzaWduYWwgKSBjb25z dDsKICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBpbnQgc2lnbmFsICkgY29uc3Q7CiAg ICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCApOwogICAgdm9pZCBhY3RpdmF0ZV9z aWduYWwoIGludCBzaWduYWwsIGludCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGludCBz aWduYWwsIGRvdWJsZSApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGludCBzaWduYWwsIFFT dHJpbmcgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX2Jvb2woIGludCBzaWduYWwsIGJvb2wg KTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBRQ29ubmVjdGlvbkxpc3QgKmNsaXN0LCBRVU9i amVjdCAqbyApOwoKICAgIGNvbnN0IFFPYmplY3QgKnNlbmRlcigpOwoKICAgIHZpcnR1YWwgdm9p ZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY2hpbGRFdmVu dCggUUNoaWxkRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGN1c3RvbUV2ZW50KCBRQ3VzdG9t RXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpz aWduYWwgKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpz aWduYWwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVja0Nvbm5lY3RBcmdzKCBjb25zdCBjaGFyICpz aWduYWwsIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgc3RhdGljIFFDU3RyaW5nIG5vcm1h bGl6ZVNpZ25hbFNsb3QoIGNvbnN0IGNoYXIgKnNpZ25hbFNsb3QgKTsKCnByaXZhdGU6CiAgICB1 aW50IGlzU2lnbmFsIDogMTsKICAgIHVpbnQgaXNXaWRnZXQgOiAxOwogICAgdWludCBwZW5kVGlt ZXIgOiAxOwogICAgdWludCBibG9ja1NpZyA6IDE7CiAgICB1aW50IHdhc0RlbGV0ZWQgOiAxOwog ICAgdWludCBpc1RyZWUgOiAxOwoKICAgIGNvbnN0IGNoYXIgKm9iam5hbWU7CiAgICBRT2JqZWN0 ICpwYXJlbnRPYmo7CiAgICBRT2JqZWN0TGlzdCAqY2hpbGRPYmplY3RzOwogICAgUVNpZ25hbFZl YyAqY29ubmVjdGlvbnM7CiAgICBRU2VuZGVyT2JqZWN0TGlzdCAqc2VuZGVyT2JqZWN0czsKICAg IFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CiAgICBRUG9zdEV2ZW50TGlzdCAqcG9zdGVkRXZl bnRzOwogICAgUU9iamVjdFByaXZhdGUqIGQ7CgogICAgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0 aWNRdE1ldGFPYmplY3QoKTsKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJp ZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAg IGZyaWVuZCBjbGFzcyBRU2lnbmFsOwoKcHJpdmF0ZToKCiAgICBRT2JqZWN0KCBjb25zdCBRT2Jq ZWN0ICYgKTsKICAgIFFPYmplY3QgJm9wZXJhdG9yPSggY29uc3QgUU9iamVjdCAmICk7Cgp9OwoK CgpjbGFzcyBRT2JqZWN0VXNlckRhdGEgewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RT2JqZWN0VXNl ckRhdGEoKTsKfTsKCgoKaW5saW5lIGJvb2wgUU9iamVjdDo6Y29ubmVjdCggY29uc3QgUU9iamVj dCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0CnsKICAgIHJldHVybiBjb25uZWN0KCBzZW5k ZXIsIHNpZ25hbCwgdGhpcywgbWVtYmVyICk7Cn0KCgppbmxpbmUgYm9vbCBRT2JqZWN0OjpkaXNj b25uZWN0KCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICBy ZXR1cm4gZGlzY29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNlaXZlciwgbWVtYmVyICk7Cn0KCgpp bmxpbmUgYm9vbCBRT2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwg Y29uc3QgY2hhciAqbWVtYmVyICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3QoIHRoaXMsIDAsIHJl Y2VpdmVyLCBtZW1iZXIgKTsKfQojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdp ZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWludGRldmljZS5o IiAxCiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIKY2xh c3MgUUlPRGV2aWNlOwpjbGFzcyBRU3RyaW5nOwoKCgpzdHJ1Y3QgUVBhaW50RGV2aWNlWDExRGF0 YTsKCgp1bmlvbiBRUERldkNtZFBhcmFtIHsKICAgIGludCBpdmFsOwogICAgaW50ICppdmVjOwog ICAgUVN0cmluZyAqc3RyOwogICAgY29uc3QgUVBvaW50ICpwb2ludDsKICAgIGNvbnN0IFFSZWN0 ICpyZWN0OwogICAgY29uc3QgUVBvaW50QXJyYXkgKnB0YXJyOwogICAgY29uc3QgUVBpeG1hcCAq cGl4bWFwOwogICAgY29uc3QgUUltYWdlICppbWFnZTsKICAgIGNvbnN0IFFDb2xvciAqY29sb3I7 CiAgICBjb25zdCBRRm9udCAqZm9udDsKICAgIGNvbnN0IFFQZW4gKnBlbjsKICAgIGNvbnN0IFFC cnVzaCAqYnJ1c2g7CiAgICBjb25zdCBRUmVnaW9uICpyZ247CiAgICBjb25zdCBRV01hdHJpeCAq bWF0cml4OwogICAgUUlPRGV2aWNlICpkZXZpY2U7Cn07CgoKCmNsYXNzIFFQYWludERldmljZQp7 CnB1YmxpYzoKICAgIHZpcnR1YWwgflFQYWludERldmljZSgpOwoKICAgIGludCBkZXZUeXBlKCkg Y29uc3Q7CiAgICBib29sIGlzRXh0RGV2KCkgY29uc3Q7CiAgICBib29sIHBhaW50aW5nQWN0aXZl KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFJlc29sdXRpb24oIGludCApOwogICAgdmly dHVhbCBpbnQgcmVzb2x1dGlvbigpIGNvbnN0OwoKCgoKCgogICAgdmlydHVhbCBRdDo6SEFORExF IGhhbmRsZSgpIGNvbnN0OwogICAgdmlydHVhbCBRdDo6SEFORExFIHgxMVJlbmRlckhhbmRsZSgp IGNvbnN0OwoKCgoKCgoKICAgIERpc3BsYXkgKngxMURpc3BsYXkoKSBjb25zdDsKICAgIGludCB4 MTFTY3JlZW4oKSBjb25zdDsKICAgIGludCB4MTFEZXB0aCgpIGNvbnN0OwogICAgaW50IHgxMUNl bGxzKCkgY29uc3Q7CiAgICBRdDo6SEFORExFIHgxMUNvbG9ybWFwKCkgY29uc3Q7CiAgICBib29s IHgxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0OwogICAgdm9pZCAqeDExVmlzdWFsKCkgY29uc3Q7 CiAgICBib29sIHgxMURlZmF1bHRWaXN1YWwoKSBjb25zdDsKCiAgICBzdGF0aWMgRGlzcGxheSAq eDExQXBwRGlzcGxheSgpOwogICAgc3RhdGljIGludCB4MTFBcHBTY3JlZW4oKTsKCiAgICBzdGF0 aWMgaW50IHgxMUFwcERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSgpOwogICAgc3Rh dGljIHZvaWQgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBp WShpbnQpOwogICAgc3RhdGljIGludCB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludCB4MTFB cHBDZWxscygpOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdygpOwogICAg c3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoKTsKICAgIHN0YXRpYyBib29sIHgxMUFw cERlZmF1bHRDb2xvcm1hcCgpOwogICAgc3RhdGljIHZvaWQgKngxMUFwcFZpc3VhbCgpOwogICAg c3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgpOwoKCgogICAgc3RhdGljIGludCB4MTFB cHBEZXB0aCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGludCB4MTFBcHBDZWxscyggaW50IHNj cmVlbiApOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdyggaW50IHNjcmVl biApOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDExQXBwQ29sb3JtYXAoIGludCBzY3JlZW4gKTsK ICAgIHN0YXRpYyB2b2lkICp4MTFBcHBWaXN1YWwoIGludCBzY3JlZW4gKTsKICAgIHN0YXRpYyBi b29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGJvb2wg eDExQXBwRGVmYXVsdFZpc3VhbCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGludCB4MTFBcHBE cGlYKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSggaW50ICk7CiAgICBzdGF0aWMg dm9pZCB4MTFTZXRBcHBEcGlYKCBpbnQsIGludCApOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBw RHBpWSggaW50LCBpbnQgKTsKIyAxNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFp bnRkZXZpY2UuaCIKICAgIGVudW0gUERldkNtZCB7CiAgICAgICAgUGRjTk9QID0gMCwKICAgICAg ICBQZGNEcmF3UG9pbnQgPSAxLAogICAgICAgIFBkY0RyYXdGaXJzdCA9IFBkY0RyYXdQb2ludCwK ICAgICAgICBQZGNNb3ZlVG8gPSAyLAogICAgICAgIFBkY0xpbmVUbyA9IDMsCiAgICAgICAgUGRj RHJhd0xpbmUgPSA0LAogICAgICAgIFBkY0RyYXdSZWN0ID0gNSwKICAgICAgICBQZGNEcmF3Um91 bmRSZWN0ID0gNiwKICAgICAgICBQZGNEcmF3RWxsaXBzZSA9IDcsCiAgICAgICAgUGRjRHJhd0Fy YyA9IDgsCiAgICAgICAgUGRjRHJhd1BpZSA9IDksCiAgICAgICAgUGRjRHJhd0Nob3JkID0gMTAs CiAgICAgICAgUGRjRHJhd0xpbmVTZWdtZW50cyA9IDExLAogICAgICAgIFBkY0RyYXdQb2x5bGlu ZSA9IDEyLAogICAgICAgIFBkY0RyYXdQb2x5Z29uID0gMTMsCiAgICAgICAgUGRjRHJhd0N1Ymlj QmV6aWVyID0gMTQsCiAgICAgICAgUGRjRHJhd1RleHQgPSAxNSwKICAgICAgICBQZGNEcmF3VGV4 dEZvcm1hdHRlZCA9IDE2LAogICAgICAgIFBkY0RyYXdQaXhtYXAgPSAxNywKICAgICAgICBQZGNE cmF3SW1hZ2UgPSAxOCwKICAgICAgICBQZGNEcmF3VGV4dDIgPSAxOSwKICAgICAgICBQZGNEcmF3 VGV4dDJGb3JtYXR0ZWQgPSAyMCwKICAgICAgICBQZGNEcmF3TGFzdCA9IFBkY0RyYXdUZXh0MkZv cm1hdHRlZCwKCgoKICAgICAgICBQZGNCZWdpbiA9IDMwLAogICAgICAgIFBkY0VuZCA9IDMxLAog ICAgICAgIFBkY1NhdmUgPSAzMiwKICAgICAgICBQZGNSZXN0b3JlID0gMzMsCiAgICAgICAgUGRj U2V0ZGV2ID0gMzQsCiAgICAgICAgUGRjU2V0QmtDb2xvciA9IDQwLAogICAgICAgIFBkY1NldEJr TW9kZSA9IDQxLAogICAgICAgIFBkY1NldFJPUCA9IDQyLAogICAgICAgIFBkY1NldEJydXNoT3Jp Z2luID0gNDMsCiAgICAgICAgUGRjU2V0Rm9udCA9IDQ1LAogICAgICAgIFBkY1NldFBlbiA9IDQ2 LAogICAgICAgIFBkY1NldEJydXNoID0gNDcsCiAgICAgICAgUGRjU2V0VGFiU3RvcHMgPSA0OCwK ICAgICAgICBQZGNTZXRUYWJBcnJheSA9IDQ5LAogICAgICAgIFBkY1NldFVuaXQgPSA1MCwKICAg ICAgICBQZGNTZXRWWGZvcm0gPSA1MSwKICAgICAgICBQZGNTZXRXaW5kb3cgPSA1MiwKICAgICAg ICBQZGNTZXRWaWV3cG9ydCA9IDUzLAogICAgICAgIFBkY1NldFdYZm9ybSA9IDU0LAogICAgICAg IFBkY1NldFdNYXRyaXggPSA1NSwKICAgICAgICBQZGNTYXZlV01hdHJpeCA9IDU2LAogICAgICAg IFBkY1Jlc3RvcmVXTWF0cml4ID0gNTcsCiAgICAgICAgUGRjU2V0Q2xpcCA9IDYwLAogICAgICAg IFBkY1NldENsaXBSZWdpb24gPSA2MSwKCiAgICAgICAgUGRjUmVzZXJ2ZWRTdGFydCA9IDAsCiAg ICAgICAgUGRjUmVzZXJ2ZWRTdG9wID0gMTk5CiAgICB9OwoKcHJvdGVjdGVkOgogICAgUVBhaW50 RGV2aWNlKCB1aW50IGRldmZsYWdzICk7CgoKCgogICAgUXQ6OkhBTkRMRSBoZDsKICAgIFF0OjpI QU5ETEUgcmVuZGhkOwoKICAgIHZvaWQgY29weVgxMURhdGEoIGNvbnN0IFFQYWludERldmljZSAq ICk7CiAgICB2b2lkIGNsb25lWDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlICogKTsKICAgIHZp cnR1YWwgdm9pZCBzZXRYMTFEYXRhKCBjb25zdCBRUGFpbnREZXZpY2VYMTFEYXRhKiApOwogICAg UVBhaW50RGV2aWNlWDExRGF0YSogZ2V0WDExRGF0YSggYm9vbCBkZWY9RkFMU0UgKSBjb25zdDsK IyAyMjkgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIKICAgIHZp cnR1YWwgYm9vbCBjbWQoIGludCwgUVBhaW50ZXIgKiwgUVBEZXZDbWRQYXJhbSAqICk7CiAgICB2 aXJ0dWFsIGludCBtZXRyaWMoIGludCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgZm9udE1ldCgg UUZvbnQgKiwgaW50LCBjb25zdCBjaGFyICogPSAwLCBpbnQgPSAwICkgY29uc3Q7CiAgICB2aXJ0 dWFsIGludCBmb250SW5mKCBRRm9udCAqLCBpbnQgKSBjb25zdDsKCiAgICB1c2hvcnQgZGV2Rmxh Z3M7CiAgICB1c2hvcnQgcGFpbnRlcnM7CgogICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwogICAg ZnJpZW5kIGNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CgoKCgoKCgogICAgZnJpZW5kIHZvaWQg Yml0Qmx0KCBRUGFpbnREZXZpY2UgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFFQYWludERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQsIGludCwgaW50LCBpbnQsIFF0OjpSYXN0ZXJPcCwgYm9vbCApOwoKCiAgICBm cmllbmQgdm9pZCBxdF9pbml0X2ludGVybmFsKCBpbnQgKiwgY2hhciAqKiwgRGlzcGxheSAqLCBR dDo6SEFORExFLCBRdDo6SEFORExFICk7CiAgICBmcmllbmQgdm9pZCBxdF9jbGVhbnVwKCk7CgoK cHJpdmF0ZToKCiAgICBzdGF0aWMgRGlzcGxheSAqeF9hcHBkaXNwbGF5OwogICAgc3RhdGljIGlu dCB4X2FwcHNjcmVlbjsKCiAgICBzdGF0aWMgaW50IHhfYXBwZGVwdGg7CiAgICBzdGF0aWMgaW50 IHhfYXBwY2VsbHM7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSB4X2FwcHJvb3R3aW5kb3c7CiAgICBz dGF0aWMgUXQ6OkhBTkRMRSB4X2FwcGNvbG9ybWFwOwogICAgc3RhdGljIGJvb2wgeF9hcHBkZWZj b2xvcm1hcDsKICAgIHN0YXRpYyB2b2lkICp4X2FwcHZpc3VhbDsKICAgIHN0YXRpYyBib29sIHhf YXBwZGVmdmlzdWFsOwoKCiAgICBzdGF0aWMgaW50ICp4X2FwcGRlcHRoX2FycjsKICAgIHN0YXRp YyBpbnQgKnhfYXBwY2VsbHNfYXJyOwogICAgc3RhdGljIFF0OjpIQU5ETEUgKnhfYXBwcm9vdHdp bmRvd19hcnI7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSAqeF9hcHBjb2xvcm1hcF9hcnI7CiAgICBz dGF0aWMgYm9vbCAqeF9hcHBkZWZjb2xvcm1hcF9hcnI7CiAgICBzdGF0aWMgdm9pZCAqKnhfYXBw dmlzdWFsX2FycjsKICAgIHN0YXRpYyBib29sICp4X2FwcGRlZnZpc3VhbF9hcnI7CgogICAgUVBh aW50RGV2aWNlWDExRGF0YSogeDExRGF0YTsKCgpwcml2YXRlOgoKICAgIFFQYWludERldmljZSgg Y29uc3QgUVBhaW50RGV2aWNlICYgKTsKICAgIFFQYWludERldmljZSAmb3BlcmF0b3I9KCBjb25z dCBRUGFpbnREZXZpY2UgJiApOwoKfTsKCgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0 LCBpbnQgZHgsIGludCBkeSwKICAgICAgICAgICAgIGNvbnN0IFFQYWludERldmljZSAqc3JjLCBp bnQgc3g9MCwgaW50IHN5PTAsIGludCBzdz0tMSwgaW50IHNoPS0xLAogICAgICAgICAgICAgUXQ6 OlJhc3Rlck9wID0gUXQ6OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApOwoKCnZvaWQg Yml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICBj b25zdCBRSW1hZ2UgKnNyYywgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0t MSwKICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzPTAgKTsKCgoKCnN0cnVjdCBRUGFp bnREZXZpY2VYMTFEYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgRGlzcGxheSogeF9kaXNwbGF5 OwogICAgaW50IHhfc2NyZWVuOwogICAgaW50IHhfZGVwdGg7CiAgICBpbnQgeF9jZWxsczsKICAg IFF0OjpIQU5ETEUgeF9jb2xvcm1hcDsKICAgIGJvb2wgeF9kZWZjb2xvcm1hcDsKICAgIHZvaWQq IHhfdmlzdWFsOwogICAgYm9vbCB4X2RlZnZpc3VhbDsKfTsKCgoKCgoKCmlubGluZSBpbnQgUVBh aW50RGV2aWNlOjpkZXZUeXBlKCkgY29uc3QKeyByZXR1cm4gZGV2RmxhZ3MgJiBRSW50ZXJuYWw6 OkRldmljZVR5cGVNYXNrOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OmlzRXh0RGV2KCkg Y29uc3QKeyByZXR1cm4gKGRldkZsYWdzICYgUUludGVybmFsOjpFeHRlcm5hbERldmljZSkgIT0g MDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjpwYWludGluZ0FjdGl2ZSgpIGNvbnN0Cnsg cmV0dXJuIHBhaW50ZXJzICE9IDA7IH0KCgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4 MTFEaXNwbGF5KCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfZGlzcGxheSA6 IHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMVNjcmVlbigpIGNv bnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3NjcmVlbiA6IHhfYXBwc2NyZWVuOyB9 CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExRGVwdGgoKSBjb25zdAp7IHJldHVybiB4MTFE YXRhID8geDExRGF0YS0+eF9kZXB0aCA6IHhfYXBwZGVwdGg7IH0KCmlubGluZSBpbnQgUVBhaW50 RGV2aWNlOjp4MTFDZWxscygpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2Nl bGxzIDogeF9hcHBjZWxsczsgfQoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFD b2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2NvbG9ybWFwIDog eF9hcHBjb2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZhdWx0Q29s b3JtYXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZjb2xvcm1hcCA6 IHhfYXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMVZpc3Vh bCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3Zpc3VhbCA6IHhfYXBwdmlz dWFsOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMURlZmF1bHRWaXN1YWwoKSBjb25z dAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZ2aXN1YWwgOiB4X2FwcGRlZnZpc3Vh bDsgfQoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6eDExQXBwRGlzcGxheSgpCnsgcmV0 dXJuIHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcFNjcmVl bigpCnsgcmV0dXJuIHhfYXBwc2NyZWVuOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDEx QXBwRGVwdGgoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2FwcGRlcHRoX2Fyclsgc2NyZWVuID09 IC0xID8geF9hcHBzY3JlZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6 OngxMUFwcENlbGxzKCBpbnQgc2NyZWVuICkKeyByZXR1cm4geF9hcHBjZWxsc19hcnJbIHNjcmVl biA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVuIF07IH0KCmlubGluZSBRdDo6SEFORExFIFFQ YWludERldmljZTo6eDExQXBwUm9vdFdpbmRvdyggaW50IHNjcmVlbiApCnsgcmV0dXJuIHhfYXBw cm9vdHdpbmRvd19hcnJbIHNjcmVlbiA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVuIF07IH0K CmlubGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBwQ29sb3JtYXAoIGludCBzY3Jl ZW4gKQp7IHJldHVybiB4X2FwcGNvbG9ybWFwX2Fyclsgc2NyZWVuID09IC0xID8geF9hcHBzY3Jl ZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0 Q29sb3JtYXAoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2FwcGRlZmNvbG9ybWFwX2Fyclsgc2Ny ZWVuID09IC0xID8geF9hcHBzY3JlZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIHZvaWQgKlFQYWlu dERldmljZTo6eDExQXBwVmlzdWFsKCBpbnQgc2NyZWVuICkKeyByZXR1cm4geF9hcHB2aXN1YWxf YXJyWyBzY3JlZW4gPT0gLTEgPyB4X2FwcHNjcmVlbiA6IHNjcmVlbiBdOyB9CgppbmxpbmUgYm9v bCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRWaXN1YWwoIGludCBzY3JlZW4gKQp7IHJldHVy biB4X2FwcGRlZnZpc3VhbF9hcnJbIHNjcmVlbiA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVu IF07IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhf YXBwZGVwdGg7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0 dXJuIHhfYXBwY2VsbHM7IH0KCmlubGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBw Um9vdFdpbmRvdygpCnsgcmV0dXJuIHhfYXBwcm9vdHdpbmRvdzsgfQoKaW5saW5lIFF0OjpIQU5E TEUgUVBhaW50RGV2aWNlOjp4MTFBcHBDb2xvcm1hcCgpCnsgcmV0dXJuIHhfYXBwY29sb3JtYXA7 IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExQXBwRGVmYXVsdENvbG9ybWFwKCkKeyBy ZXR1cm4geF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWludERldmljZTo6eDEx QXBwVmlzdWFsKCkKeyByZXR1cm4geF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERl dmljZTo6eDExQXBwRGVmYXVsdFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwZGVmdmlzdWFsOyB9CgoK CgoKaW5saW5lIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgY29uc3QgUVBvaW50ICZk cCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgY29uc3QgUVJl Y3QgJnNyID1RUmVjdCgwLDAsLTEsLTEpLAogICAgICAgICAgICAgICAgICAgIFF0OjpSYXN0ZXJP cCByb3A9UXQ6OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApCnsKICAgIGJpdEJsdCgg ZHN0LCBkcC54KCksIGRwLnkoKSwgc3JjLCBzci54KCksIHNyLnkoKSwgc3Iud2lkdGgoKSwgc3Iu aGVpZ2h0KCksCiAgICAgICAgICAgIHJvcCwgaWdub3JlTWFzayApOwp9CiMgNDUgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcXBhbGV0dGUuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cXBhbGV0dGUuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNvbG9yLmgiIDEK IyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjb2xvci5oIgpjb25zdCBRUmdiIFJH Ql9NQVNLID0gMHgwMGZmZmZmZjsKCiBpbmxpbmUgaW50IHFSZWQoIFFSZ2IgcmdiICkKeyByZXR1 cm4gKGludCkoKHJnYiA+PiAxNikgJiAweGZmKTsgfQoKIGlubGluZSBpbnQgcUdyZWVuKCBRUmdi IHJnYiApCnsgcmV0dXJuIChpbnQpKChyZ2IgPj4gOCkgJiAweGZmKTsgfQoKIGlubGluZSBpbnQg cUJsdWUoIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkocmdiICYgMHhmZik7IH0KCiBpbmxpbmUg aW50IHFBbHBoYSggUVJnYiByZ2IgKQp7IHJldHVybiAoaW50KSgocmdiID4+IDI0KSAmIDB4ZmYp OyB9CgogaW5saW5lIFFSZ2IgcVJnYiggaW50IHIsIGludCBnLCBpbnQgYiApCnsgcmV0dXJuICgw eGZmIDw8IDI0KSB8ICgociAmIDB4ZmYpIDw8IDE2KSB8ICgoZyAmIDB4ZmYpIDw8IDgpIHwgKGIg JiAweGZmKTsgfQoKIGlubGluZSBRUmdiIHFSZ2JhKCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQg YSApCnsgcmV0dXJuICgoYSAmIDB4ZmYpIDw8IDI0KSB8ICgociAmIDB4ZmYpIDw8IDE2KSB8ICgo ZyAmIDB4ZmYpIDw8IDgpIHwgKGIgJiAweGZmKTsgfQoKIGlubGluZSBpbnQgcUdyYXkoIGludCBy LCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAocioxMStnKjE2K2IqNSkvMzI7IH0KCiBpbmxpbmUg aW50IHFHcmF5KCBRUmdiIHJnYiApCnsgcmV0dXJuIHFHcmF5KCBxUmVkKHJnYiksIHFHcmVlbihy Z2IpLCBxQmx1ZShyZ2IpICk7IH0KCgpjbGFzcyBRQ29sb3IKewpwdWJsaWM6CiAgICBlbnVtIFNw ZWMgeyBSZ2IsIEhzdiB9OwoKICAgIFFDb2xvcigpOwogICAgUUNvbG9yKCBpbnQgciwgaW50IGcs IGludCBiICk7CiAgICBRQ29sb3IoIGludCB4LCBpbnQgeSwgaW50IHosIFNwZWMgKTsKICAgIFFD b2xvciggUVJnYiByZ2IsIHVpbnQgcGl4ZWw9MHhmZmZmZmZmZik7CiAgICBRQ29sb3IoIGNvbnN0 IFFTdHJpbmcmIG5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgY2hhciAqbmFtZSApOwogICAgUUNv bG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgUUNvbG9yICZvcGVyYXRvcj0oIGNvbnN0IFFDb2xv ciAmICk7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBib29sIGlzRGlydHkoKSBjb25z dDsKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXROYW1lZENvbG9yKCBjb25z dCBRU3RyaW5nJiBuYW1lICk7CgogICAgdm9pZCByZ2IoIGludCAqciwgaW50ICpnLCBpbnQgKmIg KSBjb25zdDsKICAgIFFSZ2IgcmdiKCkgY29uc3Q7CiAgICB2b2lkIHNldFJnYiggaW50IHIsIGlu dCBnLCBpbnQgYiApOwogICAgdm9pZCBzZXRSZ2IoIFFSZ2IgcmdiICk7CgogICAgaW50IHJlZCgp IGNvbnN0OwogICAgaW50IGdyZWVuKCkgY29uc3Q7CiAgICBpbnQgYmx1ZSgpIGNvbnN0OwoKICAg IHZvaWQgaHN2KCBpbnQgKmgsIGludCAqcywgaW50ICp2ICkgY29uc3Q7CiAgICB2b2lkIGdldEhz diggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0IHsgaHN2KCAmaCwgJnMsICZ2ICk7IH0K ICAgIHZvaWQgc2V0SHN2KCBpbnQgaCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxpZ2h0 KCBpbnQgZiA9IDE1MCApIGNvbnN0OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkgY29u c3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAgIGJv b2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CgogICAgdWludCBhbGxvYygp OwogICAgdWludCBwaXhlbCgpIGNvbnN0OwoKCgogICAgdWludCBhbGxvYyggaW50IHNjcmVlbiAp OwogICAgdWludCBwaXhlbCggaW50IHNjcmVlbiApIGNvbnN0OwoKCiAgICBzdGF0aWMgaW50IG1h eENvbG9ycygpOwogICAgc3RhdGljIGludCBudW1CaXRQbGFuZXMoKTsKCiAgICBzdGF0aWMgaW50 IGVudGVyQWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBsZWF2ZUFsbG9jQ29udGV4dCgp OwogICAgc3RhdGljIGludCBjdXJyZW50QWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBk ZXN0cm95QWxsb2NDb250ZXh0KCBpbnQgKTsKIyAxMzUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xY29sb3IuaCIKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2 b2lkIGNsZWFudXAoKTsKCiAgICBlbnVtIHsgRGlydCA9IDB4NDQ0OTUyNTQsIEludmFsaWQgPSAw eDQ5MDAwMDAwIH07Cgpwcml2YXRlOgogICAgdm9pZCBzZXRTeXN0ZW1OYW1lZENvbG9yKCBjb25z dCBRU3RyaW5nJiBuYW1lICk7CiAgICB2b2lkIHNldFBpeGVsKCB1aW50IHBpeGVsICk7CiAgICBz dGF0aWMgdm9pZCBpbml0R2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgdWludCBhcmdiVG9QaXgz MihRUmdiKTsKICAgIHN0YXRpYyBRQ29sb3IqIGdsb2JhbENvbG9ycygpOwogICAgc3RhdGljIGJv b2wgY29sb3JfaW5pdDsKICAgIHN0YXRpYyBib29sIGdsb2JhbHNfaW5pdDsKCgoKICAgIHN0YXRp YyBlbnVtIENvbG9yTW9kZWwgeyBkOCwgZDMyIH0gY29sb3Jtb2RlbDsKICAgIHVuaW9uIHsKICAg ICAgICBRUmdiIGFyZ2I7CiAgICAgICAgc3RydWN0IEQ4IHsKICAgICAgICAgICAgUVJnYiBhcmdi OwogICAgICAgICAgICB1Y2hhciBwaXg7CiAgICAgICAgICAgIHVjaGFyIGludmFsaWQ7CiAgICAg ICAgICAgIHVjaGFyIGRpcnR5OwogICAgICAgICAgICB1Y2hhciBkaXJlY3Q7CiAgICAgICAgfSBk ODsKICAgICAgICBzdHJ1Y3QgRDMyIHsKICAgICAgICAgICAgUVJnYiBhcmdiOwogICAgICAgICAg ICB1aW50IHBpeDsKICAgICAgICAgICAgYm9vbCBpbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gYXJn YiA9PSBRQ29sb3I6OkludmFsaWQgJiYgcGl4ID09IFFDb2xvcjo6RGlydDsgfQogICAgICAgICAg ICBib29sIHByb2JhYmx5RGlydHkoKSBjb25zdCB7IHJldHVybiBwaXggPT0gUUNvbG9yOjpEaXJ0 OyB9CiAgICAgICAgfSBkMzI7CiAgICB9IGQ7Cn07CgoKaW5saW5lIFFDb2xvcjo6UUNvbG9yKCkK eyBkLmQzMi5hcmdiID0gSW52YWxpZDsgZC5kMzIucGl4ID0gRGlydDsgfQoKaW5saW5lIFFDb2xv cjo6UUNvbG9yKCBpbnQgciwgaW50IGcsIGludCBiICkKeyBzZXRSZ2IoIHIsIGcsIGIgKTsgfQoK aW5saW5lIFFSZ2IgUUNvbG9yOjpyZ2IoKSBjb25zdAp7IHJldHVybiBkLmFyZ2I7IH0KCmlubGlu ZSBpbnQgUUNvbG9yOjpyZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKGQuYXJnYik7IH0KCmlubGlu ZSBpbnQgUUNvbG9yOjpncmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihkLmFyZ2IpOyB9Cgpp bmxpbmUgaW50IFFDb2xvcjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKGQuYXJnYik7IH0K CmlubGluZSBib29sIFFDb2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsKICAgIGlmICggY29sb3Jtb2Rl bCA9PSBkOCApCiAgICAgICAgcmV0dXJuICFkLmQ4LmludmFsaWQ7CiAgICBlbHNlCiAgICAgICAg cmV0dXJuICFkLmQzMi5pbnZhbGlkKCk7Cn0KCmlubGluZSBib29sIFFDb2xvcjo6b3BlcmF0b3I9 PSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuIGQuYXJnYiA9PSBjLmQuYXJn YiAmJiBpc1ZhbGlkKCkgPT0gYy5pc1ZhbGlkKCk7Cn0KCmlubGluZSBib29sIFFDb2xvcjo6b3Bl cmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuICFvcGVyYXRvcj09 KGMpOwp9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv bnN0IFFDb2xvciAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwg UUNvbG9yICYgKTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWxldHRlLmgi IDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FicnVzaC5oIiAxCiMgNDcgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnJ1c2guaCIKY2xhc3MgUUJydXNoOiBwdWJsaWMg UXQKewpmcmllbmQgY2xhc3MgUVBhaW50ZXI7CnB1YmxpYzoKICAgIFFCcnVzaCgpOwogICAgUUJy dXNoKCBCcnVzaFN0eWxlICk7CiAgICBRQnJ1c2goIGNvbnN0IFFDb2xvciAmLCBCcnVzaFN0eWxl PVNvbGlkUGF0dGVybiApOwogICAgUUJydXNoKCBjb25zdCBRQ29sb3IgJiwgY29uc3QgUVBpeG1h cCAmICk7CiAgICBRQnJ1c2goIGNvbnN0IFFCcnVzaCAmICk7CiAgIH5RQnJ1c2goKTsKICAgIFFC cnVzaCAmb3BlcmF0b3I9KCBjb25zdCBRQnJ1c2ggJiApOwoKICAgIEJydXNoU3R5bGUgc3R5bGUo KSBjb25zdCB7IHJldHVybiBkYXRhLT5zdHlsZTsgfQogICAgdm9pZCBzZXRTdHlsZSggQnJ1c2hT dHlsZSApOwogICAgY29uc3QgUUNvbG9yICZjb2xvcigpY29uc3QgeyByZXR1cm4gZGF0YS0+Y29s b3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBRUGl4bWFwICpw aXhtYXAoKSBjb25zdCB7IHJldHVybiBkYXRhLT5waXhtYXA7IH0KICAgIHZvaWQgc2V0UGl4bWFw KCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFCcnVzaCAm cCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRQnJ1c2ggJmIgKSBjb25zdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRv cj09KGIpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCBjb3B5KCkgY29uc3Q7CiAgICB2b2lkIGRl dGFjaCgpOwogICAgdm9pZCBpbml0KCBjb25zdCBRQ29sb3IgJiwgQnJ1c2hTdHlsZSApOwogICAg c3RydWN0IFFCcnVzaERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgQnJ1c2hTdHlsZSBz dHlsZTsKICAgICAgICBRQ29sb3IgY29sb3I7CiAgICAgICAgUVBpeG1hcCAqcGl4bWFwOwogICAg fSAqZGF0YTsKfTsKCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0g JiwgY29uc3QgUUJydXNoICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh bSAmLCBRQnJ1c2ggJiApOwojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBhbGV0 dGUuaCIgMgoKCgoKY2xhc3MgUUNvbG9yR3JvdXBQcml2YXRlOwoKY2xhc3MgUUNvbG9yR3JvdXAK ewpwdWJsaWM6CiAgICBRQ29sb3JHcm91cCgpOwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFDb2xv ciAmZm9yZWdyb3VuZCwgY29uc3QgUUNvbG9yICZidXR0b24sCiAgICAgICAgICAgICAgICAgY29u c3QgUUNvbG9yICZsaWdodCwgY29uc3QgUUNvbG9yICZkYXJrLCBjb25zdCBRQ29sb3IgJm1pZCwK ICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3IgJnRleHQsIGNvbnN0IFFDb2xvciAmYmFzZSAp OwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFCcnVzaCAmZm9yZWdyb3VuZCwgY29uc3QgUUJydXNo ICZidXR0b24sCiAgICAgICAgICAgICAgICAgY29uc3QgUUJydXNoICZsaWdodCwgY29uc3QgUUJy dXNoICZkYXJrLCBjb25zdCBRQnJ1c2ggJm1pZCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1 c2ggJnRleHQsIGNvbnN0IFFCcnVzaCAmYnJpZ2h0X3RleHQsCiAgICAgICAgICAgICAgICAgY29u c3QgUUJydXNoICZiYXNlLCBjb25zdCBRQnJ1c2ggJmJhY2tncm91bmQpOwogICAgUUNvbG9yR3Jv dXAoIGNvbnN0IFFDb2xvckdyb3VwICYgKTsKCiAgIH5RQ29sb3JHcm91cCgpOwoKICAgIFFDb2xv ckdyb3VwJiBvcGVyYXRvciA9KGNvbnN0IFFDb2xvckdyb3VwJik7CgoKICAgIGVudW0gQ29sb3JS b2xlIHsgRm9yZWdyb3VuZCwgQnV0dG9uLCBMaWdodCwgTWlkbGlnaHQsIERhcmssIE1pZCwKICAg ICAgICAgICAgICAgICAgICAgVGV4dCwgQnJpZ2h0VGV4dCwgQnV0dG9uVGV4dCwgQmFzZSwgQmFj a2dyb3VuZCwgU2hhZG93LAogICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHQsIEhpZ2hsaWdo dGVkVGV4dCwgTGluaywgTGlua1Zpc2l0ZWQsCiAgICAgICAgICAgICAgICAgICAgIE5Db2xvclJv bGVzIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xvciggQ29sb3JSb2xlICkgY29uc3Q7CiAgICBj b25zdCBRQnJ1c2ggJmJydXNoKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3Io IENvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yUm9s ZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQoKSBjb25z dCB7IHJldHVybiBicltGb3JlZ3JvdW5kXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1 dHRvbigpIGNvbnN0IHsgcmV0dXJuIGJyW0J1dHRvbl0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv bG9yICZsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW0xpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25z dCBRQ29sb3IgJmRhcmsoKSBjb25zdCB7IHJldHVybiBicltEYXJrXS5jb2xvcigpOyB9CiAgICBj b25zdCBRQ29sb3IgJm1pZCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZF0uY29sb3IoKTsgfQogICAg Y29uc3QgUUNvbG9yICZ0ZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbVGV4dF0uY29sb3IoKTsgfQog ICAgY29uc3QgUUNvbG9yICZiYXNlKCkgY29uc3QgeyByZXR1cm4gYnJbQmFzZV0uY29sb3IoKTsg fQogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbQmFja2dy b3VuZF0uY29sb3IoKTsgfQoKICAgIGNvbnN0IFFDb2xvciAmbWlkbGlnaHQoKSBjb25zdCB7IHJl dHVybiBicltNaWRsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZicmlnaHRUZXh0 KCkgY29uc3QgeyByZXR1cm4gYnJbQnJpZ2h0VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv bG9yICZidXR0b25UZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbQnV0dG9uVGV4dF0uY29sb3IoKTsg fQogICAgY29uc3QgUUNvbG9yICZzaGFkb3coKSBjb25zdCB7IHJldHVybiBicltTaGFkb3ddLmNv bG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJb SGlnaGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodGVkVGV4dCgp IGNvbnN0e3JldHVybiBicltIaWdobGlnaHRlZFRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFD b2xvciAmbGluaygpIGNvbnN0IHsgcmV0dXJuIGJyW0xpbmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0 IFFDb2xvciAmbGlua1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBicltMaW5rVmlzaXRlZF0uY29s b3IoKTsgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25z dDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdAogICAg ICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShnKSk7IH0KCnByaXZhdGU6CiAgICBRQnJ1c2ggKmJy OwogICAgUUNvbG9yR3JvdXBQcml2YXRlICogZDsKCiAgICBmcmllbmQgY2xhc3MgUVBhbGV0dGU7 Cn07CgoKY2xhc3MgUVBhbGV0dGUKewpwdWJsaWM6CiAgICBRUGFsZXR0ZSgpOwogICAgUVBhbGV0 dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZi dXR0b24sIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZCApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFD b2xvckdyb3VwICZhY3RpdmUsIGNvbnN0IFFDb2xvckdyb3VwICZkaXNhYmxlZCwKICAgICAgICAg ICAgICBjb25zdCBRQ29sb3JHcm91cCAmaW5hY3RpdmUgKTsKICAgIFFQYWxldHRlKCBjb25zdCBR UGFsZXR0ZSAmICk7CiAgICB+UVBhbGV0dGUoKTsKICAgIFFQYWxldHRlICZvcGVyYXRvcj0oIGNv bnN0IFFQYWxldHRlICYgKTsKCiAgICBlbnVtIENvbG9yR3JvdXAgeyBEaXNhYmxlZCwgQWN0aXZl LCBJbmFjdGl2ZSwgTkNvbG9yR3JvdXBzLCBOb3JtYWw9QWN0aXZlIH07CgogICAgY29uc3QgUUNv bG9yICZjb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0Owog ICAgY29uc3QgUUJydXNoICZicnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9s ZSApIGNvbnN0OwogICAgdm9pZCBzZXRDb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNv bG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yR3JvdXAs IFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgdm9pZCBzZXRD b2xvciggUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQg c2V0QnJ1c2goIFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAg UVBhbGV0dGUgY29weSgpIGNvbnN0OwoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUoKSBj b25zdCB7IHJldHVybiBkYXRhLT5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZkaXNh YmxlZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmRpc2FibGVkOyB9CiAgICBjb25zdCBRQ29sb3JH cm91cCAmaW5hY3RpdmUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5pbmFjdGl2ZTsgfQoKICAgIGNv bnN0IFFDb2xvckdyb3VwICZub3JtYWwoKSBjb25zdCB7IHJldHVybiBhY3RpdmUoKTsgfQoKCiAg ICB2b2lkIHNldEFjdGl2ZSggY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgdm9pZCBzZXREaXNh YmxlZCggY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgdm9pZCBzZXRJbmFjdGl2ZSggY29uc3Qg UUNvbG9yR3JvdXAgJiApOwoKICAgIHZvaWQgc2V0Tm9ybWFsKCBjb25zdCBRQ29sb3JHcm91cCAm IGNnICkgeyBzZXRBY3RpdmUoY2cpOyB9CgoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBh bGV0dGUgJnAgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBhbGV0dGUgJnAg KSBjb25zdAogICAgICAgICAgICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShwKSk7IH0KICAgIGJv b2wgaXNDb3B5T2YoIGNvbnN0IFFQYWxldHRlICYgKTsKCiAgICBpbnQgc2VyaWFsTnVtYmVyKCkg Y29uc3QgeyByZXR1cm4gZGF0YS0+c2VyX25vOyB9CgoKICAgIHN0YXRpYyBRQ29sb3JHcm91cDo6 Q29sb3JSb2xlIGZvcmVncm91bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBtb2Rl ICk7CiAgICBzdGF0aWMgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSBiYWNrZ3JvdW5kUm9sZUZyb21N b2RlKCBRdDo6QmFja2dyb3VuZE1vZGUgbW9kZSk7Cgpwcml2YXRlOgogICAgdm9pZCBkZXRhY2go KTsKICAgIGNvbnN0IFFCcnVzaCAmZGlyZWN0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdyb3Vw OjpDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgZGlyZWN0U2V0QnJ1c2goIENvbG9yR3JvdXAs IFFDb2xvckdyb3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCYgKTsKCiAgICBzdHJ1Y3QgUVBh bERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgUUNvbG9yR3JvdXAgZGlzYWJsZWQ7CiAg ICAgICAgUUNvbG9yR3JvdXAgYWN0aXZlOwogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUNv bG9yR3JvdXAgaW5hY3RpdmU7CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZv cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiBRRGF0YVN0 cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKIFFEYXRh U3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGFsZXR0ZSAmICk7CiBR RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBhbGV0dGUgJiApOwojIDQ2 ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250LmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3Fmb250LmgiCmNsYXNzIFFGb250UHJpdmF0ZTsKY2xhc3MgUVN0cmluZ0xpc3Q7CmNs YXNzIFFUZXh0Rm9ybWF0Q29sbGVjdGlvbjsKCmNsYXNzIFFGb250CnsKcHVibGljOgogICAgZW51 bSBTdHlsZUhpbnQgewogICAgICAgIEhlbHZldGljYSwgU2Fuc1NlcmlmID0gSGVsdmV0aWNhLAog ICAgICAgIFRpbWVzLCBTZXJpZiA9IFRpbWVzLAogICAgICAgIENvdXJpZXIsIFR5cGVXcml0ZXIg PSBDb3VyaWVyLAogICAgICAgIE9sZEVuZ2xpc2gsIERlY29yYXRpdmUgPSBPbGRFbmdsaXNoLAog ICAgICAgIFN5c3RlbSwKICAgICAgICBBbnlTdHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3Ry YXRlZ3kgewogICAgICAgIFByZWZlckRlZmF1bHQgPSAweDAwMDEsCiAgICAgICAgUHJlZmVyQml0 bWFwID0gMHgwMDAyLAogICAgICAgIFByZWZlckRldmljZSA9IDB4MDAwNCwKICAgICAgICBQcmVm ZXJPdXRsaW5lID0gMHgwMDA4LAogICAgICAgIEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAg ICBQcmVmZXJNYXRjaCA9IDB4MDAyMCwKICAgICAgICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwLAog ICAgICAgIFByZWZlckFudGlhbGlhcyA9IDB4MDA4MCwKICAgICAgICBOb0FudGlhbGlhcyA9IDB4 MDEwMAogICAgfTsKCiAgICBlbnVtIFdlaWdodCB7CiAgICAgICAgTGlnaHQgPSAyNSwKICAgICAg ICBOb3JtYWwgPSA1MCwKICAgICAgICBEZW1pQm9sZCA9IDYzLAogICAgICAgIEJvbGQgPSA3NSwK ICAgICAgICBCbGFjayA9IDg3CiAgICB9OwoKCiAgICBRRm9udCgpOwoKICAgIFFGb250KCBjb25z dCBRU3RyaW5nICZmYW1pbHksIGludCBwb2ludFNpemUgPSAxMiwgaW50IHdlaWdodCA9IE5vcm1h bCwKICAgICAgICAgICBib29sIGl0YWxpYyA9IEZBTFNFICk7CgogICAgUUZvbnQoIGNvbnN0IFFG b250ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAg dm9pZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJpbmcgJik7CgogICAgaW50IHBvaW50U2l6ZSgpIGNv bnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxvYXQoKSBjb25zdDsKICAgIHZvaWQgc2V0UG9pbnRT aXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9pbnRTaXplRmxvYXQoIGZsb2F0ICk7CgogICAgaW50 IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUoIGludCApOwogICAgdm9p ZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKCiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAg ICB2b2lkIHNldFdlaWdodCggaW50ICk7CgogICAgYm9vbCBib2xkKCkgY29uc3Q7CiAgICB2b2lk IHNldEJvbGQoIGJvb2wgKTsKCiAgICBib29sIGl0YWxpYygpIGNvbnN0OwogICAgdm9pZCBzZXRJ dGFsaWMoIGJvb2wgKTsKCiAgICBib29sIHVuZGVybGluZSgpIGNvbnN0OwogICAgdm9pZCBzZXRV bmRlcmxpbmUoIGJvb2wgKTsKCiAgICBib29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgdm9pZCBz ZXRTdHJpa2VPdXQoIGJvb2wgKTsKCiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIHZv aWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwoKICAgIFN0eWxlSGludCBzdHlsZUhpbnQoKSBjb25z dDsKICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVTdHJhdGVneSgpIGNvbnN0OwogICAgdm9pZCBzZXRT dHlsZUhpbnQoIFN0eWxlSGludCwgU3R5bGVTdHJhdGVneSA9IFByZWZlckRlZmF1bHQgKTsKICAg IHZvaWQgc2V0U3R5bGVTdHJhdGVneSggU3R5bGVTdHJhdGVneSBzICk7CgoKICAgIGJvb2wgcmF3 TW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRSYXdNb2RlKCBib29sICk7CgoKICAgIGJvb2wgZXhh Y3RNYXRjaCgpIGNvbnN0OwoKICAgIFFGb250ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsK ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVy YXRvciE9KCBjb25zdCBRRm9udCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBR Rm9udCAmICkgY29uc3Q7CgoKCgoKICAgIFF0OjpIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgog ICAgdm9pZCBzZXRSYXdOYW1lKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFt ZSgpIGNvbnN0OwoKICAgIFFTdHJpbmcga2V5KCkgY29uc3Q7CgogICAgUVN0cmluZyB0b1N0cmlu ZygpIGNvbnN0OwogICAgYm9vbCBmcm9tU3RyaW5nKGNvbnN0IFFTdHJpbmcgJik7CgoKICAgIHN0 YXRpYyBRU3RyaW5nIHN1YnN0aXR1dGUoY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3Ry aW5nTGlzdCBzdWJzdGl0dXRlcyhjb25zdCBRU3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdM aXN0IHN1YnN0aXR1dGlvbnMoKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihj b25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1 YnN0aXR1dGlvbnMoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3Rh dGljIHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9uKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGlj IHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGlj IHZvaWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoKCgoKCgogICAgZW51bSBTY3JpcHQgewoKICAgICAg ICBMYXRpbiwKICAgICAgICBHcmVlaywKICAgICAgICBDeXJpbGxpYywKICAgICAgICBBcm1lbmlh biwKICAgICAgICBHZW9yZ2lhbiwKICAgICAgICBSdW5pYywKICAgICAgICBPZ2hhbSwKICAgICAg ICBTcGFjaW5nTW9kaWZpZXJzLAogICAgICAgIENvbWJpbmluZ01hcmtzLAoKCiAgICAgICAgSGVi cmV3LAogICAgICAgIEFyYWJpYywKICAgICAgICBTeXJpYWMsCiAgICAgICAgVGhhYW5hLAoKCiAg ICAgICAgRGV2YW5hZ2FyaSwKICAgICAgICBCZW5nYWxpLAogICAgICAgIEd1cm11a2hpLAogICAg ICAgIEd1amFyYXRpLAogICAgICAgIE9yaXlhLAogICAgICAgIFRhbWlsLAogICAgICAgIFRlbHVn dSwKICAgICAgICBLYW5uYWRhLAogICAgICAgIE1hbGF5YWxhbSwKICAgICAgICBTaW5oYWxhLAog ICAgICAgIFRoYWksCiAgICAgICAgTGFvLAogICAgICAgIFRpYmV0YW4sCiAgICAgICAgTXlhbm1h ciwKICAgICAgICBLaG1lciwKCgogICAgICAgIEhhbiwKICAgICAgICBIaXJhZ2FuYSwKICAgICAg ICBLYXRha2FuYSwKICAgICAgICBIYW5ndWwsCiAgICAgICAgQm9wb21vZm8sCiAgICAgICAgWWks CgoKICAgICAgICBFdGhpb3BpYywKICAgICAgICBDaGVyb2tlZSwKICAgICAgICBDYW5hZGlhbkFi b3JpZ2luYWwsCiAgICAgICAgTW9uZ29saWFuLAoKCiAgICAgICAgQ3VycmVuY3lTeW1ib2xzLAog ICAgICAgIExldHRlcmxpa2VTeW1ib2xzLAogICAgICAgIE51bWJlckZvcm1zLAogICAgICAgIE1h dGhlbWF0aWNhbE9wZXJhdG9ycywKICAgICAgICBUZWNobmljYWxTeW1ib2xzLAogICAgICAgIEdl b21ldHJpY1N5bWJvbHMsCiAgICAgICAgTWlzY2VsbGFuZW91c1N5bWJvbHMsCiAgICAgICAgRW5j bG9zZWRBbmRTcXVhcmUsCiAgICAgICAgQnJhaWxsZSwKCiAgICAgICAgVW5pY29kZSwKCgogICAg ICAgIE5TY3JpcHRzLAogICAgICAgIFVua25vd25TY3JpcHQgPSBOU2NyaXB0cywKCiAgICAgICAg Tm9TY3JpcHQsCgoKCgoKCiAgICAgICAgSGFuWDExLAoKICAgICAgICBMYXRpbkJhc2ljID0gTGF0 aW4sCiAgICAgICAgTGF0aW5FeHRlbmRlZEFfMiA9IEhhblgxMSArIDEsCiAgICAgICAgTGF0aW5F eHRlbmRlZEFfMywKICAgICAgICBMYXRpbkV4dGVuZGVkQV80LAogICAgICAgIExhdGluRXh0ZW5k ZWRBXzE0LAogICAgICAgIExhdGluRXh0ZW5kZWRBXzE1LAogICAgICAgIEthdGFrYW5hSGFsZldp ZHRoLAoKICAgICAgICBMYXN0UHJpdmF0ZVNjcmlwdAogICAgfTsKCiAgICBRU3RyaW5nIGRlZmF1 bHRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0Owog ICAgUVN0cmluZyBsYXN0UmVzb3J0Rm9udCgpIGNvbnN0OwoKCgogICAgc3RhdGljIFFGb250IGRl ZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQg JiApOwoKCgoKcHJvdGVjdGVkOgoKICAgIGJvb2wgZGlydHkoKSBjb25zdDsKICAgIGludCBkZWNp UG9pbnRTaXplKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250KCBRRm9udFByaXZhdGUgKiwg Ym9vbCBkZWVwID0gVFJVRSApOwogICAgUUZvbnQoIFFGb250UHJpdmF0ZSAqLCBRUGFpbnREZXZp Y2UgKnBkICk7CgogICAgdm9pZCBkZXRhY2goKTsKIyAyOTggIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xZm9udC5oIgogICAgdm9pZCB4MTFTZXRTY3JlZW4oIGludCBzY3JlZW4gPSAtMSAp OwogICAgaW50IHgxMVNjcmVlbigpIGNvbnN0OwoKCiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRy aWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl cjsKICAgIGZyaWVuZCBjbGFzcyBRUFNQcmludGVyRm9udDsKICAgIGZyaWVuZCBjbGFzcyBRQXBw bGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRVGV4 dEZvcm1hdENvbGxlY3Rpb247CgoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg UURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZv cGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKICAgIFFGb250UHJpdmF0ZSAq ZDsKfTsKCgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgp ID4gTm9ybWFsOyB9CgoKaW5saW5lIHZvaWQgUUZvbnQ6OnNldEJvbGQoIGJvb2wgZW5hYmxlICkK eyBzZXRXZWlnaHQoIGVuYWJsZSA/IEJvbGQgOiBOb3JtYWwgKTsgfQojIDMzNCAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250LmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh dGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFE YXRhU3RyZWFtICYsIFFGb250ICYgKTsKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl L3F3aWRnZXQuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZm9udG1ldHJp Y3MuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZvbnRtZXRyaWNzLmgi CmNsYXNzIFFGb250U3RydWN0OwpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRVGV4dFBhcmFnOwoK Y2xhc3MgUUZvbnRNZXRyaWNzCnsKcHVibGljOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9u dCAmICk7CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250TWV0cmljcyAmICk7CiAgICB+UUZv bnRNZXRyaWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVyYXRvcj0oIGNvbnN0IFFGb250TWV0 cmljcyAmICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0OwogICAgaW50IGRlc2NlbnQoKSBjb25z dDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBsZWFkaW5nKCkgY29uc3Q7CiAgICBp bnQgbGluZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5MZWZ0QmVhcmluZygpIGNvbnN0Owog ICAgaW50IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1heFdpZHRoKCkgY29uc3Q7 CgogICAgYm9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAgIGludCBsZWZ0QmVhcmluZyhRQ2hh cikgY29uc3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGludCB3aWR0 aCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKCiAgICBpbnQgd2lkdGgo IFFDaGFyICkgY29uc3Q7CgogICAgaW50IHdpZHRoKCBjaGFyIGMgKSBjb25zdCB7IHJldHVybiB3 aWR0aCggKFFDaGFyKSBjICk7IH0KCgogICAgaW50IGNoYXJXaWR0aCggY29uc3QgUVN0cmluZyAm c3RyLCBpbnQgcG9zICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJp bmcgJiwgaW50IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIFFDaGFy ICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu dCBoLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp bmcmIHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqdGFiYXJyYXk9MCwgUVRleHRQYXJhZyAqKmludGVybj0wICkgY29uc3Q7 CiAgICBRU2l6ZSBzaXplKCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR U3RyaW5nJiBzdHIsIGludCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAogICAgICAgICAgICAgICAg ICAgICAgaW50ICp0YWJhcnJheT0wLCBRVGV4dFBhcmFnICoqaW50ZXJuPTAgKSBjb25zdDsKCiAg ICBpbnQgdW5kZXJsaW5lUG9zKCkgY29uc3Q7CiAgICBpbnQgc3RyaWtlT3V0UG9zKCkgY29uc3Q7 CiAgICBpbnQgbGluZVdpZHRoKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnRNZXRyaWNzKCBj b25zdCBRUGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIg KiApOwojIDEwNCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250bWV0cmljcy5oIgog ICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBm cmllbmQgY2xhc3MgUVRleHRGb3JtYXQ7CgoKCgogICAgUUZvbnRQcml2YXRlICpkOwogICAgUVBh aW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkg Y29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZs YWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7IH0KICAgIHZvaWQgc2V0VW5k ZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lkIHNldFN0cmlrZU91dEZsYWco KSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cXdpZGdldC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fmb250aW5mby5o IiAxCiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZm9udGluZm8uaCIKY2xhc3Mg UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZv bnRJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1p bHkoKSBjb25zdDsKICAgIGludCBwaXhlbFNpemUoKSBjb25zdDsKICAgIGludCBwb2ludFNpemUo KSBjb25zdDsKICAgIGJvb2wgaXRhbGljKCkgY29uc3Q7CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7 CiAgICBib29sIGJvbGQoKSBjb25zdDsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICBi b29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgYm9vbCBmaXhlZFBpdGNoKCkgY29uc3Q7CiAgICBR Rm9udDo6U3R5bGVIaW50IHN0eWxlSGludCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkgY29u c3Q7CgogICAgYm9vbCBleGFjdE1hdGNoKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5m byggY29uc3QgUVBhaW50ZXIgKiApOwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWlu dGVyICogKTsKCiAgICBRRm9udFByaXZhdGUgKmQ7CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAg IGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxh Z3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJu IChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsg cmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkg eyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0g MHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAg ICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgpp bmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFG b250OjpOb3JtYWw7IH0KIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQu aCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZXBvbGljeS5oIiAxCiMg NDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2l6ZXBvbGljeS5oIgojIDEgIi91c3Iv bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FzaXplcG9saWN5LmgiIDIKCgoKCmNsYXNzIFFTaXplUG9saWN5CnsKcHJp dmF0ZToKICAgIGVudW0geyBIU2l6ZSA9IDYsIEhNYXNrID0gMHgzZiwgVk1hc2sgPSBITWFzayA8 PCBIU2l6ZSwKICAgICAgICAgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9 IDQgfTsKcHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKICAgICAgICAgICAg ICAgICAgICBNaW5pbXVtID0gTWF5R3JvdywKICAgICAgICAgICAgICAgICAgICBNYXhpbXVtID0g TWF5U2hyaW5rLAogICAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCA9IE1heUdyb3cgfCBNYXlT aHJpbmssCiAgICAgICAgICAgICAgICAgICAgTWluaW11bUV4cGFuZGluZyA9IE1heUdyb3cgfCBF eHBNYXNrLAogICAgICAgICAgICAgICAgICAgIEV4cGFuZGluZyA9IE1heUdyb3cgfCBNYXlTaHJp bmsgfCBFeHBNYXNrLAogICAgICAgICAgICAgICAgICAgIElnbm9yZWQgPSBFeHBNYXNrIH07Cgog ICAgZW51bSBFeHBhbmREYXRhIHsgTm9EaXJlY3Rpb24gPSAwLAogICAgICAgICAgICAgICAgICAg ICAgSG9yaXpvbnRhbGx5ID0gMSwKICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsbHkgPSAy LAoKICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgPSBIb3Jpem9udGFsbHksCiAgICAg ICAgICAgICAgICAgICAgICBWZXJ0aWNhbCA9IFZlcnRpY2FsbHksCgogICAgICAgICAgICAgICAg ICAgICAgQm90aERpcmVjdGlvbnMgPSBIb3Jpem9udGFsbHkgfCBWZXJ0aWNhbGx5IH07CgogICAg UVNpemVQb2xpY3koKSA6IGRhdGEoIDAgKSB7IH0KCiAgICBRU2l6ZVBvbGljeSggU2l6ZVR5cGUg aG9yLCBTaXplVHlwZSB2ZXIsIGJvb2wgaGZ3ID0gRkFMU0UgKQogICAgICAgIDogZGF0YSggaG9y IHwgKHZlcjw8SFNpemUpIHwgKGhmdyA/IChRX1VJTlQzMikoMTw8MipIU2l6ZSkgOiAwKSApIHsg fQogICAgUVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1Y2hhciBob3Jz LCB1Y2hhciB2ZXJzLCBib29sIGhmdyA9IEZBTFNFICk7CgogICAgU2l6ZVR5cGUgaG9yRGF0YSgp IGNvbnN0IHsgcmV0dXJuIChTaXplVHlwZSkoIGRhdGEgJiBITWFzayApOyB9CiAgICBTaXplVHlw ZSB2ZXJEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNpemVUeXBlKSggKGRhdGEgJiBWTWFzaykgPj4g SFNpemUgKTsgfQoKICAgIGJvb2wgbWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1 cm4gaG9yRGF0YSgpICYgTWF5U2hyaW5rIHx8IGhvckRhdGEoKSA9PSBJZ25vcmVkOyB9CiAgICBi b29sIG1heVNocmlua1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2ZXJEYXRhKCkgJiBNYXlT aHJpbmsgfHwgdmVyRGF0YSgpID09IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd0hvcml6b250 YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1heUdyb3cgfHwgaG9yRGF0YSgpID09 IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5R3Jvd1ZlcnRpY2FsbHkoKSBjb25zdCB7IHJldHVybiB2 ZXJEYXRhKCkgJiBNYXlHcm93IHx8IHZlckRhdGEoKSA9PSBJZ25vcmVkOyB9CgogICAgRXhwYW5k RGF0YSBleHBhbmRpbmcoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAoRXhwYW5kRGF0YSko IChpbnQpKHZlckRhdGEoKSAmIEV4cE1hc2sgPyBWZXJ0aWNhbGx5IDogMCkgfAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpbnQpKGhvckRhdGEoKSAmIEV4cE1hc2sgPyBIb3Jpem9udGFs bHkgOiAwKSApOwogICAgfQoKICAgIHZvaWQgc2V0SG9yRGF0YSggU2l6ZVR5cGUgZCApIHsgZGF0 YSA9IChRX1VJTlQzMikoZGF0YSAmIH5ITWFzaykgfCBkOyB9CiAgICB2b2lkIHNldFZlckRhdGEo IFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoUV9VSU5UMzIpKGRhdGEgJiB+KEhNYXNrIDw8IEhTaXpl KSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQgPDwgSFNp emUpOyB9CgogICAgdm9pZCBzZXRIZWlnaHRGb3JXaWR0aCggYm9vbCBiICkgeyBkYXRhID0gYiA/ IChRX1VJTlQzMikoIGRhdGEgfCAoIDEgPDwgMipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKFFfVUlOVDMyKSggZGF0YSAmIH4oIDEgPDwg MipIU2l6ZSApICk7IH0KICAgIGJvb2wgaGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCB7IHJldHVy biBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3Qg UVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJldHVybiBkYXRhID09IHMuZGF0YTsgfQogICAgYm9v bCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBvbGljeSYgcyApIGNvbnN0IHsgcmV0dXJuIGRhdGEg IT0gcy5kYXRhOyB9CgoKICAgIHVpbnQgaG9yU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEg Pj4gMjQ7IH0KICAgIHVpbnQgdmVyU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIChkYXRhID4+IDE2 KSAmIDB4ZmY7IH0KICAgIHZvaWQgc2V0SG9yU3RyZXRjaCggdWNoYXIgc2YgKSB7IGRhdGEgPSAo ZGF0YSYweDAwZmZmZmZmKSB8ICh1aW50KHNmKTw8MjQpOyB9CiAgICB2b2lkIHNldFZlclN0cmV0 Y2goIHVjaGFyIHNmICkgeyBkYXRhID0gKGRhdGEmMHhmZjAwZmZmZikgfCAodWludChzZik8PDE2 KTsgfQogICAgaW5saW5lIHZvaWQgdHJhbnNwb3NlKCk7Cgpwcml2YXRlOgogICAgUVNpemVQb2xp Y3koIGludCBpICkgOiBkYXRhKCAoUV9VSU5UMzIpaSApIHsgfQoKICAgIFFfVUlOVDMyIGRhdGE7 Cn07CgppbmxpbmUgUVNpemVQb2xpY3k6OlFTaXplUG9saWN5KCBTaXplVHlwZSBob3IsIFNpemVU eXBlIHZlciwgdWNoYXIgaG9ycywgdWNoYXIgdmVycywgYm9vbCBoZncgKQogICAgOiBkYXRhKCBo b3IgfCAodmVyPDxIU2l6ZSkgfCAoaGZ3ID8gKFFfVUlOVDMyKSgxPDwyKkhTaXplKSA6IDApICkg ewogICAgc2V0SG9yU3RyZXRjaCggaG9ycyApOwogICAgc2V0VmVyU3RyZXRjaCggdmVycyApOwp9 CgppbmxpbmUgdm9pZCBRU2l6ZVBvbGljeTo6dHJhbnNwb3NlKCkgewogICAgKnRoaXMgPSBRU2l6 ZVBvbGljeSggdmVyRGF0YSgpLCBob3JEYXRhKCksIHZlclN0cmV0Y2goKSwgaG9yU3RyZXRjaCgp LAogICAgICAgICAgICAgICAgICAgICAgICAgaGFzSGVpZ2h0Rm9yV2lkdGgoKSApOwp9CiMgNTAg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKCgpjbGFzcyBRTGF5b3V0 OwpzdHJ1Y3QgUVdFeHRyYTsKc3RydWN0IFFUTFdFeHRyYTsKY2xhc3MgUUZvY3VzRGF0YTsKY2xh c3MgUUN1cnNvcjsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKY2xhc3MgUVN0eWxlOwoKY2xhc3Mg UVdpZGdldCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVBhaW50RGV2aWNlCnsKICAgIHB1Ymxp YzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp Y01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2 aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZv a2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0 KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2 KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBR VmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmpl Y3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0 ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRm OCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0 YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog ICAKCiAgIAogICAKCgogICAKICAgCiAgIAoKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGlj OgogICAgZXhwbGljaXQgUVdpZGdldCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h bWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBXSWQgd2luSWQoKSBjb25z dDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoKCgogICAgUVN0eWxlICZz dHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICogKTsKICAgIFFTdHlsZSog c2V0U3R5bGUoIGNvbnN0IFFTdHJpbmcmICk7CgoKCiAgICBib29sIGlzVG9wTGV2ZWwoKSBjb25z dDsKICAgIGJvb2wgaXNEaWFsb2coKSBjb25zdDsKICAgIGJvb2wgaXNQb3B1cCgpIGNvbnN0Owog ICAgYm9vbCBpc0Rlc2t0b3AoKSBjb25zdDsKICAgIGJvb2wgaXNNb2RhbCgpIGNvbnN0OwoKICAg IGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICBib29sIGlzRW5hYmxlZFRvKFFXaWRnZXQqKSBj b25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG9UTFcoKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2aXJ0 dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAgdm9pZCBzZXREaXNhYmxlZCggYm9vbCAp OwoKCgpwdWJsaWM6CiAgICBRUmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CiAgICBjb25zdCBR UmVjdCAmZ2VvbWV0cnkoKSBjb25zdDsKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNv bnN0OwogICAgUVBvaW50IHBvcygpIGNvbnN0OwogICAgUVNpemUgZnJhbWVTaXplKCkgY29uc3Q7 CiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBo ZWlnaHQoKSBjb25zdDsKICAgIFFSZWN0IHJlY3QoKSBjb25zdDsKICAgIFFSZWN0IGNoaWxkcmVu UmVjdCgpIGNvbnN0OwogICAgUVJlZ2lvbiBjaGlsZHJlblJlZ2lvbigpIGNvbnN0OwoKICAgIFFT aXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBtYXhpbXVtU2l6ZSgpIGNvbnN0Owog ICAgaW50IG1pbmltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1pbmltdW1IZWlnaHQoKSBjb25z dDsKICAgIGludCBtYXhpbXVtV2lkdGgoKSBjb25zdDsKICAgIGludCBtYXhpbXVtSGVpZ2h0KCkg Y29uc3Q7CiAgICB2b2lkIHNldE1pbmltdW1TaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53LCBpbnQgbWluaCApOwogICAgdm9pZCBz ZXRNYXhpbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1heGlt dW1TaXplKCBpbnQgbWF4dywgaW50IG1heGggKTsKICAgIHZvaWQgc2V0TWluaW11bVdpZHRoKCBp bnQgbWludyApOwogICAgdm9pZCBzZXRNaW5pbXVtSGVpZ2h0KCBpbnQgbWluaCApOwogICAgdm9p ZCBzZXRNYXhpbXVtV2lkdGgoIGludCBtYXh3ICk7CiAgICB2b2lkIHNldE1heGltdW1IZWlnaHQo IGludCBtYXhoICk7CgogICAgUVNpemUgc2l6ZUluY3JlbWVudCgpIGNvbnN0OwogICAgdm9pZCBz ZXRTaXplSW5jcmVtZW50KCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6 ZUluY3JlbWVudCggaW50IHcsIGludCBoICk7CiAgICBRU2l6ZSBiYXNlU2l6ZSgpIGNvbnN0Owog ICAgdm9pZCBzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRCYXNlU2l6 ZSggaW50IGJhc2V3LCBpbnQgYmFzZWggKTsKCiAgICB2b2lkIHNldEZpeGVkU2l6ZSggY29uc3Qg UVNpemUgJiApOwogICAgdm9pZCBzZXRGaXhlZFNpemUoIGludCB3LCBpbnQgaCApOwogICAgdm9p ZCBzZXRGaXhlZFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRGaXhlZEhlaWdodCggaW50IGgg KTsKCgoKICAgIFFQb2ludCBtYXBUb0dsb2JhbCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAg IFFQb2ludCBtYXBGcm9tR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50 IG1hcFRvUGFyZW50KCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcEZyb21Q YXJlbnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwVG8oIFFXaWRnZXQg KiwgY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tKCBRV2lkZ2V0ICos IGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CgogICAgUVdpZGdldCAqdG9wTGV2ZWxXaWRnZXQoKSBj b25zdDsKCgoKICAgIEJhY2tncm91bmRNb2RlIGJhY2tncm91bmRNb2RlKCkgY29uc3Q7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZE1vZGUoIEJhY2tncm91bmRNb2RlICk7CiAgICB2b2lk IHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSwgQmFja2dyb3VuZE1vZGUgKTsKCiAg ICBjb25zdCBRQ29sb3IgJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKCiAgICBjb25zdCBRQ29s b3IgJiBlcmFzZUNvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RXJhc2VDb2xvcigg Y29uc3QgUUNvbG9yICYgKTsKCiAgICBjb25zdCBRUGl4bWFwICogZXJhc2VQaXhtYXAoKSBjb25z dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRFcmFzZVBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgoK ICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JHcm91cCgpIGNvbnN0OwogICAgY29uc3QgUVBh bGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBib29sIG93blBhbGV0dGUoKSBjb25zdDsKICAg IHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2b2lkIHVu c2V0UGFsZXR0ZSgpOwoKCiAgICBjb25zdCBRQ29sb3IgJiBwYWxldHRlRm9yZWdyb3VuZENvbG9y KCkgY29uc3Q7CiAgICB2b2lkIHNldFBhbGV0dGVGb3JlZ3JvdW5kQ29sb3IoIGNvbnN0IFFDb2xv ciAmICk7CgogICAgY29uc3QgUUNvbG9yICYgcGFsZXR0ZUJhY2tncm91bmRDb2xvcigpIGNvbnN0 OwogICAgdmlydHVhbCB2b2lkIHNldFBhbGV0dGVCYWNrZ3JvdW5kQ29sb3IoIGNvbnN0IFFDb2xv ciAmICk7CgogICAgY29uc3QgUVBpeG1hcCAqIHBhbGV0dGVCYWNrZ3JvdW5kUGl4bWFwKCkgY29u c3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFsZXR0ZUJhY2tncm91bmRQaXhtYXAoIGNvbnN0IFFQ aXhtYXAgJiApOwoKICAgIGNvbnN0IFFCcnVzaCYgYmFja2dyb3VuZEJydXNoKCkgY29uc3Q7Cgog ICAgUUZvbnQgZm9udCgpIGNvbnN0OwogICAgYm9vbCBvd25Gb250KCkgY29uc3Q7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiApOwogICAgdm9pZCB1bnNldEZvbnQoKTsK ICAgIFFGb250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwogICAgUUZvbnRJbmZvIGZvbnRJ bmZvKCkgY29uc3Q7CgoKICAgIGNvbnN0IFFDdXJzb3IgJmN1cnNvcigpIGNvbnN0OwogICAgYm9v bCBvd25DdXJzb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoIGNvbnN0IFFD dXJzb3IgJiApOwogICAgdmlydHVhbCB2b2lkIHVuc2V0Q3Vyc29yKCk7CgoKICAgIFFTdHJpbmcg Y2FwdGlvbigpIGNvbnN0OwogICAgY29uc3QgUVBpeG1hcCAqaWNvbigpIGNvbnN0OwogICAgUVN0 cmluZyBpY29uVGV4dCgpIGNvbnN0OwoKICAgIGJvb2wgaGFzTW91c2VUcmFja2luZygpIGNvbnN0 OwogICAgYm9vbCBoYXNNb3VzZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBj b25zdCBRQml0bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRUmVnaW9u ICYgKTsKICAgIHZvaWQgY2xlYXJNYXNrKCk7CgogICAgY29uc3QgUUNvbG9yICYgYmFja2dyb3Vu ZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKCBjb25z dCBRQ29sb3IgJiApOwogICAgY29uc3QgUVBpeG1hcCAqIGJhY2tncm91bmRQaXhtYXAoKSBjb25z dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFwKCBjb25zdCBRUGl4bWFwICYg KTsKCnB1YmxpYyA6CgogICAgdmlydHVhbCB2b2lkIHNldENhcHRpb24oIGNvbnN0IFFTdHJpbmcg Jik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1hcCAmICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcgJik7CgogICAgdmlydHVhbCB2b2lk IHNldE1vdXNlVHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2V0 Rm9jdXMoKTsKICAgIHZvaWQgY2xlYXJGb2N1cygpOwoKcHVibGljOgogICAgZW51bSBGb2N1c1Bv bGljeSB7CiAgICAgICAgTm9Gb2N1cyA9IDAsCiAgICAgICAgVGFiRm9jdXMgPSAweDEsCiAgICAg ICAgQ2xpY2tGb2N1cyA9IDB4MiwKICAgICAgICBTdHJvbmdGb2N1cyA9IDB4MywKICAgICAgICBX aGVlbEZvY3VzID0gMHg3CiAgICB9OwoKICAgIGJvb2wgaXNBY3RpdmVXaW5kb3coKSBjb25zdDsK ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVXaW5kb3coKTsKICAgIGJvb2wgaXNGb2N1c0VuYWJs ZWQoKSBjb25zdDsKCiAgICBGb2N1c1BvbGljeSBmb2N1c1BvbGljeSgpIGNvbnN0OwogICAgdmly dHVhbCB2b2lkIHNldEZvY3VzUG9saWN5KCBGb2N1c1BvbGljeSApOwogICAgYm9vbCBoYXNGb2N1 cygpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2V0VGFiT3JkZXIoIFFXaWRnZXQgKiwgUVdpZGdl dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQcm94eSggUVdpZGdldCAqICk7CiAgICBR V2lkZ2V0ICogZm9jdXNQcm94eSgpIGNvbnN0OwoKCgogICAgdm9pZCBncmFiTW91c2UoKTsKCiAg ICB2b2lkIGdyYWJNb3VzZSggY29uc3QgUUN1cnNvciAmICk7CgogICAgdm9pZCByZWxlYXNlTW91 c2UoKTsKICAgIHZvaWQgZ3JhYktleWJvYXJkKCk7CiAgICB2b2lkIHJlbGVhc2VLZXlib2FyZCgp OwogICAgc3RhdGljIFFXaWRnZXQgKiBtb3VzZUdyYWJiZXIoKTsKICAgIHN0YXRpYyBRV2lkZ2V0 ICoga2V5Ym9hcmRHcmFiYmVyKCk7CgoKCiAgICBib29sIGlzVXBkYXRlc0VuYWJsZWQoKSBjb25z dDsKCgoKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBkYXRlc0VuYWJsZWQoIGJvb2wg ZW5hYmxlICk7CiAgICB2b2lkIHVwZGF0ZSgpOwogICAgdm9pZCB1cGRhdGUoIGludCB4LCBpbnQg eSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHVwZGF0ZSggY29uc3QgUVJlY3QmICk7CiAgICB2 b2lkIHJlcGFpbnQoKTsKICAgIHZvaWQgcmVwYWludCggYm9vbCBlcmFzZSApOwogICAgdm9pZCBy ZXBhaW50KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBlcmFzZT1UUlVFICk7CiAg ICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWN0ICYsIGJvb2wgZXJhc2UgPSBUUlVFICk7CiAgICB2 b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFzZSA9IFRSVUUgKTsKCgoKICAg IHZpcnR1YWwgdm9pZCBzaG93KCk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwogICAgdm9pZCBz ZXRTaG93biggYm9vbCBzaG93ICk7CiAgICB2b2lkIHNldEhpZGRlbiggYm9vbCBoaWRlICk7Cgog ICAgdm9pZCBpY29uaWZ5KCkgeyBzaG93TWluaW1pemVkKCk7IH0KCiAgICB2aXJ0dWFsIHZvaWQg c2hvd01pbmltaXplZCgpOwogICAgdmlydHVhbCB2b2lkIHNob3dNYXhpbWl6ZWQoKTsKICAgIHZv aWQgc2hvd0Z1bGxTY3JlZW4oKTsKICAgIHZpcnR1YWwgdm9pZCBzaG93Tm9ybWFsKCk7CiAgICB2 aXJ0dWFsIHZvaWQgcG9saXNoKCk7CiAgICB2b2lkIGNvbnN0UG9saXNoKCkgY29uc3Q7CiAgICBi b29sIGNsb3NlKCk7CgogICAgdm9pZCByYWlzZSgpOwogICAgdm9pZCBsb3dlcigpOwogICAgdm9p ZCBzdGFja1VuZGVyKCBRV2lkZ2V0KiApOwogICAgdmlydHVhbCB2b2lkIG1vdmUoIGludCB4LCBp bnQgeSApOwogICAgdm9pZCBtb3ZlKCBjb25zdCBRUG9pbnQgJiApOwogICAgdmlydHVhbCB2b2lk IHJlc2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiAp OwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg aCApOwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmICk7CgpwdWJs aWM6CiAgICB2aXJ0dWFsIGJvb2wgY2xvc2UoIGJvb2wgYWxzb0RlbGV0ZSApOwogICAgYm9vbCBp c1Zpc2libGUoKSBjb25zdDsKICAgIGJvb2wgaXNWaXNpYmxlVG8oUVdpZGdldCopIGNvbnN0Owog ICAgYm9vbCBpc1Zpc2libGVUb1RMVygpIGNvbnN0OwogICAgUVJlY3QgdmlzaWJsZVJlY3QoKSBj b25zdDsKICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdDsKICAgIGJvb2wgaXNTaG93bigpIGNvbnN0 OwogICAgYm9vbCBpc01pbmltaXplZCgpIGNvbnN0OwogICAgYm9vbCBpc01heGltaXplZCgpIGNv bnN0OwogICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTaXplIHNp emVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplIG1pbmltdW1TaXplSGludCgpIGNvbnN0 OwogICAgdmlydHVhbCBRU2l6ZVBvbGljeSBzaXplUG9saWN5KCkgY29uc3Q7CiAgICB2aXJ0dWFs IHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZvaWQgc2V0U2l6ZVBvbGlj eSggUVNpemVQb2xpY3k6OlNpemVUeXBlIGhvciwgUVNpemVQb2xpY3k6OlNpemVUeXBlIHZlciwg Ym9vbCBoZncgPSBGQUxTRSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBj b25zdDsKCgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNpemUoKTsKCnB1YmxpYzoK CiAgICBRTGF5b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5X291dDsgfQoKICAgIHZv aWQgdXBkYXRlR2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBhcmVudCggUVdpZGdldCAq cGFyZW50LCBXRmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQg KnBhcmVudCwgY29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIHNob3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVu dCwgV0ZsYWdzIGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIHNob3dJdD1GQUxTRSApIHsgcmVwYXJlbnQocGFyZW50LGYscCxzaG93SXQp OyB9CgoKICAgIHZvaWQgZXJhc2UoKTsKICAgIHZvaWQgZXJhc2UoIGludCB4LCBpbnQgeSwgaW50 IHcsIGludCBoICk7CiAgICB2b2lkIGVyYXNlKCBjb25zdCBRUmVjdCAmICk7CiAgICB2b2lkIGVy YXNlKCBjb25zdCBRUmVnaW9uICYgKTsKICAgIHZvaWQgc2Nyb2xsKCBpbnQgZHgsIGludCBkeSAp OwogICAgdm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgKTsKCiAgICB2 b2lkIGRyYXdUZXh0KCBpbnQgeCwgaW50IHksIGNvbnN0IFFTdHJpbmcgJik7CiAgICB2b2lkIGRy YXdUZXh0KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVN0cmluZyAmKTsKCgoKICAgIFFXaWRnZXQg KiBmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVJlY3QgbWljcm9Gb2N1c0hpbnQoKSBjb25zdDsK CgoKICAgIGJvb2wgYWNjZXB0RHJvcHMoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl cHREcm9wcyggYm9vbCBvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIHNldEF1dG9NYXNrKGJvb2wp OwogICAgYm9vbCBhdXRvTWFzaygpIGNvbnN0OwoKICAgIGVudW0gQmFja2dyb3VuZE9yaWdpbiB7 IFdpZGdldE9yaWdpbiwgUGFyZW50T3JpZ2luLCBXaW5kb3dPcmlnaW4sIEFuY2VzdG9yT3JpZ2lu IH07CgogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRPcmlnaW4oIEJhY2tncm91bmRPcmln aW4gKTsKICAgIEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9yaWdpbigpIGNvbnN0OwogICAg UVBvaW50IGJhY2tncm91bmRPZmZzZXQoKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIGN1c3Rv bVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIFFXaWRnZXQgKiBwYXJlbnRXaWRnZXQoIGJvb2wgc2Ft ZVdpbmRvdyA9IEZBTFNFICkgY29uc3Q7CiAgICBXU3RhdGUgdGVzdFdTdGF0ZSggV1N0YXRlIHMg KSBjb25zdDsKICAgIFdGbGFncyB0ZXN0V0ZsYWdzKCBXRmxhZ3MgZiApIGNvbnN0OwogICAgc3Rh dGljIFFXaWRnZXQgKiBmaW5kKCBXSWQgKTsKICAgIHN0YXRpYyBRV2lkZ2V0TWFwcGVyICp3bWFw cGVyKCk7CgogICAgUVdpZGdldCAqY2hpbGRBdCggaW50IHgsIGludCB5LCBib29sIGluY2x1ZGVU aGlzID0gRkFMU0UgKSBjb25zdDsKICAgIFFXaWRnZXQgKmNoaWxkQXQoIGNvbnN0IFFQb2ludCAm LCBib29sIGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKIyA0NTkgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCnByb3RlY3RlZDoKCiAgICBib29sIGV2ZW50KCBRRXZl bnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiAp OwogICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAg ICB2aXJ0dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAg ICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKCiAgICB2aXJ0 dWFsIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBr ZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGtleVJlbGVhc2VF dmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1 c0V2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAq ICk7CiAgICB2aXJ0dWFsIHZvaWQgZW50ZXJFdmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwg dm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHBhaW50RXZlbnQo IFFQYWludEV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBtb3ZlRXZlbnQoIFFNb3ZlRXZlbnQg KiApOwogICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAg dmlydHVhbCB2b2lkIGNsb3NlRXZlbnQoIFFDbG9zZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p ZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv aWQgaW1TdGFydEV2ZW50KCBRSU1FdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1Db21wb3Nl RXZlbnQoIFFJTUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBpbUVuZEV2ZW50KCBRSU1FdmVu dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgdGFibGV0RXZlbnQoIFFUYWJsZXRFdmVudCAqICk7CgoK ICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAg IHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0 dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFs IHZvaWQgZHJvcEV2ZW50KCBRRHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dF dmVudCggUVNob3dFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2 ZW50ICogKTsKIyA1MDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAg ICB2aXJ0dWFsIGJvb2wgeDExRXZlbnQoIFhFdmVudCAqICk7CgoKCgoKCgogICAgdmlydHVhbCB2 b2lkIHVwZGF0ZU1hc2soKTsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHls ZSYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlZENoYW5nZSggYm9vbCBvbGRFbmFibGVkICk7 CgogICAgdmlydHVhbCB2b2lkIHBhbGV0dGVDaGFuZ2UoIGNvbnN0IFFQYWxldHRlICYgKTsKCiAg ICB2aXJ0dWFsIHZvaWQgZm9udENoYW5nZSggY29uc3QgUUZvbnQgJiApOwogICAgdmlydHVhbCB2 b2lkIHdpbmRvd0FjdGl2YXRpb25DaGFuZ2UoIGJvb2wgb2xkQWN0aXZlICk7CgogICAgaW50IG1l dHJpYyggaW50ICkgY29uc3Q7CgogICAgdm9pZCByZXNldElucHV0Q29udGV4dCgpOwoKICAgIHZp cnR1YWwgdm9pZCBjcmVhdGUoIFdJZCA9IDAsIGJvb2wgaW5pdGlhbGl6ZVdpbmRvdyA9IFRSVUUs CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlc3Ryb3lPbGRXaW5kb3cgPSBUUlVFICk7 CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSggYm9vbCBkZXN0cm95V2luZG93ID0gVFJVRSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlc3Ryb3lTdWJXaW5kb3dzID0gVFJVRSApOwog ICAgdWludCBnZXRXU3RhdGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRXU3RhdGUoIHVp bnQgKTsKICAgIHZvaWQgY2xlYXJXU3RhdGUoIHVpbnQgbiApOwogICAgV0ZsYWdzIGdldFdGbGFn cygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFdGbGFncyggV0ZsYWdzICk7CiAgICB2b2lk IGNsZWFyV0ZsYWdzKCBXRmxhZ3MgbiApOwoKICAgIHZpcnR1YWwgYm9vbCBmb2N1c05leHRQcmV2 Q2hpbGQoIGJvb2wgbmV4dCApOwoKICAgIFFXRXh0cmEgKmV4dHJhRGF0YSgpOwogICAgUVRMV0V4 dHJhICp0b3BEYXRhKCk7CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGEoKTsKCiAgICB2aXJ0dWFs IHZvaWQgc2V0S2V5Q29tcHJlc3Npb24oYm9vbCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWljcm9G b2N1c0hpbnQoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgdGV4dD1UUlVFLCBRRm9u dCAqZiA9IDApOwojIDU1NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIK cHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsKCnByaXZhdGU6CiAgICB2 b2lkIHNldEZvbnRTeXMoIFFGb250ICpmID0gMCApOwoKICAgIHZvaWQgY3JlYXRlSW5wdXRDb250 ZXh0KCk7CiAgICB2b2lkIGRlc3Ryb3lJbnB1dENvbnRleHQoKTsKICAgIHZvaWQgZm9jdXNJbnB1 dENvbnRleHQoKTsKICAgIHZvaWQgY2hlY2tDaGlsZHJlbkRuZCgpOwojIDU4NCAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRnZXQuaCIKICAgIHZvaWQgc2V0TGF5b3V0KCBRTGF5b3V0 ICpsICk7CgogICAgdm9pZCBzZXRXaW5JZCggV0lkICk7CiAgICB2b2lkIHNob3dXaW5kb3coKTsK ICAgIHZvaWQgaGlkZVdpbmRvdygpOwogICAgdm9pZCBzaG93Q2hpbGRyZW4oIGJvb2wgc3BvbnRh bmVvdXMgKTsKICAgIHZvaWQgaGlkZUNoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2 b2lkIHJlcGFyZW50U3lzKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBvaW50ICYs IGJvb2wgc2hvd0l0KTsKICAgIHZvaWQgY3JlYXRlVExFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVF eHRyYSgpOwogICAgdm9pZCBkZWxldGVFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVTeXNFeHRyYSgp OwogICAgdm9pZCBkZWxldGVTeXNFeHRyYSgpOwogICAgdm9pZCBjcmVhdGVUTFN5c0V4dHJhKCk7 CiAgICB2b2lkIGRlbGV0ZVRMU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVhY3RpdmF0ZVdpZGdldENs ZWFudXAoKTsKICAgIHZvaWQgaW50ZXJuYWxTZXRHZW9tZXRyeSggaW50LCBpbnQsIGludCwgaW50 LCBib29sICk7CiAgICB2b2lkIHJlcGFyZW50Rm9jdXNXaWRnZXRzKCBRV2lkZ2V0ICogKTsKICAg IFFGb2N1c0RhdGEgKmZvY3VzRGF0YSggYm9vbCBjcmVhdGUgKTsKICAgIHZvaWQgc2V0QmFja2dy b3VuZEZyb21Nb2RlKCk7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3Qg UUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcERpcmVjdCggY29uc3QgUVBp eG1hcCAmICk7CiAgICB2b2lkIHNldEJhY2tncm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9k ZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kRW1wdHkoKTsKICAgIHZvaWQgdXBkYXRlRnJhbWVT dHJ1dCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgxMVJlbGF0aXZlKCk7CgoKICAg IFdJZCB3aW5pZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAgdWludCB3aWRnZXRfZmxhZ3M7 CiAgICB1aW50IGZvY3VzX3BvbGljeSA6IDQ7CiAgICB1aW50IG93bl9mb250IDoxOwogICAgdWlu dCBvd25fcGFsZXR0ZSA6MTsKICAgIHVpbnQgc2l6ZWhpbnRfZm9yY2VkIDoxOwogICAgdWludCBp c19jbG9zaW5nIDoxOwogICAgdWludCBpbl9zaG93IDogMTsKICAgIHVpbnQgaW5fc2hvd19tYXhp bWl6ZWQgOiAxOwogICAgdWludCBmc3RydXRfZGlydHkgOiAxOwogICAgUVJlY3QgY3JlY3Q7CiAg ICBRQ29sb3IgYmdfY29sOwoKICAgIFFQYWxldHRlIHBhbDsKCiAgICBRRm9udCBmbnQ7CgogICAg UUxheW91dCAqbGF5X291dDsKCiAgICBRV0V4dHJhICpleHRyYTsKIyA2NjQgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICBzdGF0aWMgaW50IGluc3RhbmNlQ291bnRl cjsKICAgIHN0YXRpYyBpbnQgbWF4SW5zdGFuY2VzOwoKICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1h cHBlcigpOwogICAgc3RhdGljIHZvaWQgZGVzdHJveU1hcHBlcigpOwogICAgc3RhdGljIFFXaWRn ZXRMaXN0ICp3TGlzdCgpOwogICAgc3RhdGljIFFXaWRnZXRMaXN0ICp0bHdMaXN0KCk7CiAgICBz dGF0aWMgUVdpZGdldE1hcHBlciAqbWFwcGVyOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlv bjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFQ YWludGVyOwogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBjbGFzcyBR Rm9udEluZm87CiAgICBmcmllbmQgY2xhc3MgUUVUV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFM YXlvdXQ7Cgpwcml2YXRlOgoKICAgIFFXaWRnZXQoIGNvbnN0IFFXaWRnZXQgJiApOwogICAgUVdp ZGdldCAmb3BlcmF0b3I9KCBjb25zdCBRV2lkZ2V0ICYgKTsKCgpwdWJsaWM6CgogICAgdm9pZCBz ZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmcCwgYm9vbCApIHsgc2V0UGFsZXR0ZSggcCApOyB9 CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmZiwgYm9vbCApIHsgc2V0Rm9udCggZiAp OyB9Cn07CgoKaW5saW5lIFF0OjpXU3RhdGUgUVdpZGdldDo6dGVzdFdTdGF0ZSggV1N0YXRlIHMg KSBjb25zdAp7IHJldHVybiAod2lkZ2V0X3N0YXRlICYgcyk7IH0KCmlubGluZSBRdDo6V0ZsYWdz IFFXaWRnZXQ6OnRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3QKeyByZXR1cm4gKHdpZGdldF9m bGFncyAmIGYpOyB9CgoKaW5saW5lIFdJZCBRV2lkZ2V0Ojp3aW5JZCgpIGNvbnN0CnsgcmV0dXJu IHdpbmlkOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1RvcExldmVsKCkgY29uc3QKeyByZXR1 cm4gdGVzdFdGbGFncyhXVHlwZV9Ub3BMZXZlbCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omlz RGlhbG9nKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9EaWFsb2cpOyB9Cgppbmxp bmUgYm9vbCBRV2lkZ2V0Ojppc1BvcHVwKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlw ZV9Qb3B1cCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRGVza3RvcCgpIGNvbnN0CnsgcmV0 dXJuIHRlc3RXRmxhZ3MoV1R5cGVfRGVza3RvcCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omlz RW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9EaXNhYmxlZCk7IH0K CmlubGluZSBib29sIFFXaWRnZXQ6OmlzTW9kYWwoKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdz KFdTaG93TW9kYWwpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0VuYWJsZWRUb1RMVygpIGNv bnN0CnsgcmV0dXJuIGlzRW5hYmxlZCgpOyB9CgppbmxpbmUgY29uc3QgUVJlY3QgJlFXaWRnZXQ6 Omdlb21ldHJ5KCkgY29uc3QKeyByZXR1cm4gY3JlY3Q7IH0KCmlubGluZSBRU2l6ZSBRV2lkZ2V0 OjpzaXplKCkgY29uc3QKeyByZXR1cm4gY3JlY3Quc2l6ZSgpOyB9CgppbmxpbmUgaW50IFFXaWRn ZXQ6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gY3JlY3Qud2lkdGgoKTsgfQoKaW5saW5lIGludCBR V2lkZ2V0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBjcmVjdC5oZWlnaHQoKTsgfQoKaW5saW5l IFFSZWN0IFFXaWRnZXQ6OnJlY3QoKSBjb25zdAp7IHJldHVybiBRUmVjdCgwLDAsY3JlY3Qud2lk dGgoKSxjcmVjdC5oZWlnaHQoKSk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWluaW11bVdpZHRo KCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFX aWRnZXQ6Om1pbmltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtaW5pbXVtU2l6ZSgpLmhlaWdo dCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1XaWR0aCgpIGNvbnN0CnsgcmV0dXJu IG1heGltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0OjptYXhpbXVtSGVp Z2h0KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS5oZWlnaHQoKTsgfQoKaW5saW5lIHZv aWQgUVdpZGdldDo6c2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRNaW5pbXVt U2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldE1h eGltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWF4aW11bVNpemUocy53aWR0aCgpLHMu aGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRTaXplSW5jcmVtZW50KCBjb25z dCBRU2l6ZSAmcyApCnsgc2V0U2l6ZUluY3JlbWVudChzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0K CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0 QmFzZVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgY29uc3QgUUNvbG9yICZR V2lkZ2V0OjplcmFzZUNvbG9yKCkgY29uc3QKeyByZXR1cm4gYmdfY29sOyB9CgoKaW5saW5lIGNv bnN0IFFQYWxldHRlICZRV2lkZ2V0OjpwYWxldHRlKCkgY29uc3QKeyByZXR1cm4gcGFsOyB9CgoK aW5saW5lIFFGb250IFFXaWRnZXQ6OmZvbnQoKSBjb25zdAp7IHJldHVybiBmbnQ7IH0KCmlubGlu ZSBRRm9udE1ldHJpY3MgUVdpZGdldDo6Zm9udE1ldHJpY3MoKSBjb25zdAp7IHJldHVybiBRRm9u dE1ldHJpY3MoZm9udCgpKTsgfQoKaW5saW5lIFFGb250SW5mbyBRV2lkZ2V0Ojpmb250SW5mbygp IGNvbnN0CnsgcmV0dXJuIFFGb250SW5mbyhmb250KCkpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0 OjpoYXNNb3VzZVRyYWNraW5nKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfTW91 c2VUcmFja2luZyk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6Omhhc01vdXNlKCkgY29uc3QKeyBy ZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfSGFzTW91c2UpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0 Ojppc0ZvY3VzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xp Y3kgIT0gTm9Gb2N1czsgfQoKaW5saW5lIFFXaWRnZXQ6OkZvY3VzUG9saWN5IFFXaWRnZXQ6OmZv Y3VzUG9saWN5KCkgY29uc3QKeyByZXR1cm4gKEZvY3VzUG9saWN5KWZvY3VzX3BvbGljeTsgfQoK aW5saW5lIGJvb2wgUVdpZGdldDo6aXNVcGRhdGVzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0 ZXN0V1N0YXRlKFdTdGF0ZV9CbG9ja1VwZGF0ZXMpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojp1 cGRhdGUoIGNvbnN0IFFSZWN0ICZyICkKeyB1cGRhdGUoIHIueCgpLCByLnkoKSwgci53aWR0aCgp LCByLmhlaWdodCgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoKQp7IHJlcGFp bnQoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBUUlVFICk7IH0KCmlubGlu ZSB2b2lkIFFXaWRnZXQ6OnJlcGFpbnQoIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIDAsIDAsIGNy ZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk Z2V0OjpyZXBhaW50KCBjb25zdCBRUmVjdCAmciwgYm9vbCBlcmFzZSApCnsgcmVwYWludCggci54 KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGVyYXNlICk7IH0KCmlubGluZSB2b2lk IFFXaWRnZXQ6OmVyYXNlKCkKeyBlcmFzZSggMCwgMCwgY3JlY3Qud2lkdGgoKSwgY3JlY3QuaGVp Z2h0KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6ZXJhc2UoIGNvbnN0IFFSZWN0ICZyICkK eyBlcmFzZSggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsgfQoKaW5saW5l IGJvb2wgUVdpZGdldDo6Y2xvc2UoKQp7IHJldHVybiBjbG9zZSggRkFMU0UgKTsgfQoKaW5saW5l IGJvb2wgUVdpZGdldDo6aXNWaXNpYmxlKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3Rh dGVfVmlzaWJsZSk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVmlzaWJsZVRvVExXKCkgY29u c3QKeyByZXR1cm4gaXNWaXNpYmxlKCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzSGlkZGVu KCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfRm9yY2VIaWRlKTsgfQoKaW5saW5l IGJvb2wgUVdpZGdldDo6aXNTaG93bigpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0 ZV9Gb3JjZUhpZGUpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0Ojptb3ZlKCBjb25zdCBRUG9pbnQg JnAgKQp7IG1vdmUoIHAueCgpLCBwLnkoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXNp emUoIGNvbnN0IFFTaXplICZzICkKeyByZXNpemUoIHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0K CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmciApCnsgc2V0 R2VvbWV0cnkoIHIubGVmdCgpLCByLnRvcCgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsgfQoK aW5saW5lIHZvaWQgUVdpZGdldDo6ZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmcCwgY29uc3QgUVN0 cmluZyAmcyApCnsgZHJhd1RleHQoIHAueCgpLCBwLnkoKSwgcyApOyB9CgppbmxpbmUgUVdpZGdl dCAqUVdpZGdldDo6cGFyZW50V2lkZ2V0KCBib29sIHNhbWVXaW5kb3cgKSBjb25zdAp7CiAgICBp ZiAoIHNhbWVXaW5kb3cgKQogICAgICAgIHJldHVybiBpc1RvcExldmVsKCkgPyAwIDogKFFXaWRn ZXQgKilRT2JqZWN0OjpwYXJlbnQoKTsKICAgIHJldHVybiAoUVdpZGdldCAqKVFPYmplY3Q6OnBh cmVudCgpOwp9CgppbmxpbmUgUVdpZGdldE1hcHBlciAqUVdpZGdldDo6d21hcHBlcigpCnsgcmV0 dXJuIG1hcHBlcjsgfQoKaW5saW5lIHVpbnQgUVdpZGdldDo6Z2V0V1N0YXRlKCkgY29uc3QKeyBy ZXR1cm4gd2lkZ2V0X3N0YXRlOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXU3RhdGUoIHVp bnQgZiApCnsgd2lkZ2V0X3N0YXRlIHw9IGY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNsZWFy V1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSAmPSB+ZjsgfQoKaW5saW5lIFF0OjpXRmxh Z3MgUVdpZGdldDo6Z2V0V0ZsYWdzKCkgY29uc3QKeyByZXR1cm4gd2lkZ2V0X2ZsYWdzOyB9Cgpp bmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXRmxhZ3MoIFdGbGFncyBmICkKeyB3aWRnZXRfZmxhZ3Mg fD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXRmxhZ3MoIFdGbGFncyBmICkKeyB3 aWRnZXRfZmxhZ3MgJj0gfmY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNvbnN0UG9saXNoKCkg Y29uc3QKewogICAgaWYgKCAhdGVzdFdTdGF0ZShXU3RhdGVfUG9saXNoZWQpICkgewogICAgICAg IFFXaWRnZXQqIHRoYXQgPSAoUVdpZGdldCopIHRoaXM7CiAgICAgICAgdGhhdC0+cG9saXNoKCk7 CiAgICAgICAgdGhhdC0+c2V0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hlZCk7CiAgICB9Cn0KCmlubGlu ZSBib29sIFFXaWRnZXQ6Om93bkN1cnNvcigpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0V1N0YXRl KCBXU3RhdGVfT3duQ3Vyc29yICk7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93bkZvbnQoKSBj b25zdAp7CiAgICByZXR1cm4gb3duX2ZvbnQ7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93blBh bGV0dGUoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX3BhbGV0dGU7Cn0KCgppbmxpbmUgdm9pZCBR V2lkZ2V0OjpzZXRTaXplUG9saWN5KCBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaG9yLCBRU2l6ZVBv bGljeTo6U2l6ZVR5cGUgdmVyLCBib29sIGhmdyApCnsKICAgIHNldFNpemVQb2xpY3koIFFTaXpl UG9saWN5KCBob3IsIHZlciwgaGZ3KSApOwp9CgoKCgoKY2xhc3MgUUZvY3VzRGF0YTsKY2xhc3Mg UVdTTWFuYWdlcjsKCgoKCgoKCnN0cnVjdCBRVExXRXh0cmEgewoKICAgIFFTdHJpbmcgY2FwdGlv bjsKICAgIFFTdHJpbmcgaWNvblRleHQ7CiAgICBRUGl4bWFwICppY29uOwoKICAgIFFGb2N1c0Rh dGEgKmZvY3VzRGF0YTsKICAgIHNob3J0IGluY3csIGluY2g7CgogICAgdWxvbmcgZmxlZnQsIGZy aWdodCwgZnRvcCwgZmJvdHRvbTsKICAgIHVpbnQgaWNvbmljOiAxOwogICAgdWludCBmdWxsc2Ny ZWVuIDogMTsKICAgIHVpbnQgc2hvd01vZGU6IDI7CiAgICB1aW50IHNhdmVkRmxhZ3M7CiAgICBz aG9ydCBiYXNldywgYmFzZWg7CgogICAgV0lkIHBhcmVudFdpbklkOwogICAgdWludCBlbWJlZGRl ZCA6IDE7CiAgICB1aW50IHNwb250X3VubWFwcGVkOiAxOwogICAgdWludCByZXNlcnZlZDogMTsK ICAgIHVpbnQgZG5kIDogMTsKICAgIHVpbnQgdXNwb3MgOiAxOwogICAgdWludCB1c3NpemUgOiAx OwogICAgdm9pZCAqeGljOwojIDk0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F3aWRn ZXQuaCIKICAgIFFSZWN0IG5vcm1hbEdlb21ldHJ5Owp9OwoKCgoKCgpzdHJ1Y3QgUVdFeHRyYSB7 CiAgICBRX0lOVDE2IG1pbncsIG1pbmg7CiAgICBRX0lOVDE2IG1heHcsIG1heGg7CiAgICBRUGl4 bWFwICpiZ19waXg7CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJz OwoKICAgIFFUTFdFeHRyYSAqdG9wZXh0cmE7CgoKCgogICAgV0lkIHhEbmRQcm94eTsKIyA5ODEg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICB1aW50IGJnX29yaWdp biA6IDI7CgogICAgdWludCBjaGlsZHJlbl91c2VfZG5kIDogMTsKCgoKCiAgICBjaGFyIGJnX21v ZGU7CiAgICBjaGFyIGJnX21vZGVfdmlzdWFsOwoKICAgIFFTdHlsZSogc3R5bGU7CgogICAgUVJl Y3QgbWljcm9fZm9jdXNfaGludDsKICAgIFFTaXplUG9saWN5IHNpemVfcG9saWN5Owp9OwojIDQz ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZyYW1lLmgiIDIKCgoKCmNsYXNzIFFGcmFt ZSA6IHB1YmxpYyBRV2lkZ2V0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0 YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNv bnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0 IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1 YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVy dHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3By b3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2Jq ZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9i amVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAog ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIFFGcmFtZSggUVdpZGdldCog cGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCApOwoKICAgIGludCBmcmFt ZVN0eWxlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVTdHlsZSggaW50ICk7Cgog ICAgaW50IGZyYW1lV2lkdGgoKSBjb25zdDsKICAgIFFSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0 OwoKCiAgICBib29sIGxpbmVTaGFwZXNPaygpIGNvbnN0IHsgcmV0dXJuIFRSVUU7IH0KCgogICAg UVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICBlbnVtIFNoYXBlIHsgTm9GcmFtZSA9IDAsCiAg ICAgICAgICAgICAgICAgQm94ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgIFBhbmVsID0gMHgw MDAyLAogICAgICAgICAgICAgICAgIFdpblBhbmVsID0gMHgwMDAzLAogICAgICAgICAgICAgICAg IEhMaW5lID0gMHgwMDA0LAogICAgICAgICAgICAgICAgIFZMaW5lID0gMHgwMDA1LAogICAgICAg ICAgICAgICAgIFN0eWxlZFBhbmVsID0gMHgwMDA2LAogICAgICAgICAgICAgICAgIFBvcHVwUGFu ZWwgPSAweDAwMDcsCiAgICAgICAgICAgICAgICAgTWVudUJhclBhbmVsID0gMHgwMDA4LAogICAg ICAgICAgICAgICAgIFRvb2xCYXJQYW5lbCA9IDB4MDAwOSwKICAgICAgICAgICAgICAgICBMaW5l RWRpdFBhbmVsID0gMHgwMDBhLAogICAgICAgICAgICAgICAgIFRhYldpZGdldFBhbmVsID0gMHgw MDBiLAogICAgICAgICAgICAgICAgIEdyb3VwQm94UGFuZWwgPSAweDAwMGMsCiAgICAgICAgICAg ICAgICAgTVNoYXBlID0gMHgwMDBmCiAgICB9OwogICAgZW51bSBTaGFkb3cgeyBQbGFpbiA9IDB4 MDAxMCwKICAgICAgICAgICAgICAgICAgUmFpc2VkID0gMHgwMDIwLAogICAgICAgICAgICAgICAg ICBTdW5rZW4gPSAweDAwMzAsCiAgICAgICAgICAgICAgICAgIE1TaGFkb3cgPSAweDAwZjAgfTsK CiAgICBTaGFwZSBmcmFtZVNoYXBlKCkgY29uc3Q7CiAgICB2b2lkIHNldEZyYW1lU2hhcGUoIFNo YXBlICk7CiAgICBTaGFkb3cgZnJhbWVTaGFkb3coKSBjb25zdDsKICAgIHZvaWQgc2V0RnJhbWVT aGFkb3coIFNoYWRvdyApOwoKICAgIGludCBsaW5lV2lkdGgoKSBjb25zdDsKICAgIHZpcnR1YWwg dm9pZCBzZXRMaW5lV2lkdGgoIGludCApOwoKICAgIGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZp cnR1YWwgdm9pZCBzZXRNYXJnaW4oIGludCApOwoKICAgIGludCBtaWRMaW5lV2lkdGgoKSBjb25z dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNaWRMaW5lV2lkdGgoIGludCApOwoKICAgIFFSZWN0IGZy YW1lUmVjdCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdCggY29uc3QgUVJl Y3QgJiApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7 CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lk IGRyYXdGcmFtZSggUVBhaW50ZXIgKiApOwogICAgdmlydHVhbCB2b2lkIGRyYXdDb250ZW50cygg UVBhaW50ZXIgKiApOwogICAgdmlydHVhbCB2b2lkIGZyYW1lQ2hhbmdlZCgpOwogICAgdm9pZCBz dHlsZUNoYW5nZSggUVN0eWxlJiApOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVXaWR0 aChib29sPUZBTFNFKTsKICAgIFFSZWN0IGZyZWN0OwogICAgaW50IGZzdHlsZTsKICAgIHNob3J0 IGx3aWR0aDsKICAgIHNob3J0IG13aWR0aDsKICAgIHNob3J0IG1sd2lkdGg7CiAgICBzaG9ydCBm d2lkdGg7CgogICAgdm9pZCAqIGQ7CnByaXZhdGU6CgogICAgUUZyYW1lKCBjb25zdCBRRnJhbWUg JiApOwogICAgUUZyYW1lICZvcGVyYXRvcj0oIGNvbnN0IFFGcmFtZSAmICk7Cgp9OwoKCmlubGlu ZSBpbnQgUUZyYW1lOjpmcmFtZVN0eWxlKCkgY29uc3QKeyByZXR1cm4gZnN0eWxlOyB9Cgppbmxp bmUgUUZyYW1lOjpTaGFwZSBRRnJhbWU6OmZyYW1lU2hhcGUoKSBjb25zdAp7IHJldHVybiAoU2hh cGUpICggZnN0eWxlICYgTVNoYXBlICk7IH0KCmlubGluZSBRRnJhbWU6OlNoYWRvdyBRRnJhbWU6 OmZyYW1lU2hhZG93KCkgY29uc3QKeyByZXR1cm4gKFNoYWRvdykgKCBmc3R5bGUgJiBNU2hhZG93 ICk7IH0KCmlubGluZSB2b2lkIFFGcmFtZTo6c2V0RnJhbWVTaGFwZSggUUZyYW1lOjpTaGFwZSBz ICkKeyBzZXRGcmFtZVN0eWxlKCAoIGZzdHlsZSAmIE1TaGFkb3cgKSB8IHMgKTsgfQoKaW5saW5l IHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYWRvdyggUUZyYW1lOjpTaGFkb3cgcyApCnsgc2V0RnJh bWVTdHlsZSggKCBmc3R5bGUgJiBNU2hhcGUgKSB8IHMgKTsgfQoKaW5saW5lIGludCBRRnJhbWU6 OmxpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIGx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6 Om1pZExpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIG1sd2lkdGg7IH0KCmlubGluZSBpbnQgUUZy YW1lOjptYXJnaW4oKSBjb25zdAp7IHJldHVybiBtd2lkdGg7IH0KCmlubGluZSBpbnQgUUZyYW1l OjpmcmFtZVdpZHRoKCkgY29uc3QKeyByZXR1cm4gZndpZHRoOyB9CiMgNDIgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEu MS9pbmNsdWRlL3FzY3JvbGxiYXIuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcXNjcm9sbGJhci5oIgpjbGFzcyBRVGltZXI7CgoKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEu MS9pbmNsdWRlL3FyYW5nZWNvbnRyb2wuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcXJhbmdlY29udHJvbC5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x Z2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyYW5nZWNvbnRy b2wuaCIgMgoKCgoKCgpjbGFzcyBRUmFuZ2VDb250cm9sUHJpdmF0ZTsKCgpjbGFzcyBRUmFuZ2VD b250cm9sCnsKcHVibGljOgogICAgUVJhbmdlQ29udHJvbCgpOwogICAgUVJhbmdlQ29udHJvbCgg aW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZVN0 ZXAsIGludCBwYWdlU3RlcCwgaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIH5RUmFuZ2VDb250cm9s KCk7CiAgICBpbnQgdmFsdWUoKSBjb25zdDsKICAgIHZvaWQgc2V0VmFsdWUoIGludCApOwogICAg dm9pZCBhZGRQYWdlKCk7CiAgICB2b2lkIHN1YnRyYWN0UGFnZSgpOwogICAgdm9pZCBhZGRMaW5l KCk7CiAgICB2b2lkIHN1YnRyYWN0TGluZSgpOwoKICAgIGludCBtaW5WYWx1ZSgpIGNvbnN0Owog ICAgaW50IG1heFZhbHVlKCkgY29uc3Q7CiAgICB2b2lkIHNldFJhbmdlKCBpbnQgbWluVmFsdWUs IGludCBtYXhWYWx1ZSApOwogICAgdm9pZCBzZXRNaW5WYWx1ZSggaW50IG1pblZhbCApOwogICAg dm9pZCBzZXRNYXhWYWx1ZSggaW50IG1pblZhbCApOwoKICAgIGludCBsaW5lU3RlcCgpIGNvbnN0 OwogICAgaW50IHBhZ2VTdGVwKCkgY29uc3Q7CiAgICB2b2lkIHNldFN0ZXBzKCBpbnQgbGluZSwg aW50IHBhZ2UgKTsKCiAgICBpbnQgYm91bmQoIGludCApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAg aW50IHBvc2l0aW9uRnJvbVZhbHVlKCBpbnQgdmFsLCBpbnQgc3BhY2UgKSBjb25zdDsKICAgIGlu dCB2YWx1ZUZyb21Qb3NpdGlvbiggaW50IHBvcywgaW50IHNwYWNlICkgY29uc3Q7CiAgICB2b2lk IGRpcmVjdFNldFZhbHVlKCBpbnQgdmFsICk7CiAgICBpbnQgcHJldlZhbHVlKCkgY29uc3Q7Cgog ICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmFuZ2VDaGFu Z2UoKTsKICAgIHZpcnR1YWwgdm9pZCBzdGVwQ2hhbmdlKCk7Cgpwcml2YXRlOgogICAgaW50IG1p blZhbCwgbWF4VmFsOwogICAgaW50IGxpbmUsIHBhZ2U7CiAgICBpbnQgdmFsLCBwcmV2VmFsOwoK ICAgIFFSYW5nZUNvbnRyb2xQcml2YXRlICogZDsKCnByaXZhdGU6CgogICAgUVJhbmdlQ29udHJv bCggY29uc3QgUVJhbmdlQ29udHJvbCAmICk7CiAgICBRUmFuZ2VDb250cm9sICZvcGVyYXRvcj0o IGNvbnN0IFFSYW5nZUNvbnRyb2wgJiApOwoKfTsKCgppbmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6 OnZhbHVlKCkgY29uc3QKeyByZXR1cm4gdmFsOyB9CgppbmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6 OnByZXZWYWx1ZSgpIGNvbnN0CnsgcmV0dXJuIHByZXZWYWw7IH0KCmlubGluZSBpbnQgUVJhbmdl Q29udHJvbDo6bWluVmFsdWUoKSBjb25zdAp7IHJldHVybiBtaW5WYWw7IH0KCmlubGluZSBpbnQg UVJhbmdlQ29udHJvbDo6bWF4VmFsdWUoKSBjb25zdAp7IHJldHVybiBtYXhWYWw7IH0KCmlubGlu ZSBpbnQgUVJhbmdlQ29udHJvbDo6bGluZVN0ZXAoKSBjb25zdAp7IHJldHVybiBsaW5lOyB9Cgpp bmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6OnBhZ2VTdGVwKCkgY29uc3QKeyByZXR1cm4gcGFnZTsg fQoKCgoKCgpjbGFzcyBRU3BpbldpZGdldFByaXZhdGU7CmNsYXNzIFFTcGluV2lkZ2V0IDogcHVi bGljIFFXaWRnZXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0 KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hh ciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciog KTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29s IHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50 IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHko IFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0 YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0 aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg KTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRU3Bp bldpZGdldCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgflFT cGluV2lkZ2V0KCk7CgogICAgdm9pZCBzZXRFZGl0V2lkZ2V0KCBRV2lkZ2V0ICogd2lkZ2V0ICk7 CiAgICBRV2lkZ2V0ICogZWRpdFdpZGdldCgpOwoKICAgIFFSZWN0IHVwUmVjdCgpIGNvbnN0Owog ICAgUVJlY3QgZG93blJlY3QoKSBjb25zdDsKCiAgICB2b2lkIHNldFVwRW5hYmxlZCggYm9vbCBv biApOwogICAgdm9pZCBzZXREb3duRW5hYmxlZCggYm9vbCBvbiApOwoKICAgIGJvb2wgaXNVcEVu YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNEb3duRW5hYmxlZCgpIGNvbnN0OwoKICAgIGVudW0g QnV0dG9uU3ltYm9scyB7IFVwRG93bkFycm93cywgUGx1c01pbnVzIH07CiAgICB2aXJ0dWFsIHZv aWQgc2V0QnV0dG9uU3ltYm9scyggQnV0dG9uU3ltYm9scyBicyApOwogICAgQnV0dG9uU3ltYm9s cyBidXR0b25TeW1ib2xzKCkgY29uc3Q7CgogICAgdm9pZCBhcnJhbmdlKCk7Cgpwcm90ZWN0ZWQ6 CiAgICB2b2lkIHN0ZXBVcFByZXNzZWQoKTsKICAgIHZvaWQgc3RlcERvd25QcmVzc2VkKCk7Cgpw dWJsaWMgOgogICAgdm9pZCBzdGVwVXAoKTsKICAgIHZvaWQgc3RlcERvd24oKTsKCnByb3RlY3Rl ZDoKICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqZSApOwogICAgdm9pZCBy ZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50KiBldiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVu dCggUU1vdXNlRXZlbnQgKmUgKTsKICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50 ICplICk7CgogICAgdm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CgogICAgdm9pZCBz dHlsZUNoYW5nZSggUVN0eWxlJiApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq ICk7CiAgICB2b2lkIGVuYWJsZUNoYW5nZWQoIGJvb2wgb2xkICk7CiAgICB2b2lkIHdpbmRvd0Fj dGl2YXRpb25DaGFuZ2UoIGJvb2wgKTsKCnByaXZhdGUgOgogICAgdm9pZCB0aW1lckRvbmUoKTsK ICAgIHZvaWQgdGltZXJEb25lRXgoKTsKCnByaXZhdGU6CiAgICBRU3BpbldpZGdldFByaXZhdGUg KiBkOwoKICAgIHZvaWQgdXBkYXRlRGlzcGxheSgpOwoKcHJpdmF0ZToKCiAgICBRU3BpbldpZGdl dCggY29uc3QgUVNwaW5XaWRnZXQmICk7CiAgICBRU3BpbldpZGdldCYgb3BlcmF0b3I9KCBjb25z dCBRU3BpbldpZGdldCYgKTsKCn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x c2Nyb2xsYmFyLmgiIDIKCgoKCnN0cnVjdCBRU2Nyb2xsQmFyUHJpdmF0ZTsKCmNsYXNzIFFTY3Jv bGxCYXIgOiBwdWJsaWMgUVdpZGdldCwgcHVibGljIFFSYW5nZUNvbnRyb2wKewogICAgcHVibGlj OiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj TWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZp cnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9r ZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3Qq ICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYp OyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFW YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4 KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh T2JqZWN0ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6 CiAgICBRU2Nyb2xsQmFyKCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUgPSAwICk7 CiAgICBRU2Nyb2xsQmFyKCBPcmllbnRhdGlvbiwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFy KiBuYW1lID0gMCApOwogICAgUVNjcm9sbEJhciggaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUs IGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLAogICAgICAgICAgICAgICAgaW50IHZhbHVlLCBP cmllbnRhdGlvbiwgUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lID0gMCApOwogICAg flFTY3JvbGxCYXIoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0 aW9uICk7CiAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2 b2lkIHNldFRyYWNraW5nKCBib29sIGVuYWJsZSApOwogICAgYm9vbCB0cmFja2luZygpIGNvbnN0 OwogICAgYm9vbCBkcmFnZ2luZ1NsaWRlcigpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRQ YWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkg Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgc3AgKTsK CiAgICBpbnQgbWluVmFsdWUoKSBjb25zdDsKICAgIGludCBtYXhWYWx1ZSgpIGNvbnN0OwogICAg dm9pZCBzZXRNaW5WYWx1ZSggaW50ICk7CiAgICB2b2lkIHNldE1heFZhbHVlKCBpbnQgKTsKICAg IGludCBsaW5lU3RlcCgpIGNvbnN0OwogICAgaW50IHBhZ2VTdGVwKCkgY29uc3Q7CiAgICB2b2lk IHNldExpbmVTdGVwKCBpbnQgKTsKICAgIHZvaWQgc2V0UGFnZVN0ZXAoIGludCApOwogICAgaW50 IHZhbHVlKCkgY29uc3Q7CgogICAgaW50IHNsaWRlclN0YXJ0KCkgY29uc3Q7CiAgICBRUmVjdCBz bGlkZXJSZWN0KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdm9pZCBzZXRWYWx1ZSggaW50ICk7Cgpw cm90ZWN0ZWQ6CiAgICB2b2lkIHZhbHVlQ2hhbmdlZCggaW50IHZhbHVlICk7CiAgICB2b2lkIHNs aWRlclByZXNzZWQoKTsKICAgIHZvaWQgc2xpZGVyTW92ZWQoIGludCB2YWx1ZSApOwogICAgdm9p ZCBzbGlkZXJSZWxlYXNlZCgpOwogICAgdm9pZCBuZXh0TGluZSgpOwogICAgdm9pZCBwcmV2TGlu ZSgpOwogICAgdm9pZCBuZXh0UGFnZSgpOwogICAgdm9pZCBwcmV2UGFnZSgpOwoKcHJvdGVjdGVk OgoKICAgIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZvaWQga2V5UHJl c3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVu dCAqICk7CiAgICB2b2lkIHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKCiAgICB2b2lkIG1v dXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVu dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQg KiApOwogICAgdm9pZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqICk7CiAg ICB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCogKTsKCiAgICB2b2lkIHZhbHVlQ2hhbmdlKCk7 CiAgICB2b2lkIHN0ZXBDaGFuZ2UoKTsKICAgIHZvaWQgcmFuZ2VDaGFuZ2UoKTsKCiAgICB2b2lk IHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZvaWQgZG9BdXRvUmVwZWF0 KCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0KCk7CiAgICB2b2lkIHBvc2l0aW9uU2xpZGVyRnJv bVZhbHVlKCk7CiAgICBpbnQgY2FsY3VsYXRlVmFsdWVGcm9tU2xpZGVyKCkgY29uc3Q7CgogICAg dm9pZCBzdGFydEF1dG9SZXBlYXQoKTsKICAgIHZvaWQgc3RvcEF1dG9SZXBlYXQoKTsKCiAgICBp bnQgcmFuZ2VWYWx1ZVRvU2xpZGVyUG9zKCBpbnQgdmFsICkgY29uc3Q7CiAgICBpbnQgc2xpZGVy UG9zVG9SYW5nZVZhbHVlKCBpbnQgdmFsICkgY29uc3Q7CgogICAgdm9pZCBhY3Rpb24oIGludCBj b250cm9sICk7CgogICAgdm9pZCBkcmF3Q29udHJvbHMoIHVpbnQgY29udHJvbHMsIHVpbnQgYWN0 aXZlQ29udHJvbCApIGNvbnN0OwogICAgdm9pZCBkcmF3Q29udHJvbHMoIHVpbnQgY29udHJvbHMs IHVpbnQgYWN0aXZlQ29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciAqcCAp IGNvbnN0OwoKICAgIHVpbnQgcHJlc3NlZENvbnRyb2w7CiAgICBib29sIHRyYWNrOwogICAgYm9v bCBjbGlja2VkQXQ7CiAgICBPcmllbnRhdGlvbiBvcmllbnQ7CgogICAgaW50IHNsaWRlUHJldlZh bDsKICAgIFFDT09SRCBzbGlkZXJQb3M7CiAgICBRQ09PUkQgY2xpY2tPZmZzZXQ7CgogICAgUVRp bWVyICogcmVwZWF0ZXI7CiAgICBRU2Nyb2xsQmFyUHJpdmF0ZSAqIGQ7Cgpwcml2YXRlOgoKICAg IFFTY3JvbGxCYXIoIGNvbnN0IFFTY3JvbGxCYXIgJiApOwogICAgUVNjcm9sbEJhciAmb3BlcmF0 b3I9KCBjb25zdCBRU2Nyb2xsQmFyICYgKTsKCn07CgoKaW5saW5lIHZvaWQgUVNjcm9sbEJhcjo6 c2V0VHJhY2tpbmcoIGJvb2wgdCApCnsKICAgIHRyYWNrID0gdDsKfQoKaW5saW5lIGJvb2wgUVNj cm9sbEJhcjo6dHJhY2tpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gdHJhY2s7Cn0KCmlubGluZSBR U2Nyb2xsQmFyOjpPcmllbnRhdGlvbiBRU2Nyb2xsQmFyOjpvcmllbnRhdGlvbigpIGNvbnN0CnsK ICAgIHJldHVybiBvcmllbnQ7Cn0KCmlubGluZSBpbnQgUVNjcm9sbEJhcjo6c2xpZGVyU3RhcnQo KSBjb25zdAp7CiAgICByZXR1cm4gc2xpZGVyUG9zOwp9CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xc2Nyb2xsdmlldy5oIiAyCgoKCgpjbGFzcyBRU2Nyb2xsVmlld0RhdGE7Cgpj bGFzcyBRU2Nyb2xsVmlldyA6IHB1YmxpYyBRRnJhbWUKewogICAgcHVibGljOiB2aXJ0dWFsIFFN ZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgp OyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCog cXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9i amVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwg Ym9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9v bCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBz dGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgp IHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRh T2JqOwogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgIAoKCnB1Ymxp YzoKICAgIFFTY3JvbGxWaWV3KFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAs IFdGbGFncyBmPTApOwogICAgflFTY3JvbGxWaWV3KCk7CgogICAgZW51bSBSZXNpemVQb2xpY3kg eyBEZWZhdWx0LCBNYW51YWwsIEF1dG9PbmUsIEF1dG9PbmVGaXQgfTsKICAgIHZpcnR1YWwgdm9p ZCBzZXRSZXNpemVQb2xpY3koIFJlc2l6ZVBvbGljeSApOwogICAgUmVzaXplUG9saWN5IHJlc2l6 ZVBvbGljeSgpIGNvbnN0OwoKICAgIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSAmICk7CiAgICB2 b2lkIHJlbW92ZUNoaWxkKFFXaWRnZXQqIGNoaWxkKTsKICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls ZCggUVdpZGdldCogY2hpbGQsIGludCB4PTAsIGludCB5PTAgKTsKICAgIHZpcnR1YWwgdm9pZCBt b3ZlQ2hpbGQoIFFXaWRnZXQqIGNoaWxkLCBpbnQgeCwgaW50IHkgKTsKICAgIGludCBjaGlsZFgo UVdpZGdldCogY2hpbGQpOwogICAgaW50IGNoaWxkWShRV2lkZ2V0KiBjaGlsZCk7CiAgICBib29s IGNoaWxkSXNWaXNpYmxlKFFXaWRnZXQqIGNoaWxkKSB7IHJldHVybiBjaGlsZC0+aXNWaXNpYmxl KCk7IH0KICAgIHZvaWQgc2hvd0NoaWxkKFFXaWRnZXQqIGNoaWxkLCBib29sIHllcz1UUlVFKSB7 CiAgICAgICAgaWYgKCB5ZXMgKQogICAgICAgICAgICBjaGlsZC0+c2hvdygpOwogICAgICAgIGVs c2UKICAgICAgICAgICAgY2hpbGQtPmhpZGUoKTsKICAgIH0KCiAgICBlbnVtIFNjcm9sbEJhck1v ZGUgeyBBdXRvLCBBbHdheXNPZmYsIEFsd2F5c09uIH07CgogICAgU2Nyb2xsQmFyTW9kZSB2U2Ny b2xsQmFyTW9kZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFZTY3JvbGxCYXJNb2RlKCBT Y3JvbGxCYXJNb2RlICk7CgogICAgU2Nyb2xsQmFyTW9kZSBoU2Nyb2xsQmFyTW9kZSgpIGNvbnN0 OwogICAgdmlydHVhbCB2b2lkIHNldEhTY3JvbGxCYXJNb2RlKCBTY3JvbGxCYXJNb2RlICk7Cgog ICAgUVdpZGdldCogY29ybmVyV2lkZ2V0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q29y bmVyV2lkZ2V0KFFXaWRnZXQqKTsKCgoKICAgIFFTY3JvbGxCYXIqIGhvcml6b250YWxTY3JvbGxC YXIoKSBjb25zdDsKICAgIFFTY3JvbGxCYXIqIHZlcnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAg ICBRV2lkZ2V0KiB2aWV3cG9ydCgpIGNvbnN0OwogICAgUVdpZGdldCogY2xpcHBlcigpIGNvbnN0 OwoKICAgIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKICAgIGludCB2aXNpYmxlSGVpZ2h0KCkg Y29uc3Q7CgogICAgaW50IGNvbnRlbnRzV2lkdGgoKSBjb25zdDsKICAgIGludCBjb250ZW50c0hl aWdodCgpIGNvbnN0OwogICAgaW50IGNvbnRlbnRzWCgpIGNvbnN0OwogICAgaW50IGNvbnRlbnRz WSgpIGNvbnN0OwoKICAgIHZvaWQgcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgcmVz aXplKCBjb25zdCBRU2l6ZSYgKTsKICAgIHZvaWQgc2hvdygpOwoKICAgIHZvaWQgdXBkYXRlQ29u dGVudHMoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHVwZGF0ZUNvbnRl bnRzKCBjb25zdCBRUmVjdCYgciApOwogICAgdm9pZCB1cGRhdGVDb250ZW50cygpOwogICAgdm9p ZCByZXBhaW50Q29udGVudHMoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIGVyYXNl PVRSVUUgKTsKICAgIHZvaWQgcmVwYWludENvbnRlbnRzKCBjb25zdCBRUmVjdCYgciwgYm9vbCBl cmFzZT1UUlVFICk7CiAgICB2b2lkIHJlcGFpbnRDb250ZW50cyggYm9vbCBlcmFzZT1UUlVFICk7 CiAgICB2b2lkIGNvbnRlbnRzVG9WaWV3cG9ydCggaW50IHgsIGludCB5LCBpbnQmIHZ4LCBpbnQm IHZ5ICkgY29uc3Q7CiAgICB2b2lkIHZpZXdwb3J0VG9Db250ZW50cyggaW50IHZ4LCBpbnQgdnks IGludCYgeCwgaW50JiB5ICkgY29uc3Q7CiAgICBRUG9pbnQgY29udGVudHNUb1ZpZXdwb3J0KCBj b25zdCBRUG9pbnQmICkgY29uc3Q7CiAgICBRUG9pbnQgdmlld3BvcnRUb0NvbnRlbnRzKCBjb25z dCBRUG9pbnQmICkgY29uc3Q7CiAgICB2b2lkIGVuYWJsZUNsaXBwZXIoIGJvb2wgeSApOwoKICAg IHZvaWQgc2V0U3RhdGljQmFja2dyb3VuZCggYm9vbCB5ICk7CiAgICBib29sIGhhc1N0YXRpY0Jh Y2tncm91bmQoKSBjb25zdDsKCiAgICBRU2l6ZSB2aWV3cG9ydFNpemUoIGludCwgaW50ICkgY29u c3Q7CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50 KCkgY29uc3Q7CgogICAgdm9pZCByZW1vdmVDaGlsZChRT2JqZWN0KiBjaGlsZCk7CgogICAgYm9v bCBpc0hvcml6b250YWxTbGlkZXJQcmVzc2VkKCk7CiAgICBib29sIGlzVmVydGljYWxTbGlkZXJQ cmVzc2VkKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnQXV0b1Njcm9sbCggYm9vbCBiICk7 CiAgICBib29sIGRyYWdBdXRvU2Nyb2xsKCkgY29uc3Q7CgoKcHJvdGVjdGVkOgogICAgdm9pZCBj b250ZW50c01vdmluZyhpbnQgeCwgaW50IHkpOwogICAgdm9pZCBob3Jpem9udGFsU2xpZGVyUHJl c3NlZCgpOwogICAgdm9pZCBob3Jpem9udGFsU2xpZGVyUmVsZWFzZWQoKTsKICAgIHZvaWQgdmVy dGljYWxTbGlkZXJQcmVzc2VkKCk7CiAgICB2b2lkIHZlcnRpY2FsU2xpZGVyUmVsZWFzZWQoKTsK CnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgcmVzaXplQ29udGVudHMoIGludCB3LCBpbnQgaCAp OwogICAgdm9pZCBzY3JvbGxCeSggaW50IGR4LCBpbnQgZHkgKTsKICAgIHZpcnR1YWwgdm9pZCBz ZXRDb250ZW50c1BvcyggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIGVuc3VyZVZpc2libGUoaW50 IHgsIGludCB5KTsKICAgIHZvaWQgZW5zdXJlVmlzaWJsZShpbnQgeCwgaW50IHksIGludCB4bWFy Z2luLCBpbnQgeW1hcmdpbik7CiAgICB2b2lkIGNlbnRlcihpbnQgeCwgaW50IHkpOwogICAgdm9p ZCBjZW50ZXIoaW50IHgsIGludCB5LCBmbG9hdCB4bWFyZ2luLCBmbG9hdCB5bWFyZ2luKTsKCiAg ICB2b2lkIHVwZGF0ZVNjcm9sbEJhcnMoKTsKICAgIHZvaWQgc2V0RW5hYmxlZCggYm9vbCBlbmFi bGUgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29udGVudHMoUVBhaW50ZXIq LCBpbnQgY3gsIGludCBjeSwgaW50IGN3LCBpbnQgY2gpOwogICAgdmlydHVhbCB2b2lkIGRyYXdD b250ZW50c09mZnNldChRUGFpbnRlciosIGludCBveCwgaW50IG95LAogICAgICAgICAgICAgICAg ICAgIGludCBjeCwgaW50IGN5LCBpbnQgY3csIGludCBjaCk7CgoKICAgIHZpcnR1YWwgdm9pZCBj b250ZW50c01vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZvaWQg Y29udGVudHNNb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZv aWQgY29udGVudHNNb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50KiApOwogICAgdmly dHVhbCB2b2lkIGNvbnRlbnRzTW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50KiApOwoKICAgIHZp cnR1YWwgdm9pZCBjb250ZW50c0RyYWdFbnRlckV2ZW50KCBRRHJhZ0VudGVyRXZlbnQgKiApOwog ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzRHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiAp OwogICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzRHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVFdmVu dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcm9wRXZlbnQoIFFEcm9wRXZlbnQgKiAp OwoKCiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNXaGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7 CgogICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzQ29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51 RXZlbnQgKiApOwoKCiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRQYWludEV2ZW50KCBRUGFpbnRF dmVudCogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydFJlc2l6ZUV2ZW50KCBRUmVzaXplRXZl bnQqICk7CiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnRNb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2 ZW50KiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0TW91c2VSZWxlYXNlRXZlbnQoIFFNb3Vz ZUV2ZW50KiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0TW91c2VEb3VibGVDbGlja0V2ZW50 KCBRTW91c2VFdmVudCogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydE1vdXNlTW92ZUV2ZW50 KCBRTW91c2VFdmVudCogKTsKCiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnREcmFnRW50ZXJFdmVu dCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdNb3Zl RXZlbnQoIFFEcmFnTW92ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdM ZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0 RHJvcEV2ZW50KCBRRHJvcEV2ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0V2hl ZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydENvbnRl eHRNZW51RXZlbnQoIFFDb250ZXh0TWVudUV2ZW50ICogKTsKCiAgICB2b2lkIGZyYW1lQ2hhbmdl ZCgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXJnaW5zKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQg cmlnaHQsIGludCBib3R0b20pOwogICAgaW50IGxlZnRNYXJnaW4oKSBjb25zdDsKICAgIGludCB0 b3BNYXJnaW4oKSBjb25zdDsKICAgIGludCByaWdodE1hcmdpbigpIGNvbnN0OwogICAgaW50IGJv dHRvbU1hcmdpbigpIGNvbnN0OwoKICAgIGJvb2wgZm9jdXNOZXh0UHJldkNoaWxkKCBib29sIG5l eHQgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0SEJhckdlb21ldHJ5KFFTY3JvbGxCYXImIGhiYXIs IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWQmFyR2Vv bWV0cnkoUVNjcm9sbEJhciYgdmJhciwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAg IHZvaWQgcmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50Kik7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVu dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZl bnQgKiApOwogICAgdm9pZCBtb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsK ICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKCiAgICB2b2lkIHdoZWVs RXZlbnQoIFFXaGVlbEV2ZW50ICogKTsKCiAgICB2b2lkIGNvbnRleHRNZW51RXZlbnQoIFFDb250 ZXh0TWVudUV2ZW50ICogKTsKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50 ICplICk7CgogICAgdm9pZCBzZXRDYWNoZWRTaXplSGludCggY29uc3QgUVNpemUgJnNoICkgY29u c3Q7CiAgICBRU2l6ZSBjYWNoZWRTaXplSGludCgpIGNvbnN0OwogICAgdm9pZCBmb250Q2hhbmdl KCBjb25zdCBRRm9udCAmICk7Cgpwcml2YXRlOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWlu dGVyKiApOwogICAgdm9pZCBtb3ZlQ29udGVudHMoaW50IHgsIGludCB5KTsKCiAgICBRU2Nyb2xs Vmlld0RhdGEqIGQ7Cgpwcml2YXRlIDoKICAgIHZvaWQgaHNsaWRlKGludCk7CiAgICB2b2lkIHZz bGlkZShpbnQpOwogICAgdm9pZCBoYmFySXNQcmVzc2VkKCk7CiAgICB2b2lkIGhiYXJJc1JlbGVh c2VkKCk7CiAgICB2b2lkIHZiYXJJc1ByZXNzZWQoKTsKICAgIHZvaWQgdmJhcklzUmVsZWFzZWQo KTsKCiAgICB2b2lkIGRvRHJhZ0F1dG9TY3JvbGwoKTsKICAgIHZvaWQgc3RhcnREcmFnQXV0b1Nj cm9sbCgpOwogICAgdm9pZCBzdG9wRHJhZ0F1dG9TY3JvbGwoKTsKCgpwcml2YXRlOgoKICAgIFFT Y3JvbGxWaWV3KCBjb25zdCBRU2Nyb2xsVmlldyAmICk7CiAgICBRU2Nyb2xsVmlldyAmb3BlcmF0 b3I9KCBjb25zdCBRU2Nyb2xsVmlldyAmICk7CgogICAgdm9pZCBjaGFuZ2VGcmFtZVJlY3QoY29u c3QgUVJlY3QmKTsKCnB1YmxpYzoKICAgIHZvaWQgZGlzYWJsZVNpemVIaW50Q2FjaGluZygpOwoK fTsKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwaXhtYXAuaCIgMQojIDQ4ICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcXBpeG1hcC5oIgpjbGFzcyBRR2Z4OwpjbGFzcyBRUGl4bWFwUHJpdmF0 ZTsKCgoKCgoKCmNsYXNzIFFQaXhtYXAgOiBwdWJsaWMgUVBhaW50RGV2aWNlLCBwdWJsaWMgUXQK ewpwdWJsaWM6CiAgICBlbnVtIENvbG9yTW9kZSB7IEF1dG8sIENvbG9yLCBNb25vIH07CiAgICBl bnVtIE9wdGltaXphdGlvbiB7IERlZmF1bHRPcHRpbSwgTm9PcHRpbSwgTWVtb3J5T3B0aW09Tm9P cHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsT3B0aW0sIEJlc3RPcHRpbSB9OwoK ICAgIFFQaXhtYXAoKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFJbWFnZSYgaW1hZ2UgKTsKICAgIFFQ aXhtYXAoIGludCB3LCBpbnQgaCwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlvbiA9IERlZmF1 bHRPcHRpbSApOwogICAgUVBpeG1hcCggY29uc3QgUVNpemUgJiwgaW50IGRlcHRoID0gLTEsIE9w dGltaXphdGlvbiA9IERlZmF1bHRPcHRpbSApOwoKICAgIFFQaXhtYXAoIGNvbnN0IFFTdHJpbmcm IGZpbGVOYW1lLCBjb25zdCBjaGFyICpmb3JtYXQ9MCwKICAgICAgICAgICAgIENvbG9yTW9kZSBt b2RlPUF1dG8gKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBj aGFyICpmb3JtYXQsCiAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncyApOwogICAgUVBp eG1hcCggY29uc3QgY2hhciAqeHBtW10gKTsKICAgIFFQaXhtYXAoIGNvbnN0IFFCeXRlQXJyYXkg JmRhdGEgKTsKCiAgICBRUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKICAgflFQaXhtYXAoKTsK CiAgICBRUGl4bWFwICZvcGVyYXRvcj0oIGNvbnN0IFFQaXhtYXAgJiApOwogICAgUVBpeG1hcCAm b3BlcmF0b3I9KCBjb25zdCBRSW1hZ2UgJiApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Cgog ICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+dzsgfQogICAgaW50IGhlaWdodCgp IGNvbnN0IHsgcmV0dXJuIGRhdGEtPmg7IH0KICAgIFFTaXplIHNpemUoKSBjb25zdCB7IHJldHVy biBRU2l6ZShkYXRhLT53LGRhdGEtPmgpOyB9CiAgICBRUmVjdCByZWN0KCkgY29uc3QgeyByZXR1 cm4gUVJlY3QoMCwwLGRhdGEtPncsZGF0YS0+aCk7IH0KICAgIGludCBkZXB0aCgpIGNvbnN0IHsg cmV0dXJuIGRhdGEtPmQ7IH0KICAgIHN0YXRpYyBpbnQgZGVmYXVsdERlcHRoKCk7CgogICAgdm9p ZCBmaWxsKCBjb25zdCBRQ29sb3IgJmZpbGxDb2xvciA9IFF0Ojp3aGl0ZSApOwogICAgdm9pZCBm aWxsKCBjb25zdCBRV2lkZ2V0ICosIGludCB4b2ZzLCBpbnQgeW9mcyApOwogICAgdm9pZCBmaWxs KCBjb25zdCBRV2lkZ2V0ICosIGNvbnN0IFFQb2ludCAmb2ZzICk7CiAgICB2b2lkIHJlc2l6ZSgg aW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiAp OwoKICAgIGNvbnN0IFFCaXRtYXAgKm1hc2soKSBjb25zdDsKICAgIHZvaWQgc2V0TWFzayggY29u c3QgUUJpdG1hcCAmICk7CiAgICBib29sIHNlbGZNYXNrKCkgY29uc3Q7CiAgICBib29sIGhhc0Fs cGhhKCkgY29uc3Q7CgogICAgUUJpdG1hcCBjcmVhdGVIZXVyaXN0aWNNYXNrKCBib29sIGNsaXBU aWdodCA9IFRSVUUgKSBjb25zdDsKCgogICAgc3RhdGljIFFQaXhtYXAgZnJvbU1pbWVTb3VyY2Uo IGNvbnN0IFFTdHJpbmcmIGFic19uYW1lICk7CgogICAgc3RhdGljIFFQaXhtYXAgZ3JhYldpbmRv dyggV0lkLCBpbnQgeD0wLCBpbnQgeT0wLCBpbnQgdz0tMSwgaW50IGg9LTEgKTsKICAgIHN0YXRp YyBRUGl4bWFwIGdyYWJXaWRnZXQoIFFXaWRnZXQgKiB3aWRnZXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHg9MCwgaW50IHk9MCwgaW50IHc9LTEsIGludCBoPS0xICk7CgoK ICAgIFFQaXhtYXAgeEZvcm0oIGNvbnN0IFFXTWF0cml4ICYgKSBjb25zdDsKICAgIHN0YXRpYyBR V01hdHJpeCB0cnVlTWF0cml4KCBjb25zdCBRV01hdHJpeCAmLCBpbnQgdywgaW50IGggKTsKCgog ICAgUUltYWdlIGNvbnZlcnRUb0ltYWdlKCkgY29uc3Q7CiAgICBib29sIGNvbnZlcnRGcm9tSW1h Z2UoIGNvbnN0IFFJbWFnZSAmLCBDb2xvck1vZGUgbW9kZT1BdXRvICk7CiAgICBib29sIGNvbnZl cnRGcm9tSW1hZ2UoIGNvbnN0IFFJbWFnZSAmLCBpbnQgY29udmVyc2lvbl9mbGFncyApOwoKICAg IHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUZvcm1hdCggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUg KTsKICAgIGJvb2wgbG9hZCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNoYXIgKmZv cm1hdD0wLAogICAgICAgICAgICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byApOwogICAg Ym9vbCBsb2FkKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKICAgIGJvb2wgbG9h ZEZyb21EYXRhKCBjb25zdCB1Y2hhciAqYnVmLCB1aW50IGxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENvbG9yTW9kZSBtb2RlPUF1dG8gKTsKICAgIGJvb2wgbG9hZEZyb21EYXRhKCBjb25z dCB1Y2hhciAqYnVmLCB1aW50IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciogZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVy c2lvbl9mbGFncyApOwogICAgYm9vbCBsb2FkRnJvbURhdGEoIGNvbnN0IFFCeXRlQXJyYXkgJmRh dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdD0wLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncz0wICk7CiAg ICBib29sIHNhdmUoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmb3JtYXQs IGludCBxdWFsaXR5ID0gLTEgKSBjb25zdDsKCgoKCgoKICAgIGludCBzZXJpYWxOdW1iZXIoKSBj b25zdDsKCiAgICBPcHRpbWl6YXRpb24gb3B0aW1pemF0aW9uKCkgY29uc3Q7CiAgICB2b2lkIHNl dE9wdGltaXphdGlvbiggT3B0aW1pemF0aW9uICk7CiAgICBzdGF0aWMgT3B0aW1pemF0aW9uIGRl ZmF1bHRPcHRpbWl6YXRpb24oKTsKICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRPcHRpbWl6YXRp b24oIE9wdGltaXphdGlvbiApOwoKICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKCiAgICBib29s IGlzUUJpdG1hcCgpIGNvbnN0OwojIDE2OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fw aXhtYXAuaCIKICAgIHN0YXRpYyBpbnQgeDExU2V0RGVmYXVsdFNjcmVlbiggaW50IHNjcmVlbiAp OwogICAgdm9pZCB4MTFTZXRTY3JlZW4oIGludCBzY3JlZW4gKTsKCgogICAKCnByb3RlY3RlZDoK ICAgIFFQaXhtYXAoIGludCB3LCBpbnQgaCwgY29uc3QgdWNoYXIgKmRhdGEsIGJvb2wgaXNYYml0 bWFwICk7CiAgICBpbnQgbWV0cmljKCBpbnQgKSBjb25zdDsKIyAxODYgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICBzdHJ1Y3QgUVBpeG1hcERhdGEgOiBwdWJsaWMg UVNoYXJlZCB7CiAgICAgICAgUUNPT1JEIHcsIGg7CiAgICAgICAgc2hvcnQgZDsKICAgICAgICB1 aW50IHVuaW5pdCA6IDE7CiAgICAgICAgdWludCBiaXRtYXAgOiAxOwogICAgICAgIHVpbnQgc2Vs Zm1hc2sgOiAxOwoKCgogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUJpdG1hcCAqbWFzazsK IyAyMDYgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICAgICAgdm9p ZCAqeGltYWdlOwogICAgICAgIHZvaWQgKm1hc2tnYzsKICAgICAgICBRUGl4bWFwICphbHBoYXBt OwojIDIyMCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwaXhtYXAuaCIKICAgICAgICBP cHRpbWl6YXRpb24gb3B0aW07CiAgICB9ICpkYXRhOwpwcml2YXRlOgogICAgUVBpeG1hcCggaW50 IHcsIGludCBoLCBpbnQgZGVwdGgsIGJvb2wsIE9wdGltaXphdGlvbiApOwogICAgdm9pZCBpbml0 KCBpbnQsIGludCwgaW50LCBib29sLCBPcHRpbWl6YXRpb24gKTsKICAgIHZvaWQgZGVyZWYoKTsK ICAgIFFQaXhtYXAgY29weSggYm9vbCBpZ25vcmVNYXNrID0gRkFMU0UgKSBjb25zdDsKICAgIHN0 YXRpYyBPcHRpbWl6YXRpb24gZGVmT3B0aW07CiAgICBmcmllbmQgdm9pZCBiaXRCbHQoIFFQYWlu dERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgUVBhaW50RGV2aWNlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwg aW50LCBpbnQsIGludCwgUmFzdGVyT3AsIGJvb2wgKTsKICAgIGZyaWVuZCB2b2lkIGJpdEJsdCgg UVBhaW50RGV2aWNlICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBRSW1hZ2UqIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 LCBpbnQsIGludCwgaW50LCBpbnQgY29udmVyc2lvbl9mbGFncyApOwoKCiAgICBmcmllbmQgdm9p ZCBxdF94MTFfY29weV9hbHBoYV9waXhtYXAoUVBpeG1hcCAqZHN0LCBjb25zdCBRUGl4bWFwICpz cmMpOwogICAgZnJpZW5kIHZvaWQgcXRfeDExX2JsaXRfYWxwaGFfcGl4bWFwKFFQaXhtYXAgKmRz dCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUVBpeG1hcCAqc3JjLCBpbnQgc3ggPSAwLCBpbnQgc3kgPSAwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdyA9IC0xLCBpbnQgc2ggPSAtMSk7 CgoKCgoKCgogICAgZnJpZW5kIGNsYXNzIFFCaXRtYXA7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50 RGV2aWNlOwogICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwp9OwoKCmlubGluZSBib29sIFFQaXht YXA6OmlzTnVsbCgpIGNvbnN0CnsKICAgIHJldHVybiBkYXRhLT53ID09IDA7Cn0KCmlubGluZSB2 b2lkIFFQaXhtYXA6OmZpbGwoIGNvbnN0IFFXaWRnZXQgKncsIGNvbnN0IFFQb2ludCAmb2ZzICkK ewogICAgZmlsbCggdywgb2ZzLngoKSwgb2ZzLnkoKSApOwp9CgppbmxpbmUgdm9pZCBRUGl4bWFw OjpyZXNpemUoIGNvbnN0IFFTaXplICZzICkKewogICAgcmVzaXplKCBzLndpZHRoKCksIHMuaGVp Z2h0KCkgKTsKfQoKaW5saW5lIGNvbnN0IFFCaXRtYXAgKlFQaXhtYXA6Om1hc2soKSBjb25zdAp7 CiAgICByZXR1cm4gZGF0YS0+bWFzazsKfQoKaW5saW5lIGJvb2wgUVBpeG1hcDo6c2VsZk1hc2so KSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+c2VsZm1hc2s7Cn0KIyAyODUgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xcGl4bWFwLmgiCmlubGluZSBpbnQgUVBpeG1hcDo6c2VyaWFsTnVt YmVyKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPnNlcl9ubzsKfQoKaW5saW5lIFFQaXhtYXA6 Ok9wdGltaXphdGlvbiBRUGl4bWFwOjpvcHRpbWl6YXRpb24oKSBjb25zdAp7CiAgICByZXR1cm4g ZGF0YS0+b3B0aW07Cn0KCmlubGluZSBib29sIFFQaXhtYXA6OmlzUUJpdG1hcCgpIGNvbnN0CnsK ICAgIHJldHVybiBkYXRhLT5iaXRtYXA7Cn0KIyAzMTMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xcGl4bWFwLmgiCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg Y29uc3QgUVBpeG1hcCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0g JiwgUVBpeG1hcCAmICk7CiMgMzI3ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBpeG1h cC5oIgpib29sIHF0X3hGb3JtX2hlbHBlciggY29uc3QgUVdNYXRyaXgmLCBpbnQsIGludCwgaW50 LCB1Y2hhciosIGludCwgaW50LCBpbnQsIHVjaGFyKiwgaW50LCBpbnQsIGludCApOwojIDQzICIv dXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiIDIKIyAxICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcXB0cnZlY3Rvci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xcHRydmVjdG9yLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fn dmVjdG9yLmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndmVjdG9yLmgi CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJjb2xsZWN0aW9uLmgiIDEKIyA0 MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJjb2xsZWN0aW9uLmgiCiMgMSAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQxICIvdXNyL2xvY2FsL3F0 LTMuMS4xL2luY2x1ZGUvcXB0cmNvbGxlY3Rpb24uaCIgMgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xh c3MgUUdMaXN0OwpjbGFzcyBRR0RpY3Q7CgoKY2xhc3MgUVB0ckNvbGxlY3Rpb24KewpwdWJsaWM6 CiAgICBib29sIGF1dG9EZWxldGUoKSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9p ZCBzZXRBdXRvRGVsZXRlKCBib29sIGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAg ICB2aXJ0dWFsIHVpbnQgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo KSA9IDA7CgogICAgdHlwZWRlZiB2b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUVB0ckNvbGxl Y3Rpb24oKSB7IGRlbF9pdGVtID0gRkFMU0U7IH0KICAgIFFQdHJDb2xsZWN0aW9uKGNvbnN0IFFQ dHJDb2xsZWN0aW9uICYpIHsgZGVsX2l0ZW0gPSBGQUxTRTsgfQogICAgdmlydHVhbCB+UVB0ckNv bGxlY3Rpb24oKSB7fQoKICAgIGJvb2wgZGVsX2l0ZW07CgogICAgdmlydHVhbCBJdGVtIG5ld0l0 ZW0oIEl0ZW0gKTsKICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKCBJdGVtICkgPSAwOwp9Owoj IDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWd2ZWN0b3IuaCIgMgoKCgpjbGFzcyBR R1ZlY3RvciA6IHB1YmxpYyBRUHRyQ29sbGVjdGlvbgp7CmZyaWVuZCBjbGFzcyBRR0xpc3Q7CnB1 YmxpYzoKCiAgICBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiApOwogICAgUURhdGFT dHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmICkgY29uc3Q7CgogICAgdmlydHVhbCBpbnQgY29t cGFyZUl0ZW1zKCBJdGVtLCBJdGVtICk7Cgpwcm90ZWN0ZWQ6CiAgICBRR1ZlY3RvcigpOwogICAg UUdWZWN0b3IoIHVpbnQgc2l6ZSApOwogICAgUUdWZWN0b3IoIGNvbnN0IFFHVmVjdG9yICZ2ICk7 CiAgIH5RR1ZlY3RvcigpOwoKICAgIFFHVmVjdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFHVmVjdG9y ICZ2ICk7CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFHVmVjdG9yICZ2ICkgY29uc3Q7Cgog ICAgSXRlbSAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHZlYzsgfQogICAgdWludCBzaXplKCkgY29u c3QgeyByZXR1cm4gbGVuOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbnVtSXRl bXM7IH0KCiAgICBib29sIGluc2VydCggdWludCBpbmRleCwgSXRlbSApOwogICAgYm9vbCByZW1v dmUoIHVpbnQgaW5kZXggKTsKICAgIEl0ZW0gdGFrZSggdWludCBpbmRleCApOwoKICAgIHZvaWQg Y2xlYXIoKTsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwo IEl0ZW0sIGludCBmbGVuICk7CgogICAgdm9pZCBzb3J0KCk7CiAgICBpbnQgYnNlYXJjaCggSXRl bSApIGNvbnN0OwoKICAgIGludCBmaW5kUmVmKCBJdGVtLCB1aW50IGluZGV4ICkgY29uc3Q7CiAg ICBpbnQgZmluZCggSXRlbSwgdWludCBpbmRleCApIGNvbnN0OwogICAgdWludCBjb250YWluc1Jl ZiggSXRlbSApIGNvbnN0OwogICAgdWludCBjb250YWlucyggSXRlbSApIGNvbnN0OwoKICAgIEl0 ZW0gYXQoIHVpbnQgaW5kZXggKSBjb25zdAogICAgewoKICAgICAgICBpZiAoIGluZGV4ID49IGxl biApCiAgICAgICAgICAgIHdhcm5pbmdJbmRleFJhbmdlKCBpbmRleCApOwoKICAgICAgICByZXR1 cm4gdmVjW2luZGV4XTsKICAgIH0KCiAgICBib29sIGluc2VydEV4cGFuZCggdWludCBpbmRleCwg SXRlbSApOwoKICAgIHZvaWQgdG9MaXN0KCBRR0xpc3QgKiApIGNvbnN0OwoKCiAgICB2aXJ0dWFs IFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBJdGVtICYgKTsKICAgIHZpcnR1YWwg UURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmLCBJdGVtICkgY29uc3Q7Cgpwcml2YXRl OgogICAgSXRlbSAqdmVjOwogICAgdWludCBsZW47CiAgICB1aW50IG51bUl0ZW1zOwoKICAgIHN0 YXRpYyB2b2lkIHdhcm5pbmdJbmRleFJhbmdlKCB1aW50ICk7Cn07CgoKCgoKCgogUURhdGFTdHJl YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFHVmVjdG9yICYgKTsKIFFEYXRhU3RyZWFt ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRR1ZlY3RvciAmICk7CiMgNDMgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcHRydmVjdG9yLmgiIDIKCgp0ZW1wbGF0ZTxjbGFz cyB0eXBlPgpjbGFzcyBRUHRyVmVjdG9yCgoKCiAgICAgICAgOiBwdWJsaWMgUUdWZWN0b3IKCnsK cHVibGljOgogICAgUVB0clZlY3RvcigpIHsgfQogICAgUVB0clZlY3RvciggdWludCBzaXplICkg OiBRR1ZlY3RvcihzaXplKSB7IH0KICAgIFFQdHJWZWN0b3IoIGNvbnN0IFFQdHJWZWN0b3I8dHlw ZT4gJnYgKSA6IFFHVmVjdG9yKCB2ICkgeyB9CiAgICB+UVB0clZlY3RvcigpIHsgY2xlYXIoKTsg fQogICAgUVB0clZlY3Rvcjx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJWZWN0b3I8dHlwZT4g JnYpCiAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRUHRyVmVjdG9yPHR5cGU+JilR R1ZlY3Rvcjo6b3BlcmF0b3I9KHYpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJW ZWN0b3I8dHlwZT4gJnYgKSBjb25zdCB7IHJldHVybiBRR1ZlY3Rvcjo6b3BlcmF0b3I9PSh2KTsg fQogICAgdHlwZSAqKmRhdGEoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKilRR1ZlY3Rvcjo6ZGF0 YSgpOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR1ZlY3Rvcjo6c2l6ZSgpOyB9 CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdWZWN0b3I6OmNvdW50KCk7IH0KICAg IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIFFHVmVjdG9yOjpjb3VudCgpID09IDA7IH0K ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdWZWN0b3I6OnNpemUoKSA9PSAwOyB9 CiAgICBib29sIHJlc2l6ZSggdWludCBzaXplICkgeyByZXR1cm4gUUdWZWN0b3I6OnJlc2l6ZShz aXplKTsgfQogICAgYm9vbCBpbnNlcnQoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCl7IHJldHVybiBR R1ZlY3Rvcjo6aW5zZXJ0KGksKEl0ZW0pZCk7IH0KICAgIGJvb2wgcmVtb3ZlKCB1aW50IGkgKSB7 IHJldHVybiBRR1ZlY3Rvcjo6cmVtb3ZlKGkpOyB9CiAgICB0eXBlICp0YWtlKCB1aW50IGkgKSB7 IHJldHVybiAodHlwZSAqKVFHVmVjdG9yOjp0YWtlKGkpOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBR R1ZlY3Rvcjo6Y2xlYXIoKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICpkLCBpbnQgc2l6 ZT0tMSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBR R1ZlY3Rvcjo6ZmlsbCgoSXRlbSlkLHNpemUpO30KICAgIHZvaWQgc29ydCgpIHsgUUdWZWN0b3I6 OnNvcnQoKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgKmQgKSBjb25zdHsgcmV0dXJu IFFHVmVjdG9yOjpic2VhcmNoKChJdGVtKWQpOyB9CiAgICBpbnQgZmluZFJlZiggY29uc3QgdHlw ZSAqZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gUUdWZWN0b3I6OmZpbmRSZWYoKEl0ZW0pZCxpKTt9CiAgICBpbnQgZmlu ZCggY29uc3QgdHlwZSAqZCwgdWludCBpPSAwICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIFFHVmVjdG9yOjpmaW5kKChJdGVtKWQsaSk7IH0K ICAgIHVpbnQgY29udGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQgKSBjb25zdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIFFHVmVjdG9yOjpjb250YWluc1JlZigoSXRlbSlk KTsgfQogICAgdWludCBjb250YWlucyggY29uc3QgdHlwZSAqZCApIGNvbnN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBRR1ZlY3Rvcjo6Y29udGFpbnMo KEl0ZW0pZCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4g KHR5cGUgKilRR1ZlY3Rvcjo6YXQoaSk7IH0KICAgIHR5cGUgKmF0KCB1aW50IGkgKSBjb25zdCB7 IHJldHVybiAodHlwZSAqKVFHVmVjdG9yOjphdChpKTsgfQogICAgdm9pZCB0b0xpc3QoIFFHTGlz dCAqbGlzdCApIGNvbnN0IHsgUUdWZWN0b3I6OnRvTGlzdChsaXN0KTsgfQojIDk0ICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB0cnZlY3Rvci5oIgpwcml2YXRlOgogICAgdm9pZCBkZWxl dGVJdGVtKCBJdGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFQdHJWZWN0b3I8 dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8 Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUVB0clZlY3Rvcjx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0 ckNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUg KilkOwp9CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFibGUuaCIgMgojIDEg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGVhZGVyLmgiIDEKIyA0NCAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FoZWFkZXIuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcWljb25zZXQuaCIgMQojIDQ4ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWlj b25zZXQuaCIKY2xhc3MgUUljb25GYWN0b3J5OwpjbGFzcyBRSWNvblNldFByaXZhdGU7CgpjbGFz cyBRSWNvblNldAp7CnB1YmxpYzoKCiAgICBlbnVtIFNpemUgeyBBdXRvbWF0aWMsIFNtYWxsLCBM YXJnZSB9OwogICAgZW51bSBNb2RlIHsgTm9ybWFsLCBEaXNhYmxlZCwgQWN0aXZlIH07CiAgICBl bnVtIFN0YXRlIHsgT24sIE9mZiB9OwoKICAgIFFJY29uU2V0KCk7CiAgICBRSWNvblNldCggY29u c3QgUVBpeG1hcCYgcGl4bWFwLCBTaXplIHNpemUgPSBBdXRvbWF0aWMgKTsKICAgIFFJY29uU2V0 KCBjb25zdCBRUGl4bWFwJiBzbWFsbFBpeCwgY29uc3QgUVBpeG1hcCYgbGFyZ2VQaXggKTsKICAg IFFJY29uU2V0KCBjb25zdCBRSWNvblNldCYgb3RoZXIgKTsKICAgIHZpcnR1YWwgflFJY29uU2V0 KCk7CgogICAgdm9pZCByZXNldCggY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBTaXplIHNpemUgKTsK CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFwJiBwaXhtYXAsIFNpemUg c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgbW9kZSA9IE5vcm1hbCwgU3Rh dGUgc3RhdGUgPSBPZmYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJp bmcmIGZpbGVOYW1lLCBTaXplIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2Rl IG1vZGUgPSBOb3JtYWwsIFN0YXRlIHN0YXRlID0gT2ZmICk7CiAgICBRUGl4bWFwIHBpeG1hcCgg U2l6ZSBzaXplLCBNb2RlIG1vZGUsIFN0YXRlIHN0YXRlID0gT2ZmICkgY29uc3Q7CiAgICBRUGl4 bWFwIHBpeG1hcCggU2l6ZSBzaXplLCBib29sIGVuYWJsZWQsIFN0YXRlIHN0YXRlID0gT2ZmICkg Y29uc3Q7CiAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0OwogICAgYm9vbCBpc0dlbmVyYXRlZCgg U2l6ZSBzaXplLCBNb2RlIG1vZGUsIFN0YXRlIHN0YXRlID0gT2ZmICkgY29uc3Q7CiAgICB2b2lk IGNsZWFyR2VuZXJhdGVkKCk7CiAgICB2b2lkIGluc3RhbGxJY29uRmFjdG9yeSggUUljb25GYWN0 b3J5ICpmYWN0b3J5ICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKCiAgICB2b2lkIGRldGFj aCgpOwoKICAgIFFJY29uU2V0JiBvcGVyYXRvcj0oIGNvbnN0IFFJY29uU2V0JiBvdGhlciApOwoK CiAgICBzdGF0aWMgdm9pZCBzZXRJY29uU2l6ZSggU2l6ZSB3aGljaCwgY29uc3QgUVNpemUmIHNp emUgKTsKICAgIHN0YXRpYyBjb25zdCBRU2l6ZSYgaWNvblNpemUoIFNpemUgd2hpY2ggKTsKCiAg IAoKcHJpdmF0ZToKICAgIHZvaWQgbm9ybWFsaXplKCBTaXplJiB3aGljaCwgY29uc3QgUVNpemUm IHBpeFNpemUgKTsKICAgIFFQaXhtYXAgKmNyZWF0ZVNjYWxlZCggU2l6ZSBzaXplLCBjb25zdCBR UGl4bWFwICpzdXBwbGllZFBpeCApIGNvbnN0OwogICAgUVBpeG1hcCAqY3JlYXRlRGlzYWJsZWQo IFNpemUgc2l6ZSwgU3RhdGUgc3RhdGUgKSBjb25zdDsKCiAgICBRSWNvblNldFByaXZhdGUgKmQ7 Cn07CgpjbGFzcyBRSWNvbkZhY3RvcnkgOiBwcml2YXRlIFFTaGFyZWQKewpwdWJsaWM6CiAgICBR SWNvbkZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFJY29uRmFjdG9yeSgpOwoKICAgIHZpcnR1YWwg UVBpeG1hcCAqY3JlYXRlUGl4bWFwKCBjb25zdCBRSWNvblNldCYgaWNvblNldCwgUUljb25TZXQ6 OlNpemUgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRSWNvblNldDo6 TW9kZSBtb2RlLCBRSWNvblNldDo6U3RhdGUgc3RhdGUgKTsKICAgIHZvaWQgc2V0QXV0b0RlbGV0 ZSggYm9vbCBhdXRvRGVsZXRlICkgeyBhdXRvRGVsID0gYXV0b0RlbGV0ZTsgfQogICAgYm9vbCBh dXRvRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gYXV0b0RlbDsgfQoKICAgIHN0YXRpYyBRSWNvbkZh Y3RvcnkgKmRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGVmYXVsdEZh Y3RvcnkoIFFJY29uRmFjdG9yeSAqZmFjdG9yeSApOwoKcHJpdmF0ZToKCiAgICBRSWNvbkZhY3Rv cnkoIGNvbnN0IFFJY29uRmFjdG9yeSAmICk7CiAgICBRSWNvbkZhY3RvcnkgJm9wZXJhdG9yPSgg Y29uc3QgUUljb25GYWN0b3J5ICYgKTsKCgogICAgZnJpZW5kIGNsYXNzIFFJY29uU2V0OwogICAg ZnJpZW5kIGNsYXNzIFFJY29uU2V0UHJpdmF0ZTsKCiAgICB1aW50IGF1dG9EZWwgOiAxOwogICAg dWludCB1bnVzZWQgOiAzMTsKfTsKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fo ZWFkZXIuaCIgMgoKCgoKY2xhc3MgUVNob3dFdmVudDsKY2xhc3MgUUhlYWRlckRhdGE7CmNsYXNz IFFUYWJsZTsKCmNsYXNzIFFIZWFkZXIgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBmcmllbmQgY2xh c3MgUVRhYmxlOwogICAgZnJpZW5kIGNsYXNzIFFUYWJsZUhlYWRlcjsKCiAgICBwdWJsaWM6IHZp cnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRh T2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVh bCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBp bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsg dmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0 YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlh bnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBx T2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmpl Y3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRSGVhZGVy KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRSGVhZGVyKCBp bnQsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIH5RSGVhZGVy KCk7CgogICAgaW50IGFkZExhYmVsKCBjb25zdCBRU3RyaW5nICYsIGludCBzaXplID0gLTEgKTsK ICAgIGludCBhZGRMYWJlbCggY29uc3QgUUljb25TZXQmLCBjb25zdCBRU3RyaW5nICYsIGludCBz aXplID0gLTEgKTsKICAgIHZvaWQgcmVtb3ZlTGFiZWwoIGludCBzZWN0aW9uICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0TGFiZWwoIGludCwgY29uc3QgUVN0cmluZyAmLCBpbnQgc2l6ZSA9IC0xICk7 CiAgICB2aXJ0dWFsIHZvaWQgc2V0TGFiZWwoIGludCwgY29uc3QgUUljb25TZXQmLCBjb25zdCBR U3RyaW5nICYsIGludCBzaXplID0gLTEgKTsKICAgIFFTdHJpbmcgbGFiZWwoIGludCBzZWN0aW9u ICkgY29uc3Q7CiAgICBRSWNvblNldCogaWNvblNldCggaW50IHNlY3Rpb24gKSBjb25zdDsKCiAg ICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0aW9uICk7CiAgICBPcmllbnRh dGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFRyYWNraW5nKCBi b29sIGVuYWJsZSApOwogICAgYm9vbCB0cmFja2luZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p ZCBzZXRDbGlja0VuYWJsZWQoIGJvb2wsIGludCBzZWN0aW9uID0gLTEgKTsKICAgIHZpcnR1YWwg dm9pZCBzZXRSZXNpemVFbmFibGVkKCBib29sLCBpbnQgc2VjdGlvbiA9IC0xICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0TW92aW5nRW5hYmxlZCggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFN0 cmV0Y2hFbmFibGVkKCBib29sIGIsIGludCBzZWN0aW9uICk7CiAgICB2b2lkIHNldFN0cmV0Y2hF bmFibGVkKCBib29sIGIgKSB7IHNldFN0cmV0Y2hFbmFibGVkKCBiLCAtMSApOyB9CiAgICBib29s IGlzQ2xpY2tFbmFibGVkKCBpbnQgc2VjdGlvbiA9IC0xICkgY29uc3Q7CiAgICBib29sIGlzUmVz aXplRW5hYmxlZCggaW50IHNlY3Rpb24gPSAtMSApIGNvbnN0OwogICAgYm9vbCBpc01vdmluZ0Vu YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNTdHJldGNoRW5hYmxlZCgpIGNvbnN0OwogICAgYm9v bCBpc1N0cmV0Y2hFbmFibGVkKCBpbnQgc2VjdGlvbiApIGNvbnN0OwoKICAgIHZvaWQgcmVzaXpl U2VjdGlvbiggaW50IHNlY3Rpb24sIGludCBzICk7CiAgICBpbnQgc2VjdGlvblNpemUoIGludCBz ZWN0aW9uICkgY29uc3Q7CiAgICBpbnQgc2VjdGlvblBvcyggaW50IHNlY3Rpb24gKSBjb25zdDsK ICAgIGludCBzZWN0aW9uQXQoIGludCBwb3MgKSBjb25zdDsKICAgIGludCBjb3VudCgpIGNvbnN0 OwogICAgaW50IGhlYWRlcldpZHRoKCkgY29uc3Q7CiAgICBRUmVjdCBzZWN0aW9uUmVjdCggaW50 IHNlY3Rpb24gKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2VsbFNpemUoIGludCAsIGlu dCApOwogICAgaW50IGNlbGxTaXplKCBpbnQgaSApIGNvbnN0IHsgcmV0dXJuIHNlY3Rpb25TaXpl KCBtYXBUb1NlY3Rpb24oaSkgKTsgfQogICAgaW50IGNlbGxQb3MoIGludCApIGNvbnN0OwogICAg aW50IGNlbGxBdCggaW50IHBvcyApIGNvbnN0IHsgcmV0dXJuIG1hcFRvSW5kZXgoIHNlY3Rpb25B dChwb3MgKyBvZmZzZXQoKSkgKTsgfQoKICAgIGludCBvZmZzZXQoKSBjb25zdDsKCiAgICBRU2l6 ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGludCBtYXBUb1NlY3Rpb24oIGludCBpbmRleCApIGNv bnN0OwogICAgaW50IG1hcFRvSW5kZXgoIGludCBzZWN0aW9uICkgY29uc3Q7CiAgICBpbnQgbWFw VG9Mb2dpY2FsKCBpbnQgKSBjb25zdDsKICAgIGludCBtYXBUb0FjdHVhbCggaW50ICkgY29uc3Q7 CgogICAgdm9pZCBtb3ZlU2VjdGlvbiggaW50IHNlY3Rpb24sIGludCB0b0luZGV4ICk7CiAgICB2 aXJ0dWFsIHZvaWQgbW92ZUNlbGwoIGludCwgaW50KTsKCiAgICB2b2lkIHNldFNvcnRJbmRpY2F0 b3IoIGludCBzZWN0aW9uLCBib29sIGluY3JlYXNpbmcgPSBUUlVFICk7CiAgICB2b2lkIGFkanVz dEhlYWRlclNpemUoKSB7IGFkanVzdEhlYWRlclNpemUoIC0xICk7IH0KCnB1YmxpYyA6CiAgICB2 b2lkIHNldFVwZGF0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwogICAgdmlydHVhbCB2b2lkIHNl dE9mZnNldCggaW50IHBvcyApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBjbGlja2VkKCBpbnQgc2Vj dGlvbiApOwogICAgdm9pZCBwcmVzc2VkKCBpbnQgc2VjdGlvbiApOwogICAgdm9pZCByZWxlYXNl ZCggaW50IHNlY3Rpb24gKTsKICAgIHZvaWQgc2l6ZUNoYW5nZSggaW50IHNlY3Rpb24sIGludCBv bGRTaXplLCBpbnQgbmV3U2l6ZSApOwogICAgdm9pZCBpbmRleENoYW5nZSggaW50IHNlY3Rpb24s IGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4ICk7CiAgICB2b2lkIHNlY3Rpb25DbGlja2VkKCBp bnQgKTsKICAgIHZvaWQgbW92ZWQoIGludCwgaW50ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHBh aW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZvaWQgc2hvd0V2ZW50KCBRU2hvd0V2ZW50 ICplICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKmUgKTsKICAgIFFSZWN0 IHNSZWN0KCBpbnQgaW5kZXggKTsKCiAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTZWN0aW9uKCBRUGFp bnRlciAqcCwgaW50IGluZGV4LCBjb25zdCBRUmVjdCYgZnIpOwogICAgdmlydHVhbCB2b2lkIHBh aW50U2VjdGlvbkxhYmVsKCBRUGFpbnRlciogcCwgaW50IGluZGV4LCBjb25zdCBRUmVjdCYgZnIg KTsKCiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKCiAgICB2b2lkIG1vdXNl UHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCgg UU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiAp OwoKICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZvaWQga2V5UmVs ZWFzZUV2ZW50KCBRS2V5RXZlbnQgKiApOwoKcHJpdmF0ZToKICAgIHZvaWQgaGFuZGxlQ29sdW1u TW92ZSggaW50IGZyb21JZHgsIGludCB0b0lkeCApOwogICAgdm9pZCBhZGp1c3RIZWFkZXJTaXpl KCBpbnQgZGlmZiApOwogICAgdm9pZCBpbml0KCBpbnQgKTsKCiAgICB2b2lkIHBhaW50UmVjdCgg aW50IHAsIGludCBzICk7CiAgICB2b2lkIG1hcmtMaW5lKCBpbnQgaWR4ICk7CiAgICB2b2lkIHVu TWFya0xpbmUoIGludCBpZHggKTsKICAgIGludCBwUG9zKCBpbnQgaSApIGNvbnN0OwogICAgaW50 IHBTaXplKCBpbnQgaSApIGNvbnN0OwogICAgaW50IGZpbmRMaW5lKCBpbnQgKTsKICAgIGJvb2wg cmV2ZXJzZSgpIGNvbnN0OwogICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbnMoIGJvb2wgb25seVZp c2libGUgPSBGQUxTRSwgaW50IHN0YXJ0ID0gMCApOwogICAgdm9pZCBoYW5kbGVDb2x1bW5SZXNp emUoaW50LCBpbnQsIGJvb2wsIGJvb2wgPSBUUlVFICk7CiAgICBRU2l6ZSBzZWN0aW9uU2l6ZUhp bnQoIGludCBzZWN0aW9uLCBjb25zdCBRRm9udE1ldHJpY3MmIGZtICkgY29uc3Q7CiAgICB2b2lk IHNldFNlY3Rpb25TaXplQW5kSGVpZ2h0KCBpbnQgc2VjdGlvbiwgaW50IHNpemUgKTsKCiAgICB2 b2lkIHJlc2l6ZUFycmF5cyggaW50IHNpemUgKTsKICAgIHZvaWQgc2V0SXNBVGFibGVIZWFkZXIo IGJvb2wgYiApOwogICAgaW50IG9mZnM7CiAgICBpbnQgaGFuZGxlSWR4OwogICAgaW50IG9sZEhJ ZHhTaXplOwogICAgaW50IG1vdmVUb0lkeDsKICAgIGVudW0gU3RhdGUgeyBJZGxlLCBTbGlkaW5n LCBQcmVzc2VkLCBNb3ZpbmcsIEJsb2NrZWQgfTsKICAgIFN0YXRlIHN0YXRlOwogICAgUUNPT1JE IGNsaWNrUG9zOwogICAgYm9vbCB0cmFja2luZ0lzT247CiAgICBpbnQgb2xkSGFuZGxlSWR4Owog ICAgaW50IGNhY2hlZFBvczsKICAgIE9yaWVudGF0aW9uIG9yaWVudDsKCiAgICBRSGVhZGVyRGF0 YSAqZDsKCnByaXZhdGU6CgogICAgUUhlYWRlciggY29uc3QgUUhlYWRlciAmICk7CiAgICBRSGVh ZGVyICZvcGVyYXRvcj0oIGNvbnN0IFFIZWFkZXIgJiApOwoKfTsKCgppbmxpbmUgUUhlYWRlcjo6 T3JpZW50YXRpb24gUUhlYWRlcjo6b3JpZW50YXRpb24oKSBjb25zdAp7CiAgICByZXR1cm4gb3Jp ZW50Owp9CgppbmxpbmUgdm9pZCBRSGVhZGVyOjpzZXRUcmFja2luZyggYm9vbCBlbmFibGUgKSB7 IHRyYWNraW5nSXNPbiA9IGVuYWJsZTsgfQppbmxpbmUgYm9vbCBRSGVhZGVyOjp0cmFja2luZygp IGNvbnN0IHsgcmV0dXJuIHRyYWNraW5nSXNPbjsgfQoKZXh0ZXJuIGJvb2wgcXRfcWhlYWRlcl9s YWJlbF9yZXR1cm5fbnVsbF9zdHJpbmdzOwojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcXRhYmxlLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJsaXN0 LmgiIDEKIyA0MCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwdHJsaXN0LmgiCiMgMSAi L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbGlzdC5oIiAxCiMgNDUgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xZ2xpc3QuaCIKY2xhc3MgUUxOb2RlCnsKZnJpZW5kIGNsYXNzIFFH TGlzdDsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpwdWJsaWM6CiAgICBRUHRyQ29sbGVj dGlvbjo6SXRlbSBnZXREYXRhKCkgeyByZXR1cm4gZGF0YTsgfQpwcml2YXRlOgogICAgUVB0ckNv bGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFMTm9kZSAqcHJldjsKICAgIFFMTm9kZSAqbmV4dDsK ICAgIFFMTm9kZSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgZGF0YSA9IGQ7IH0KfTsKCmNs YXNzIFFHTGlzdEl0ZXJhdG9yTGlzdDsKCmNsYXNzIFFHTGlzdCA6IHB1YmxpYyBRUHRyQ29sbGVj dGlvbgp7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvcjsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0 ZXJhdG9yTGlzdDsKZnJpZW5kIGNsYXNzIFFHVmVjdG9yOwpwdWJsaWM6CiAgICB1aW50IGNvdW50 KCkgY29uc3Q7CgoKICAgIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmICk7CiAgICBR RGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYgKSBjb25zdDsKCnByb3RlY3RlZDoKICAg IFFHTGlzdCgpOwogICAgUUdMaXN0KCBjb25zdCBRR0xpc3QgJiApOwogICAgdmlydHVhbCB+UUdM aXN0KCk7CgogICAgUUdMaXN0ICZvcGVyYXRvcj0oIGNvbnN0IFFHTGlzdCAmICk7CiAgICBib29s IG9wZXJhdG9yPT0oIGNvbnN0IFFHTGlzdCYgKSBjb25zdDsKCiAgICB2b2lkIGluU29ydCggUVB0 ckNvbGxlY3Rpb246Okl0ZW0gKTsKICAgIHZvaWQgYXBwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRl bSApOwogICAgYm9vbCBpbnNlcnRBdCggdWludCBpbmRleCwgUVB0ckNvbGxlY3Rpb246Okl0ZW0g KTsKICAgIHZvaWQgcmVsaW5rTm9kZSggUUxOb2RlICogKTsKICAgIGJvb2wgcmVtb3ZlTm9kZSgg UUxOb2RlICogKTsKICAgIGJvb2wgcmVtb3ZlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSA9IDAgKTsK ICAgIGJvb2wgcmVtb3ZlUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSA9IDAgKTsKICAgIGJvb2wg cmVtb3ZlRmlyc3QoKTsKICAgIGJvb2wgcmVtb3ZlTGFzdCgpOwogICAgYm9vbCByZW1vdmVBdCgg dWludCApOwogICAgYm9vbCByZXBsYWNlQXQoIHVpbnQsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICk7 CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTm9kZSggUUxOb2RlICogKTsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIHRha2UoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VBdCgg dWludCBpbmRleCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZUZpcnN0KCk7CiAgICBR UHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTGFzdCgpOwoKICAgIHZvaWQgc29ydCgpOwogICAgdm9p ZCBjbGVhcigpOwoKICAgIGludCBmaW5kUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9 IFRSVUUgKTsKICAgIGludCBmaW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgYm9vbCA9IFRSVUUg KTsKCiAgICB1aW50IGNvbnRhaW5zUmVmKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0Owog ICAgdWludCBjb250YWlucyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCiAgICBRUHRy Q29sbGVjdGlvbjo6SXRlbSBhdCggdWludCBpbmRleCApOwogICAgaW50IGF0KCkgY29uc3Q7CiAg ICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g Z2V0KCkgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gY2ZpcnN0KCkgY29uc3Q7CiAg ICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBjbGFzdCgpIGNvbnN0OwogICAgUVB0ckNvbGxlY3Rpb246 Okl0ZW0gZmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxhc3QoKTsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIG5leHQoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHByZXYoKTsK CiAgICB2b2lkIHRvVmVjdG9yKCBRR1ZlY3RvciAqICkgY29uc3Q7CgogICAgdmlydHVhbCBpbnQg Y29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0g KTsKCgogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiwgUVB0ckNv bGxlY3Rpb246Okl0ZW0gJiApOwogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRh U3RyZWFtICYsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9p ZCBwcmVwZW5kKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApOwoKICAgIHZvaWQgaGVhcFNvcnRQdXNo RG93biggUVB0ckNvbGxlY3Rpb246Okl0ZW0qIGhlYXAsIGludCBmaXJzdCwgaW50IGxhc3QgKTsK CiAgICBRTE5vZGUgKmZpcnN0Tm9kZTsKICAgIFFMTm9kZSAqbGFzdE5vZGU7CiAgICBRTE5vZGUg KmN1ck5vZGU7CiAgICBpbnQgY3VySW5kZXg7CiAgICB1aW50IG51bU5vZGVzOwogICAgUUdMaXN0 SXRlcmF0b3JMaXN0ICppdGVyYXRvcnM7CgogICAgUUxOb2RlICpsb2NhdGUoIHVpbnQgKTsKICAg IFFMTm9kZSAqdW5saW5rKCk7Cn07CgoKaW5saW5lIHVpbnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0 CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5lIGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJz dCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVtb3ZlKCk7Cn0KCmlubGluZSBib29sIFFH TGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsKICAgIHJldHVybiByZW1vdmUoKTsKfQoK aW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ckluZGV4Owp9Cgpp bmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjphdCggdWludCBpbmRleCApCnsKICAg IFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAgIHJldHVybiBuID8gbi0+ZGF0YSA6IDA7 Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVudE5vZGUoKSBjb25zdAp7CiAgICByZXR1 cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Z2V0KCkg Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsKfQoKaW5saW5l IFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2ZpcnN0KCkgY29uc3QKewogICAgcmV0dXJu IGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlv bjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewogICAgcmV0dXJuIGxhc3ROb2RlID8gbGFz dE5vZGUtPmRhdGEgOiAwOwp9CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRh U3RyZWFtICYsIFFHTGlzdCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl YW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgoKCgoKY2xhc3MgUUdMaXN0SXRlcmF0b3IKewpmcmll bmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3JMaXN0Owpwcm90ZWN0 ZWQ6CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdMaXN0ICYgKTsKICAgIFFHTGlzdEl0ZXJh dG9yKCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgICBRR0xpc3RJdGVyYXRvciAmb3BlcmF0 b3I9KCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgIH5RR0xpc3RJdGVyYXRvcigpOwoKICAg IGJvb2wgYXRGaXJzdCgpIGNvbnN0OwogICAgYm9vbCBhdExhc3QoKSBjb25zdDsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIHRvRmlyc3QoKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRvTGFz dCgpOwoKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGdldCgpIGNvbnN0OwogICAgUVB0ckNvbGxl Y3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0 b3IrKygpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrPSh1aW50KTsKICAgIFFQ dHJDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVt IG9wZXJhdG9yLT0odWludCk7Cgpwcm90ZWN0ZWQ6CiAgICBRR0xpc3QgKmxpc3Q7Cgpwcml2YXRl OgogICAgUUxOb2RlICpjdXJOb2RlOwp9OwoKCmlubGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjph dEZpcnN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+Zmlyc3ROb2RlOwp9 CgppbmxpbmUgYm9vbCBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCkgY29uc3QKewogICAgcmV0dXJu IGN1ck5vZGUgPT0gbGlzdC0+bGFzdE5vZGU7Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRl bSBRR0xpc3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO b2RlLT5kYXRhIDogMDsKfQojIDQxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB0cmxp c3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRUHRyTGlzdAoKCgogICAgICAg IDogcHVibGljIFFHTGlzdAoKewpwdWJsaWM6CiAgICBRUHRyTGlzdCgpIHt9CiAgICBRUHRyTGlz dCggY29uc3QgUVB0ckxpc3Q8dHlwZT4gJmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0 KCkgeyBjbGVhcigpOyB9CiAgICBRUHRyTGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJM aXN0PHR5cGU+ICZsKQogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUVB0ckxpc3Q8 dHlwZT4mKVFHTGlzdDo6b3BlcmF0b3I9KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0 IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkgY29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0 b3I9PSggbGlzdCApOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+ ICZsaXN0ICkgY29uc3QKICAgIHsgcmV0dXJuICFRR0xpc3Q6Om9wZXJhdG9yPT0oIGxpc3QgKTsg fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKTsgfQogICAg Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpID09IDA7IH0KICAg IGJvb2wgaW5zZXJ0KCB1aW50IGksIGNvbnN0IHR5cGUgKmQpeyByZXR1cm4gUUdMaXN0OjppbnNl cnRBdChpLChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBpblNvcnQoIGNvbnN0 IHR5cGUgKmQgKSB7IFFHTGlzdDo6aW5Tb3J0KChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQog ICAgdm9pZCBwcmVwZW5kKCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6Omluc2VydEF0KDAsKFFQ dHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB2b2lkIGFwcGVuZCggY29uc3QgdHlwZSAqZCAp IHsgUUdMaXN0OjphcHBlbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJl bW92ZSggdWludCBpICkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVBdChpKTsgfQogICAgYm9vbCBy ZW1vdmUoKSB7IHJldHVybiBRR0xpc3Q6OnJlbW92ZSgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pMCk7 IH0KICAgIGJvb2wgcmVtb3ZlKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpyZW1v dmUoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlbW92ZVJlZiggY29uc3Qg dHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRl bSlkKTsgfQogICAgdm9pZCByZW1vdmVOb2RlKCBRTE5vZGUgKm4gKSB7IFFHTGlzdDo6cmVtb3Zl Tm9kZShuKTsgfQogICAgYm9vbCByZW1vdmVGaXJzdCgpIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3Zl Rmlyc3QoKTsgfQogICAgYm9vbCByZW1vdmVMYXN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVM YXN0KCk7IH0KICAgIHR5cGUgKnRha2UoIHVpbnQgaSApIHsgcmV0dXJuICh0eXBlICopUUdMaXN0 Ojp0YWtlQXQoaSk7IH0KICAgIHR5cGUgKnRha2UoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6 dGFrZSgpOyB9CiAgICB0eXBlICp0YWtlTm9kZSggUUxOb2RlICpuICkgeyByZXR1cm4gKHR5cGUg KilRR0xpc3Q6OnRha2VOb2RlKG4pOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBRR0xpc3Q6OmNsZWFy KCk7IH0KICAgIHZvaWQgc29ydCgpIHsgUUdMaXN0Ojpzb3J0KCk7IH0KICAgIGludCBmaW5kKCBj b25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpmaW5kKChRUHRyQ29sbGVjdGlvbjo6SXRl bSlkKTsgfQogICAgaW50IGZpbmROZXh0KCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0 OjpmaW5kKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkLEZBTFNFKTsgfQogICAgaW50IGZpbmRSZWYo IGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYoKFFQdHJDb2xsZWN0aW9u OjpJdGVtKWQpOyB9CiAgICBpbnQgZmluZE5leHRSZWYoIGNvbnN0IHR5cGUgKmQgKXsgcmV0dXJu IFFHTGlzdDo6ZmluZFJlZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCxGQUxTRSk7fQogICAgdWlu dCBjb250YWlucyggY29uc3QgdHlwZSAqZCApIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y29udGFp bnMoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB1aW50IGNvbnRhaW5zUmVmKCBjb25z dCB0eXBlICpkICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsgcmV0dXJuIFFHTGlzdDo6Y29udGFpbnNSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9 CiAgICBib29sIHJlcGxhY2UoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlz dDo6cmVwbGFjZUF0KCBpLCAoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCApOyB9CiAgICB0eXBlICph dCggdWludCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmF0KGkpOyB9CiAgICBpbnQgYXQo KSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmF0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25z dCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Z2V0KCk7IH0KICAgIFFMTm9kZSAqY3VycmVudE5v ZGUoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmN1cnJlbnROb2RlKCk7IH0KICAgIHR5cGUgKmdl dEZpcnN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNmaXJzdCgpOyB9CiAgICB0 eXBlICpnZXRMYXN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNsYXN0KCk7IH0K ICAgIHR5cGUgKmZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmZpcnN0KCk7IH0KICAg IHR5cGUgKmxhc3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bGFzdCgpOyB9CiAgICB0eXBl ICpuZXh0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6Om5leHQoKTsgfQogICAgdHlwZSAqcHJl digpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpwcmV2KCk7IH0KICAgIHZvaWQgdG9WZWN0b3Io IFFHVmVjdG9yICp2ZWMgKWNvbnN0eyBRR0xpc3Q6OnRvVmVjdG9yKHZlYyk7IH0KIyAxMDcgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcHRybGlzdC5oIgpwcml2YXRlOgogICAgdm9pZCBk ZWxldGVJdGVtKCBJdGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFQdHJMaXN0 PHZvaWQ+OjpkZWxldGVJdGVtKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApCnsKfQoKCnRlbXBsYXRl PGNsYXNzIHR5cGU+IGlubGluZSB2b2lkIFFQdHJMaXN0PHR5cGU+OjpkZWxldGVJdGVtKCBRUHRy Q29sbGVjdGlvbjo6SXRlbSBkICkKewogICAgaWYgKCBkZWxfaXRlbSApIGRlbGV0ZSAodHlwZSAq KWQ7Cn0KCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFQdHJMaXN0SXRlcmF0b3IgOiBwdWJs aWMgUUdMaXN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRUHRyTGlzdEl0ZXJhdG9yKGNvbnN0IFFQ dHJMaXN0PHR5cGU+ICZsKSA6UUdMaXN0SXRlcmF0b3IoKFFHTGlzdCAmKWwpIHt9CiAgIH5RUHRy TGlzdEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBsaXN0LT5j b3VudCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBsaXN0LT5jb3VudCgp ID09IDA7IH0KICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdEl0ZXJhdG9y OjphdEZpcnN0KCk7IH0KICAgIGJvb2wgYXRMYXN0KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0SXRl cmF0b3I6OmF0TGFzdCgpOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilR R0xpc3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICB0eXBlICp0b0xhc3QoKSB7IHJldHVybiAo dHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0xhc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAqKCkg Y29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUg Km9wZXJhdG9yKigpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OmdldCgpOyB9CgoK CgoKCgogICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRl cmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkgeyByZXR1cm4gKHR5cGUgKilR R0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpO30KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJl dHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9w ZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRv cis9KGopO30KICAgIHR5cGUgKm9wZXJhdG9yLS0oKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0 ZXJhdG9yOjpvcGVyYXRvci0tKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yLT0odWludCBqKSB7IHJl dHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvci09KGopO30KICAgIFFQdHJMaXN0 SXRlcmF0b3I8dHlwZT4mIG9wZXJhdG9yPShjb25zdCBRUHRyTGlzdEl0ZXJhdG9yPHR5cGU+Jml0 KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRv cj0oaXQpOyByZXR1cm4gKnRoaXM7IH0KfTsKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndWFyZGVk cHRyLmgiIDEKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FndWFyZGVkcHRyLmgi CmNsYXNzIFFHdWFyZGVkUHRyUHJpdmF0ZSA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVNoYXJl ZAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7 IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05h bWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFs IGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCgg aW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBm LCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCog LCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9i amVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3Rh dGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMg UVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRl OiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFHdWFyZGVkUHRyUHJp dmF0ZSggUU9iamVjdCogKTsKICAgIH5RR3VhcmRlZFB0clByaXZhdGUoKTsKCiAgICBRT2JqZWN0 KiBvYmplY3QoKSBjb25zdDsKICAgIHZvaWQgcmVjb25uZWN0KCBRT2JqZWN0KiApOwoKcHJpdmF0 ZSA6CiAgICB2b2lkIG9iamVjdERlc3Ryb3llZCgpOwoKcHJpdmF0ZToKICAgIFFPYmplY3QqIG9i ajsKCiAgICBRR3VhcmRlZFB0clByaXZhdGUoIGNvbnN0IFFHdWFyZGVkUHRyUHJpdmF0ZSAmICk7 CiAgICBRR3VhcmRlZFB0clByaXZhdGUgJm9wZXJhdG9yPSggY29uc3QgUUd1YXJkZWRQdHJQcml2 YXRlICYgKTsKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUUd1YXJkZWRQdHIKewpwdWJs aWM6CiAgICBRR3VhcmRlZFB0cigpIDogcHJpdiggbmV3IFFHdWFyZGVkUHRyUHJpdmF0ZSggMCAp ICkge30KCiAgICBRR3VhcmRlZFB0ciggVCogbykgewogICAgICAgIHByaXYgPSBuZXcgUUd1YXJk ZWRQdHJQcml2YXRlKCAoUU9iamVjdCopbyApOwogICAgfQoKICAgIFFHdWFyZGVkUHRyKGNvbnN0 IFFHdWFyZGVkUHRyPFQ+ICZwKSB7CiAgICAgICAgcHJpdiA9IHAucHJpdjsKICAgICAgICByZWYo KTsKICAgIH0KCiAgICB+UUd1YXJkZWRQdHIoKSB7IGRlcmVmKCk7IH0KCiAgICBRR3VhcmRlZFB0 cjxUPiAmb3BlcmF0b3I9KGNvbnN0IFFHdWFyZGVkUHRyPFQ+ICZwKSB7CiAgICAgICAgaWYgKCBw cml2ICE9IHAucHJpdiApIHsKICAgICAgICAgICAgZGVyZWYoKTsKICAgICAgICAgICAgcHJpdiA9 IHAucHJpdjsKICAgICAgICAgICAgcmVmKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgICBRR3VhcmRlZFB0cjxUPiAmb3BlcmF0b3I9KFQqIG8pIHsKICAgICAgICBp ZiAoIHByaXYtPmNvdW50ID09IDEgKSB7CiAgICAgICAgICAgIHByaXYtPnJlY29ubmVjdCggKFFP YmplY3QqKW8gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZXJlZigpOwogICAgICAg ICAgICBwcml2ID0gbmV3IFFHdWFyZGVkUHRyUHJpdmF0ZSggKFFPYmplY3QqKW8gKTsKICAgICAg ICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29u c3QgUUd1YXJkZWRQdHI8VD4gJnAgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHByaXYtPm9iamVj dCgpID09IHAucHJpdi0+b2JqZWN0KCk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9ICggY29u c3QgUUd1YXJkZWRQdHI8VD4mIHAgKSBjb25zdCB7CiAgICAgICAgcmV0dXJuICEoICp0aGlzID09 IHAgKTsKICAgIH0KCiAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFwcml2LT5vYmpl Y3QoKTsgfQoKICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAoVCopIHByaXYtPm9i amVjdCgpOyB9CgogICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKiggKFQqKXByaXYt Pm9iamVjdCgpICk7IH0KCiAgICBvcGVyYXRvciBUKigpIGNvbnN0IHsgcmV0dXJuIChUKikgcHJp di0+b2JqZWN0KCk7IH0KCnByaXZhdGU6CgogICAgdm9pZCByZWYoKSB7IHByaXYtPnJlZigpOyB9 CgogICAgdm9pZCBkZXJlZigpIHsKICAgICAgICBpZiAoIHByaXYtPmRlcmVmKCkgKQogICAgICAg ICAgICBkZWxldGUgcHJpdjsKICAgIH0KCiAgICBRR3VhcmRlZFB0clByaXZhdGUqIHByaXY7Cn07 CgoKCgppbmxpbmUgUU9iamVjdCogUUd1YXJkZWRQdHJQcml2YXRlOjpvYmplY3QoKSBjb25zdAp7 CiAgICByZXR1cm4gb2JqOwp9CiMgNDggIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFi bGUuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWludGRpY3QuaCIgMQoj IDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWludGRpY3QuaCIKIyAxICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWdkaWN0LmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEu MS9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdESXRMaXN0 OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g Z2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHNldERh dGEoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQogICAgUUJh c2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5leHQoIFFC YXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVja2V0KCBR UHRyQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4dChu KSB7fQogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0 Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoK ICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFQdHJDb2xsZWN0aW9uOjpJdGVt IGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7 fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZh dGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFz ZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUVB0ckNv bGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQo ZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBr ZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQg OiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFQ dHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVj a2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7 IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBR QmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmssIFFQdHJDb2xsZWN0 aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiks IGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZh dGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGljIFFQdHJDb2xsZWN0 aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG51bUl0ZW1zOyB9 CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBRUHRyQ29sbGVjdGlv bjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRyQ29sbGVjdGlvbjo6 SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKTsKICAgIFFQdHJD b2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUVB0ckNvbGxlY3Rp b246Okl0ZW0sIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQoIGxvbmcg a2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRl bSBsb29rX3B0ciggdm9pZCAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAg UURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0 ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsg U3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQg bGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFH RGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9yPSggY29uc3QgUUdE aWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUVB0 ckNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9hc2NpaSggY29uc3Qg Y2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wgcmVtb3Zl X2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9vbCBy ZW1vdmVfcHRyKCB2b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAg UVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwog ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAg ICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFQdHJDb2xs ZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAg ICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3Ry aW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQg c3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0 YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3Ry ZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsK CnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxlbjsKICAgIHVpbnQg bnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNlcyA6IDE7CiAgICB1 aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAgdm9pZCB1bmxpbmtf Y29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJpbmdC dWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNj aWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRUHRyQ29sbGVjdGlvbjo6SXRl bSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9uZywgUVB0ckNvbGxl Y3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlua19wdHIoIHZvaWQg KiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQgaW5pdCggdWludCwg S2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9 OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgog ICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0RpY3RJdGVyYXRvcigg Y29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSgg Y29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRUHRy Q29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0 KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29uc3QgY2hh ciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkgY29uc3Q7CiAgICB2 b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRv cigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRUHRyQ29s bGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgogICAgUUdEaWN0ICpk aWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAgdWludCBjdXJJbmRl eDsKfTsKCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkg Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRhKCkgOiAwOwp9Cgpp bmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkgY29uc3QKewogICAg cmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFT dHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5 QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lpQnVja2V0KiljdXJO b2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5 SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUp LT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRy KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5n ZXRLZXkoKSA6IDA7Cn0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FpbnRkaWN0 LmgiIDIKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRSW50RGljdAoKCgogICAgICAgIDog cHVibGljIFFHRGljdAoKewpwdWJsaWM6CiAgICBRSW50RGljdChpbnQgc2l6ZT0xNykgOiBRR0Rp Y3Qoc2l6ZSxJbnRLZXksMCwwKSB7fQogICAgUUludERpY3QoIGNvbnN0IFFJbnREaWN0PHR5cGU+ ICZkICkgOiBRR0RpY3QoZCkge30KICAgflFJbnREaWN0KCkgeyBjbGVhcigpOyB9CiAgICBRSW50 RGljdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFJbnREaWN0PHR5cGU+ICZkKQogICAgICAgICAg ICAgICAgICAgICAgICB7IHJldHVybiAoUUludERpY3Q8dHlwZT4mKVFHRGljdDo6b3BlcmF0b3I9 KGQpOyB9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9 CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OnNpemUoKTsgfQogICAgYm9v bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpID09IDA7IH0KICAgIHZv aWQgaW5zZXJ0KCBsb25nIGssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfaW50KGssKEl0ZW0pZCwxKTsgfQogICAg dm9pZCByZXBsYWNlKCBsb25nIGssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfaW50KGssKEl0ZW0pZCwyKTsgfQog ICAgYm9vbCByZW1vdmUoIGxvbmcgayApIHsgcmV0dXJuIFFHRGljdDo6cmVtb3ZlX2ludChrKTsg fQogICAgdHlwZSAqdGFrZSggbG9uZyBrICkgeyByZXR1cm4gKHR5cGUqKVFHRGljdDo6dGFrZV9p bnQoayk7IH0KICAgIHR5cGUgKmZpbmQoIGxvbmcgayApIGNvbnN0CiAgICAgICAgICAgICAgICB7 IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2ludChrLDAsMCk7 IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGxvbmcgayApIGNvbnN0CiAgICAgICAgICAgICAgICB7 IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX2ludChrLDAsMCk7 IH0KICAgIHZvaWQgY2xlYXIoKSB7IFFHRGljdDo6Y2xlYXIoKTsgfQogICAgdm9pZCByZXNpemUo IHVpbnQgbiApIHsgUUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgc3RhdGlzdGljcygpIGNv bnN0IHsgUUdEaWN0OjpzdGF0aXN0aWNzKCk7IH0KCgoKCgoKCnByaXZhdGU6CiAgICB2b2lkIGRl bGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUUludERpY3Q8 dm9pZD46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8 Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUUludERpY3Q8dHlwZT46OmRlbGV0ZUl0ZW0oIFFQdHJD b2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlKilk Owp9Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRSW50RGljdEl0ZXJhdG9yIDogcHVibGlj IFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUludERpY3RJdGVyYXRvcihjb25zdCBRSW50 RGljdDx0eXBlPiAmZCkgOlFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQogICB+UUludERp Y3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291 bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKSA9 PSAwOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRv cjo6dG9GaXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlw ZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsg cmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICBsb25nIGN1cnJlbnRL ZXkoKSBjb25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCk7IH0KICAgIHR5 cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRv cigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0 ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSB7IHJl dHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcis9KGopO30KfTsKIyA1MCAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0YWJsZS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDEKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3FzdHJpbmdsaXN0LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fz dHJsaXN0LmgiIDEKIyA1OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzdHJsaXN0Lmgi CnR5cGVkZWYgUVB0ckxpc3RJdGVyYXRvcjxjaGFyPiBRU3RyTGlzdEl0ZXJhdG9yOwoKCmNsYXNz IFFTdHJMaXN0IDogcHVibGljIFFQdHJMaXN0PGNoYXI+CnsKcHVibGljOgogICAgUVN0ckxpc3Qo IGJvb2wgZGVlcENvcGllcz1UUlVFICkgeyBkYyA9IGRlZXBDb3BpZXM7IGRlbF9pdGVtID0gZGVl cENvcGllczsgfQogICAgUVN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICYgKTsKICAgIH5RU3RyTGlz dCgpIHsgY2xlYXIoKTsgfQogICAgUVN0ckxpc3QmIG9wZXJhdG9yPSggY29uc3QgUVN0ckxpc3Qg JiApOwoKcHJpdmF0ZToKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG5ld0l0ZW0oIFFQdHJDb2xs ZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYyA/IHFzdHJkdXAoIChjb25zdCBjaGFyKilkICkg OiBkOyB9CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IGlm ICggZGVsX2l0ZW0gKSBkZWxldGVbXSAoY2hhciopZDsgfQogICAgaW50IGNvbXBhcmVJdGVtcygg UVB0ckNvbGxlY3Rpb246Okl0ZW0gczEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMyICkgeyByZXR1 cm4gcXN0cmNtcCgoY29uc3QgY2hhciopczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilzMik7IH0KCiAgICBRRGF0 YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICZkICkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHMgPj4gKGNoYXIgKiYpZDsgcmV0dXJu IHM7IH0KICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0 aW9uOjpJdGVtIGQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0 dXJuIHMgPDwgKGNvbnN0IGNoYXIgKilkOyB9CgogICAgYm9vbCBkYzsKfTsKCgpjbGFzcyBRU3Ry SUxpc3QgOiBwdWJsaWMgUVN0ckxpc3QKewpwdWJsaWM6CiAgICBRU3RySUxpc3QoIGJvb2wgZGVl cENvcGllcz1UUlVFICkgOiBRU3RyTGlzdCggZGVlcENvcGllcyApIHt9CiAgICB+UVN0cklMaXN0 KCkgeyBjbGVhcigpOyB9CnByaXZhdGU6CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRUHRyQ29sbGVj dGlvbjo6SXRlbSBzMSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gczIgKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsgcmV0dXJuIHFzdHJpY21wKChjb25zdCBjaGFyKilzMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFy KilzMik7IH0KfTsKCgppbmxpbmUgUVN0ckxpc3QgJiBRU3RyTGlzdDo6b3BlcmF0b3I9KCBjb25z dCBRU3RyTGlzdCAmc3RyTGlzdCApCnsKICAgIGNsZWFyKCk7CiAgICBkYyA9IHN0ckxpc3QuZGM7 CiAgICBkZWxfaXRlbSA9IGRjOwogICAgUVB0ckxpc3Q8Y2hhcj46Om9wZXJhdG9yPSggc3RyTGlz dCApOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFTdHJMaXN0KCBjb25z dCBRU3RyTGlzdCAmc3RyTGlzdCApCiAgICA6IFFQdHJMaXN0PGNoYXI+KCBzdHJMaXN0ICkKewog ICAgZGMgPSBGQUxTRTsKICAgIG9wZXJhdG9yPSggc3RyTGlzdCApOwp9CiMgNDUgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCgoKCgpjbGFzcyBRUmVnRXhwOwoK Y2xhc3MgUVN0cmluZ0xpc3QgOiBwdWJsaWMgUVZhbHVlTGlzdDxRU3RyaW5nPgp7CnB1YmxpYzoK ICAgIFFTdHJpbmdMaXN0KCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZ0xpc3Qm IGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkgeyB9CiAgICBRU3RyaW5nTGlzdCggY29uc3Qg UVZhbHVlTGlzdDxRU3RyaW5nPiYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAg IFFTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nJiBpICkgeyBhcHBlbmQoaSk7IH0KCiAgICBRU3Ry aW5nTGlzdCggY29uc3QgY2hhciogaSApIHsgYXBwZW5kKGkpOyB9CgoKICAgIHN0YXRpYyBRU3Ry aW5nTGlzdCBmcm9tU3RyTGlzdChjb25zdCBRU3RyTGlzdCYpOwoKICAgIHZvaWQgc29ydCgpOwoK ICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUVN0cmluZyAmc2VwLCBjb25zdCBR U3RyaW5nICZzdHIsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwogICAgc3RhdGlj IFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBRQ2hhciAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIs IGJvb2wgYWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwoKICAgIHN0YXRpYyBRU3RyaW5nTGlz dCBzcGxpdCggY29uc3QgUVJlZ0V4cCAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wgYWxs b3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwoKICAgIFFTdHJpbmcgam9pbiggY29uc3QgUVN0cmlu ZyAmc2VwICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3JlcCggY29uc3QgUVN0cmluZyAmc3Ry LCBib29sIGNzID0gVFJVRSApIGNvbnN0OwoKICAgIFFTdHJpbmdMaXN0IGdyZXAoIGNvbnN0IFFS ZWdFeHAgJmV4cHIgKSBjb25zdDsKCn07CgoKY2xhc3MgUURhdGFTdHJlYW07CmV4dGVybiBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZ0xpc3QmICk7CmV4dGVy biBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVN0cmluZ0xp c3QmICk7CiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFibGUuaCIgMgojIDY2 ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYmxlLmgiCmNsYXNzIFFUYWJsZUhlYWRl cjsKY2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVRhYmxlOwpjbGFzcyBRUGFpbnRFdmVudDsKY2xh c3MgUVRpbWVyOwpjbGFzcyBRUmVzaXplRXZlbnQ7CmNsYXNzIFFDb21ib0JveDsKY2xhc3MgUUNo ZWNrQm94OwpjbGFzcyBRRHJhZ09iamVjdDsKCnN0cnVjdCBRVGFibGVQcml2YXRlOwpzdHJ1Y3Qg UVRhYmxlSGVhZGVyUHJpdmF0ZTsKCgpjbGFzcyBRVGFibGVTZWxlY3Rpb24KewpwdWJsaWM6CiAg ICBRVGFibGVTZWxlY3Rpb24oKTsKICAgIFFUYWJsZVNlbGVjdGlvbiggaW50IHN0YXJ0X3Jvdywg aW50IHN0YXJ0X2NvbCwgaW50IGVuZF9yb3csIGludCBlbmRfY29sICk7CiAgICB2b2lkIGluaXQo IGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgZXhwYW5kVG8oIGludCByb3csIGludCBjb2wg KTsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRhYmxlU2VsZWN0aW9uICZzICkgY29uc3Q7 CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUYWJsZVNlbGVjdGlvbiAmcyApIGNvbnN0IHsg cmV0dXJuICEob3BlcmF0b3I9PShzKSk7IH0KCiAgICBpbnQgdG9wUm93KCkgY29uc3QgeyByZXR1 cm4gdFJvdzsgfQogICAgaW50IGJvdHRvbVJvdygpIGNvbnN0IHsgcmV0dXJuIGJSb3c7IH0KICAg IGludCBsZWZ0Q29sKCkgY29uc3QgeyByZXR1cm4gbENvbDsgfQogICAgaW50IHJpZ2h0Q29sKCkg Y29uc3QgeyByZXR1cm4gckNvbDsgfQogICAgaW50IGFuY2hvclJvdygpIGNvbnN0IHsgcmV0dXJu IGFSb3c7IH0KICAgIGludCBhbmNob3JDb2woKSBjb25zdCB7IHJldHVybiBhQ29sOyB9CgogICAg Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGFjdGl2ZTsgfQoKcHJpdmF0ZToKICAgIHVp bnQgYWN0aXZlIDogMTsKICAgIHVpbnQgaW5pdGVkIDogMTsKICAgIGludCB0Um93LCBsQ29sLCBi Um93LCByQ29sOwogICAgaW50IGFSb3csIGFDb2w7Cn07CgoKY2xhc3MgUVRhYmxlSXRlbSA6IHB1 YmxpYyBRdAp7CiAgICBmcmllbmQgY2xhc3MgUVRhYmxlOwoKcHVibGljOgogICAgZW51bSBFZGl0 VHlwZSB7IE5ldmVyLCBPblR5cGluZywgV2hlbkN1cnJlbnQsIEFsd2F5cyB9OwoKICAgIFFUYWJs ZUl0ZW0oIFFUYWJsZSAqdGFibGUsIEVkaXRUeXBlIGV0LCBjb25zdCBRU3RyaW5nICZ0ZXh0ICk7 CiAgICBRVGFibGVJdGVtKCBRVGFibGUgKnRhYmxlLCBFZGl0VHlwZSBldCwgY29uc3QgUVN0cmlu ZyAmdGV4dCwKICAgICAgICAgICAgICAgIGNvbnN0IFFQaXhtYXAgJnAgKTsKICAgIHZpcnR1YWwg flFUYWJsZUl0ZW0oKTsKCiAgICB2aXJ0dWFsIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CiAgICB2 aXJ0dWFsIFFTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCgg Y29uc3QgUVBpeG1hcCAmcCApOwogICAgdmlydHVhbCB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJp bmcgJnQgKTsKICAgIFFUYWJsZSAqdGFibGUoKSBjb25zdCB7IHJldHVybiB0OyB9CgogICAgdmly dHVhbCBpbnQgYWxpZ25tZW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V29yZFdyYXAo IGJvb2wgYiApOwogICAgYm9vbCB3b3JkV3JhcCgpIGNvbnN0OwoKICAgIEVkaXRUeXBlIGVkaXRU eXBlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigpIGNvbnN0Owog ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRGcm9tRWRpdG9yKCBRV2lkZ2V0ICp3ICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0UmVwbGFjZWFibGUoIGJvb2wgKTsKICAgIGJvb2wgaXNSZXBsYWNlYWJs ZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVN0cmluZyBrZXkoKSBjb25zdDsKICAgIHZpcnR1YWwg UVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0U3BhbiggaW50IHJz LCBpbnQgY3MgKTsKICAgIGludCByb3dTcGFuKCkgY29uc3Q7CiAgICBpbnQgY29sU3BhbigpIGNv bnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSb3coIGludCByICk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0Q29sKCBpbnQgYyApOwogICAgaW50IHJvdygpIGNvbnN0OwogICAgaW50IGNvbCgpIGNvbnN0 OwoKICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIgKnAsIGNvbnN0IFFDb2xvckdyb3Vw ICZjZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29sIHNlbGVj dGVkICk7CgogICAgdm9pZCB1cGRhdGVFZGl0b3IoIGludCBvbGRSb3csIGludCBvbGRDb2wgKTsK CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCBiICk7CiAgICBib29sIGlzRW5hYmxl ZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0YXRpYyBpbnQg UlRUSTsKCnByaXZhdGU6CiAgICBRU3RyaW5nIHR4dDsKICAgIFFQaXhtYXAgcGl4OwogICAgUVRh YmxlICp0OwogICAgRWRpdFR5cGUgZWRUeXBlOwogICAgdWludCB3b3Jkd3JhcCA6IDE7CiAgICB1 aW50IHRjaGEgOiAxOwogICAgdWludCBlbmFibGVkIDogMTsKICAgIGludCBydywgY2w7CiAgICBp bnQgcm93c3BhbiwgY29sc3BhbjsKCn07CgpjbGFzcyBRQ29tYm9UYWJsZUl0ZW0gOiBwdWJsaWMg UVRhYmxlSXRlbQp7CnB1YmxpYzoKICAgIFFDb21ib1RhYmxlSXRlbSggUVRhYmxlICp0YWJsZSwg Y29uc3QgUVN0cmluZ0xpc3QgJmxpc3QsIGJvb2wgZWRpdGFibGUgPSBGQUxTRSApOwogICAgdmly dHVhbCBRV2lkZ2V0ICpjcmVhdGVFZGl0b3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRD b250ZW50RnJvbUVkaXRvciggUVdpZGdldCAqdyApOwogICAgdmlydHVhbCB2b2lkIHBhaW50KCBR UGFpbnRlciAqcCwgY29uc3QgUUNvbG9yR3JvdXAgJmNnLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBRUmVjdCAmY3IsIGJvb2wgc2VsZWN0ZWQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRD dXJyZW50SXRlbSggaW50IGkgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50SXRlbSggY29u c3QgUVN0cmluZyAmaSApOwogICAgaW50IGN1cnJlbnRJdGVtKCkgY29uc3Q7CiAgICBRU3RyaW5n IGN1cnJlbnRUZXh0KCkgY29uc3Q7CiAgICBpbnQgY291bnQoKSBjb25zdDsKCiAgICB1c2luZyBR VGFibGVJdGVtOjp0ZXh0OwoKICAgIFFTdHJpbmcgdGV4dCggaW50IGkgKSBjb25zdDsKICAgIHZp cnR1YWwgdm9pZCBzZXRFZGl0YWJsZSggYm9vbCBiICk7CiAgICBib29sIGlzRWRpdGFibGUoKSBj b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmdMaXN0KCBjb25zdCBRU3RyaW5nTGlzdCAm bCApOwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7CgogICAgUVNp emUgc2l6ZUhpbnQoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQ29tYm9Cb3ggKmNiOwogICAgUVN0 cmluZ0xpc3QgZW50cmllczsKICAgIGludCBjdXJyZW50OwogICAgYm9vbCBlZGl0OwogICAgc3Rh dGljIFFDb21ib0JveCAqZmFrZUNvbWJvOwoKfTsKCmNsYXNzIFFDaGVja1RhYmxlSXRlbSA6IHB1 YmxpYyBRVGFibGVJdGVtCnsKcHVibGljOgogICAgUUNoZWNrVGFibGVJdGVtKCBRVGFibGUgKnRh YmxlLCBjb25zdCBRU3RyaW5nICZ0eHQgKTsKICAgIHZpcnR1YWwgUVdpZGdldCAqY3JlYXRlRWRp dG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRn ZXQgKncgKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIgKnAsIGNvbnN0IFFDb2xv ckdyb3VwICZjZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29s IHNlbGVjdGVkICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tlZCggYm9vbCBiICk7CiAgICBi b29sIGlzQ2hlY2tlZCgpIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMg aW50IFJUVEk7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQ2hl Y2tCb3ggKmNiOwogICAgYm9vbCBjaGVja2VkOwoKfTsKIyAyMzggIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xdGFibGUuaCIKY2xhc3MgUVRhYmxlIDogcHVibGljIFFTY3JvbGxWaWV3CnsK ICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0 dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp IGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9v bCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQs IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFW YXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGlu dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0 KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0 YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAoKICAgIGZyaWVuZCBjbGFzcyBRVGFibGVIZWFkZXI7CiAgICBmcmllbmQg Y2xhc3MgUUNvbWJvVGFibGVJdGVtOwogICAgZnJpZW5kIGNsYXNzIFFDaGVja1RhYmxlSXRlbTsK ICAgIGZyaWVuZCBjbGFzcyBRVGFibGVJdGVtOwoKcHVibGljOgogICAgUVRhYmxlKCBRV2lkZ2V0 KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRVGFibGUoIGludCBudW1Sb3dz LCBpbnQgbnVtQ29scywKICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIq IG5hbWU9MCApOwogICAgflFUYWJsZSgpOwoKICAgIFFIZWFkZXIgKmhvcml6b250YWxIZWFkZXIo KSBjb25zdDsKICAgIFFIZWFkZXIgKnZlcnRpY2FsSGVhZGVyKCkgY29uc3Q7CgogICAgZW51bSBT ZWxlY3Rpb25Nb2RlIHsgU2luZ2xlLCBNdWx0aSwgU2luZ2xlUm93LCBNdWx0aVJvdywgTm9TZWxl Y3Rpb24gfTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25Nb2RlKCBTZWxlY3Rpb25Nb2Rl IG1vZGUgKTsKICAgIFNlbGVjdGlvbk1vZGUgc2VsZWN0aW9uTW9kZSgpIGNvbnN0OwoKICAgIHZp cnR1YWwgdm9pZCBzZXRJdGVtKCBpbnQgcm93LCBpbnQgY29sLCBRVGFibGVJdGVtICppdGVtICk7 CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggaW50IHJvdywgaW50IGNvbCwgY29uc3QgUVN0cmlu ZyAmdGV4dCApOwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggaW50IHJvdywgaW50IGNvbCwg Y29uc3QgUVBpeG1hcCAmcGl4ICk7CiAgICB2aXJ0dWFsIFFUYWJsZUl0ZW0gKml0ZW0oIGludCBy b3csIGludCBjb2wgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZyB0ZXh0KCBpbnQgcm93LCBp bnQgY29sICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFQaXhtYXAgcGl4bWFwKCBpbnQgcm93LCBpbnQg Y29sICkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDZWxsKCBpbnQgcm93LCBpbnQgY29s ICk7CgogICAgdmlydHVhbCBRUmVjdCBjZWxsR2VvbWV0cnkoIGludCByb3csIGludCBjb2wgKSBj b25zdDsKICAgIHZpcnR1YWwgaW50IGNvbHVtbldpZHRoKCBpbnQgY29sICkgY29uc3Q7CiAgICB2 aXJ0dWFsIGludCByb3dIZWlnaHQoIGludCByb3cgKSBjb25zdDsKICAgIHZpcnR1YWwgaW50IGNv bHVtblBvcyggaW50IGNvbCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgcm93UG9zKCBpbnQgcm93 ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBjb2x1bW5BdCggaW50IHggKSBjb25zdDsKICAgIHZp cnR1YWwgaW50IHJvd0F0KCBpbnQgeSApIGNvbnN0OwoKICAgIHZpcnR1YWwgaW50IG51bVJvd3Mo KSBjb25zdDsKICAgIHZpcnR1YWwgaW50IG51bUNvbHMoKSBjb25zdDsKCiAgICB2b2lkIHVwZGF0 ZUNlbGwoIGludCByb3csIGludCBjb2wgKTsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0 ICogbywgUUV2ZW50ICogKTsKCiAgICBpbnQgY3VycmVudFJvdygpIGNvbnN0IHsgcmV0dXJuIGN1 clJvdzsgfQogICAgaW50IGN1cnJlbnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBjdXJDb2w7IH0K ICAgIHZvaWQgZW5zdXJlQ2VsbFZpc2libGUoIGludCByb3csIGludCBjb2wgKTsKCiAgICBib29s IGlzU2VsZWN0ZWQoIGludCByb3csIGludCBjb2wgKSBjb25zdDsKICAgIGJvb2wgaXNSb3dTZWxl Y3RlZCggaW50IHJvdywgYm9vbCBmdWxsID0gRkFMU0UgKSBjb25zdDsKICAgIGJvb2wgaXNDb2x1 bW5TZWxlY3RlZCggaW50IGNvbCwgYm9vbCBmdWxsID0gRkFMU0UgKSBjb25zdDsKICAgIGludCBu dW1TZWxlY3Rpb25zKCkgY29uc3Q7CiAgICBRVGFibGVTZWxlY3Rpb24gc2VsZWN0aW9uKCBpbnQg bnVtICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBhZGRTZWxlY3Rpb24oIGNvbnN0IFFUYWJsZVNl bGVjdGlvbiAmcyApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZVNlbGVjdGlvbiggY29uc3QgUVRh YmxlU2VsZWN0aW9uICZzICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2VsZWN0aW9uKCBpbnQg bnVtICk7CiAgICB2aXJ0dWFsIGludCBjdXJyZW50U2VsZWN0aW9uKCkgY29uc3Q7CgogICAgdm9p ZCBzZWxlY3RDZWxscyggaW50IHN0YXJ0X3JvdywgaW50IHN0YXJ0X2NvbCwgaW50IGVuZF9yb3cs IGludCBlbmRfY29sICk7CiAgICB2b2lkIHNlbGVjdFJvdyggaW50IHJvdyApOwogICAgdm9pZCBz ZWxlY3RDb2x1bW4oIGludCBjb2wgKTsKCiAgICBib29sIHNob3dHcmlkKCkgY29uc3Q7CgogICAg Ym9vbCBjb2x1bW5Nb3ZpbmdFbmFibGVkKCkgY29uc3Q7CiAgICBib29sIHJvd01vdmluZ0VuYWJs ZWQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc29ydENvbHVtbiggaW50IGNvbCwgYm9vbCBh c2NlbmRpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2hvbGVS b3dzID0gRkFMU0UgKTsKICAgIGJvb2wgc29ydGluZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9p ZCB0YWtlSXRlbSggUVRhYmxlSXRlbSAqaSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRDZWxsV2lk Z2V0KCBpbnQgcm93LCBpbnQgY29sLCBRV2lkZ2V0ICplICk7CiAgICB2aXJ0dWFsIFFXaWRnZXQg KmNlbGxXaWRnZXQoIGludCByb3csIGludCBjb2wgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBj bGVhckNlbGxXaWRnZXQoIGludCByb3csIGludCBjb2wgKTsKCiAgICB2aXJ0dWFsIFFSZWN0IGNl bGxSZWN0KCBpbnQgcm93LCBpbnQgY29sICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHBhaW50 Q2VsbCggUVBhaW50ZXIgKnAsIGludCByb3csIGludCBjb2wsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRUmVjdCAmY3IsIGJvb2wgc2VsZWN0ZWQgKTsKICAgIHZpcnR1YWwgdm9p ZCBwYWludENlbGwoIFFQYWludGVyICpwLCBpbnQgcm93LCBpbnQgY29sLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJmNyLCBib29sIHNlbGVjdGVkLCBjb25zdCBRQ29s b3JHcm91cCAmY2cgKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEZvY3VzKCBRUGFpbnRlciAqcCwg Y29uc3QgUVJlY3QgJnIgKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CgogICAgYm9vbCBp c1JlYWRPbmx5KCkgY29uc3Q7CiAgICBib29sIGlzUm93UmVhZE9ubHkoIGludCByb3cgKSBjb25z dDsKICAgIGJvb2wgaXNDb2x1bW5SZWFkT25seSggaW50IGNvbCApIGNvbnN0OwoKICAgIHZvaWQg c2V0RW5hYmxlZCggYm9vbCBiICk7CgogICAgdm9pZCByZXBhaW50U2VsZWN0aW9ucygpOwoKICAg IGVudW0gRm9jdXNTdHlsZSB7IEZvbGxvd1N0eWxlLCBTcHJlYWRTaGVldCB9OwogICAgdmlydHVh bCB2b2lkIHNldEZvY3VzU3R5bGUoIEZvY3VzU3R5bGUgZnMgKTsKICAgIEZvY3VzU3R5bGUgZm9j dXNTdHlsZSgpIGNvbnN0OwoKICAgIHZvaWQgdXBkYXRlSGVhZGVyU3RhdGVzKCk7CgpwdWJsaWMg OgogICAgdmlydHVhbCB2b2lkIHNldE51bVJvd3MoIGludCByICk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0TnVtQ29scyggaW50IHIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93R3JpZCggYm9vbCBi ICk7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZVJvdyggaW50IHJvdyApOwogICAgdmlydHVhbCB2b2lk IGhpZGVDb2x1bW4oIGludCBjb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzaG93Um93KCBpbnQgcm93 ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbHVtbiggaW50IGNvbCApOwoKICAgIHZpcnR1YWwg dm9pZCBzZXRDb2x1bW5XaWR0aCggaW50IGNvbCwgaW50IHcgKTsKICAgIHZpcnR1YWwgdm9pZCBz ZXRSb3dIZWlnaHQoIGludCByb3csIGludCBoICk7CgogICAgdmlydHVhbCB2b2lkIGFkanVzdENv bHVtbiggaW50IGNvbCApOwogICAgdmlydHVhbCB2b2lkIGFkanVzdFJvdyggaW50IHJvdyApOwoK ICAgIHZpcnR1YWwgdm9pZCBzZXRDb2x1bW5TdHJldGNoYWJsZSggaW50IGNvbCwgYm9vbCBzdHJl dGNoICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Um93U3RyZXRjaGFibGUoIGludCByb3csIGJvb2wg c3RyZXRjaCApOwogICAgYm9vbCBpc0NvbHVtblN0cmV0Y2hhYmxlKCBpbnQgY29sICkgY29uc3Q7 CiAgICBib29sIGlzUm93U3RyZXRjaGFibGUoIGludCByb3cgKSBjb25zdDsKICAgIHZpcnR1YWwg dm9pZCBzZXRTb3J0aW5nKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzd2FwUm93cyggaW50 IHJvdzEsIGludCByb3cyLCBib29sIHN3YXBIZWFkZXIgPSBGQUxTRSApOwogICAgdmlydHVhbCB2 b2lkIHN3YXBDb2x1bW5zKCBpbnQgY29sMSwgaW50IGNvbDIsIGJvb2wgc3dhcEhlYWRlciA9IEZB TFNFICk7CiAgICB2aXJ0dWFsIHZvaWQgc3dhcENlbGxzKCBpbnQgcm93MSwgaW50IGNvbDEsIGlu dCByb3cyLCBpbnQgY29sMiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0TWFyZ2luKCBpbnQg bSApOwogICAgdmlydHVhbCB2b2lkIHNldFRvcE1hcmdpbiggaW50IG0gKTsKICAgIHZpcnR1YWwg dm9pZCBzZXRDdXJyZW50Q2VsbCggaW50IHJvdywgaW50IGNvbCApOwogICAgdm9pZCBjbGVhclNl bGVjdGlvbiggYm9vbCByZXBhaW50ID0gVFJVRSApOwogICAgdmlydHVhbCB2b2lkIHNldENvbHVt bk1vdmluZ0VuYWJsZWQoIGJvb2wgYiApOwogICAgdmlydHVhbCB2b2lkIHNldFJvd01vdmluZ0Vu YWJsZWQoIGJvb2wgYiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkT25seSggYm9vbCBiICk7 CiAgICB2aXJ0dWFsIHZvaWQgc2V0Um93UmVhZE9ubHkoIGludCByb3csIGJvb2wgcm8gKTsKICAg IHZpcnR1YWwgdm9pZCBzZXRDb2x1bW5SZWFkT25seSggaW50IGNvbCwgYm9vbCBybyApOwoKICAg IHZpcnR1YWwgdm9pZCBzZXREcmFnRW5hYmxlZCggYm9vbCBiICk7CiAgICBib29sIGRyYWdFbmFi bGVkKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGluc2VydFJvd3MoIGludCByb3csIGludCBj b3VudCA9IDEgKTsKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRDb2x1bW5zKCBpbnQgY29sLCBpbnQg Y291bnQgPSAxICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUm93KCBpbnQgcm93ICk7CiAgICB2 aXJ0dWFsIHZvaWQgcmVtb3ZlUm93cyggY29uc3QgUU1lbUFycmF5PGludD4gJnJvd3MgKTsKICAg IHZpcnR1YWwgdm9pZCByZW1vdmVDb2x1bW4oIGludCBjb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBy ZW1vdmVDb2x1bW5zKCBjb25zdCBRTWVtQXJyYXk8aW50PiAmY29scyApOwoKICAgIHZpcnR1YWwg dm9pZCBlZGl0Q2VsbCggaW50IHJvdywgaW50IGNvbCwgYm9vbCByZXBsYWNlID0gRkFMU0UgKTsK CiAgICB2b2lkIHNldFJvd0xhYmVscyggY29uc3QgUVN0cmluZ0xpc3QgJmxhYmVscyApOwogICAg dm9pZCBzZXRDb2x1bW5MYWJlbHMoIGNvbnN0IFFTdHJpbmdMaXN0ICZsYWJlbHMgKTsKCnByb3Rl Y3RlZDoKICAgIGVudW0gRWRpdE1vZGUgeyBOb3RFZGl0aW5nLCBFZGl0aW5nLCBSZXBsYWNpbmcg fTsKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqcCwgaW50IGN4LCBpbnQgY3ksIGlu dCBjdywgaW50IGNoICk7CiAgICB2b2lkIGNvbnRlbnRzTW91c2VQcmVzc0V2ZW50KCBRTW91c2VF dmVudCogKTsKICAgIHZvaWQgY29udGVudHNNb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQqICk7 CiAgICB2b2lkIGNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCogKTsK ICAgIHZvaWQgY29udGVudHNNb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2 b2lkIGNvbnRlbnRzQ29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiBlICk7CiAg ICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCogKTsKICAgIHZvaWQgZm9jdXNJbkV2ZW50 KCBRRm9jdXNFdmVudCogKTsKICAgIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQqICk7 CiAgICB2b2lkIHZpZXdwb3J0UmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICk7CiAgICB2b2lk IHNob3dFdmVudCggUVNob3dFdmVudCAqZSApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRF dmVudCAqZSApOwogICAgdm9pZCBzZXRFZGl0TW9kZSggRWRpdE1vZGUgbW9kZSwgaW50IHJvdywg aW50IGNvbCApOwoKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c0RyYWdFbnRlckV2ZW50KCBRRHJh Z0VudGVyRXZlbnQgKmUgKTsKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c0RyYWdNb3ZlRXZlbnQo IFFEcmFnTW92ZUV2ZW50ICplICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcmFnTGVhdmVF dmVudCggUURyYWdMZWF2ZUV2ZW50ICplICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNEcm9w RXZlbnQoIFFEcm9wRXZlbnQgKmUgKTsKICAgIHZpcnR1YWwgUURyYWdPYmplY3QgKmRyYWdPYmpl Y3QoKTsKICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoKTsKCgogICAgdmlydHVhbCB2b2lkIHBh aW50RW1wdHlBcmVhKCBRUGFpbnRlciAqcCwgaW50IGN4LCBpbnQgY3ksIGludCBjdywgaW50IGNo ICk7CiAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVOZXh0Q2VsbCgpOwogICAgdmlydHVhbCBRV2lk Z2V0ICpjcmVhdGVFZGl0b3IoIGludCByb3csIGludCBjb2wsIGJvb2wgaW5pdEZyb21DZWxsICkg Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2VsbENvbnRlbnRGcm9tRWRpdG9yKCBpbnQgcm93 LCBpbnQgY29sICk7CiAgICB2aXJ0dWFsIFFXaWRnZXQgKmJlZ2luRWRpdCggaW50IHJvdywgaW50 IGNvbCwgYm9vbCByZXBsYWNlICk7CiAgICB2aXJ0dWFsIHZvaWQgZW5kRWRpdCggaW50IHJvdywg aW50IGNvbCwgYm9vbCBhY2NlcHQsIGJvb2wgcmVwbGFjZSApOwoKICAgIHZpcnR1YWwgdm9pZCBy ZXNpemVEYXRhKCBpbnQgbGVuICk7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0V2lkZ2V0KCBpbnQg cm93LCBpbnQgY29sLCBRV2lkZ2V0ICp3ICk7CiAgICBpbnQgaW5kZXhPZiggaW50IHJvdywgaW50 IGNvbCApIGNvbnN0OwoKICAgIHZvaWQgd2luZG93QWN0aXZhdGlvbkNoYW5nZSggYm9vbCApOwog ICAgYm9vbCBpc0VkaXRpbmcoKSBjb25zdDsKICAgIEVkaXRNb2RlIGVkaXRNb2RlKCkgY29uc3Q7 CiAgICBpbnQgY3VyckVkaXRSb3coKSBjb25zdDsKICAgIGludCBjdXJyRWRpdENvbCgpIGNvbnN0 OwoKcHJvdGVjdGVkIDoKICAgIHZpcnR1YWwgdm9pZCBjb2x1bW5XaWR0aENoYW5nZWQoIGludCBj b2wgKTsKICAgIHZpcnR1YWwgdm9pZCByb3dIZWlnaHRDaGFuZ2VkKCBpbnQgcm93ICk7CiAgICB2 aXJ0dWFsIHZvaWQgY29sdW1uSW5kZXhDaGFuZ2VkKCBpbnQgc2VjdGlvbiwgaW50IGZyb21JbmRl eCwgaW50IHRvSW5kZXggKTsKICAgIHZpcnR1YWwgdm9pZCByb3dJbmRleENoYW5nZWQoIGludCBz ZWN0aW9uLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCApOwogICAgdmlydHVhbCB2b2lkIGNv bHVtbkNsaWNrZWQoIGludCBjb2wgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgY3VycmVudENoYW5n ZWQoIGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgY2xpY2tlZCggaW50IHJvdywgaW50IGNv bCwgaW50IGJ1dHRvbiwgY29uc3QgUVBvaW50ICZtb3VzZVBvcyApOwogICAgdm9pZCBkb3VibGVD bGlja2VkKCBpbnQgcm93LCBpbnQgY29sLCBpbnQgYnV0dG9uLCBjb25zdCBRUG9pbnQgJm1vdXNl UG9zICk7CiAgICB2b2lkIHByZXNzZWQoIGludCByb3csIGludCBjb2wsIGludCBidXR0b24sIGNv bnN0IFFQb2ludCAmbW91c2VQb3MgKTsKICAgIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCgpOwogICAg dm9pZCB2YWx1ZUNoYW5nZWQoIGludCByb3csIGludCBjb2wgKTsKICAgIHZvaWQgY29udGV4dE1l bnVSZXF1ZXN0ZWQoIGludCByb3csIGludCBjb2wsIGNvbnN0IFFQb2ludCAmcG9zICk7CgogICAg dm9pZCBkcm9wcGVkKCBRRHJvcEV2ZW50ICplICk7CgoKcHJpdmF0ZSA6CiAgICB2b2lkIGRvQXV0 b1Njcm9sbCgpOwogICAgdm9pZCBkb1ZhbHVlQ2hhbmdlZCgpOwogICAgdm9pZCB1cGRhdGVHZW9t ZXRyaWVzU2xvdCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgY29udGVudHNNb3VzZVByZXNzRXZlbnRF eCggUU1vdXNlRXZlbnQqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50ZXIqICk7CiAg ICB2b2lkIHVwZGF0ZUdlb21ldHJpZXMoKTsKICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbnMoIFFU YWJsZVNlbGVjdGlvbiAqb2xkU2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg UVRhYmxlU2VsZWN0aW9uICpuZXdTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIHVwZGF0ZVZlcnRpY2FsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgdXBkYXRlSG9yaXpvbnRhbCA9IFRSVUUgKTsKICAgIFFSZWN0IHJhbmdlR2VvbWV0cnko IGludCB0b3BSb3csIGludCBsZWZ0Q29sLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJv dHRvbVJvdywgaW50IHJpZ2h0Q29sLCBib29sICZvcHRpbWl6ZSApOwogICAgdm9pZCBmaXhSb3co IGludCAmcm93LCBpbnQgeSApOwogICAgdm9pZCBmaXhDb2woIGludCAmY29sLCBpbnQgeCApOwoK ICAgIHZvaWQgaW5pdCggaW50IG51bVJvd3MsIGludCBudW1Db2xzICk7CiAgICBRU2l6ZSB0YWJs ZVNpemUoKSBjb25zdDsKICAgIHZvaWQgcmVwYWludENlbGwoIGludCByb3csIGludCBjb2wgKTsK ICAgIHZvaWQgY29udGVudHNUb1ZpZXdwb3J0MiggaW50IHgsIGludCB5LCBpbnQmIHZ4LCBpbnQm IHZ5ICk7CiAgICBRUG9pbnQgY29udGVudHNUb1ZpZXdwb3J0MiggY29uc3QgUVBvaW50ICZwICk7 CiAgICB2b2lkIHZpZXdwb3J0VG9Db250ZW50czIoIGludCB2eCwgaW50IHZ5LCBpbnQmIHgsIGlu dCYgeSApOwogICAgUVBvaW50IHZpZXdwb3J0VG9Db250ZW50czIoIGNvbnN0IFFQb2ludCAmcCAp OwoKICAgIHZvaWQgdXBkYXRlUm93V2lkZ2V0cyggaW50IHJvdyApOwogICAgdm9pZCB1cGRhdGVD b2xXaWRnZXRzKCBpbnQgY29sICk7CiAgICBib29sIGlzU2VsZWN0ZWQoIGludCByb3csIGludCBj b2wsIGJvb2wgaW5jbHVkZUN1cnJlbnQgKSBjb25zdDsKICAgIHZvaWQgc2V0Q3VycmVudENlbGwo IGludCByb3csIGludCBjb2wsIGJvb2wgdXBkYXRlU2VsZWN0aW9ucyApOwogICAgdm9pZCBmaXhD ZWxsKCBpbnQgJnJvdywgaW50ICZjb2wsIGludCBrZXkgKTsKICAgIHZvaWQgZGVsYXllZFVwZGF0 ZUdlb21ldHJpZXMoKTsKICAgIHN0cnVjdCBUYWJsZVdpZGdldAogICAgewogICAgICAgIFRhYmxl V2lkZ2V0KCBRV2lkZ2V0ICp3LCBpbnQgciwgaW50IGMgKSA6IHdpZCggdyApLCByb3coIHIgKSwg Y29sICggYyApIHt9CiAgICAgICAgUVdpZGdldCAqd2lkOwogICAgICAgIGludCByb3csIGNvbDsK ICAgIH07CiAgICB2b2lkIHNhdmVDb250ZW50cyggUVB0clZlY3RvcjxRVGFibGVJdGVtPiAmdG1w LAogICAgICAgICAgICAgICAgICAgICAgIFFQdHJWZWN0b3I8VGFibGVXaWRnZXQ+ICZ0bXAyICk7 CiAgICB2b2lkIHVwZGF0ZUhlYWRlckFuZFJlc2l6ZUNvbnRlbnRzKCBRVGFibGVIZWFkZXIgKmhl YWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sIGlu dCBjb2xSb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk dGgsIGJvb2wgJnVwZGF0ZUJlZm9yZSApOwogICAgdm9pZCByZXN0b3JlQ29udGVudHMoIFFQdHJW ZWN0b3I8UVRhYmxlSXRlbT4gJnRtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICBRUHRyVmVj dG9yPFRhYmxlV2lkZ2V0PiAmdG1wMiApOwogICAgdm9pZCBmaW5pc2hDb250ZW50c1Jlc3plKCBi b29sIHVwZGF0ZUJlZm9yZSApOwoKcHJpdmF0ZToKICAgIFFQdHJWZWN0b3I8UVRhYmxlSXRlbT4g Y29udGVudHM7CiAgICBRUHRyVmVjdG9yPFFXaWRnZXQ+IHdpZGdldHM7CiAgICBpbnQgY3VyUm93 OwogICAgaW50IGN1ckNvbDsKICAgIFFUYWJsZUhlYWRlciAqbGVmdEhlYWRlciwgKnRvcEhlYWRl cjsKICAgIEVkaXRNb2RlIGVkTW9kZTsKICAgIGludCBlZGl0Q29sLCBlZGl0Um93OwogICAgUVB0 ckxpc3Q8UVRhYmxlU2VsZWN0aW9uPiBzZWxlY3Rpb25zOwogICAgUVRhYmxlU2VsZWN0aW9uICpj dXJyZW50U2VsOwogICAgUVRpbWVyICphdXRvU2Nyb2xsVGltZXI7CiAgICBpbnQgbGFzdFNvcnRD b2w7CiAgICBib29sIHNHcmlkIDogMTsKICAgIGJvb2wgbVJvd3MgOiAxOwogICAgYm9vbCBtQ29s cyA6IDE7CiAgICBib29sIGFzYyA6IDE7CiAgICBib29sIGRvU29ydCA6IDE7CiAgICBib29sIG1v dXNlUHJlc3NlZCA6IDE7CiAgICBib29sIHJlYWRPbmx5IDogMTsKICAgIGJvb2wgc2hvdWxkQ2xl YXJTZWxlY3Rpb24gOiAxOwogICAgYm9vbCBkRW5hYmxlZCA6IDE7CiAgICBib29sIGNvbnRleHRf bWVudSA6IDE7CiAgICBib29sIGRyYXdBY3RpdmVTZWxlY3Rpb24gOiAxOwogICAgYm9vbCB3YXNf dmlzaWJsZSA6IDE7CiAgICBTZWxlY3Rpb25Nb2RlIHNlbE1vZGU7CiAgICBpbnQgcHJlc3NlZFJv dywgcHJlc3NlZENvbDsKICAgIFFUYWJsZVByaXZhdGUgKmQ7CiAgICBRSW50RGljdDxpbnQ+IHJv Um93czsKICAgIFFJbnREaWN0PGludD4gcm9Db2xzOwogICAgaW50IHN0YXJ0RHJhZ1JvdzsKICAg IGludCBzdGFydERyYWdDb2w7CiAgICBRUG9pbnQgZHJhZ1N0YXJ0UG9zOwogICAgaW50IG9sZEN1 cnJlbnRSb3csIG9sZEN1cnJlbnRDb2w7CiAgICBRV2lkZ2V0ICp1bnVzZWRfdG9wTGVmdENvcm5l cjsKICAgIEZvY3VzU3R5bGUgZm9jdXNTdGw7CiAgICBRU2l6ZSB1bnVzZWRfY2FjaGVkU2l6ZUhp bnQ7CgoKICAgIFFUYWJsZSggY29uc3QgUVRhYmxlICYgKTsKICAgIFFUYWJsZSAmb3BlcmF0b3I9 KCBjb25zdCBRVGFibGUgJiApOwoKfTsKIyAyMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAyCiMgMSAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcWRlc2t0b3B3aWRnZXQuaCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcWRlc2t0b3B3aWRnZXQuaCIKY2xhc3MgUURlc2t0b3BXaWRnZXRQcml2YXRlOwoKY2xhc3Mg UURlc2t0b3BXaWRnZXQgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1l dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7 IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBx dF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2Jq ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi b29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29s IHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0 YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkg eyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFP Ymo7CnB1YmxpYzoKICAgIFFEZXNrdG9wV2lkZ2V0KCk7CiAgICB+UURlc2t0b3BXaWRnZXQoKTsK CiAgICBib29sIGlzVmlydHVhbERlc2t0b3AoKSBjb25zdDsKCiAgICBpbnQgbnVtU2NyZWVucygp IGNvbnN0OwogICAgaW50IHByaW1hcnlTY3JlZW4oKSBjb25zdDsKCiAgICBpbnQgc2NyZWVuTnVt YmVyKCBRV2lkZ2V0ICp3aWRnZXQgPSAwICkgY29uc3Q7CiAgICBpbnQgc2NyZWVuTnVtYmVyKCBj b25zdCBRUG9pbnQgJiApIGNvbnN0OwoKICAgIFFXaWRnZXQgKnNjcmVlbiggaW50IHNjcmVlbiA9 IC0xICk7CgogICAgY29uc3QgUVJlY3QmIHNjcmVlbkdlb21ldHJ5KCBpbnQgc2NyZWVuID0gLTEg KSBjb25zdDsKICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggUVdpZGdldCAqd2lkZ2V0 ICkgY29uc3QKICAgIHsgcmV0dXJuIHNjcmVlbkdlb21ldHJ5KCBzY3JlZW5OdW1iZXIoIHdpZGdl dCApICk7IH0KICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggY29uc3QgUVBvaW50ICZw b2ludCApIGNvbnN0CiAgICB7IHJldHVybiBzY3JlZW5HZW9tZXRyeSggc2NyZWVuTnVtYmVyKCBw b2ludCApICk7IH0KCiAgICBjb25zdCBRUmVjdCYgYXZhaWxhYmxlR2VvbWV0cnkoIGludCBzY3Jl ZW4gPSAtMSApIGNvbnN0OwogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5KCBRV2lk Z2V0ICp3aWRnZXQgKSBjb25zdAogICAgeyByZXR1cm4gYXZhaWxhYmxlR2VvbWV0cnkoIHNjcmVl bk51bWJlciggd2lkZ2V0ICkgKTsgfQogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5 KCBjb25zdCBRUG9pbnQgJnBvaW50ICkgY29uc3QKICAgIHsgcmV0dXJuIGF2YWlsYWJsZUdlb21l dHJ5KCBzY3JlZW5OdW1iZXIoIHBvaW50ICkgKTsgfQoKICAgIHZvaWQgaW5zZXJ0Q2hpbGQoIFFP YmplY3QgKiApOwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50 ICplICk7Cgpwcml2YXRlOgogICAgUURlc2t0b3BXaWRnZXRQcml2YXRlICpkOwoKCiAgICBRRGVz a3RvcFdpZGdldCggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwogICAgUURlc2t0b3BXaWRnZXQg Jm9wZXJhdG9yPSggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwoKfTsKIyA0MyAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3Fhc2NpaWRpY3QuaCIgMQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2lu Y2x1ZGUvcWFzY2lpZGljdC5oIgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0 CgoKCiAgICAgICAgOiBwdWJsaWMgUUdEaWN0Cgp7CnB1YmxpYzoKICAgIFFBc2NpaURpY3QoaW50 IHNpemU9MTcsIGJvb2wgY2FzZVNlbnNpdGl2ZT1UUlVFLCBib29sIGNvcHlLZXlzPVRSVUUgKQog ICAgICAgIDogUUdEaWN0KHNpemUsQXNjaWlLZXksY2FzZVNlbnNpdGl2ZSxjb3B5S2V5cykge30K ICAgIFFBc2NpaURpY3QoIGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQgKSA6IFFHRGljdChkKSB7 fQogICB+UUFzY2lpRGljdCgpIHsgY2xlYXIoKTsgfQogICAgUUFzY2lpRGljdDx0eXBlPiAmb3Bl cmF0b3I9KGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQpCiAgICAgICAgICAgICAgICAgICAgICAg IHsgcmV0dXJuIChRQXNjaWlEaWN0PHR5cGU+JilRR0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAg dWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQoKTsgfQogICAgdWludCBz aXplKCkgY29uc3QgeyByZXR1cm4gUUdEaWN0OjpzaXplKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgp IGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQoKSA9PSAwOyB9CgogICAgdm9pZCBpbnNlcnQo IGNvbnN0IGNoYXIgKmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlkLDEpOyB9CiAgICB2 b2lkIHJlcGxhY2UoIGNvbnN0IGNoYXIgKmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlk LDIpOyB9CiAgICBib29sIHJlbW92ZSggY29uc3QgY2hhciAqayApIHsgcmV0dXJuIFFHRGljdDo6 cmVtb3ZlX2FzY2lpKGspOyB9CiAgICB0eXBlICp0YWtlKCBjb25zdCBjaGFyICprICkgeyByZXR1 cm4gKHR5cGUgKilRR0RpY3Q6OnRha2VfYXNjaWkoayk7IH0KICAgIHR5cGUgKmZpbmQoIGNvbnN0 IGNoYXIgKmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGlj dCopdGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y W10oIGNvbnN0IGNoYXIgKmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUg KikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KCiAgICB2b2lk IGNsZWFyKCkgeyBRR0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgcmVzaXplKCB1aW50IG4gKSB7 IFFHRGljdDo6cmVzaXplKG4pOyB9CiAgICB2b2lkIHN0YXRpc3RpY3MoKSBjb25zdCB7IFFHRGlj dDo6c3RhdGlzdGljcygpOyB9CgoKCgoKCgpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJdGVtKCBJ dGVtIGQgKTsKfTsKCgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFBc2NpaURpY3Q8dm9pZD46OmRl bGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8Y2xhc3MgdHlw ZT4gaW5saW5lIHZvaWQgUUFzY2lpRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rp b246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0 ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdE aWN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRQXNjaWlEaWN0SXRlcmF0b3IoY29uc3QgUUFzY2lp RGljdDx0eXBlPiAmZCkKICAgICAgICA6IFFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQog ICB+UUFzY2lpRGljdEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVy biBkaWN0LT5jb3VudCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBkaWN0 LT5jb3VudCgpID09IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFH RGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsg cmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpjdXJyZW50 KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIGNv bnN0IGNoYXIgKmN1cnJlbnRLZXkoKSBjb25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0 S2V5QXNjaWkoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdE aWN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0 dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKTsgfQogICAgdHlwZSAqb3Bl cmF0b3IrPSh1aW50IGopIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9y Kz0oaik7fQp9OwojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9u LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiIDEK IyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F0cmFuc2xhdG9yLmgiCmNsYXNzIFFU cmFuc2xhdG9yUHJpdmF0ZTsKCmNsYXNzIFFUcmFuc2xhdG9yTWVzc2FnZQp7CnB1YmxpYzoKICAg IFFUcmFuc2xhdG9yTWVzc2FnZSgpOwogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCBjb25zdCBjaGFy ICogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIHNvdXJjZVRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb21tZW50LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiB0cmFuc2xhdGlvbiA9IFFTdHJpbmc6Om51 bGwgKTsKICAgIFFUcmFuc2xhdG9yTWVzc2FnZSggUURhdGFTdHJlYW0gJiApOwogICAgUVRyYW5z bGF0b3JNZXNzYWdlKCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UgJiBtICk7CgogICAgUVRyYW5z bGF0b3JNZXNzYWdlICYgb3BlcmF0b3I9KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UgJiBtICk7 CgogICAgdWludCBoYXNoKCkgY29uc3QgeyByZXR1cm4gaDsgfQogICAgY29uc3QgY2hhciAqY29u dGV4dCgpIGNvbnN0IHsgcmV0dXJuIGN4OyB9CiAgICBjb25zdCBjaGFyICpzb3VyY2VUZXh0KCkg Y29uc3QgeyByZXR1cm4gc3Q7IH0KICAgIGNvbnN0IGNoYXIgKmNvbW1lbnQoKSBjb25zdCB7IHJl dHVybiBjbTsgfQoKICAgIHZvaWQgc2V0VHJhbnNsYXRpb24oIGNvbnN0IFFTdHJpbmcgJiB0cmFu c2xhdGlvbiApIHsgdG4gPSB0cmFuc2xhdGlvbjsgfQogICAgUVN0cmluZyB0cmFuc2xhdGlvbigp IGNvbnN0IHsgcmV0dXJuIHRuOyB9CgogICAgZW51bSBQcmVmaXggeyBOb1ByZWZpeCwgSGFzaCwg SGFzaENvbnRleHQsIEhhc2hDb250ZXh0U291cmNlVGV4dCwKICAgICAgICAgICAgICAgICAgSGFz aENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCB9OwogICAgdm9pZCB3cml0ZSggUURhdGFTdHJlYW0g JiBzLCBib29sIHN0cmlwID0gRkFMU0UsCiAgICAgICAgICAgICAgICBQcmVmaXggcHJlZml4ID0g SGFzaENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCApIGNvbnN0OwogICAgUHJlZml4IGNvbW1vblBy ZWZpeCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0 b3I9PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJh dG9yIT0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAh b3BlcmF0b3I9PSggbSApOyB9CiAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUVRyYW5zbGF0b3JN ZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFUcmFuc2xhdG9y TWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAhbS5vcGVyYXRvcjwoICp0aGlzICk7IH0K ICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdAog ICAgeyByZXR1cm4gbS5vcGVyYXRvcjwoICp0aGlzICk7IH0KICAgIGJvb2wgb3BlcmF0b3I+PSgg Y29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRv cjwoIG0gKTsgfQoKcHJpdmF0ZToKICAgIHVpbnQgaDsKICAgIFFDU3RyaW5nIGN4OwogICAgUUNT dHJpbmcgc3Q7CiAgICBRQ1N0cmluZyBjbTsKICAgIFFTdHJpbmcgdG47CgogICAgZW51bSBUYWcg eyBUYWdfRW5kID0gMSwgVGFnX1NvdXJjZVRleHQxNiwgVGFnX1RyYW5zbGF0aW9uLCBUYWdfQ29u dGV4dDE2LAogICAgICAgICAgICAgICBUYWdfSGFzaCwgVGFnX1NvdXJjZVRleHQsIFRhZ19Db250 ZXh0LCBUYWdfQ29tbWVudCwKICAgICAgICAgICAgICAgVGFnX09ic29sZXRlMSB9Owp9OwoKCmNs YXNzIFFUcmFuc2xhdG9yOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1l dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7 IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBx dF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2Jq ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBi b29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29s IHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0 YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkg eyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFP Ymo7CnB1YmxpYzoKICAgIFFUcmFuc2xhdG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFy ICogbmFtZSA9IDAgKTsKICAgIH5RVHJhbnNsYXRvcigpOwoKCiAgICBRU3RyaW5nIGZpbmQoIGNv bnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsIGNvbnN0IGNoYXIgKiBj b21tZW50ID0gMCApIGNvbnN0IHsKICAgICAgICByZXR1cm4gZmluZE1lc3NhZ2UoIGNvbnRleHQs IHNvdXJjZVRleHQsIGNvbW1lbnQgKS50cmFuc2xhdGlvbigpOwogICAgfQoKICAgIHZpcnR1YWwg UVRyYW5zbGF0b3JNZXNzYWdlIGZpbmRNZXNzYWdlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICkgY29u c3Q7CgogICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nICYgZmlsZW5hbWUsCiAgICAgICAgICAg ICAgIGNvbnN0IFFTdHJpbmcgJiBkaXJlY3RvcnkgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAg ICAgICBjb25zdCBRU3RyaW5nICYgc2VhcmNoX2RlbGltaXRlcnMgPSBRU3RyaW5nOjpudWxsLAog ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICYgc3VmZml4ID0gUVN0cmluZzo6bnVsbCApOwog ICAgYm9vbCBsb2FkKCBjb25zdCB1Y2hhciAqZGF0YSwgaW50IGxlbiApIHsKICAgICAgICBjbGVh cigpOwogICAgICAgIHJldHVybiBkb19sb2FkKCBkYXRhLCBsZW4gKTsKICAgIH0KCiAgICB2b2lk IGNsZWFyKCk7CgoKICAgIGVudW0gU2F2ZU1vZGUgeyBFdmVyeXRoaW5nLCBTdHJpcHBlZCB9OwoK ICAgIGJvb2wgc2F2ZSggY29uc3QgUVN0cmluZyAmIGZpbGVuYW1lLCBTYXZlTW9kZSBtb2RlID0g RXZlcnl0aGluZyApOwoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2Um ICk7CiAgICB2b2lkIGluc2VydCggY29uc3QgY2hhciAqY29udGV4dCwgY29uc3QgY2hhciAqc291 cmNlVGV4dCwgY29uc3QgUVN0cmluZyAmdHJhbnNsYXRpb24gKSB7CiAgICAgICAgaW5zZXJ0KCBR VHJhbnNsYXRvck1lc3NhZ2UoY29udGV4dCwgc291cmNlVGV4dCwgIiIsIHRyYW5zbGF0aW9uKSAp OwogICAgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgKTsKICAg IHZvaWQgcmVtb3ZlKCBjb25zdCBjaGFyICpjb250ZXh0LCBjb25zdCBjaGFyICpzb3VyY2VUZXh0 ICkgewogICAgICAgIHJlbW92ZSggUVRyYW5zbGF0b3JNZXNzYWdlKGNvbnRleHQsIHNvdXJjZVRl eHQsICIiKSApOwogICAgfQogICAgYm9vbCBjb250YWlucyggY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiBjb21tZW50ID0gMCApIGNvbnN0OwoKICAgIHZvaWQgc3F1ZWV6 ZSggU2F2ZU1vZGUgPSBFdmVyeXRoaW5nICk7CiAgICB2b2lkIHVuc3F1ZWV6ZSgpOwoKICAgIFFW YWx1ZUxpc3Q8UVRyYW5zbGF0b3JNZXNzYWdlPiBtZXNzYWdlcygpIGNvbnN0OwoKCiAgICBib29s IGlzRW1wdHkoKSBjb25zdDsKCnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFu c2xhdG9yICYgKTsKICAgIFFUcmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9y ICYgKTsKCgogICAgYm9vbCBkb19sb2FkKCBjb25zdCB1Y2hhciAqZGF0YSwgaW50IGxlbiApOwoK ICAgIFFUcmFuc2xhdG9yUHJpdmF0ZSAqIGQ7Cn07CiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKCgoKY2xhc3MgUVNlc3Npb25NYW5hZ2VyOwpjbGFz cyBRU3R5bGU7CmNsYXNzIFFUcmFuc2xhdG9yOwpjbGFzcyBRRXZlbnRMb29wOwojIDYzICIvdXNy L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCmNsYXNzIFFBcHBsaWNhdGlv bjsKZXh0ZXJuIFFBcHBsaWNhdGlvbiAqcUFwcDsKCgpjbGFzcyBRQXBwbGljYXRpb24gOiBwdWJs aWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQg aWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSgg UU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFBcHBs aWNhdGlvbiggaW50ICZhcmdjLCBjaGFyICoqYXJndik7CiAgICBRQXBwbGljYXRpb24oIGludCAm YXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgR1VJZW5hYmxlZCApOwogICAgZW51bSBUeXBlIHsgVHR5 LCBHdWlDbGllbnQsIEd1aVNlcnZlciB9OwogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNo YXIgKiphcmd2LCBUeXBlICk7CgogICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5KiBkcHksIEhBTkRM RSB2aXN1YWwgPSAwLCBIQU5ETEUgY21hcCA9IDAgKTsKICAgIFFBcHBsaWNhdGlvbiggRGlzcGxh eSAqZHB5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsCiAgICAgICAgICAgICAgICAgIEhBTkRMRSB2 aXN1YWwgPSAwLCBIQU5ETEUgY21hcD0gMCApOwoKICAgIHZpcnR1YWwgflFBcHBsaWNhdGlvbigp OwoKICAgIGludCBhcmdjKCkgY29uc3Q7CiAgICBjaGFyICoqYXJndigpIGNvbnN0OwoKICAgIFR5 cGUgdHlwZSgpIGNvbnN0OwoKCiAgICBzdGF0aWMgUVN0eWxlICZzdHlsZSgpOwogICAgc3RhdGlj IHZvaWQgc2V0U3R5bGUoIFFTdHlsZSogKTsKICAgIHN0YXRpYyBRU3R5bGUqIHNldFN0eWxlKCBj b25zdCBRU3RyaW5nJiApOwoKCiAgICBlbnVtIENvbG9yTW9kZSB7IE5vcm1hbENvbG9ycywgQ3Vz dG9tQ29sb3JzIH07CiAgICBzdGF0aWMgQ29sb3JNb2RlIGNvbG9yTW9kZSgpOwogICAgc3RhdGlj IHZvaWQgc2V0Q29sb3JNb2RlKCBRQXBwbGljYXRpb246OkNvbG9yTW9kZSApOwoKCiAgICBlbnVt IENvbG9yU3BlYyB7IE5vcm1hbENvbG9yPTAsIEN1c3RvbUNvbG9yPTEsIE1hbnlDb2xvcj0yIH07 CiAgICBzdGF0aWMgaW50IGNvbG9yU3BlYygpOwogICAgc3RhdGljIHZvaWQgc2V0Q29sb3JTcGVj KCBpbnQgKTsKCiAgICBzdGF0aWMgUUN1cnNvciAqb3ZlcnJpZGVDdXJzb3IoKTsKICAgIHN0YXRp YyB2b2lkIHNldE92ZXJyaWRlQ3Vyc29yKCBjb25zdCBRQ3Vyc29yICYsIGJvb2wgcmVwbGFjZT1G QUxTRSApOwogICAgc3RhdGljIHZvaWQgcmVzdG9yZU92ZXJyaWRlQ3Vyc29yKCk7CgogICAgc3Rh dGljIGJvb2wgaGFzR2xvYmFsTW91c2VUcmFja2luZygpOwogICAgc3RhdGljIHZvaWQgc2V0R2xv YmFsTW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCiAgICBzdGF0aWMgUVBhbGV0dGUgcGFs ZXR0ZSggY29uc3QgUVdpZGdldCogPSAwICk7CiAgICBzdGF0aWMgdm9pZCBzZXRQYWxldHRlKCBj b25zdCBRUGFsZXR0ZSAmLCBib29sIGluZm9ybVdpZGdldHM9RkFMU0UsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IDAgKTsKCiAgICBzdGF0 aWMgUUZvbnQgZm9udCggY29uc3QgUVdpZGdldCogPSAwICk7CiAgICBzdGF0aWMgdm9pZCBzZXRG b250KCBjb25zdCBRRm9udCAmLCBib29sIGluZm9ybVdpZGdldHM9RkFMU0UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IDAgKTsKICAgIHN0YXRp YyBRRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKTsKCiAgICBRV2lkZ2V0ICptYWluV2lkZ2V0KCkg Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbldpZGdldCggUVdpZGdldCAqICk7CiAgICB2 aXJ0dWFsIHZvaWQgcG9saXNoKCBRV2lkZ2V0ICogKTsKCiAgICBzdGF0aWMgUVdpZGdldExpc3Qg KmFsbFdpZGdldHMoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqdG9wTGV2ZWxXaWRnZXRzKCk7 CgogICAgc3RhdGljIFFEZXNrdG9wV2lkZ2V0ICpkZXNrdG9wKCk7CgogICAgc3RhdGljIFFXaWRn ZXQgKmFjdGl2ZVBvcHVwV2lkZ2V0KCk7CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlTW9kYWxX aWRnZXQoKTsKCiAgICBzdGF0aWMgUUNsaXBib2FyZCAqY2xpcGJvYXJkKCk7CgogICAgUVdpZGdl dCAqZm9jdXNXaWRnZXQoKSBjb25zdDsKICAgIFFXaWRnZXQgKmFjdGl2ZVdpbmRvdygpIGNvbnN0 OwoKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRBdCggaW50IHgsIGludCB5LCBib29sIGNoaWxk PUZBTFNFICk7CiAgICBzdGF0aWMgUVdpZGdldCAqd2lkZ2V0QXQoIGNvbnN0IFFQb2ludCAmLCBi b29sIGNoaWxkPUZBTFNFICk7CgogICAgc3RhdGljIFFFdmVudExvb3AgKmV2ZW50TG9vcCgpOwoK ICAgIGludCBleGVjKCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoKTsKICAgIHZvaWQgcHJvY2Vz c0V2ZW50cyggaW50IG1heHRpbWUgKTsKICAgIHZvaWQgcHJvY2Vzc09uZUV2ZW50KCk7CiAgICBi b29sIGhhc1BlbmRpbmdFdmVudHMoKTsKICAgIGludCBlbnRlcl9sb29wKCk7CiAgICB2b2lkIGV4 aXRfbG9vcCgpOwogICAgaW50IGxvb3BMZXZlbCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgZXhp dCggaW50IHJldGNvZGU9MCApOwoKICAgIHN0YXRpYyBib29sIHNlbmRFdmVudCggUU9iamVjdCAq cmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHBvc3RFdmVudCggUU9i amVjdCAqcmVjZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHNlbmRQb3N0 ZWRFdmVudHMoIFFPYmplY3QgKnJlY2VpdmVyLCBpbnQgZXZlbnRfdHlwZSApOwogICAgc3RhdGlj IHZvaWQgc2VuZFBvc3RlZEV2ZW50cygpOwoKICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBvc3RlZEV2 ZW50cyggUU9iamVjdCAqcmVjZWl2ZXIgKTsKCiAgICB2aXJ0dWFsIGJvb2wgbm90aWZ5KCBRT2Jq ZWN0ICosIFFFdmVudCAqICk7CgogICAgc3RhdGljIGJvb2wgc3RhcnRpbmdVcCgpOwogICAgc3Rh dGljIGJvb2wgY2xvc2luZ0Rvd24oKTsKCiAgICBzdGF0aWMgdm9pZCBmbHVzaFgoKTsKICAgIHN0 YXRpYyB2b2lkIGZsdXNoKCk7CiAgICBzdGF0aWMgdm9pZCBzeW5jWCgpOwoKICAgIHN0YXRpYyB2 b2lkIGJlZXAoKTsKCgogICAgdm9pZCBzZXREZWZhdWx0Q29kZWMoIFFUZXh0Q29kZWMgKiApOwog ICAgUVRleHRDb2RlYyogZGVmYXVsdENvZGVjKCkgY29uc3Q7CiAgICB2b2lkIGluc3RhbGxUcmFu c2xhdG9yKCBRVHJhbnNsYXRvciAqICk7CiAgICB2b2lkIHJlbW92ZVRyYW5zbGF0b3IoIFFUcmFu c2xhdG9yICogKTsKCiAgICBlbnVtIEVuY29kaW5nIHsgRGVmYXVsdENvZGVjLCBVbmljb2RlVVRG OCB9OwogICAgUVN0cmluZyB0cmFuc2xhdGUoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBrZXksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbW1lbnQgPSAwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVuY29kaW5nIGVuY29kaW5nID0gRGVmYXVsdENvZGVjICkgY29u c3Q7CgoKICAgIHN0YXRpYyB2b2lkIHNldFdpblN0eWxlSGlnaGxpZ2h0Q29sb3IoIGNvbnN0IFFD b2xvciAmYyApIHsKICAgICAgICBRUGFsZXR0ZSBwKCBwYWxldHRlKCkgKTsKICAgICAgICBwLnNl dENvbG9yKCBRQ29sb3JHcm91cDo6SGlnaGxpZ2h0LCBjICk7CiAgICAgICAgc2V0UGFsZXR0ZSgg cCwgVFJVRSk7CiAgICB9CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICZ3aW5TdHlsZUhpZ2hsaWdo dENvbG9yKCkgewogICAgICAgIHJldHVybiBwYWxldHRlKCkuYWN0aXZlKCkuaGlnaGxpZ2h0KCk7 CiAgICB9CgogICAgc3RhdGljIHZvaWQgc2V0RGVza3RvcFNldHRpbmdzQXdhcmUoIGJvb2wgKTsK ICAgIHN0YXRpYyBib29sIGRlc2t0b3BTZXR0aW5nc0F3YXJlKCk7CgogICAgc3RhdGljIHZvaWQg c2V0Q3Vyc29yRmxhc2hUaW1lKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgY3Vyc29yRmxhc2hUaW1l KCk7CgogICAgc3RhdGljIHZvaWQgc2V0RG91YmxlQ2xpY2tJbnRlcnZhbCggaW50ICk7CiAgICBz dGF0aWMgaW50IGRvdWJsZUNsaWNrSW50ZXJ2YWwoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRXaGVl bFNjcm9sbExpbmVzKCBpbnQgKTsKICAgIHN0YXRpYyBpbnQgd2hlZWxTY3JvbGxMaW5lcygpOwoK ICAgIHN0YXRpYyB2b2lkIHNldEdsb2JhbFN0cnV0KCBjb25zdCBRU2l6ZSAmICk7CiAgICBzdGF0 aWMgUVNpemUgZ2xvYmFsU3RydXQoKTsKCgogICAgc3RhdGljIHZvaWQgc2V0TGlicmFyeVBhdGhz KGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IGxpYnJhcnlQYXRo cygpOwogICAgc3RhdGljIHZvaWQgYWRkTGlicmFyeVBhdGgoY29uc3QgUVN0cmluZyAmKTsKICAg IHN0YXRpYyB2b2lkIHJlbW92ZUxpYnJhcnlQYXRoKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3Rh dGljIHZvaWQgc2V0U3RhcnREcmFnVGltZSggaW50IG1zICk7CiAgICBzdGF0aWMgaW50IHN0YXJ0 RHJhZ1RpbWUoKTsKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0RHJhZ0Rpc3RhbmNlKCBpbnQgbCAp OwogICAgc3RhdGljIGludCBzdGFydERyYWdEaXN0YW5jZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNl dFJldmVyc2VMYXlvdXQoIGJvb2wgYiApOwogICAgc3RhdGljIGJvb2wgcmV2ZXJzZUxheW91dCgp OwoKICAgIHN0YXRpYyBpbnQgaG9yaXpvbnRhbEFsaWdubWVudCggaW50IGFsaWduICk7CgogICAg c3RhdGljIGJvb2wgaXNFZmZlY3RFbmFibGVkKCBRdDo6VUlFZmZlY3QgKTsKICAgIHN0YXRpYyB2 b2lkIHNldEVmZmVjdEVuYWJsZWQoIFF0OjpVSUVmZmVjdCwgYm9vbCBlbmFibGUgPSBUUlVFICk7 CiMgMjMxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCiAgICB2 aXJ0dWFsIGJvb2wgeDExRXZlbnRGaWx0ZXIoIFhFdmVudCAqICk7CiAgICB2aXJ0dWFsIGludCB4 MTFDbGllbnRNZXNzYWdlKCBRV2lkZ2V0KiwgWEV2ZW50KiwgYm9vbCBwYXNzaXZlX29ubHkpOwog ICAgaW50IHgxMVByb2Nlc3NFdmVudCggWEV2ZW50KiApOwojIDI1NyAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5oIgogICAgYm9vbCBpc1Nlc3Npb25SZXN0b3JlZCgp IGNvbnN0OwogICAgUVN0cmluZyBzZXNzaW9uSWQoKSBjb25zdDsKICAgIFFTdHJpbmcgc2Vzc2lv bktleSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGNvbW1pdERhdGEoIFFTZXNzaW9uTWFuYWdl ciYgc20gKTsKICAgIHZpcnR1YWwgdm9pZCBzYXZlU3RhdGUoIFFTZXNzaW9uTWFuYWdlciYgc20g KTsKCgogICAgc3RhdGljIHZvaWQgY3JlYXRlX3hpbSgpOwogICAgc3RhdGljIHZvaWQgY2xvc2Vf eGltKCk7CiAgICBzdGF0aWMgYm9vbCB4MTFfYXBwbHlfc2V0dGluZ3MoKTsKCiAgICB2b2lkIHdh a2VVcEd1aVRocmVhZCgpOwoKCgoKCgoKcHJvdGVjdGVkOgogICAgdm9pZCBsYXN0V2luZG93Q2xv c2VkKCk7CiAgICB2b2lkIGFib3V0VG9RdWl0KCk7CiAgICB2b2lkIGd1aVRocmVhZEF3YWtlKCk7 CgpwdWJsaWMgOgogICAgdm9pZCBxdWl0KCk7CiAgICB2b2lkIGNsb3NlQWxsV2luZG93cygpOwoK CgoKCgpwcm90ZWN0ZWQ6CiAgICBib29sIGV2ZW50KFFFdmVudCAqKTsKCnByaXZhdGU6CiAgICB2 b2lkIGNvbnN0cnVjdCggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgVHlwZSApOwogICAgdm9pZCBp bml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsKICAgIHZvaWQgaW5pdF9wcmVjbWRsaW5lKCk7CiAg ICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50KiBhcmdjcHRyLCBjaGFyICoqIGFyZ3YgKTsKICAg IGJvb2wgaW50ZXJuYWxOb3RpZnkoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKIyAzMjEgIi91c3Iv bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAgIGludCBhcHBfYXJnYzsK ICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJvb2wgcXVpdF9ub3c7CiAgICBpbnQgcXVpdF9jb2Rl OwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0eWxlOwogICAgc3RhdGljIGludCBhcHBfY3NwZWM7 CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoKICAgIHN0YXRpYyBRRm9udCAqYXBwX2Zv bnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFwcF9jdXJzb3I7CgogICAgc3RhdGljIFFFdmVudExv b3AqIGV2ZW50bG9vcDsKICAgIHN0YXRpYyBpbnQgYXBwX3RyYWNraW5nOwogICAgc3RhdGljIGJv b2wgaXNfYXBwX3J1bm5pbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfY2xvc2luZzsKICAgIHN0 YXRpYyBib29sIGFwcF9leGl0X2xvb3A7CiAgICBzdGF0aWMgaW50IGxvb3BfbGV2ZWw7CiAgICBz dGF0aWMgUVdpZGdldCAqbWFpbl93aWRnZXQ7CiAgICBzdGF0aWMgUVdpZGdldCAqZm9jdXNfd2lk Z2V0OwogICAgc3RhdGljIFFXaWRnZXQgKmFjdGl2ZV93aW5kb3c7CiAgICBzdGF0aWMgYm9vbCBv YmV5X2Rlc2t0b3Bfc2V0dGluZ3M7CiAgICBzdGF0aWMgaW50IGN1cnNvcl9mbGFzaF90aW1lOwog ICAgc3RhdGljIGludCBtb3VzZV9kb3VibGVfY2xpY2tfdGltZTsKICAgIHN0YXRpYyBpbnQgd2hl ZWxfc2Nyb2xsX2xpbmVzOwoKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdWk7CiAgICBzdGF0aWMg Ym9vbCBhbmltYXRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBhbmltYXRlX3Rvb2x0aXA7CiAgICBz dGF0aWMgYm9vbCBhbmltYXRlX2NvbWJvOwogICAgc3RhdGljIGJvb2wgZmFkZV9tZW51OwogICAg c3RhdGljIGJvb2wgZmFkZV90b29sdGlwOwogICAgc3RhdGljIGJvb2wgd2lkZ2V0Q291bnQ7Cgog ICAgUVZhbHVlTGlzdDxRVHJhbnNsYXRvcio+ICp0cmFuc2xhdG9yczsKCiAgICBRU2Vzc2lvbk1h bmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcgc2Vzc2lvbl9pZDsKICAgIHN0YXRp YyBRU3RyaW5nKiBzZXNzaW9uX2tleTsKICAgIGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgog ICAgc3RhdGljIHZvaWQgeDExX2luaXRpYWxpemVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXpl IGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgKmFwcF9saWJwYXRoczsKCiAgICBz dGF0aWMgUUFzY2lpRGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNj aWlEaWN0PFFGb250PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBX aWRnZXRzOwogICAgYm9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVw KCBRV2lkZ2V0ICpwb3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7 CiAgICB2b2lkIHNldEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIGJv b2wgc2VuZFNwb250YW5lb3VzRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50 ICk7CiAgICBzdGF0aWMgdm9pZCByZW1vdmVQb3N0ZWRFdmVudCggUUV2ZW50ICogKTsKCiAgICBm cmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmll bmQgY2xhc3MgUUFjY2VsTWFuYWdlcjsKICAgIGZyaWVuZCBjbGFzcyBRRXZlbnQ7CiAgICBmcmll bmQgY2xhc3MgUVRyYW5zbGF0b3I7CiAgICBmcmllbmQgY2xhc3MgUUV2ZW50TG9vcDsKICAgIGZy aWVuZCB2b2lkIHF0X3VjbV9pbml0aWFsaXplKCBRQXBwbGljYXRpb24gKiApOwoKCgoKCgpwcml2 YXRlOgoKICAgIFFBcHBsaWNhdGlvbiggY29uc3QgUUFwcGxpY2F0aW9uICYgKTsKICAgIFFBcHBs aWNhdGlvbiAmb3BlcmF0b3I9KCBjb25zdCBRQXBwbGljYXRpb24gJiApOwoKfTsKCmlubGluZSBp bnQgUUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9hcmdjOwp9Cgpp bmxpbmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJldHVybiBhcHBf YXJndjsKfQojIDQyMiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FhcHBsaWNhdGlvbi5o IgppbmxpbmUgUUN1cnNvciAqUUFwcGxpY2F0aW9uOjpvdmVycmlkZUN1cnNvcigpCnsKICAgIHJl dHVybiBhcHBfY3Vyc29yOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246Omhhc0dsb2JhbE1v dXNlVHJhY2tpbmcoKQp7CiAgICByZXR1cm4gYXBwX3RyYWNraW5nID4gMDsKfQoKaW5saW5lIFFX aWRnZXQgKlFBcHBsaWNhdGlvbjo6bWFpbldpZGdldCgpIGNvbnN0CnsKICAgIHJldHVybiBtYWlu X3dpZGdldDsKfQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6Zm9jdXNXaWRnZXQoKSBj b25zdAp7CiAgICByZXR1cm4gZm9jdXNfd2lkZ2V0Owp9CgppbmxpbmUgUVdpZGdldCAqUUFwcGxp Y2F0aW9uOjphY3RpdmVXaW5kb3coKSBjb25zdAp7CiAgICByZXR1cm4gYWN0aXZlX3dpbmRvdzsK fQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6d2lkZ2V0QXQoIGNvbnN0IFFQb2ludCAm cCwgYm9vbCBjaGlsZCApCnsKICAgIHJldHVybiB3aWRnZXRBdCggcC54KCksIHAueSgpLCBjaGls ZCApOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OmluUG9wdXBNb2RlKCkgY29uc3QKewog ICAgcmV0dXJuIHBvcHVwV2lkZ2V0cyAhPSAwOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246 OmlzU2Vzc2lvblJlc3RvcmVkKCkgY29uc3QKewogICAgcmV0dXJuIGlzX3Nlc3Npb25fcmVzdG9y ZWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlvbjo6c2Vzc2lvbklkKCkgY29uc3QKewog ICAgcmV0dXJuIHNlc3Npb25faWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlvbjo6c2Vz c2lvbktleSgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2tleSA/ICpzZXNzaW9uX2tleSA6 IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBRU2l6ZSBRQXBwbGljYXRpb246Omdsb2JhbFN0cnV0 KCkKewogICAgcmV0dXJuIGFwcF9zdHJ1dDsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjpz ZW5kRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICkKeyBpZiAoIGV2ZW50 ICkgZXZlbnQtPnNwb250ID0gRkFMU0U7IHJldHVybiBxQXBwID8gcUFwcC0+bm90aWZ5KCByZWNl aXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OnNlbmRT cG9udGFuZW91c0V2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCApCnsgaWYg KCBldmVudCApIGV2ZW50LT5zcG9udCA9IFRSVUU7IHJldHVybiBxQXBwID8gcUFwcC0+bm90aWZ5 KCByZWNlaXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CiMgNDk3ICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCmlubGluZSBpbnQgUUFwcGxpY2F0aW9uOjpob3Jpem9u dGFsQWxpZ25tZW50KCBpbnQgYWxpZ24gKQp7CiAgICBhbGlnbiAmPSBBbGlnbkhvcml6b250YWxf TWFzazsKICAgIGlmICggYWxpZ24gPT0gQWxpZ25BdXRvICkgewogICAgICAgIGlmICggcmV2ZXJz ZUxheW91dCgpICkKICAgICAgICAgICAgYWxpZ24gPSBBbGlnblJpZ2h0OwogICAgICAgIGVsc2UK ICAgICAgICAgICAgYWxpZ24gPSBBbGlnbkxlZnQ7CiAgICB9CiAgICByZXR1cm4gYWxpZ247Cn0K IyAyMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRl L1R4cUVkaXRUYWJsZS5oIiAyCgoKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAxCiMgMTcgIi9ob21lL3Jlc2Vh cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0Lmgi CiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUv dHhjX21hcC5oIiAxCiMgMTYgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4 bWF0aC9pbmNsdWRlL3R4Y19tYXAuaCIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl Y3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfY29uZmlnLmgiIDEKIyAxOCAiL2hvbWUvcmVzZWFy Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX2NvbmZpZy5oIgojIDEg ImNvbmZpZy5oIiAxCiMgMTkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4 bWF0aC9pbmNsdWRlL3R4Y19jb25maWcuaCIgMgojIDE3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy L3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfbWFwLmgiIDIKIyAxOCAiL2hvbWUvcmVz ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQu aCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNs dWRlL3R4Y19zdHJpbmcuaCIgMQojIDE5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hvbWUvcmVzZWFy Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3ZlY3Rvci5oIiAxCiMg MTggIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL3R4 Y192ZWN0b3IuaCIKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdmVjdG9y IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIgMwoK IyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp b25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z KTsKfQojIDY3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvdmVjdG9yIiAyIDMK CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rv ci5oIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMu Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2Mr Ky8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA2NiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA3OCAiL3Vzci9sb2Nh bC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9y X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U cCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9h bGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2go MCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlw ZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwog IF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikK ICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9N X2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFf YWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv Y2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7 CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRv cl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikK ICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7 fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBf TV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwg X0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAg dm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlw ZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9j X2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBf VmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAg X1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jh c2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2gg PSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoK ICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv cmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwojIDE2NSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3Jf YmFzZTxfVHAsIF9BbGxvYz4KewoKIAoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf VHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90 eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5 cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwog IHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3JfdHlw ZT4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0 X3BvaW50ZXIsIHZlY3Rvcl90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl dHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigp IGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBp dGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29u c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz aCk7IH0KCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVy c2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdp bigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoK CgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh dG9yKGJlZ2luKCkpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29u c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNp emVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu KCkpOyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90 eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl KSAtIGJlZ2luKCkpOyB9CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVn aW4oKSA9PSBlbmQoKTsgfQojIDI4OSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f bikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQojIDMwMCAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVmZXJlbmNlIG9w ZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsg fQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChf X24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7 CiAgfQojIDMxNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Zl Y3Rvci5oIiAzCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2No ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KIyAzMjggIi91c3IvbG9jYWwvZ2NjMy4y L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBh dChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g KCp0aGlzKVtfX25dOyB9CgoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNp emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAg eyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVl KTsgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBh bGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf TV9zdGFydCwgX19uLCBfVHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv Yz4mIF9feCkKICAgIDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAg IHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IF9NX3N0YXJ0KTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg ICA6IF9CYXNlKF9fYSkKICAgICAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVn ZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbml0aWFs aXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKQogICAgICAgIHsKICAgICAgX01fc3RhcnQg PSBfTV9hbGxvY2F0ZShfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg X19uOwogICAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2 b2lkCiAgICAgICAgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9j YXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2Zp cnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAgfQoKICB+dmVjdG9yKCkKICB7 IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4m IG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwojIDM5MyAiL3Vzci9s b2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBy ZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBwb2ludGVyIF9fdG1w ID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1w OwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQojIDQyMSAiL3Vzci9sb2NhbC9nY2Mz LjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFs KTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh bCk7CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWdu KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh bCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9J bnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAg ICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1 ZV90eXBlKQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3Zh bCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2Fzc2ln bl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNl X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1 dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25f YXV4KF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y X3RhZyk7CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoK CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoK CgogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgoKCgoKICBjb25z dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQojIDQ4OCAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAg dm9pZAogIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICB7CiAgICBpZiAoX01fZmluaXNoICE9 IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwog ICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQo KSwgX194KTsKICB9CiMgNTE5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gp CiAgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2Fw KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQojIDUzOCAiL3Vzci9sb2NhbC9nY2MzLjIv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9f biA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf c3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmlu aXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5z ZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsg X19uOwogIH0KIyA1NjIgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yCiAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg IF9Db25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNl CiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOwogICAgcmV0dXJuIGJl Z2luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2 b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg X01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZAogICAgICAgIF9NX2lu c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3Zh bCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBzdGF0aWNfY2FzdDxz aXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PF9UcD4oX192YWwpKTsgfQoKICB0ZW1wbGF0ZTxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2go aXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fZmFs c2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAg ICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5 KCkpOwogICAgfQojIDYxMiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUg X19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194 KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9f biwgY29uc3QgX1RwJiBfX3gpOwojIDYyNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmlu aXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjQ1ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShp dGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAg ICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmlu aXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0K IyA2NjggIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF92ZWN0b3Iu aCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkg ewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgX0Rl c3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0g X19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CiMgNjg1ICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwg c2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxz ZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQojIDcw MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUs IF9UcCgpKTsgfQoKCgoKCgoKICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7 IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9p bnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2Fs bG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNo KC4uLikKICAgICAgewogICAgICAgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAg ICAgdGhyb3c7CiAgICAgIH0KICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRv cl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBm b3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2Vu ZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7 CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5z ZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m IF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXpl KCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp LCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21w YXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9y PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICBy ZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0o Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3Rvcjxf VHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90 eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewog ICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVn aW4oKSwgX194LmVuZCgpKTsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp OwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0 YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAg ICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAg ICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194 LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwog ICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhp czsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAs IF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f dmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4g X190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMp OwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCks IF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwg X19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigp LCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46 Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg ewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Qg JiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2Zp cnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAg ZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQK dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCk7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190 bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgX0Rl c3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVs c2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHko X19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAgX0Rlc3Ryb3koX19uZXdfZmluaXNoLCBl bmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNlIHsK ICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBzaXpl KCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6 X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlm IChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmlu aXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5 ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gg LSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5 OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwog ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3Np emUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAg IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25l d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0 aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQp OwogICAgICBfQ29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19u ZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAg ICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgIF9NX2RlYWxs b2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQog ICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0 LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICBfTV9lbmRf b2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2lu c2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5k X29mX3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEp KTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRv cihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0g MSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXpl X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f b2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3Rh cnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3 X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5p c2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go Li4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsK ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKTsKICAgICAgICB0aHJvdzsK ICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShf TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9f bmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0 b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAg IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewog ICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01f ZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRp YWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAg ICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9f b2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24s IF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIsIF9f eF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAg ICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gp OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2Ugewog ICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6 ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBp dGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwogICAgICBpdGVyYXRvciBf X25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkgewogICAgICAgIF9fbmV3X2Zpbmlz aCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7 CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNo LCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6 ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBj YXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdf ZmluaXNoKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVu KTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9N X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAg X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug PSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lk CnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9z ID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19w b3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNp emVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgaWYgKHNpemVfdHlw ZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRv ciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24p IHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gs IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3 YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7 CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5j ZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlk LCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNf YWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zpbmlz aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAg ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxz ZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25z dCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAg ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJh dG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdf ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQp OwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh c3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5p dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5p c2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJv eShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25l d19zdGFydC5iYXNlKCksIF9fbGVuKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3 X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0K ICB9Cn0KCn0KIyA3MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3ZlY3RvciIg MiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2J2ZWN0 b3IuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9idmVjdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9C aXRfdHlwZTsKICBlbnVtIHsgX01fd29yZF9iaXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUp KSB9OwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0 X3R5cGUgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlw ZSBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9y ZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29u c3QgeyByZXR1cm4gISEoKl9NX3AgJiBfTV9tYXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVy YXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVs c2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJl bmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0 aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNl JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBi b29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1 cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0g X01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRf cmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9 IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBib29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1 bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICog X194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9 CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2Jp dCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2 b2lkIF9NX2J1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9N X29mZnNldCA9IF9NX3dvcmRfYml0IC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9p ZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kg KyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19u ICUgX01fd29yZF9iaXQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5z aWduZWQgaW50KSBfX24gKyBfTV93b3JkX2JpdDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAg ICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3Ag PT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3Bl cmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g X01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5f TV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3Bl cmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g X19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jh c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9w ZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVy biAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25z dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kp IHsKICByZXR1cm4gX01fd29yZF9iaXQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01f b2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGlj IF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7 CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0 b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAw KSB7fQogIF9CaXRfaXRlcmF0b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQog ICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRv ciooKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0K ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAq dGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1w ID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJh dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7 CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9y JiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl IF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0 b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVy YXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAq dGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3Jb XShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5s aW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRl cmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRl cmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJl bmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29s KiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK CiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAg X0JpdF9jb25zdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9y KGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5f TV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwog IH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAg IGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1 cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVt cF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y LS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9k b3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9 KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhp czsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkg ewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0 b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJh dG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9p dGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3Rf aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNv bnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVy biAqKCp0aGlzICsgX19pKTsKICB9Cn07CgppbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVy YXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJl dHVybiBfX3ggKyBfX247IH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wg X19pc19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9j X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3Io X19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpw cm90ZWN0ZWQ6CiAgX0JpdF90eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJl dHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9f TV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQu X01fcCkKICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f c3RhcnQuX01fcCk7CiAgfQoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0Fs bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBf Qml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRf dHlwZSAqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9y PgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgog IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2Nh dG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9h bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9y X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9m aW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK ICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90 IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9i aXQgLSAxKS9fTV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAo X01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01f cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRv ciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3Jf YWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2Nf dHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0 b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7 CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9C YXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsg fQp9OwoKfQoKCgpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAg Y2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+ CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBz aXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog ICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29u c3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5 cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0 b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0 b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy ZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxs b2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdl dF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46 OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxv Yz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0 YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2lu ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6 CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUg KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3Eg KyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBp dGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2Vf dHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3Rv cmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9m aW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2Zpbmlz aDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkK ICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxs b2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlv biwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2Zp bmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0 ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9i aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7 CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2 b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0 ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu aXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykgewogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3Rh cnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQg X01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq X19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3Ig X19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg ICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBp ZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQo X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2Zp bmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAg ICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0 ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7 CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9N X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFs bG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9N X3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y KF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9y IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg Y29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N X2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmlu aXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z dCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAg IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o KSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0 dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBl IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAg c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAg c2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0 X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9v bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBk aWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2Vf dHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29u c3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9v Zl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlw ZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg fQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01f cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZl Y3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAg OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19u LCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9 IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAg IHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9N X2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2 ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2Nh dG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9N X3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29u c3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9y KCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVn aW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAg ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsK ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu aXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewog ICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw ZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn cmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShj b25zdCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7 CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2Nh dGUoKTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNv cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJl Z2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gp IHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwg X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBf X24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVn aW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihz aXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAg ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNw YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBf TV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9h c3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2ln bl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBf X2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIg IT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7 CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9 CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2ln bl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXpl X3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4g PCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBl bmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0 LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsK ICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlm IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2Fs bG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0 b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0g aXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g KyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJl bmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9u dCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0 dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAg IGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmlu aXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gp OwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAg c3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmlu aXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBf X3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y IF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBf X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2Zpbmlz aCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBf X3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxj bGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNl cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9f cG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0 ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50 ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2Vy dF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg IH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw ZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAo Y2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z aXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7 CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAg IGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f bik7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAg ICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwg MCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBj b3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg ICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f bGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0 ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2Vy dChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1f TV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAg ICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiAr IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJu IF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp dGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBf X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3Np emUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25l d19zaXplKSwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19z aXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9C aXRfdHlwZSAqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsg KytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVy YXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxv Yz4gYml0X3ZlY3RvcjsKCn0KIyA3MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L3ZlY3RvciIgMiAzCiMgMTkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4 bWF0aC9pbmNsdWRlL3R4Y192ZWN0b3IuaCIgMgojIDIwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy L3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hv bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVh bXMuaCIgMQojIDIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv aW5jbHVkZS90eGNfc3RyZWFtcy5oIgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysr LzMuMi9pb21hbmlwIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2lvbWFuaXAiIDMKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnVu Y3Rpb25hbCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mdW5j dGlvbmFsIiAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb21hbmlw IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfUmVzZXRpb3NmbGFncyB7IGlvc19iYXNl OjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1Jlc2V0aW9zZmxhZ3MKICByZXNldGlv c2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBfX21hc2spCiAgewogICAgX1Jlc2V0aW9zZmxhZ3Mg X194OwogICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2lj X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D aGFyVCxfVHJhaXRzPiYgX19pcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lz LnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7CiAgICAgIHJldHVybiBf X2lzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfUmVzZXRpb3NmbGFncyBfX2Yp CiAgICB7CiAgICAgIF9fb3Muc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNr KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldGlvc2ZsYWdzIHsgaW9z X2Jhc2U6OmZtdGZsYWdzIF9NX21hc2s7IH07CgogIGlubGluZSBfU2V0aW9zZmxhZ3MKICBzZXRp b3NmbGFncyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9TZXRpb3NmbGFncyBf X3g7CiAgICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNf aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lzLnNl dGYoX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08 X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh aXRzPiYgX19vcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19vcy5zZXRmKF9fZi5f TV9tYXNrKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldGJhc2UgeyBp bnQgX01fYmFzZTsgfTsKCiAgaW5saW5lIF9TZXRiYXNlCiAgc2V0YmFzZShpbnQgX19iYXNlKQog IHsKICAgIF9TZXRiYXNlIF9feDsKICAgIF9feC5fTV9iYXNlID0gX19iYXNlOwogICAgcmV0dXJu IF9feDsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsIF9TZXRiYXNlIF9fZikKICAgIHsK ICAgICAgX19pcy5zZXRmKF9fZi5fTV9iYXNlID09IDggPyBpb3NfYmFzZTo6b2N0IDoKICAgICAg ICAgICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAg IF9fZi5fTV9iYXNlID09IDE2ID8gaW9zX2Jhc2U6OmhleCA6CiAgICAgICAgICAgICAgaW9zX2Jh c2U6OmZtdGZsYWdzKDApLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgICAgcmV0dXJuIF9faXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9TZXRiYXNlIF9fZikKICAgIHsKICAg ICAgX19vcy5zZXRmKF9fZi5fTV9iYXNlID09IDggPyBpb3NfYmFzZTo6b2N0IDoKICAgICAgICAg ICAgICAgIF9fZi5fTV9iYXNlID09IDEwID8gaW9zX2Jhc2U6OmRlYyA6CiAgICAgICAgICAgICAg ICBfX2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgICAgaW9z X2Jhc2U6OmZtdGZsYWdzKDApLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgICAgcmV0dXJuIF9f b3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJ1Y3QgX1NldGZp bGwgeyBfQ2hhclQgX01fYzsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIF9TZXRmaWxsPF9DaGFyVD4KICAgIHNldGZpbGwoX0NoYXJUIF9fYykKICAgIHsKICAgICAg X1NldGZpbGw8X0NoYXJUPiBfX3g7CiAgICAgIF9feC5fTV9jID0gX19jOwogICAgICByZXR1cm4g X194OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9f ZikKICAgIHsKICAgICAgX19pcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9faXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlu bGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9TZXRmaWxsPF9DaGFyVD4gX19mKQogICAg ewogICAgICBfX29zLmZpbGwoX19mLl9NX2MpOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCgog IHN0cnVjdCBfU2V0cHJlY2lzaW9uIHsgaW50IF9NX247IH07CgogIGlubGluZSBfU2V0cHJlY2lz aW9uCiAgc2V0cHJlY2lzaW9uKGludCBfX24pCiAgewogICAgX1NldHByZWNpc2lvbiBfX3g7CiAg ICBfX3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh clQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+ JiBfX2lzLCBfU2V0cHJlY2lzaW9uIF9fZikKICAgIHsKICAgICAgX19pcy5wcmVjaXNpb24oX19m Ll9NX24pOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19v cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9fb3MucHJlY2lzaW9uKF9fZi5fTV9u KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldHcgeyBpbnQgX01fbjsg fTsKCiAgaW5saW5lIF9TZXR3CiAgc2V0dyhpbnQgX19uKQogIHsKICAgIF9TZXR3IF9feDsKICAg IF9feC5fTV9uID0gX19uOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m IF9faXMsIF9TZXR3IF9fZikKICAgIHsKICAgICAgX19pcy53aWR0aChfX2YuX01fbik7CiAgICAg IHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2Yp CiAgICB7CiAgICAgIF9fb3Mud2lkdGgoX19mLl9NX24pOwogICAgICByZXR1cm4gX19vczsKICAg IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9T ZXRmaWxsPGNoYXI+KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3Ry ZWFtJiwgX1NldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8 PChvc3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv cGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRwcmVjaXNpb24pOwogIGV4dGVybiB0ZW1wbGF0ZSBv c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0dyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdv c3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOwogIGV4dGVy biB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRpb3NmbGFncyk7 CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1Jlc2V0 aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVh bSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29z dHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh dG9yPDwod29zdHJlYW0mLCBfU2V0dyk7CgogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVy YXRvcj4+KGlzdHJlYW0mLCBfU2V0ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJl YW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRl IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4g dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVy biB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsK ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHcpOwog IGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRmaWxs PHdjaGFyX3Q+KTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJl YW0mLCBfU2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+ Pih3aXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m IG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3Ry ZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CiAgZXh0ZXJuIHRlbXBs YXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHcpOwp9CiMgMjIgIi9ob21l L3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL3R4Y19zdHJlYW1z LmgiIDIKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAx IDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL3NzdHJlYW0iIDMKCgoK Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGlj IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf dHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBi YXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9f c3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90 eXBlIF9fc2l6ZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01f c3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1 Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91 dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX3N0cmluZygpCiAgICAgIHsgX01fc3Ry aW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5n YnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgaW9z X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9zdHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5z aXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3Ry aW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYg aW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9f bGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9v dXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0gbWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQg LSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAgICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShf TV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4pOwogICAgICAgICAgfQogICAgICAgIGVsc2UK ICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3Ry KGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgewogICAgICAgIF9NX3N0cmluZyA9IF9f czsKICAgICAgICBfTV9zdHJpbmdidWZfaW5pdChfTV9tb2RlKTsKICAgICAgfQoKICAgIHByb3Rl Y3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fc3RyaW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5t b2RlIF9fbW9kZSkKICAgICAgewoKCgoKCiAgICAgICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcu c2l6ZSgpOwoKCgoKCiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gNTEyOwogICAgICAgIF9NX21v ZGUgPSBfX21vZGU7CiAgICAgICAgaWYgKF9NX21vZGUgJiAoaW9zX2Jhc2U6OmF0ZSB8IGlvc19i YXNlOjphcHApKQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgX01fYnVmX3NpemUpOwogICAg ICAgIGVsc2UKICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICB9CgoKICAgICAg dmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7CiAgICAgICAgaWYgKF9N X2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICByZXR1cm4gdHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKCpncHRyKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVy biB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAg ICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2 aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBl Ojplb2YoKSk7CgogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1Zihj aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19zICYm IF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgX01fc3RyaW5nID0gX19zdHJpbmdfdHlwZShf X3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICAgICAgfQog ICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAg IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAg ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz ZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBf X3NwLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6 aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIF9NX3Jl YWxseV9zeW5jKF9fc2l6ZV90eXBlIF9faSwgX19zaXplX3R5cGUgX19vKQogICAgICB7CiAgICAg ICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9NX3N0cmluZy5k YXRhKCkpOwogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwog ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAg X19zaXplX3R5cGUgX19sZW4gPSBfTV9zdHJpbmcuc2l6ZSgpOwoKICAgICAgICBfTV9idWYgPSBf X2Jhc2U7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICB0aGlzLT5zZXRnKF9fYmFz ZSwgX19iYXNlICsgX19pLCBfX2Jhc2UgKyBfX2xlbik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkK ICAgICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFzZSArIF9fbGVu KTsKICAgICAgICAgICAgX01fb3V0X2N1ciArPSBfX287CiAgICAgICAgICB9CiAgICAgICAgcmV0 dXJuIDA7CiAgICAgIH0KICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3Ry ZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp dHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7Cgog ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlw ZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fc3Ry aW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19t b2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0K CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdf dHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBf TV9zdHJpbmdidWYoX19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAgeyB0aGlzLT5p bml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICB+YmFzaWNfaXN0cmluZ3N0cmVhbSgpCiAgICAg IHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAg eyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0K CiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f c3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190 eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9OwoKCgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl ZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry aW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5 cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJpbmdidWY7Cgog ICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbShpb3Nf YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX29zdHJlYW1f dHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg eyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNp Y19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0KQog ICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2Rl IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9Cgog ICAgICB+YmFzaWNfb3N0cmluZ3N0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVm X3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0 cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAg ICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAg ICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCiAgICAgIHsgX01fc3Ry aW5nYnVmLnN0cihfX3MpOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmlu Z3N0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlw ZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry aW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNo YXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAg ICBfX3N0cmluZ2J1Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBs aWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbSA9IGlv c19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVs bCksIF9NX3N0cmluZ2J1ZihfX20pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsg fQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5n X3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl IF9fbSA9IGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pb3N0cmVhbV90 eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tKQogICAgICB7IHRoaXMtPmluaXQo Jl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19zdHJpbmdzdHJlYW0oKQogICAgICB7IH0K CgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAg ICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmlu Z2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYg X19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKfQoKCgoKCiMgMSAi L3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDEgMwoj IDM5ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIg MwoKIyAxICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMg NDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL3NzdHJlYW0udGNjIiAy IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp dHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OmludF90eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdGVvZiA9 IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSk7CiAgICAg IGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKCgoK ICAgICAgaWYgKF9fdGVzdHBvcykKICAgICAgICB7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6 OmVxKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSwgdGhpcy0+Z3B0cigpWy0xXSkKICAg ICAgICAgICAgICAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f TV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9N X2luX2N1cjsKICAgICAgICAgICAgICAqX01faW5fY3VyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf dHlwZShfX2MpOwogICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9N X2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUK ICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgb3ZlcmZs b3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl Ojplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo X19jLCBfX3JldCk7CiAgICAgIGJvb2wgX190ZXN0d3JpdGUgPSBfTV9vdXRfY3VyIDwgX01fYnVm ICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNl OjpvdXQ7CgoKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgewogICAgICAgICAgaWYgKCFf X3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3NpemVfdHlwZSBfX2xlbiA9 IG1heChfTV9idWZfc2l6ZSwgX01fYnVmX3NpemVfb3B0KTsKICAgICAgICAgICAgICBfX2xlbiAq PSAyOwoKICAgICAgICAgICAgICBpZiAoX190ZXN0d3JpdGUpCiAgICAgICAgICAgICAgICBfX3Jl dCA9IHRoaXMtPnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAg ICAgICAgZWxzZSBpZiAoX19sZW4gPD0gX01fc3RyaW5nLm1heF9zaXplKCkpCiAgICAgICAgICAg ICAgICB7CgogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcgPSB0aGlzLT5zdHIoKTsKICAgICAg ICAgICAgICAgICAgX01fc3RyaW5nLnJlc2VydmUoX19sZW4pOwogICAgICAgICAgICAgICAgICBf TV9idWZfc2l6ZSA9IF9fbGVuOwogICAgICAgICAgICAgICAgICBfTV9yZWFsbHlfc3luYyhfTV9p bl9jdXIgLSBfTV9pbl9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX291 dF9jdXIgLSBfTV9vdXRfYmVnKTsKICAgICAgICAgICAgICAgICAgKl9NX291dF9jdXIgPSB0cmFp dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9NX291dF9jdXJf bW92ZSgxKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNf dHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpwb3Nf dHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBz ZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6 Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShv ZmZfdHlwZSgtMSkpOwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9NX21v ZGUgJiBfX21vZGUpICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpvdXQg JiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3Rp biAmJiBfX3Rlc3RvdXQgJiYgX193YXkgIT0gaW9zX2Jhc2U6OmN1cjsKICAgICAgX190ZXN0aW4g Jj0gIShfX21vZGUgJiBpb3NfYmFzZTo6b3V0KTsKICAgICAgX190ZXN0b3V0ICY9ICEoX19tb2Rl ICYgaW9zX2Jhc2U6OmluKTsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSAmJiAoX190ZXN0aW4gfHwg X190ZXN0b3V0IHx8IF9fdGVzdGJvdGgpKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSog X19iZWcgPSBfTV9idWY7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fY3VyaSA9IF9fbnVsbDsKICAg ICAgICAgIGNoYXJfdHlwZSogX19jdXJvID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBlKiBf X2VuZGkgPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fZW5kbyA9IF9fbnVsbDsKCiAg ICAgICAgICBpZiAoX190ZXN0aW4gfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9fY3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBfX2VuZGkgPSB0aGlz LT5lZ3B0cigpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0IHx8IF9fdGVz dGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cm8gPSB0aGlzLT5wcHRyKCk7 CiAgICAgICAgICAgICAgX19lbmRvID0gdGhpcy0+ZXBwdHIoKTsKICAgICAgICAgICAgfQoKICAg ICAgICAgIG9mZl90eXBlIF9fbmV3b2ZmaSA9IDA7CiAgICAgICAgICBvZmZfdHlwZSBfX25ld29m Zm8gPSAwOwogICAgICAgICAgaWYgKF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2N1cmkgLSBfX2JlZzsKICAgICAgICAgICAg ICBfX25ld29mZm8gPSBfX2N1cm8gLSBfX2JlZzsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz ZSBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmVuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAg IF9fbmV3b2ZmaSA9IF9fZW5kaSAtIF9fYmVnOwogICAgICAgICAgICAgIF9fbmV3b2ZmbyA9IF9f ZW5kbyAtIF9fYmVnOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKChfX3Rlc3RpbiB8fCBf X3Rlc3Rib3RoKQogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSArIF9fb2ZmID49IDAgJiYgX19l bmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9fb2ZmOwogICAgICAgICAgICAg IF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg KChfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBfX25ld29mZm8gKyBf X29mZiA+PSAwICYmIF9fZW5kbyAtIF9fYmVnID49IF9fbmV3b2ZmbyArIF9fb2ZmKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbmV3b2ZmbyArIF9fb2ZmIC0g KF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19u ZXdvZmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+ CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpw b3NfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBzZWVrcG9zKHBvc190eXBlIF9fc3AsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCiAgICB7 CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKCiAgICAgIGlm IChfTV9idWZfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX3BvcyA9IF9fc3A7 CiAgICAgICAgICBjaGFyX3R5cGUqIF9fYmVnID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBl KiBfX2VuZCA9IF9fbnVsbDsKICAgICAgICAgIGJvb2wgX190ZXN0aW4gPSAoaW9zX2Jhc2U6Omlu ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlv c19iYXNlOjpvdXQgJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICAgICAgYm9vbCBfX3Rl c3Rib3RoID0gX190ZXN0aW4gJiYgX190ZXN0b3V0OwogICAgICAgICAgX190ZXN0aW4gJj0gIShf X21vZGUgJiBpb3NfYmFzZTo6b3V0KTsKICAgICAgICAgIF9fdGVzdG91dCAmPSAhKF9fbW9kZSAm IGlvc19iYXNlOjppbik7CgoKICAgICAgICAgIGJvb2wgX190ZXN0cG9zaSA9IGZhbHNlOwogICAg ICAgICAgYm9vbCBfX3Rlc3Rwb3NvID0gZmFsc2U7CiAgICAgICAgICBpZiAoX190ZXN0aW4gfHwg X190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYmVnID0gdGhpcy0+ZWJh Y2soKTsKICAgICAgICAgICAgICBfX2VuZCA9IHRoaXMtPmVncHRyKCk7CiAgICAgICAgICAgICAg aWYgKDAgPD0gX19wb3MgJiYgX19wb3MgPD0gX19lbmQgLSBfX2JlZykKICAgICAgICAgICAgICAg IF9fdGVzdHBvc2kgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0 IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2JlZyA9IHRoaXMt PnBiYXNlKCk7CiAgICAgICAgICAgICAgX19lbmQgPSBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAg ICAgICAgICAgICBpZiAoMCA8PSBfX3BvcyAmJiBfX3BvcyA8PSBfX2VuZCAtIF9fYmVnKQogICAg ICAgICAgICAgICAgX190ZXN0cG9zbyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm IChfX3Rlc3Rwb3NpIHx8IF9fdGVzdHBvc28pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoX190ZXN0cG9zaSkKICAgICAgICAgICAgICAgIF9NX2luX2N1ciA9IF9NX2luX2JlZyArIF9f cG9zOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rwb3NvKQogICAgICAgICAgICAgICAgX01fb3V0 X2N1cl9tb3ZlKChfX3BvcykgLSAoX01fb3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAg X19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZShfX3BvcykpOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi YXNpY19zdHJpbmdidWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmlu Z2J1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVh bTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hh cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD47Cn0KIyAzNjggIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAyIDMKIyAyNSAiL2hvbWUvcmVz ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVhbXMuaCIg MgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMSAz CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMwoKCgoK Cm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBj b3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0 ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0 cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNl OjpJbml0IF9faW9pbml0Owp9CiMgMjkgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMv My4yL3R4bWF0aC9pbmNsdWRlL3R4Y19zdHJlYW1zLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMu Mi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1 ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Jhc2ljX2ZpbGUuaCIgMSAzCiMgNDMg Ii91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2Jhc2ljX2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNz IF9fYmFzaWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAg ICAgYm9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxl KF9fY19sb2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlv c19iYXNlOjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAog ICAgICAgICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgog ICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwg aW50IF9fcHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3Blbihf X2NfZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxl KgogICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9v bCBfX2RlbCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBz eXNfdW5nZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAg ICBib29sCiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAg ICAgfl9fYmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3Qg Y2hhciogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0 bihjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVr b2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv dXQpOwoKICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAg ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3Nf YmFzZTo6b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3Iv bG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAyIDMKCgpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxj aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAg IHR5cGVkZWYgX19iYXNpY19maWxlPGNoYXI+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIHRyYWl0c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRl ZiBjb2RlY3Z0PGNoYXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7 CiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CgogICAgICBmcmll bmQgY2xhc3MgaW9zX2Jhc2U7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NrIF9NX2xv Y2s7CgoKICAgICAgX19maWxlX3R5cGUgX01fZmlsZTsKCgogICAgICBfX3N0YXRlX3R5cGUgX01f c3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfYmVnOwoKCiAgICAgIGJvb2wg X01fYnVmX2FsbG9jYXRlZDsKCgogICAgICBib29sIF9NX2xhc3Rfb3ZlcmZsb3dlZDsKCgoKICAg ICAgY2hhcl90eXBlKiBfTV9maWxlcG9zOwoKICAgIHB1YmxpYzoKCiAgICAgIGJhc2ljX2ZpbGVi dWYoKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2ZpbGVidWYoKQogICAgICB7CiAgICAg ICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAg ICAgfQoKCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbGUu aXNfb3BlbigpOyB9CgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgb3Blbihjb25zdCBjaGFy KiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpOwoKICAgICAgX19maWxlYnVmX3R5cGUq CiAgICAgIGNsb3NlKCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkCiAgICAgIF9NX2FsbG9j YXRlX2ludGVybmFsX2J1ZmZlcigpOwoKICAgICAgdm9pZAogICAgICBfTV9kZXN0cm95X2ludGVy bmFsX2J1ZmZlcigpOwoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMo KTsKIyAxNDAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAg ICAgIGludF90eXBlCiAgICAgIF9NX3VuZGVyZmxvd19jb21tb24oYm9vbCBfX2J1bXApOwoKICAg ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKSB7IHJldHVybiBfTV91bmRlcmZs b3dfY29tbW9uKGZhbHNlKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1Zmxvdygp IHsgcmV0dXJuIF9NX3VuZGVyZmxvd19jb21tb24odHJ1ZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50 X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKIyAx NjAgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAgICAgIHZp cnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9m KCkpOwojIDE3MCAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0iIDMK ICAgICAgaW50X3R5cGUKICAgICAgX01fcmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYyA9IF9U cmFpdHM6OmVvZigpKTsKCgoKICAgICAgdm9pZAogICAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFs KGNoYXJfdHlwZSosIHN0cmVhbXNpemUsIHN0cmVhbXNpemUmLCBzdHJlYW1zaXplJik7CgogICAg ICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywg c3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9m Zl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3Nf YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7Cgog ICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19wb3MsCiAgICAg ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i YXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpCiAgICAgIHsKICAgICAg ICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7 CgoKCiAgICAgICAgaWYgKF9fdGVzdHB1dCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIG9mZl90 eXBlIF9fb2ZmID0gX01fb3V0X2N1ciAtIF9NX291dF9lbmQ7CiAgICAgICAgICAgIF9NX3JlYWxs eV9vdmVyZmxvdygpOwogICAgICAgICAgICBpZiAoX19vZmYpCiAgICAgICAgICAgICAgX01fZmls ZS5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgICBfTV9maWxlLnN5bmMoKTsKICAgICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBm YWxzZTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkCiAgICAg IGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAg ICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAg ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKCiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAg ICAgICB7CiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9p bl9lbmQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fcyA9ICpfTV9pbl9jdXI7 CiAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAg ICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF9NX3BiYWNr X2Rlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAg ICBfX3JldCArPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24gLSBfX3JldCk7CiAg ICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAg ICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewog ICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlw ZTo6eHNwdXRuKF9fcywgX19uKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9vdXRwdXRf dW5zaGlmdCgpOwojIDI1MSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJl YW0iIDMKICAgICAgdm9pZAogICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7 CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICB0aGlzLT5zZXRn KF9NX2J1ZiwgX01fYnVmLCBfTV9idWYpOwogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6 Om91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOwogICAgICAgIF9NX2Zp bGVwb3MgPSBfTV9idWY7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVybWlu YXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21v ZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9z X2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9N X2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAg ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgX01fZmls ZXBvcyA9IF9NX2J1ZiArIF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2lzX2lu ZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKCiAg ICAgICAgaWYgKF9NX2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBp b3NfYmFzZTo6aW4pCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9iZWcgPT0gX01faW5fY3Vy ICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9z X2Jhc2U6Om91dCkKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgPT0gX01fb3V0X2N1 ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJu IF9fcmV0OwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1Zjxj aGFyPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8Y2hhcj46Ol9NX3VuZGVyZmxvd19jb21t b24oYm9vbCBfX2J1bXApOwoKCiAgdGVtcGxhdGU8PgogICAgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90 Pjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD46Ol9NX3VuZGVyZmxvd19jb21t b24oYm9vbCBfX2J1bXApOwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRl ZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwog ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pc3Ry ZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsK CiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfaWZzdHJlYW0oKQogICAgICA6IF9faXN0cmVhbV90 eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYp OyB9CiMgMzM3ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwog ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsIGlvc19i YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5 cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KCZfTV9m aWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKICAgICAg fmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgog ICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5 cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJu IF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hh ciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICB7 CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4p KQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoK ICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYu Y2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg ICAgfQogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9D aGFyVCxfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNp Y19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5 cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBw dWJsaWM6CgoKICAgICAgYmFzaWNfb2ZzdHJlYW0oKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9f bnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMg NDE0ICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBl eHBsaWNpdAogICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0fGlvc19i YXNlOjp0cnVuYykKICAgICAgOiBfX29zdHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkK ICAgICAgewogICAgICAgIHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9w ZW4oX19zLCBfX21vZGUpOwogICAgICB9CgogICAgICB+YmFzaWNfb2ZzdHJlYW0oKQogICAgICB7 IH0KCgoKCgoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAg eyByZXR1cm4gY29uc3RfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQoKCgoK CiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3Blbigp OyB9CiMgNDUwICIvdXNyL2xvY2FsL2djYzMuMi9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwog ICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQogICAg ICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6 b3V0KSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg fQoKCiAgICAgIHZvaWQKICAgICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxl YnVmLmNsb3NlKCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7 CiAgICAgIH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVm IGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faW9zX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19p b3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVi dWY7CgogICAgcHVibGljOgoKCiAgICAgIGJhc2ljX2ZzdHJlYW0oKQogICAgICA6IF9faW9zdHJl YW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxl YnVmKTsgfQojIDUwNiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0i IDMKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAg ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2Zp bGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAg dGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19mc3RyZWFtKCkK ICAgICAgeyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7 IH0KCgoKCgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlz X29wZW4oKTsgfQojIDU0MiAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2ZzdHJl YW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICBp b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK ICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlKSkKICAgICAg ICAgIHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKCiAgICAgIHZvaWQKICAg ICAgY2xvc2UoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAg ICAgICBzZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07Cn0KCgoKCgoj IDEgIi91c3IvbG9jYWwvZ2NjMy4yL2luY2x1ZGUvYysrLzMuMi9iaXRzL2ZzdHJlYW0udGNjIiAx IDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnN0cmVhbS50 Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX2J1 ZiAmJiBfTV9idWZfc2l6ZV9vcHQpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX3NpemUgPSBf TV9idWZfc2l6ZV9vcHQ7CgoKICAgICAgICAgIF9NX2J1ZiA9IG5ldyBjaGFyX3R5cGVbX01fYnVm X3NpemVdOwogICAgICAgICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiAgICAgICAgfQogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p ZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX2Rlc3Ryb3lfaW50 ZXJuYWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0ZWQpCiAgICAgICAg ewogICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsKICAgICAgICAgIF9NX2J1ZiA9IF9fbnVsbDsK ICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMtPnNldGco X19udWxsLCBfX251bGwsIF9fbnVsbCk7CiAgICAgICAgICB0aGlzLT5zZXRwKF9fbnVsbCwgX19u dWxsKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBiYXNp Y19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9NX2xvY2spLAogICAg X01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgp KSwKICAgIF9NX2J1Zl9hbGxvY2F0ZWQoZmFsc2UpLCBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2Up CiAgICB7IF9NX2J1Zl91bmlmaWVkID0gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwg X1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl KQogICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7CiAgICAgIGlmICgh dGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX2ZpbGUub3BlbihfX3MsIF9f bW9kZSk7CiAgICAgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAgICAgICAgICAgX01f bW9kZSA9IF9fbW9kZTsKCgogICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAg ICAgICAgICAgICAgaWYgKChfX21vZGUgJiBpb3NfYmFzZTo6YXRlKQogICAgICAgICAgICAgICAg ICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkgPCAwKQogICAgICAg ICAgICAgICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICAgICAgICBfX3JldCA9IHRoaXM7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmls ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBjbG9zZSgpCiAgICB7CiAgICAgIF9fZmlsZWJ1Zl90eXBl ICpfX3JldCA9IF9fbnVsbDsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu ZDsKICAgICAgICAgIGlmIChfX3Rlc3RwdXQKICAgICAgICAgICAgICAmJiB0cmFpdHNfdHlwZTo6 ZXFfaW50X3R5cGUoX01fcmVhbGx5X292ZXJmbG93KF9fZW9mKSwgX19lb2YpKQogICAgICAgICAg ICByZXR1cm4gX19yZXQ7CgoKICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUo MCk7CiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwogICAgICAgICAgX01f cGJhY2tfZGVzdHJveSgpOwojIDEzMyAiL3Vzci9sb2NhbC9nY2MzLjIvaW5jbHVkZS9jKysvMy4y L2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICAgIGlmIChfTV9maWxlLmNsb3NlKCkpCiAgICAg ICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICB9CgogICAgICBfTV9sYXN0X292ZXJmbG93ZWQg PSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVm PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2hvd21hbnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6 ZSBfX3JldCA9IC0xOwogICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjpp bjsKCiAgICAgIGlmIChfX3Rlc3RpbiAmJiB0aGlzLT5pc19vcGVuKCkpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgICAgX19yZXQgPSBfTV9p bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gMDsK ICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4g X19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUK ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5 cGUgX19pKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAo X190ZXN0aW4pCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX3Rlc3RwYiA9IF9NX2luX2JlZyA8 IF9NX2luX2N1cjsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9faSk7CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2ksIF9fcmV0KTsKCiAgICAgICAgICBpZiAoX190ZXN0cGIpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0 OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz LT5ncHRyKClbLTFdKTsKCgoKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3Rl cSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAg ICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRf Y3VyOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQog ICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQg PSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAg ICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3Jl YXRlKCk7CiAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAg ICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNlZWtvZmYoLTEsIGlv c19iYXNlOjpjdXIpOwogICAgICAgICAgICAgIHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgICAg ICAgIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp ZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpfTV9pbl9jdXIpKQogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAg ICAgICAgICAgKl9NX2luX2N1ciA9IF9fYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgIF9fcmV0ID0gX19pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAg ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG92ZXJm bG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3Vy IDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAm IGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAg IGlmIChfX3Rlc3RwdXQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfTV9vdXRfY3Vy X21vdmUoMSk7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2Mp OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ X01fcmVhbGx5X292ZXJmbG93KF9fYyk7CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxv d2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoX0NoYXJUKiBfX2li dWYsIHN0cmVhbXNpemUgX19pbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1z aXplJiBfX2VsZW4sIHN0cmVhbXNpemUmIF9fcGxlbikKICAgIHsKICAgICAgY29uc3QgbG9jYWxl IF9fbG9jID0gdGhpcy0+Z2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fY29kZWN2dF90eXBlJiBfX2N2 dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpOwoKICAgICAgaWYgKF9fY3Z0LmFs d2F5c19ub2NvbnYoKSAmJiBfX2lsZW4pCiAgICAgICAgewogICAgICAgICAgX19lbGVuICs9IF9N X2ZpbGUueHNwdXRuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9faWJ1ZiksIF9faWxlbik7CiAg ICAgICAgICBfX3BsZW4gKz0gX19pbGVuOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK CiAgICAgICAgICBpbnQgX19leHRfbXVsdGlwbGllciA9IF9fY3Z0LmVuY29kaW5nKCk7CiAgICAg ICAgICBpZiAoX19leHRfbXVsdGlwbGllciA9PSAtMSB8fCBfX2V4dF9tdWx0aXBsaWVyID09IDAp CiAgICAgICAgICAgIF9fZXh0X211bHRpcGxpZXIgPSBzaXplb2YoY2hhcl90eXBlKTsKICAgICAg ICAgIHN0cmVhbXNpemUgX19ibGVuID0gX19pbGVuICogX19leHRfbXVsdGlwbGllcjsKICAgICAg ICAgIGNoYXIqIF9fYnVmID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19i bGVuKSk7CiAgICAgICAgICBjaGFyKiBfX2JlbmQ7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9faWVuZDsKICAgICAgICAgIF9fcmVzX3R5cGUgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1 ciwgX19pYnVmLCBfX2lidWYgKyBfX2lsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2llbmQsIF9fYnVmLCBfX2J1ZiArIF9fYmxlbiwgX19iZW5kKTsKCiAgICAgICAg ICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCiAgICAgICAgICAgIF9fYmxlbiA9IF9f YmVuZCAtIF9fYnVmOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19ibGVuID0gMDsKCiAg ICAgICAgICBpZiAoX19ibGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19lbGVuICs9 IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX2JsZW4pOwogICAgICAgICAgICAgIF9fcGxlbiArPSBf X2JsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6 OnBhcnRpYWwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f aXJlc3VtZSA9IF9faWVuZDsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcmxlbiA9IF9NX291 dF9lbmQgLSBfX2llbmQ7CiAgICAgICAgICAgICAgX19yID0gX19jdnQub3V0KF9NX3N0YXRlX2N1 ciwgX19pcmVzdW1lLCBfX2lyZXN1bWUgKyBfX3JsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9faWVuZCwgX19idWYsIF9fYnVmICsgX19ibGVuLCBfX2JlbmQpOwogICAgICAgICAg ICAgIGlmIChfX3IgIT0gY29kZWN2dF9iYXNlOjplcnJvcikKICAgICAgICAgICAgICAgIF9fcmxl biA9IF9fYmVuZCAtIF9fYnVmOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f cmxlbiA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fcmxlbikKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX19lbGVuICs9IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX3JsZW4pOwog ICAgICAgICAgICAgICAgICBfX3BsZW4gKz0gX19ybGVuOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01f cmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAm JiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKICAgICAgYm9vbCBfX3Rlc3R1bmJ1ZmZlcmVkID0g X01fZmlsZS5pc19vcGVuKCkgJiYgIV9NX2J1Zl9zaXplOwoKICAgICAgaWYgKF9fdGVzdHB1dCB8 fCBfX3Rlc3R1bmJ1ZmZlcmVkKQogICAgICAgIHsKCiAgICAgICAgICBzdHJlYW1zaXplIF9fZWxl biA9IDA7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcGxlbiA9IDA7CgoKCgogICAgICAgICAgaWYg KF9NX2ZpbGVwb3MgJiYgX01fZmlsZXBvcyAhPSBfTV9vdXRfYmVnKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfTV9vdXRfYmVnIC0gX01fZmlsZXBvczsKICAg ICAgICAgICAgICBfTV9maWxlLnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIpOwogICAgICAg ICAgICB9CgoKCiAgICAgICAgICBpZiAoIV9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgICAgIF9N X2NvbnZlcnRfdG9fZXh0ZXJuYWwoX01fb3V0X2JlZywgX01fb3V0X2VuZCAtIF9NX291dF9iZWcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbGVuLCBfX3BsZW4pOwoKCgog ICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6 ZW9mKCkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fcGVuZGluZyA9 IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfTV9jb252ZXJ0 X3RvX2V4dGVybmFsKCZfX3BlbmRpbmcsIDEsIF9fZWxlbiwgX19wbGVuKTsKCgogICAgICAgICAg ICAgIGlmIChfX2VsZW4gPT0gX19wbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgaWYgKCFfTV9maWxlLnN5bmMoKSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9s YXN0X292ZXJmbG93ZWQgPSB0cnVlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2lj X2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJlYW1idWZfdHlwZSoKICAgIGJhc2ljX2Zp bGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uKQogICAgewogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSAmJiBfX3MgPT0gMCAm JiBfX24gPT0gMCkKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICBlbHNlIGlmIChf X3MgJiYgX19uKQogICAgICAgIHsKCgoKCgogICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9i dWZmZXIoKTsKCgogICAgICAgICAgX01fYnVmID0gX19zOwogICAgICAgICAgX01fYnVmX3NpemVf b3B0ID0gX01fYnVmX3NpemUgPSBfX247CiAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgp OwogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVy biB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBl CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla29mZihvZmZfdHlw ZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNlOjpvcGVubW9kZSBfX21v ZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsK ICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiBfTV9tb2RlICYgX19tb2RlKSAh PSAwOwogICAgICBib29sIF9fdGVzdG91dCA9IChpb3NfYmFzZTo6b3V0ICYgX01fbW9kZSAmIF9f bW9kZSkgIT0gMDsKCgogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlw ZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsKICAgICAgaWYgKF9fd2lkdGggPCAwKQogICAg ICAgIF9fd2lkdGggPSAwOwogICAgICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9f d2lkdGggPD0gMDsKCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkgJiYgIV9fdGVzdGZhaWwgJiYg KF9fdGVzdGluIHx8IF9fdGVzdG91dCkpCiAgICAgICAgewoKICAgICAgICAgIF9NX3BiYWNrX2Rl c3Ryb3koKTsKCiAgICAgICAgICBpZiAoX193YXkgIT0gaW9zX2Jhc2U6OmN1ciB8fCBfX29mZiAh PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19jb21wdXRlZF9vZmYg PSBfX3dpZHRoICogX19vZmY7CgogICAgICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5f Y3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2VuZDsKICAgICAgICAgICAgICBib29sIF9fdGVzdHB1 dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CgoKICAgICAgICAgICAg ICBpZiAoX190ZXN0cHV0IHx8IF9NX2xhc3Rfb3ZlcmZsb3dlZCkKICAgICAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgICAgIHRoaXMtPnN5bmMoKTsKCiAgICAgICAgICAgICAgICAgIF9NX291 dHB1dF91bnNoaWZ0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGVsc2UgaWYg KF9fdGVzdGdldCAmJiBfX3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAgICAgICAgX19j b21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0gX01fZmlsZXBvczsKCiAgICAgICAgICAgICAgX19y ZXQgPSBfTV9maWxlLnNlZWtvZmYoX19jb21wdXRlZF9vZmYsIF9fd2F5LCBfX21vZGUpOwogICAg ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgIH0KCgogICAgICAg ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yZXQgPSBfTV9maWxlLnNlZWtv ZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9fbW9kZSk7CiAgICAgICAgICAgICAgX19yZXQgKz0g bWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikgLSBfTV9maWxlcG9zOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9f cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAg ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Bvcyhwb3NfdHlwZSBf X3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKCgogICAgICByZXR1cm4gdGhp cy0+c2Vla29mZihvZmZfdHlwZShfX3BvcyksIGlvc19iYXNlOjpiZWcsIF9fbW9kZSk7CgogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgX01fb3V0cHV0X3Vuc2hp ZnQoKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpbWJ1 ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIo KSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBwYmFzZSgpOwoKICAgICAgaWYgKF9fdGVzdGJlZyAm JiBfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgIHsKICAgICAgICAgIF9NX2J1Zl9sb2Nh bGUgPSBfX2xvYzsKICAgICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAg fQoKCgoKCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgfQoKCgoKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmlsZWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg Y2xhc3MgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFz aWNfaWZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lmc3RyZWFt PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTxjaGFyPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD47Cn0KIyA1NjUgIi91c3IvbG9jYWwvZ2NjMy4yL2lu Y2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAyIDMKIyAzMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w cm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvdHhjX3N0cmVhbXMuaCIgMgojIDU0ICIvaG9tZS9y ZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS90eGNfc3RyZWFtcy5o IgogIGludCBnZXRSZWFkQ2hhcnMoc3RkOjpzdHJpbmdzdHJlYW0mIHNzdHIpOwojIDIxICIvaG9t ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0 ZVNldC5oIiAyCgoKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1h dGgvaW5jbHVkZS9UeERlYnVnRXhjZXB0LmgiIDEKIyAyOSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxl ci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhEZWJ1Z0V4Y2VwdC5oIgpjbGFzcyBUeERl YnVnRXhjZXB0IHsKCiAgcHVibGljOgoKCiAgICBUeERlYnVnRXhjZXB0KCk7CgoKICAgIFR4RGVi dWdFeGNlcHQoY29uc3Qgc3RkOjpzdHJpbmcmKTsKCgogICAgVHhEZWJ1Z0V4Y2VwdChjb25zdCBU eERlYnVnRXhjZXB0Jik7CgoKICAgIHZpcnR1YWwgflR4RGVidWdFeGNlcHQoKTsKCgogICAgVHhE ZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I9KGNvbnN0IFR4RGVidWdFeGNlcHQmKTsKCgogICAgc3RkOjpz dHJpbmcgZ2V0TWVzc2FnZSgpIGNvbnN0OwoKCgoKCiAgICBUeERlYnVnRXhjZXB0JiBvcGVyYXRv cjw8KGludCBpKTsKCgoKCgogICAgVHhEZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I8PChzaXplX3QgaSk7 CgoKCgoKICAgIFR4RGVidWdFeGNlcHQmIG9wZXJhdG9yPDwoZmxvYXQgZik7CgoKCgoKICAgIFR4 RGVidWdFeGNlcHQmIG9wZXJhdG9yPDwoZG91YmxlIGQpOwojIDg2ICIvaG9tZS9yZXNlYXJjaC9i bWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeERlYnVnRXhjZXB0LmgiCiAgVHhE ZWJ1Z0V4Y2VwdCYgb3BlcmF0b3I8PChzdGQ6OnN0cmluZyBzdHIpOwoKICBwcm90ZWN0ZWQ6CgoK ICAgIG11dGFibGUgc3RkOjpvc3RyaW5nc3RyZWFtKiBkZWJ1Z1N0cmVhbTsKCgoKCiAgcHJpdmF0 ZToKCgoKfTsKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIHMsIGNsYXNz IFR4RGVidWdFeGNlcHQmIGQpOwojIDI0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIiAyCiMgMSAiL2hvbWUvcmVzZWFy Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGFibGUuaCIg MQojIDIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk ZS9UeEF0dHJpYnV0YWJsZS5oIgpjbGFzcyBUeEF0dHJpYnV0ZVNldDsKCgoKCmNsYXNzIFR4QXR0 cmlidXRhYmxlIHsKCiAgcHVibGljOgoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldEZyb21BdHRy aWJTZXQoY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cykgPSAwOwoKCgoKCgogICAgdmlydHVhbCBU eEF0dHJpYnV0ZVNldCBnZXRBdHRyaWJTZXREZXNjKCkgY29uc3QgPSAwOwoKfTsKIyAyNSAiL2hv bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1 dGVTZXQuaCIgMgojIDM2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1h dGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgpjbGFzcyBUeEF0dHJpYnV0ZVNldCA6IHB1Ymxp YyBUeEF0dHJpYnV0YWJsZSB7CgogIHB1YmxpYzoKCgoKCgoKICAgIFR4QXR0cmlidXRlU2V0KHN0 ZDo6c3RyaW5nIHMpOwoKCgoKICAgIFR4QXR0cmlidXRlU2V0KGNvbnN0IFR4QXR0cmlidXRlU2V0 Jik7CgoKCgogICAgdmlydHVhbCB+VHhBdHRyaWJ1dGVTZXQoKTsKCgoKCgogICAgVHhBdHRyaWJ1 dGVTZXQmIG9wZXJhdG9yPShjb25zdCBUeEF0dHJpYnV0ZVNldCYpOwoKCgoKCgogICAgdmlydHVh bCB2b2lkIHNldEZyb21BdHRyaWJTZXQoY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cykgewogICAg ICBvcGVyYXRvcj0odHhzKTsKICAgIH0KIyA3OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHZpcnR1YWwgVHhB dHRyaWJ1dGVTZXQgZ2V0QXR0cmliU2V0RGVzYygpIGNvbnN0IHsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQojIDkwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv aW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRDbGFz c05hbWUoKSBjb25zdCB7IHJldHVybiAiVHhBdHRyaWJ1dGVTZXQiO30KCgoKCgoKCiAgICB2aXJ0 dWFsIHN0ZDo6c3RyaW5nIGdldEJhc2VDbGFzcygpIGNvbnN0IHsgcmV0dXJuICJUeEF0dHJpYnV0 ZVNldCI7fQoKCgoKCgogICAgdm9pZCBzZXRPYmplY3ROYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBu bSl7IG9iak5hbWUgPSBubTt9CgoKCgoKCiAgICBzdGQ6OnN0cmluZyBnZXRPYmplY3ROYW1lKCkg Y29uc3QgeyByZXR1cm4gb2JqTmFtZTt9CiMgMTIxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By b2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgdm9pZCBzZXRU eXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiB0cCl7IHR5cGUgPSB0cDt9CgoKCgoKCiAgICBzdGQ6OnN0 cmluZyBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTt9CiMgMTM5ICIvaG9tZS9yZXNlYXJj aC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgog ICAgYm9vbCBoYXNPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlvbk5hbWUpIGNvbnN0OwoK CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRPcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIG9wdGlv bk5hbWUsIGludCB2YWx1ZSk7CiMgMTU2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdGlvbihj b25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uTmFtZSkgY29uc3QgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7 CiMgMTY1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk ZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdGlvbkluZGV4KGNvbnN0IHN0ZDo6c3Ry aW5nJiBvcHRpb25OYW1lKSBjb25zdDsKIyAxNzUgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv amVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGFwcGVu ZE9wdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uTmFtZSwgaW50IHZhbHVlKTsKCgoKCgoK ICAgIGludCBnZXROdW1PcHRpb25zKCkgY29uc3QgewogICAgICByZXR1cm4gb3B0aW9ucy5zaXpl KCk7CiAgICB9CgoKCgogICAgdm9pZCBzZXRUb0ZpcnN0T3B0aW9uKCkgY29uc3QgeyBvcHRpb25J dGVyID0gb3B0aW9uSW5kaWNlcy0+YmVnaW4oKTt9CgoKCgoKCiAgICBzdGQ6OnBhaXI8c3RkOjpz dHJpbmcsIGludD4gZ2V0Q3VycmVudE9wdGlvbkFuZEJ1bXAoKSBjb25zdDsKIyAyMDkgIi9ob21l L3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRl U2V0LmgiCiAgICBib29sIGhhc1BhcmFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXJhbU5hbWUpIGNv bnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJhbShjb25zdCBzdGQ6OnN0cmluZyYg cGFyYW1OYW1lLCBkb3VibGUgdmFsdWUpOwojIDIyNiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w cm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGRvdWJsZSBn ZXRQYXJhbShjb25zdCBzdGQ6OnN0cmluZyYgcGFyYW1OYW1lKSBjb25zdCB0aHJvdyhUeERlYnVn RXhjZXB0KTsKCgoKCgoKICAgIGludCBnZXRQYXJhbUluZGV4KGNvbnN0IHN0ZDo6c3RyaW5nJiBw YXJhbU5hbWUpIGNvbnN0OwojIDI0MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z LjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGJvb2wgYXBwZW5kUGFyYW0o Y29uc3Qgc3RkOjpzdHJpbmcmIHBhcmFtTmFtZSwgZG91YmxlIHZhbHVlKTsKCgoKCgoKICAgIGlu dCBnZXROdW1QYXJhbXMoKSBjb25zdCB7IHJldHVybiBwYXJhbXMuc2l6ZSgpO30KCgoKCiAgICB2 b2lkIHNldFRvRmlyc3RQYXJhbSgpIGNvbnN0IHsgcGFyYW1JdGVyID0gcGFyYW1JbmRpY2VzLT5i ZWdpbigpO30KCgoKCiAgICBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIGRvdWJsZT4gZ2V0Q3VycmVu dFBhcmFtQW5kQnVtcCgpIGNvbnN0OwojIDI3MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGJvb2wgaGFzU3Ry aW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0 dWFsIHZvaWQgc2V0U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lLAogIGNvbnN0 IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CiMgMjkxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl Y3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjpzdHJpbmcg Z2V0U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdOYW1lKSBjb25zdAogIHRocm93KFR4 RGVidWdFeGNlcHQpOwojIDMwMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIv dHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIGludCBnZXRTdHJpbmdJbmRleChj b25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nTmFtZSkgY29uc3Q7CiMgMzExICIvaG9tZS9yZXNlYXJj aC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgog ICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZ05hbWUsCiAgY29u c3Qgc3RkOjpzdHJpbmcmIHZhbHVlKTsKCgoKCgoKICAgIGludCBnZXROdW1TdHJpbmdzKCkgY29u c3QgeyByZXR1cm4gc3RyaW5ncy5zaXplKCk7fQoKCgoKCiAgICB2b2lkIHNldFRvRmlyc3RTdHJp bmcoKSBjb25zdCB7IHN0cmluZ0l0ZXIgPSBzdHJpbmdJbmRpY2VzLT5iZWdpbigpO30KCgoKCgog ICAgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gZ2V0Q3VycmVudFN0cmluZ0Fu ZEJ1bXAoKSBjb25zdDsKIyAzNDIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y L3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGhhc09wdFZlYyhjb25z dCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCB2b2lk IHNldE9wdFZlYyhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBjb25zdCBzdGQ6OnZl Y3RvcjxpbnQ+JiB2YWx1ZSk7CiMgMzYwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8aW50 PiBnZXRPcHRWZWMoY29uc3Qgc3RkOjpzdHJpbmcmIG9wdFZlY05hbWUpCiAgY29uc3QgdGhyb3co VHhEZWJ1Z0V4Y2VwdCk7CiMgMzcwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu Mi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgaW50IGdldE9wdFZlY0luZGV4 KGNvbnN0IHN0ZDo6c3RyaW5nJiBvcHRWZWNOYW1lKSBjb25zdDsKIyAzODAgIi9ob21lL3Jlc2Vh cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0Lmgi CiAgICBib29sIGFwcGVuZE9wdFZlYyhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBj b25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiB2YWx1ZSk7CgoKCgoKCiAgICBpbnQgZ2V0TnVtT3B0VmVj cygpIGNvbnN0IHsKICAgICAgcmV0dXJuIG9wdFZlY3Muc2l6ZSgpOwogICAgfQoKCgoKICAgIHZv aWQgc2V0VG9GaXJzdE9wdFZlYygpIGNvbnN0IHsgb3B0VmVjSXRlciA9IG9wdFZlY0luZGljZXMt PmJlZ2luKCk7fQoKCgoKCgogICAgc3RkOjpwYWlyPCBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8 aW50PiA+CiAgZ2V0Q3VycmVudE9wdFZlY0FuZEJ1bXAoKSBjb25zdDsKIyA0MTQgIi9ob21lL3Jl c2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0 LmgiCiAgICBib29sIGhhc1BybVZlYyhjb25zdCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSkgY29u c3Q7CgoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldFBybVZlYyhjb25zdCBzdGQ6OnN0cmluZyYg cHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+JiB2YWx1ZSk7CiMgNDMyICIv aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJp YnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBnZXRQcm1WZWMoY29uc3Qgc3RkOjpz dHJpbmcmIHBybVZlY05hbWUpCiAgY29uc3QgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7CiMgNDQyICIv aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJp YnV0ZVNldC5oIgogICAgaW50IGdldFBybVZlY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm1W ZWNOYW1lKSBjb25zdDsKIyA0NTIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y L3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGFwcGVuZFBybVZlYyhj b25zdCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+ JiB2YWx1ZSk7CgoKCgoKCiAgICBpbnQgZ2V0TnVtUHJtVmVjcygpIGNvbnN0IHsKICAgICAgcmV0 dXJuIHBybVZlY3Muc2l6ZSgpOwogICAgfQoKCgoKICAgIHZvaWQgc2V0VG9GaXJzdFBybVZlYygp IGNvbnN0IHsgcHJtVmVjSXRlciA9IHBybVZlY0luZGljZXMtPmJlZ2luKCk7fQoKCgoKCgogICAg c3RkOjpwYWlyPCBzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8ZG91YmxlPiA+CiAgZ2V0Q3VycmVu dFBybVZlY0FuZEJ1bXAoKSBjb25zdDsKIyA0ODYgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv amVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAgICBib29sIGhhc1N0 clZlYyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSkgY29uc3Q7CgoKCgoKCgogICAgdmly dHVhbCB2b2lkIHNldFN0clZlYyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSwKICBjb25z dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHZhbHVlKTsKIyA1MDQgIi9ob21lL3Jlc2VhcmNo L2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4QXR0cmlidXRlU2V0LmgiCiAg ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2V0U3RyVmVjKGNvbnN0IHN0ZDo6c3RyaW5nJiBz dHJWZWNOYW1lKQogIGNvbnN0IHRocm93KFR4RGVidWdFeGNlcHQpOwojIDUxNCAiL2hvbWUvcmVz ZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQu aCIKICAgIGludCBnZXRTdHJWZWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyYgc3RyVmVjTmFtZSkg Y29uc3Q7CiMgNTI0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgv aW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgYm9vbCBhcHBlbmRTdHJWZWMoY29uc3Qgc3Rk OjpzdHJpbmcmIHN0clZlY05hbWUsCiAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n PiYgdmFsdWUpOwoKCgoKCgogICAgaW50IGdldE51bVN0clZlY3MoKSBjb25zdCB7CiAgICAgIHJl dHVybiBzdHJWZWNzLnNpemUoKTsKICAgIH0KCgoKCiAgICB2b2lkIHNldFRvRmlyc3RTdHJWZWMo KSBjb25zdCB7IHN0clZlY0l0ZXIgPSBzdHJWZWNJbmRpY2VzLT5iZWdpbigpO30KCgoKCgoKICAg IHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ID4KICBnZXRD dXJyZW50U3RyVmVjQW5kQnVtcCgpIGNvbnN0OwojIDU1NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxl ci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHN0ZDo6 dmVjdG9yPHN0ZDo6c3RyaW5nPiBnZXROYW1lcygpIGNvbnN0IHsgcmV0dXJuIG5hbWVzO30KIyA1 NjcgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4 QXR0cmlidXRlU2V0LmgiCiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ2V0VHlwZXMoKSB7 IHJldHVybiB0eXBlczt9CiMgNTc2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu Mi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgc3RkOjp2ZWN0b3I8aW50PiBn ZXRJbnRUeXBlcygpOwojIDU4NSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIv dHhtYXRoL2luY2x1ZGUvVHhBdHRyaWJ1dGVTZXQuaCIKICAgIHZvaWQgZW1wdHkoKXsgaWYocHVi bGljUmVzaGFwZSkgZW1wdHlOb0NoaygpOyB9CgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0 b3I8KGNvbnN0IFR4QXR0cmlidXRlU2V0JiBhKSBjb25zdCB7CiAgICAgIHJldHVybiBnZXRPYmpl Y3ROYW1lKCkgPCBhLmdldE9iamVjdE5hbWUoKTsKICAgIH0KCgoKCgoKICAgIHZpcnR1YWwgYm9v bCBvcGVyYXRvcj09KGNvbnN0IFR4QXR0cmlidXRlU2V0JiBhKSBjb25zdCB7CiAgICAgIHJldHVy biBnZXRPYmplY3ROYW1lKCkgPT0gYS5nZXRPYmplY3ROYW1lKCk7CiAgICB9CgoKCgoKCiAgICB2 aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUeEF0dHJpYnV0ZVNldCYgYSkgY29uc3Qgewog ICAgICByZXR1cm4gISBvcGVyYXRvcj09KGEpOwogICAgfQoKCgoKCgoKICAgIHZpcnR1YWwgdm9p ZCB3cml0ZShzdGQ6Om9zdHJlYW0mIG9zdHIsIGJvb2wgZHVtcD10cnVlKSBjb25zdDsKCgoKCgoK ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJvZHkoc3RkOjpvc3RyZWFtJiBvc3RyLCBib29sIGR1bXA9 dHJ1ZSwKICBib29sIHdyaXRlSGVhZD10cnVlKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9p ZCB3cml0ZVRhaWwoc3RkOjpvc3RyZWFtJiBvc3RyKSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwg c3RkOjpzdHJpbmcgcmVhZChzdGQ6OmlzdHJlYW0mIGlzdHIpOwoKICBwcm90ZWN0ZWQ6CgogICAg c3RhdGljIHZvaWQgaW5kZW50IChzdGQ6Om9zdHJlYW0mIG91dCk7CgogICAgc3RhdGljIGludCBp bmRlbnRhdGlvbjsKCgoKCgoKCiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHJlYWRUeXBlKHN0ZDo6 aXN0cmVhbSYgaXN0ciwKICBjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSk7CgoKCgoKCgogICAgdmly dHVhbCBib29sIHBhcnNlTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSk7CgoKCgoKCgogICAg dmlydHVhbCBzdGQ6OnN0cmluZyB0cmltTGluZShjb25zdCBzdGQ6OnN0cmluZyYgbGluZSk7CiMg Njg0ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9U eEF0dHJpYnV0ZVNldC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBnZXRMaW5lKHN0ZDo6aXN0 cmVhbSYgaXN0cikgdGhyb3coVHhEZWJ1Z0V4Y2VwdCk7CiMgNjk0ICIvaG9tZS9yZXNlYXJjaC9i bWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEF0dHJpYnV0ZVNldC5oIgogICAg dmlydHVhbCBzaXplX3QgZ2V0TnVtQ2hhcnMoY29uc3Qgc3RkOjpzdHJpbmcmIHMsIGNoYXIgYyl7 CiAgICAgIHNpemVfdCBudW09MDsKICAgICAgZm9yKHNpemVfdCBpPTA7IGk8cy5sZW5ndGgoKTsg KytpKSBpZihzW2ldID09IGMpIG51bSsrOwogICAgICByZXR1cm4gbnVtOwogICAgfQoKCgoKCgoK ICAgIHZpcnR1YWwgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4KICBnZXROYW1l QW5kVmFsdWVTdHIoc3RkOjpzdHJpbmcgbGluZSk7CgoKCgoKICAgIFR4QXR0cmlidXRlU2V0KCk7 CiMgNzI1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk ZS9UeEF0dHJpYnV0ZVNldC5oIgogICAgYm9vbCBhcHBlbmRPcHRpb25Ob0Noayhjb25zdCBzdGQ6 OnN0cmluZyYgb3B0aW9uTmFtZSwgaW50IHZhbHVlKTsKCgoKCgoKCiAgICBib29sIGFwcGVuZFBh cmFtTm9DaGsoY29uc3Qgc3RkOjpzdHJpbmcmIHBhcmFtTmFtZSwgZG91YmxlIHZhbHVlKTsKCgoK CgoKCiAgICBib29sIGFwcGVuZFN0cmluZ05vQ2hrKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmdO YW1lLAogIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRP cHRWZWNOb0Noayhjb25zdCBzdGQ6OnN0cmluZyYgb3B0VmVjTmFtZSwKICBjb25zdCBzdGQ6OnZl Y3RvcjxpbnQ+JiB2YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRQcm1WZWNOb0Noayhjb25z dCBzdGQ6OnN0cmluZyYgcHJtVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+JiB2 YWx1ZSk7CgoKCgoKCgogICAgYm9vbCBhcHBlbmRTdHJWZWNOb0Noayhjb25zdCBzdGQ6OnN0cmlu ZyYgc3RyVmVjTmFtZSwKICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHZhbHVlKTsK CgoKCgogICAgdmlydHVhbCB2b2lkIGVtcHR5Tm9DaGsoKTsKCgoKCiAgICBib29sIHB1YmxpY1Jl c2hhcGU7CgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBzdGQ6Omxlc3M8c3Rk OjpzdHJpbmc+ID4qCiAgb3B0aW9uSW5kaWNlczsKCgoKCiAgICBib29sIG9wdGlvbkluZGljZXNP d25lcjsKCgoKICAgIHN0ZDo6dmVjdG9yPGludD4gb3B0aW9uczsKCgoKCiAgICBtdXRhYmxlIHN0 ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRl cmF0b3Igb3B0aW9uSXRlcjsKCgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBz dGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIHBhcmFtSW5kaWNlczsKCgoKCiAgICBib29sIHBhcmFt SW5kaWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBwYXJhbXM7CgoKCgogICAg bXV0YWJsZSBzdGQ6Om1hcDwgc3RkOjpzdHJpbmcsIGludCwKICBzdGQ6Omxlc3M8c3RkOjpzdHJp bmc+ID46Oml0ZXJhdG9yIHBhcmFtSXRlcjsKCgoKCgoKICAgIHN0ZDo6bWFwPCBzdGQ6OnN0cmlu ZywgaW50LCBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIHN0cmluZ0luZGljZXM7CgoKCgogICAg Ym9vbCBzdHJpbmdJbmRpY2VzT3duZXI7CgoKCiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g c3RyaW5nczsKCgoKCiAgICBtdXRhYmxlIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0 ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRlcmF0b3Igc3RyaW5nSXRlcjsKCgoKCgoKICAgIHN0 ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LCBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID4qIG9wdFZl Y0luZGljZXM7CgoKCgogICAgYm9vbCBvcHRWZWNJbmRpY2VzT3duZXI7CgoKCiAgICBzdGQ6OnZl Y3Rvcjwgc3RkOjp2ZWN0b3I8aW50PiA+IG9wdFZlY3M7CgoKCgogICAgbXV0YWJsZSBzdGQ6Om1h cDwgc3RkOjpzdHJpbmcsIGludCwKICBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+ID46Oml0ZXJhdG9y IG9wdFZlY0l0ZXI7CgoKCgoKCiAgICBzdGQ6Om1hcDwgc3RkOjpzdHJpbmcsIGludCwgc3RkOjps ZXNzPHN0ZDo6c3RyaW5nPiA+KiBwcm1WZWNJbmRpY2VzOwoKCgoKICAgIGJvb2wgcHJtVmVjSW5k aWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPGRvdWJsZT4gPiBwcm1W ZWNzOwoKCgoKICAgIG11dGFibGUgc3RkOjptYXA8IHN0ZDo6c3RyaW5nLCBpbnQsCiAgc3RkOjps ZXNzPHN0ZDo6c3RyaW5nPiA+OjppdGVyYXRvciBwcm1WZWNJdGVyOwoKCgoKCgogICAgc3RkOjpt YXA8IHN0ZDo6c3RyaW5nLCBpbnQsIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPiogc3RyVmVjSW5k aWNlczsKCgoKCiAgICBib29sIHN0clZlY0luZGljZXNPd25lcjsKCgoKICAgIHN0ZDo6dmVjdG9y PCBzdGQ6OnZlY3Rvcjwgc3RkOjpzdHJpbmc+ID4gc3RyVmVjczsKCgoKCiAgICBtdXRhYmxlIHN0 ZDo6bWFwPCBzdGQ6OnN0cmluZywgaW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRl cmF0b3Igc3RyVmVjSXRlcjsKCgoKCiAgICBjaGFyIGNvbW1lbnRDaGFyOwoKCgoKICAgIHNpemVf dCBsaW5lTnVtOwoKCgoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBuYW1lczsKCgoKCiAg ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdHlwZXM7CgogIHByaXZhdGU6CgoKCiAgICB2b2lk IHNldHVwKCk7CgogIHByaXZhdGU6CiAgICBzdGQ6OnN0cmluZyBvYmpOYW1lOwogICAgc3RkOjpz dHJpbmcgdHlwZTsKCn07CgoKCgppbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8IChzdGQ6 Om9zdHJlYW0mIG9zdHIsCiAgY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHR4cCkgewogIHR4cC53cml0 ZShvc3RyKTsKICByZXR1cm4gb3N0cjsKfQoKCgoKaW5saW5lIHN0ZDo6aXN0cmVhbSYgb3BlcmF0 b3I+PihzdGQ6OmlzdHJlYW0mIGlzdHIsIFR4QXR0cmlidXRlU2V0JiB0eHApewogIHR4cC5yZWFk KGlzdHIpOwogIHJldHVybiBpc3RyOwp9CiMgMjQgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv amVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMgoKCiMgMSAiL2hvbWUv cmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRl bS5oIiAxCiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv aW5jbHVkZS9UeHFUYWJsZUl0ZW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cXZhcmlhbnQuaCIgMQojIDQ2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhcmlhbnQu aCIKY2xhc3MgUVN0cmluZzsKY2xhc3MgUUNTdHJpbmc7CmNsYXNzIFFGb250OwpjbGFzcyBRUGl4 bWFwOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFSZWN0OwpjbGFzcyBRUG9pbnQ7CmNsYXNzIFFJbWFn ZTsKY2xhc3MgUVNpemU7CmNsYXNzIFFDb2xvcjsKY2xhc3MgUVBhbGV0dGU7CmNsYXNzIFFDb2xv ckdyb3VwOwpjbGFzcyBRSWNvblNldDsKY2xhc3MgUURhdGFTdHJlYW07CmNsYXNzIFFQb2ludEFy cmF5OwpjbGFzcyBRUmVnaW9uOwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRQ3Vyc29yOwpjbGFzcyBR U3RyaW5nTGlzdDsKY2xhc3MgUVNpemVQb2xpY3k7CmNsYXNzIFFEYXRlOwpjbGFzcyBRVGltZTsK Y2xhc3MgUURhdGVUaW1lOwpjbGFzcyBRQml0QXJyYXk7CmNsYXNzIFFLZXlTZXF1ZW5jZTsKY2xh c3MgUVBlbjsKCmNsYXNzIFFWYXJpYW50OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFWYWx1 ZUxpc3Q7CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjsK dGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFWYWx1ZUxpc3ROb2RlOwp0ZW1wbGF0ZSA8Y2xhc3Mg S2V5LCBjbGFzcyBUPiBjbGFzcyBRTWFwOwp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPiBj bGFzcyBRTWFwQ29uc3RJdGVyYXRvcjsKCgpjbGFzcyBRVmFyaWFudAp7CnB1YmxpYzoKICAgIGVu dW0gVHlwZSB7CiAgICAgICAgSW52YWxpZCwKICAgICAgICBNYXAsCiAgICAgICAgTGlzdCwKICAg ICAgICBTdHJpbmcsCiAgICAgICAgU3RyaW5nTGlzdCwKICAgICAgICBGb250LAogICAgICAgIFBp eG1hcCwKICAgICAgICBCcnVzaCwKICAgICAgICBSZWN0LAogICAgICAgIFNpemUsCiAgICAgICAg Q29sb3IsCiAgICAgICAgUGFsZXR0ZSwKICAgICAgICBDb2xvckdyb3VwLAogICAgICAgIEljb25T ZXQsCiAgICAgICAgUG9pbnQsCiAgICAgICAgSW1hZ2UsCiAgICAgICAgSW50LAogICAgICAgIFVJ bnQsCiAgICAgICAgQm9vbCwKICAgICAgICBEb3VibGUsCiAgICAgICAgQ1N0cmluZywKICAgICAg ICBQb2ludEFycmF5LAogICAgICAgIFJlZ2lvbiwKICAgICAgICBCaXRtYXAsCiAgICAgICAgQ3Vy c29yLAogICAgICAgIFNpemVQb2xpY3ksCiAgICAgICAgRGF0ZSwKICAgICAgICBUaW1lLAogICAg ICAgIERhdGVUaW1lLAogICAgICAgIEJ5dGVBcnJheSwKICAgICAgICBCaXRBcnJheSwKICAgICAg ICBLZXlTZXF1ZW5jZSwKICAgICAgICBQZW4KICAgIH07CgogICAgUVZhcmlhbnQoKTsKICAgIH5R VmFyaWFudCgpOwogICAgUVZhcmlhbnQoIGNvbnN0IFFWYXJpYW50JiApOwoKICAgIFFWYXJpYW50 KCBRRGF0YVN0cmVhbSYgcyApOwoKICAgIFFWYXJpYW50KCBjb25zdCBRU3RyaW5nJiApOwogICAg UVZhcmlhbnQoIGNvbnN0IFFDU3RyaW5nJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IGNoYXIqICk7 CgogICAgUVZhcmlhbnQoIGNvbnN0IFFTdHJpbmdMaXN0JiApOwoKICAgIFFWYXJpYW50KCBjb25z dCBRRm9udCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRUGl4bWFwJiApOwogICAgUVZhcmlhbnQo IGNvbnN0IFFJbWFnZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQnJ1c2gmICk7CiAgICBRVmFy aWFudCggY29uc3QgUVBvaW50JiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFSZWN0JiApOwogICAg UVZhcmlhbnQoIGNvbnN0IFFTaXplJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFDb2xvciYgKTsK ICAgIFFWYXJpYW50KCBjb25zdCBRUGFsZXR0ZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQ29s b3JHcm91cCYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRSWNvblNldCYgKTsKICAgIFFWYXJpYW50 KCBjb25zdCBRUG9pbnRBcnJheSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRUmVnaW9uJiApOwog ICAgUVZhcmlhbnQoIGNvbnN0IFFCaXRtYXAmICk7CiAgICBRVmFyaWFudCggY29uc3QgUUN1cnNv ciYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRRGF0ZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBR VGltZSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRRGF0ZVRpbWUmICk7CiAgICBRVmFyaWFudCgg Y29uc3QgUUJ5dGVBcnJheSYgKTsKICAgIFFWYXJpYW50KCBjb25zdCBRQml0QXJyYXkmICk7CiAg ICBRVmFyaWFudCggY29uc3QgUUtleVNlcXVlbmNlJiApOwogICAgUVZhcmlhbnQoIGNvbnN0IFFQ ZW4mICk7CgogICAgUVZhcmlhbnQoIGNvbnN0IFFWYWx1ZUxpc3Q8UVZhcmlhbnQ+JiApOwogICAg UVZhcmlhbnQoIGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFudD4mICk7CgogICAgUVZhcmlhbnQo IGludCApOwogICAgUVZhcmlhbnQoIHVpbnQgKTsKCiAgICBRVmFyaWFudCggYm9vbCwgaW50ICk7 CiAgICBRVmFyaWFudCggZG91YmxlICk7CiAgICBRVmFyaWFudCggUVNpemVQb2xpY3kgKTsKCiAg ICBRVmFyaWFudCYgb3BlcmF0b3I9ICggY29uc3QgUVZhcmlhbnQmICk7CiAgICBib29sIG9wZXJh dG9yPT0oIGNvbnN0IFFWYXJpYW50JiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z dCBRVmFyaWFudCYgKSBjb25zdDsKCiAgICBUeXBlIHR5cGUoKSBjb25zdDsKICAgIGNvbnN0IGNo YXIqIHR5cGVOYW1lKCkgY29uc3Q7CgogICAgYm9vbCBjYW5DYXN0KCBUeXBlICkgY29uc3Q7CiAg ICBib29sIGNhc3QoIFR5cGUgKTsKCiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIGJvb2wg aXNOdWxsKCkgY29uc3Q7CgogICAgdm9pZCBjbGVhcigpOwoKICAgIGNvbnN0IFFTdHJpbmcgdG9T dHJpbmcoKSBjb25zdDsKICAgIGNvbnN0IFFDU3RyaW5nIHRvQ1N0cmluZygpIGNvbnN0OwoKICAg IGNvbnN0IFFTdHJpbmdMaXN0IHRvU3RyaW5nTGlzdCgpIGNvbnN0OwoKICAgIGNvbnN0IFFGb250 IHRvRm9udCgpIGNvbnN0OwogICAgY29uc3QgUVBpeG1hcCB0b1BpeG1hcCgpIGNvbnN0OwogICAg Y29uc3QgUUltYWdlIHRvSW1hZ2UoKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCB0b0JydXNoKCkg Y29uc3Q7CiAgICBjb25zdCBRUG9pbnQgdG9Qb2ludCgpIGNvbnN0OwogICAgY29uc3QgUVJlY3Qg dG9SZWN0KCkgY29uc3Q7CiAgICBjb25zdCBRU2l6ZSB0b1NpemUoKSBjb25zdDsKICAgIGNvbnN0 IFFDb2xvciB0b0NvbG9yKCkgY29uc3Q7CiAgICBjb25zdCBRUGFsZXR0ZSB0b1BhbGV0dGUoKSBj b25zdDsKICAgIGNvbnN0IFFDb2xvckdyb3VwIHRvQ29sb3JHcm91cCgpIGNvbnN0OwogICAgY29u c3QgUUljb25TZXQgdG9JY29uU2V0KCkgY29uc3Q7CiAgICBjb25zdCBRUG9pbnRBcnJheSB0b1Bv aW50QXJyYXkoKSBjb25zdDsKICAgIGNvbnN0IFFCaXRtYXAgdG9CaXRtYXAoKSBjb25zdDsKICAg IGNvbnN0IFFSZWdpb24gdG9SZWdpb24oKSBjb25zdDsKICAgIGNvbnN0IFFDdXJzb3IgdG9DdXJz b3IoKSBjb25zdDsKICAgIGNvbnN0IFFEYXRlIHRvRGF0ZSgpIGNvbnN0OwogICAgY29uc3QgUVRp bWUgdG9UaW1lKCkgY29uc3Q7CiAgICBjb25zdCBRRGF0ZVRpbWUgdG9EYXRlVGltZSgpIGNvbnN0 OwogICAgY29uc3QgUUJ5dGVBcnJheSB0b0J5dGVBcnJheSgpIGNvbnN0OwogICAgY29uc3QgUUJp dEFycmF5IHRvQml0QXJyYXkoKSBjb25zdDsKICAgIGNvbnN0IFFLZXlTZXF1ZW5jZSB0b0tleVNl cXVlbmNlKCkgY29uc3Q7CiAgICBjb25zdCBRUGVuIHRvUGVuKCkgY29uc3Q7CiAgICBpbnQgdG9J bnQoIGJvb2wgKiBvaz0wICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqIG9rPTAgKSBj b25zdDsKICAgIGJvb2wgdG9Cb29sKCkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wg KiBvaz0wICkgY29uc3Q7CgogICAgY29uc3QgUVZhbHVlTGlzdDxRVmFyaWFudD4gdG9MaXN0KCkg Y29uc3Q7CiAgICBjb25zdCBRTWFwPFFTdHJpbmcsUVZhcmlhbnQ+IHRvTWFwKCkgY29uc3Q7Cgog ICAgUVNpemVQb2xpY3kgdG9TaXplUG9saWN5KCkgY29uc3Q7CgoKICAgIFFWYWx1ZUxpc3RDb25z dEl0ZXJhdG9yPFFTdHJpbmc+IHN0cmluZ0xpc3RCZWdpbigpIGNvbnN0OwogICAgUVZhbHVlTGlz dENvbnN0SXRlcmF0b3I8UVN0cmluZz4gc3RyaW5nTGlzdEVuZCgpIGNvbnN0OwogICAgUVZhbHVl TGlzdENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+IGxpc3RCZWdpbigpIGNvbnN0OwogICAgUVZhbHVl TGlzdENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+IGxpc3RFbmQoKSBjb25zdDsKICAgIFFNYXBDb25z dEl0ZXJhdG9yPFFTdHJpbmcsUVZhcmlhbnQ+IG1hcEJlZ2luKCkgY29uc3Q7CiAgICBRTWFwQ29u c3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJpYW50PiBtYXBFbmQoKSBjb25zdDsKICAgIFFNYXBDb25z dEl0ZXJhdG9yPFFTdHJpbmcsUVZhcmlhbnQ+IG1hcEZpbmQoIGNvbnN0IFFTdHJpbmcmICkgY29u c3Q7CgogICAgUVN0cmluZyYgYXNTdHJpbmcoKTsKICAgIFFDU3RyaW5nJiBhc0NTdHJpbmcoKTsK CiAgICBRU3RyaW5nTGlzdCYgYXNTdHJpbmdMaXN0KCk7CgogICAgUUZvbnQmIGFzRm9udCgpOwog ICAgUVBpeG1hcCYgYXNQaXhtYXAoKTsKICAgIFFJbWFnZSYgYXNJbWFnZSgpOwogICAgUUJydXNo JiBhc0JydXNoKCk7CiAgICBRUG9pbnQmIGFzUG9pbnQoKTsKICAgIFFSZWN0JiBhc1JlY3QoKTsK ICAgIFFTaXplJiBhc1NpemUoKTsKICAgIFFDb2xvciYgYXNDb2xvcigpOwogICAgUVBhbGV0dGUm IGFzUGFsZXR0ZSgpOwogICAgUUNvbG9yR3JvdXAmIGFzQ29sb3JHcm91cCgpOwogICAgUUljb25T ZXQmIGFzSWNvblNldCgpOwogICAgUVBvaW50QXJyYXkmIGFzUG9pbnRBcnJheSgpOwogICAgUUJp dG1hcCYgYXNCaXRtYXAoKTsKICAgIFFSZWdpb24mIGFzUmVnaW9uKCk7CiAgICBRQ3Vyc29yJiBh c0N1cnNvcigpOwogICAgUURhdGUmIGFzRGF0ZSgpOwogICAgUVRpbWUmIGFzVGltZSgpOwogICAg UURhdGVUaW1lJiBhc0RhdGVUaW1lKCk7CiAgICBRQnl0ZUFycmF5JiBhc0J5dGVBcnJheSgpOwog ICAgUUJpdEFycmF5JiBhc0JpdEFycmF5KCk7CgogICAgUUtleVNlcXVlbmNlJiBhc0tleVNlcXVl bmNlKCk7CgogICAgUVBlbiYgYXNQZW4oKTsKICAgIGludCYgYXNJbnQoKTsKICAgIHVpbnQmIGFz VUludCgpOwogICAgYm9vbCYgYXNCb29sKCk7CiAgICBkb3VibGUmIGFzRG91YmxlKCk7CgogICAg UVZhbHVlTGlzdDxRVmFyaWFudD4mIGFzTGlzdCgpOwogICAgUU1hcDxRU3RyaW5nLFFWYXJpYW50 PiYgYXNNYXAoKTsKCiAgICBRU2l6ZVBvbGljeSYgYXNTaXplUG9saWN5KCk7CgoKICAgIHZvaWQg bG9hZCggUURhdGFTdHJlYW0mICk7CiAgICB2b2lkIHNhdmUoIFFEYXRhU3RyZWFtJiApIGNvbnN0 OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlVG9OYW1lKCBUeXBlIHR5cCApOwogICAgc3Rh dGljIFR5cGUgbmFtZVRvVHlwZSggY29uc3QgY2hhciogbmFtZSApOwoKcHJpdmF0ZToKICAgIHZv aWQgZGV0YWNoKCk7CgogICAgY2xhc3MgUHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkCiAgICB7CiAg ICBwdWJsaWM6CiAgICAgICAgUHJpdmF0ZSgpOwogICAgICAgIFByaXZhdGUoIFByaXZhdGUqICk7 CiAgICAgICAgflByaXZhdGUoKTsKCiAgICAgICAgdm9pZCBjbGVhcigpOwoKICAgICAgICBUeXBl IHR5cDsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgdWludCB1OwogICAgICAg ICAgICBpbnQgaTsKICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICAgICBkb3VibGUgZDsKICAg ICAgICAgICAgdm9pZCAqcHRyOwogICAgICAgIH0gdmFsdWU7CiAgICAgICAgdWludCBpc19udWxs IDogMTsKICAgIH07CgogICAgUHJpdmF0ZSogZDsKCnB1YmxpYzoKICAgIHZvaWQqIHJhd0FjY2Vz cyggdm9pZCogcHRyID0gMCwgVHlwZSB0eXAgPSBJbnZhbGlkLCBib29sIGRlZXBDb3B5ID0gRkFM U0UgKTsKfTsKIyAzMTAgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmFyaWFudC5oIgpp bmxpbmUgUVZhcmlhbnQ6OlR5cGUgUVZhcmlhbnQ6OnR5cGUoKSBjb25zdAp7CiAgICByZXR1cm4g ZC0+dHlwOwp9CgppbmxpbmUgYm9vbCBRVmFyaWFudDo6aXNWYWxpZCgpIGNvbnN0CnsKICAgIHJl dHVybiAoZC0+dHlwICE9IEludmFsaWQpOwp9CgoKaW5saW5lIFFWYWx1ZUxpc3RDb25zdEl0ZXJh dG9yPFFTdHJpbmc+IFFWYXJpYW50OjpzdHJpbmdMaXN0QmVnaW4oKSBjb25zdAp7CiAgICBpZiAo IGQtPnR5cCAhPSBTdHJpbmdMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlzdENvbnN0SXRl cmF0b3I8UVN0cmluZz4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFTdHJpbmdMaXN0KilkLT52YWx1 ZS5wdHIpLT5iZWdpbigpOwp9CgppbmxpbmUgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8UVN0cmlu Zz4gUVZhcmlhbnQ6OnN0cmluZ0xpc3RFbmQoKSBjb25zdAp7CiAgICBpZiAoIGQtPnR5cCAhPSBT dHJpbmdMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8UVN0cmlu Zz4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFTdHJpbmdMaXN0KilkLT52YWx1ZS5wdHIpLT5lbmQo KTsKfQoKaW5saW5lIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFWYXJpYW50PiBRVmFyaWFudDo6 bGlzdEJlZ2luKCkgY29uc3QKewogICAgaWYgKCBkLT50eXAgIT0gTGlzdCApCiAgICAgICAgcmV0 dXJuIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFWYXJpYW50PigpOwogICAgcmV0dXJuICgoY29u c3QgUVZhbHVlTGlzdDxRVmFyaWFudD4qKWQtPnZhbHVlLnB0ciktPmJlZ2luKCk7Cn0KCmlubGlu ZSBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRVmFyaWFudD4gUVZhcmlhbnQ6Omxpc3RFbmQoKSBj b25zdAp7CiAgICBpZiAoIGQtPnR5cCAhPSBMaXN0ICkKICAgICAgICByZXR1cm4gUVZhbHVlTGlz dENvbnN0SXRlcmF0b3I8UVZhcmlhbnQ+KCk7CiAgICByZXR1cm4gKChjb25zdCBRVmFsdWVMaXN0 PFFWYXJpYW50PiopZC0+dmFsdWUucHRyKS0+ZW5kKCk7Cn0KCmlubGluZSBRTWFwQ29uc3RJdGVy YXRvcjxRU3RyaW5nLFFWYXJpYW50PiBRVmFyaWFudDo6bWFwQmVnaW4oKSBjb25zdAp7CiAgICBp ZiAoIGQtPnR5cCAhPSBNYXAgKQogICAgICAgIHJldHVybiBRTWFwQ29uc3RJdGVyYXRvcjxRU3Ry aW5nLFFWYXJpYW50PigpOwogICAgcmV0dXJuICgoY29uc3QgUU1hcDxRU3RyaW5nLFFWYXJpYW50 PiopZC0+dmFsdWUucHRyKS0+YmVnaW4oKTsKfQoKaW5saW5lIFFNYXBDb25zdEl0ZXJhdG9yPFFT dHJpbmcsUVZhcmlhbnQ+IFFWYXJpYW50OjptYXBFbmQoKSBjb25zdAp7CiAgICBpZiAoIGQtPnR5 cCAhPSBNYXAgKQogICAgICAgIHJldHVybiBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJp YW50PigpOwogICAgcmV0dXJuICgoY29uc3QgUU1hcDxRU3RyaW5nLFFWYXJpYW50PiopZC0+dmFs dWUucHRyKS0+ZW5kKCk7Cn0KCmlubGluZSBRTWFwQ29uc3RJdGVyYXRvcjxRU3RyaW5nLFFWYXJp YW50PiBRVmFyaWFudDo6bWFwRmluZCggY29uc3QgUVN0cmluZyYga2V5ICkgY29uc3QKewogICAg aWYgKCBkLT50eXAgIT0gTWFwICkKICAgICAgICByZXR1cm4gUU1hcENvbnN0SXRlcmF0b3I8UVN0 cmluZyxRVmFyaWFudD4oKTsKICAgIHJldHVybiAoKGNvbnN0IFFNYXA8UVN0cmluZyxRVmFyaWFu dD4qKWQtPnZhbHVlLnB0ciktPmZpbmQoIGtleSApOwp9CgoKCiBRRGF0YVN0cmVhbSYgb3BlcmF0 b3I+PiAoIFFEYXRhU3RyZWFtJiBzLCBRVmFyaWFudCYgcCApOwogUURhdGFTdHJlYW0mIG9wZXJh dG9yPDwgKCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhcmlhbnQmIHAgKTsKIFFEYXRhU3RyZWFt JiBvcGVyYXRvcj4+ICggUURhdGFTdHJlYW0mIHMsIFFWYXJpYW50OjpUeXBlJiBwICk7CiBRRGF0 YVN0cmVhbSYgb3BlcmF0b3I8PCAoIFFEYXRhU3RyZWFtJiBzLCBjb25zdCBRVmFyaWFudDo6VHlw ZSBwICk7CiMgMjIgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv aW5jbHVkZS9UeHFUYWJsZUl0ZW0uaCIgMgoKCgoKCgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxs ZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFBY3Rpb25JdGVtLmgiIDEKIyAyNCAi L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUFj dGlvbkl0ZW0uaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWNvbWJvYm94Lmgi IDEKIyA0OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fjb21ib2JveC5oIgpjbGFzcyBR U3RyTGlzdDsKY2xhc3MgUVN0cmluZ0xpc3Q7CmNsYXNzIFFMaW5lRWRpdDsKY2xhc3MgUVZhbGlk YXRvcjsKY2xhc3MgUUxpc3RCb3g7CmNsYXNzIFFDb21ib0JveERhdGE7CgpjbGFzcyBRQ29tYm9C b3ggOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1l dGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBj b25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25z dCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0 dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3Bl cnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19w cm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9i amVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFP YmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAK ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRQ29t Ym9Cb3goIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFDb21i b0JveCggYm9vbCBydywgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwog ICAgflFDb21ib0JveCgpOwoKICAgIGludCBjb3VudCgpIGNvbnN0OwoKICAgIHZvaWQgaW5zZXJ0 U3RyaW5nTGlzdCggY29uc3QgUVN0cmluZ0xpc3QgJiwgaW50IGluZGV4PS0xICk7CiAgICB2b2lk IGluc2VydFN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICYsIGludCBpbmRleD0tMSApOwogICAgdm9p ZCBpbnNlcnRTdHJMaXN0KCBjb25zdCBRU3RyTGlzdCAqLCBpbnQgaW5kZXg9LTEgKTsKICAgIHZv aWQgaW5zZXJ0U3RyTGlzdCggY29uc3QgY2hhciAqKiwgaW50IG51bVN0cmluZ3M9LTEsIGludCBp bmRleD0tMSk7CgogICAgdm9pZCBpbnNlcnRJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQg aW5kZXg9LTEgKTsKICAgIHZvaWQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBp bnQgaW5kZXg9LTEgKTsKICAgIHZvaWQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFw LCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXg9LTEgKTsKCiAgICB2b2lkIHJlbW92ZUl0 ZW0oIGludCBpbmRleCApOwoKICAgIGludCBjdXJyZW50SXRlbSgpIGNvbnN0OwogICAgdmlydHVh bCB2b2lkIHNldEN1cnJlbnRJdGVtKCBpbnQgaW5kZXggKTsKCiAgICBRU3RyaW5nIGN1cnJlbnRU ZXh0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRleHQoIGNvbnN0IFFTdHJp bmcmICk7CgogICAgUVN0cmluZyB0ZXh0KCBpbnQgaW5kZXggKSBjb25zdDsKICAgIGNvbnN0IFFQ aXhtYXAgKnBpeG1hcCggaW50IGluZGV4ICkgY29uc3Q7CgogICAgdm9pZCBjaGFuZ2VJdGVtKCBj b25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXggKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggY29u c3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaW5kZXggKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggY29u c3QgUVBpeG1hcCAmcGl4bWFwLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaW5kZXggKTsKCiAg ICBib29sIGF1dG9SZXNpemUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvUmVzaXpl KCBib29sICk7CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0UGFsZXR0 ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmICk7 CiAgICB2b2lkIHNldEVuYWJsZWQoIGJvb2wgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUxp bWl0KCBpbnQgKTsKICAgIGludCBzaXplTGltaXQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg c2V0TWF4Q291bnQoIGludCApOwogICAgaW50IG1heENvdW50KCkgY29uc3Q7CgogICAgZW51bSBQ b2xpY3kgeyBOb0luc2VydGlvbiwgQXRUb3AsIEF0Q3VycmVudCwgQXRCb3R0b20sCiAgICAgICAg ICAgICAgICAgIEFmdGVyQ3VycmVudCwgQmVmb3JlQ3VycmVudCB9OwoKICAgIHZpcnR1YWwgdm9p ZCBzZXRJbnNlcnRpb25Qb2xpY3koIFBvbGljeSBwb2xpY3kgKTsKICAgIFBvbGljeSBpbnNlcnRp b25Qb2xpY3koKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsaWRhdG9yKCBjb25zdCBR VmFsaWRhdG9yICogKTsKICAgIGNvbnN0IFFWYWxpZGF0b3IgKiB2YWxpZGF0b3IoKSBjb25zdDsK CiAgICB2aXJ0dWFsIHZvaWQgc2V0TGlzdEJveCggUUxpc3RCb3ggKiApOwogICAgUUxpc3RCb3gg KiBsaXN0Qm94KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldExpbmVFZGl0KCBRTGluZUVk aXQgKmVkaXQgKTsKICAgIFFMaW5lRWRpdCogbGluZUVkaXQoKSBjb25zdDsKCiAgICB2aXJ0dWFs IHZvaWQgc2V0QXV0b0NvbXBsZXRpb24oIGJvb2wgKTsKICAgIGJvb2wgYXV0b0NvbXBsZXRpb24o KSBjb25zdDsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICpvYmplY3QsIFFFdmVudCAq ZXZlbnQgKTsKCiAgICB2b2lkIHNldER1cGxpY2F0ZXNFbmFibGVkKCBib29sIGVuYWJsZSApOwog ICAgYm9vbCBkdXBsaWNhdGVzRW5hYmxlZCgpIGNvbnN0OwoKICAgIGJvb2wgZWRpdGFibGUoKSBj b25zdDsKICAgIHZvaWQgc2V0RWRpdGFibGUoIGJvb2wgKTsKCiAgICB2aXJ0dWFsIHZvaWQgcG9w dXAoKTsKCnB1YmxpYyA6CiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lkIGNsZWFyVmFsaWRhdG9y KCk7CiAgICB2b2lkIGNsZWFyRWRpdCgpOwogICAgdmlydHVhbCB2b2lkIHNldEVkaXRUZXh0KCBj b25zdCBRU3RyaW5nICYpOwoKcHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpbmRl eCApOwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGluZGV4ICk7CiAgICB2b2lkIGFjdGl2YXRl ZCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZvaWQgaGlnaGxpZ2h0ZWQoIGNvbnN0IFFTdHJpbmcg Jik7CiAgICB2b2lkIHRleHRDaGFuZ2VkKCBjb25zdCBRU3RyaW5nICYpOwoKcHJpdmF0ZSA6CiAg ICB2b2lkIGludGVybmFsQWN0aXZhdGUoIGludCApOwogICAgdm9pZCBpbnRlcm5hbEhpZ2hsaWdo dCggaW50ICk7CiAgICB2b2lkIGludGVybmFsQ2xpY2tUaW1lb3V0KCk7CiAgICB2b2lkIHJldHVy blByZXNzZWQoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQg KiApOwogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgbW91 c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KCBR TW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAq ICk7CiAgICB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAg dm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmUgKTsKICAgIHZvaWQgZm9jdXNJbkV2ZW50 KCBRRm9jdXNFdmVudCAqZSApOwogICAgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAq ZSApOwogICAgdm9pZCB3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqZSApOwogICAgdm9pZCBzdHls ZUNoYW5nZSggUVN0eWxlJiApOwoKICAgIHZvaWQgdXBkYXRlTWFzaygpOwoKcHJpdmF0ZToKICAg IHZvaWQgc2V0VXBMaXN0Qm94KCk7CiAgICB2b2lkIHNldFVwTGluZUVkaXQoKTsKICAgIHZvaWQg cG9wRG93bkxpc3RCb3goKTsKICAgIHZvaWQgcmVJbmRleCgpOwogICAgdm9pZCBjdXJyZW50Q2hh bmdlZCgpOwogICAgaW50IGNvbXBsZXRpb25JbmRleCggY29uc3QgUVN0cmluZyAmLCBpbnQgKSBj b25zdDsKCiAgICBRQ29tYm9Cb3hEYXRhICpkOwoKcHJpdmF0ZToKCiAgICBRQ29tYm9Cb3goIGNv bnN0IFFDb21ib0JveCAmICk7CiAgICBRQ29tYm9Cb3ggJm9wZXJhdG9yPSggY29uc3QgUUNvbWJv Qm94ICYgKTsKCn07CiMgMjUgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3Fz Y2ltcGwvaW5jbHVkZS9UeHFBY3Rpb25JdGVtLmgiIDIKCgoKCgoKCmNsYXNzIFR4cUFjdGlvbkl0 ZW06IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVRhYmxlSXRlbQp7CiAgcHVibGljOiB2aXJ0dWFs IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVj dCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9p ZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBR VU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1 YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMg Ym9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiAp OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVj dCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICpt ZXRhT2JqOwpwdWJsaWM6CgoKCgoKCgogICBUeHFBY3Rpb25JdGVtKCBRVGFibGUgKnQsIEVkaXRU eXBlIGUgLCBjb25zdCBRU3RyaW5nIHMpOwoKCgoKCiAgIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigp IGNvbnN0OwoKCgoKCiAgIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRnZXQgKncgKTsK CgoKCgogICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJm5ld1RleHQgKTsKCgoKCgogIHZv aWQgc2V0QWN0aW9uTWFwKCBjb25zdCBzdGQ6Om1hcDxpbnQsIFFTdHJpbmc+ICZtLCBpbnQgYWN0 aW9uID0wKSB7CiAgICBhY3Rpb25NYXAgPSBtOwogICAgc2V0VGV4dChhY3Rpb25NYXBbYWN0aW9u XSk7CiAgfQoKCgoKCiAgc3RkOjptYXA8aW50LCBRU3RyaW5nPiBnZXRBY3Rpb25NYXAoKSB7cmV0 dXJuIGFjdGlvbk1hcDt9CgoKCgoKICB2b2lkIHNldEFjdGlvbkl0ZW0oaW50IGFjdGlvbik7CgoK CgoKICB2b2lkIHNldEFjdGlvbkl0ZW0oUVN0cmluZyBhY3Rpb24pOwoKCgoKICBpbnQgZ2V0QWN0 aW9uSXRlbSgpIHtyZXR1cm4gY29tYm9Cb3gtPmN1cnJlbnRJdGVtKCk7fQoKCgoKICBRU3RyaW5n IGdldEFjdGlvbkl0ZW1OYW1lKCkge3JldHVybiBjb21ib0JveC0+Y3VycmVudFRleHQoKTt9Cgpw cm90ZWN0ZWQ6CgoKCgogIHZvaWQgYWN0aW9uQ2hhbmdlZChRU3RyaW5nKTsKCnB1YmxpYyA6CgoK CgoKICB2b2lkIGFjdGl2YXRlZChpbnQgYWN0aW9uKTsKCnByb3RlY3RlZDoKCgoKICBzdGQ6Om1h cDxpbnQgLCBRU3RyaW5nPiBhY3Rpb25NYXA7Cgpwcml2YXRlOgoKCgoKICAgUUNvbWJvQm94ICpj b21ib0JveDsKCgp9OwojIDI5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x c2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiIDIKCgoKCgoKY2xhc3MgVHhxVGFibGVJdGVt OiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFUYWJsZUl0ZW0KewogIHB1YmxpYzogdmlydHVhbCBR TWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3Qo KTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQq IHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVP YmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs IGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJv b2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsg c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3Qo KSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0 YU9iajsKcHVibGljOgojIDQ4ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x c2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdHlwZWRlZiB2b2lkICgqVHhxQWN0aW9u RmNuUHRyKShUeHFUYWJsZUl0ZW0qKTsKIyA1OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIFR4cVRhYmxlSXRlbSgg UVRhYmxlICp0LCBFZGl0VHlwZSBlICwgVHhBdHRyaWJ1dGVTZXQgKmEsCiAgICAgICAgICAgICAg ICAgICBjb25zdCBRU3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBpbnQgcik7CgoKCgogIHZp cnR1YWwgflR4cVRhYmxlSXRlbSgpIHt9CgoKCgoKICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0 ZShUeEF0dHJpYnV0ZVNldCAqYSkgewogICAgIGF0dHJpYj1hOwogICAgfQoKCgoKCiAgdmlydHVh bCB2b2lkIHNldEF0dHJpYlZhbHVlKCkge30KCgoKCiAgaW50IGdldFJvdygpIGNvbnN0IHtyZXR1 cm4gcm93O30KCgoKCgogIHZpcnR1YWwgaW50IHJ0dGkoKSBjb25zdCB7cmV0dXJuIFJUVEk7fQoK CgoKICBzdGF0aWMgaW50IFJUVEk7CgoKCgogIHZpcnR1YWwgdm9pZCBhZGRBY3Rpb25JdGVtKCk7 Cgpwcm90ZWN0ZWQ6CgoKCgoKICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYk5hbWUoY29uc3QgUVN0 cmluZyBubSkge2F0dHJpYk5hbWUgPSBubTt9CgoKCgoKICAgdmlydHVhbCBzdGQ6OnN0cmluZyBn ZXRBdHRyaWJOYW1lKCkge3JldHVybiBhdHRyaWJOYW1lLmFzY2lpKCk7fQoKCgoKICB2aXJ0dWFs IHZvaWQgYWRkTmFtZUl0ZW0oKTsKCgoKCiAgdmlydHVhbCB2b2lkIGNyZWF0ZUFjdGlvbk1hcHMo KTsKCgoKCgogIHZpcnR1YWwgaW50IGdldFZlY1NpemUoKSB7cmV0dXJuIDA7fQojIDEzOSAiL2hv bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxl SXRlbS5oIgogIHZpcnR1YWwgYm9vbCBjaGVja0xhYmVsKGludCApIHtyZXR1cm4gdHJ1ZTt9CgoK CgoKCgogIHZpcnR1YWwgdm9pZCBhZGRTdWJJdGVtKGludCAsIGludCApIHt9CgoKCgogIHN0ZDo6 bWFwPGludCAsIFFTdHJpbmc+IGFjdGlvbk1hcDsKCgoKCiAgc3RkOjptYXA8UVN0cmluZywgVHhx QWN0aW9uRmNuUHRyPiBhY3Rpb25GY25NYXA7CiMgMTY3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVy L3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBi b29sIGVkaXRBY3Rpb24oaW50IHJvdykgOwojIDE3NyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIHZpcnR1YWwgYm9v bCByZXNldEFjdGlvbihpbnQgcm93KSA7CiMgMTg3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBib29s IGRlbGV0ZUFjdGlvbihpbnQgcm93KSA7CiMgMTk3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgdmlydHVhbCBib29s IGhpZGVBY3Rpb24oaW50IHJvdykgOwojIDIwNyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVRhYmxlSXRlbS5oIgogIHZpcnR1YWwgYm9vbCBz aG93QWN0aW9uKGludCByb3cpIDsKCgoKCiAgUVZhcmlhbnQgYXR0cmliVmFsdWU7CgoKCgogIFR4 QXR0cmlidXRlU2V0ICphdHRyaWI7CgoKCgogIGJvb2wgaXNPcGVuOwoKCgoKICBUeHFBY3Rpb25J dGVtICphY3Rpb25JdGVtOwoKcHJvdGVjdGVkIDoKCgoKCgogIHZpcnR1YWwgdm9pZCBzZWN0aW9u Q2xpY2tlZChpbnQgc2VjdGlvbik7CiMgMjQ1ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2pl Y3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxVGFibGVJdGVtLmgiCiAgIHZvaWQgZG91YmxlQ2xp Y2tlZCAoIGludCByb3csIGludCBjb2wsIGludCAsIGNvbnN0IFFQb2ludCAmICkgewoKICAgICBp ZiAoIChyb3cgPT0gZ2V0Um93KCkpICYmIGNvbCA8IDIpIHNlY3Rpb25DbGlja2VkKHJvdyk7CiAg IH0KCgoKCiAgdm9pZCBhY3Rpb25DaGFuZ2VkKFFTdHJpbmcgYWN0aW9uKTsKCnByaXZhdGU6CgoK CgogIHN0YXRpYyB2b2lkIGVkaXRBY3Rpb24oVHhxVGFibGVJdGVtKik7CgoKCgogIHN0YXRpYyB2 b2lkIHJlc2V0QWN0aW9uKFR4cVRhYmxlSXRlbSopOwoKCgoKICBzdGF0aWMgdm9pZCBkZWxldGVB Y3Rpb24oVHhxVGFibGVJdGVtKik7CgoKCgogIHN0YXRpYyB2b2lkIGhpZGVBY3Rpb24oVHhxVGFi bGVJdGVtKik7CgoKCgogIHN0YXRpYyB2b2lkIHNob3dBY3Rpb24oVHhxVGFibGVJdGVtKik7CgoK CgogIFFTdHJpbmcgYXR0cmliTmFtZTsKCgoKCiAgUVZhcmlhbnQgcmVzZXRWYWx1ZTsKCgoKCiAg aW50IHJvdzsKCgoKCiAgYm9vbCBzdWJJdGVtc0NyZWF0ZWQ7Cgp9OwojIDI3ICIvaG9tZS9yZXNl YXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgi IDIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1 ZGUvVHhxU3RyaW5nVGFibGVJdGVtLmgiIDEKIyAyMCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVN0cmluZ1RhYmxlSXRlbS5oIgojIDEgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbGluZWVkaXQuaCIgMQojIDQxICIvdXNyL2xvY2Fs L3F0LTMuMS4xL2luY2x1ZGUvcWxpbmVlZGl0LmgiCnN0cnVjdCBRTGluZUVkaXRQcml2YXRlOwoK Y2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVBvcHVwTWVudTsKIyA1MyAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FsaW5lZWRpdC5oIgpjbGFzcyBRVGV4dFBhcmFncmFwaDsKY2xhc3MgUVRl eHRDdXJzb3I7CgpjbGFzcyBRTGluZUVkaXQgOiBwdWJsaWMgUUZyYW1lCnsKICAgIHB1YmxpYzog dmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l dGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0 dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2Uo IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiAp OyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsg c3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFy aWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3Qq IHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0cigg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCgg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9i amVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg IAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgogICAgUUxpbmVFZGl0KCBRV2lkZ2V0 KiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUxpbmVFZGl0KCBjb25zdCBRU3Ry aW5nICYsIFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UUxpbmVF ZGl0KCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7CgogICAgUVN0cmluZyBkaXNwbGF5VGV4 dCgpIGNvbnN0OwoKICAgIGludCBtYXhMZW5ndGgoKSBjb25zdDsKCiAgICBib29sIGZyYW1lKCkg Y29uc3Q7CgogICAgZW51bSBFY2hvTW9kZSB7IE5vcm1hbCwgTm9FY2hvLCBQYXNzd29yZCB9Owog ICAgRWNob01vZGUgZWNob01vZGUoKSBjb25zdDsKCiAgICBib29sIGlzUmVhZE9ubHkoKSBjb25z dDsKCiAgICBjb25zdCBRVmFsaWRhdG9yICogdmFsaWRhdG9yKCkgY29uc3Q7CgogICAgUVNpemUg c2l6ZUhpbnQoKSBjb25zdDsKICAgIFFTaXplIG1pbmltdW1TaXplSGludCgpIGNvbnN0OwoKICAg IGludCBjdXJzb3JQb3NpdGlvbigpIGNvbnN0OwogICAgYm9vbCB2YWxpZGF0ZUFuZFNldCggY29u c3QgUVN0cmluZyAmLCBpbnQsIGludCwgaW50ICk7CgogICAgaW50IGFsaWdubWVudCgpIGNvbnN0 OwoKCiAgICB2b2lkIGN1cnNvckxlZnQoIGJvb2wgbWFyaywgaW50IHN0ZXBzID0gMSApIHsgY3Vy c29yRm9yd2FyZCggbWFyaywgLXN0ZXBzICk7IH0KICAgIHZvaWQgY3Vyc29yUmlnaHQoIGJvb2wg bWFyaywgaW50IHN0ZXBzID0gMSApIHsgY3Vyc29yRm9yd2FyZCggbWFyaywgc3RlcHMgKTsgfQoK ICAgIHZvaWQgY3Vyc29yRm9yd2FyZCggYm9vbCBtYXJrLCBpbnQgc3RlcHMgPSAxICk7CiAgICB2 b2lkIGN1cnNvckJhY2t3YXJkKCBib29sIG1hcmssIGludCBzdGVwcyA9IDEgKTsKICAgIHZvaWQg Y3Vyc29yV29yZEZvcndhcmQoIGJvb2wgbWFyayApOwogICAgdm9pZCBjdXJzb3JXb3JkQmFja3dh cmQoIGJvb2wgbWFyayApOwogICAgdm9pZCBiYWNrc3BhY2UoKTsKICAgIHZvaWQgZGVsKCk7CiAg ICB2b2lkIGhvbWUoIGJvb2wgbWFyayApOwogICAgdm9pZCBlbmQoIGJvb2wgbWFyayApOwoKICAg IHZvaWQgc2V0RWRpdGVkKCBib29sICk7CiAgICBib29sIGVkaXRlZCgpIGNvbnN0OwoKICAgIGJv b2wgaGFzU2VsZWN0ZWRUZXh0KCkgY29uc3Q7CiAgICBRU3RyaW5nIHNlbGVjdGVkVGV4dCgpIGNv bnN0OwogICAgYm9vbCBnZXRTZWxlY3Rpb24oIGludCAqc3RhcnQsIGludCAqZW5kICk7CgogICAg Ym9vbCBpc1VuZG9BdmFpbGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNSZWRvQXZhaWxhYmxlKCkg Y29uc3Q7CgoKCiAgICBib29sIGhhc01hcmtlZFRleHQoKSBjb25zdCB7IHJldHVybiBoYXNTZWxl Y3RlZFRleHQoKTsgfQogICAgUVN0cmluZyBtYXJrZWRUZXh0KCkgY29uc3QgeyByZXR1cm4gc2Vs ZWN0ZWRUZXh0KCk7IH0KCgogICAgdm9pZCBzZXRQYXNzd29yZENoYXIoIFFDaGFyIGMgKTsKICAg IFFDaGFyIHBhc3N3b3JkQ2hhcigpIGNvbnN0OwoKICAgIGJvb2wgZHJhZ0VuYWJsZWQoKSBjb25z dDsKICAgIGludCBjaGFyYWN0ZXJBdCggaW50IHhwb3MsIFFDaGFyICpjaHIgKSBjb25zdDsKCnB1 YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZp cnR1YWwgdm9pZCBzZWxlY3RBbGwoKTsKICAgIHZpcnR1YWwgdm9pZCBkZXNlbGVjdCgpOwogICAg dmlydHVhbCB2b2lkIGNsZWFyVmFsaWRhdG9yKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KCBj b25zdCBRU3RyaW5nICYpOwogICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CiAgICB2aXJ0dWFsIHZv aWQgdW5kbygpOwogICAgdmlydHVhbCB2b2lkIHJlZG8oKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRN YXhMZW5ndGgoIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEZyYW1lKCBib29sICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0RWNob01vZGUoIEVjaG9Nb2RlICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0 UmVhZE9ubHkoIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWYWxpZGF0b3IoIGNvbnN0IFFW YWxpZGF0b3IgKiApOwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYgKTsK ICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0U2VsZWN0aW9uKCBpbnQsIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEN1 cnNvclBvc2l0aW9uKCBpbnQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQoIGludCBm bGFnICk7CgogICAgdmlydHVhbCB2b2lkIGN1dCgpOwogICAgdmlydHVhbCB2b2lkIGNvcHkoKSBj b25zdDsKICAgIHZpcnR1YWwgdm9pZCBwYXN0ZSgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXREcmFn RW5hYmxlZCggYm9vbCBiICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHRleHRDaGFuZ2VkKCBjb25z dCBRU3RyaW5nICYpOwogICAgdm9pZCByZXR1cm5QcmVzc2VkKCk7CiAgICB2b2lkIGxvc3RGb2N1 cygpOwogICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Cgpwcm90ZWN0ZWQ6CiAgICBib29sIGV2 ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICog KTsKICAgIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZvaWQgbW91 c2VSZWxlYXNlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZvaWQgbW91c2VEb3VibGVDbGlj a0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVu dCAqICk7CiAgICB2b2lkIGltU3RhcnRFdmVudCggUUlNRXZlbnQgKiApOwogICAgdm9pZCBpbUNv bXBvc2VFdmVudCggUUlNRXZlbnQgKiApOwogICAgdm9pZCBpbUVuZEV2ZW50KCBRSU1FdmVudCAq ICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1 c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50 ZXIgKnBhaW50ZXIgKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICk7Cgog ICAgdm9pZCBkcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZvaWQgZHJh Z01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKmUgKTsKICAgIHZvaWQgZHJhZ0xlYXZlRXZlbnQo IFFEcmFnTGVhdmVFdmVudCAqZSApOwogICAgdm9pZCBkcm9wRXZlbnQoIFFEcm9wRXZlbnQgKiAp OwoKICAgIHZvaWQgY29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwoKCiAg ICB2b2lkIHJlcGFpbnRBcmVhKCBpbnQsIGludCApIHsgdXBkYXRlKCk7IH0KCgogICAgdmlydHVh bCBRUG9wdXBNZW51ICpjcmVhdGVQb3B1cE1lbnUoKTsKICAgIHZvaWQgd2luZG93QWN0aXZhdGlv bkNoYW5nZSggYm9vbCApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNsaXBib2FyZENoYW5nZWQoKTsK ICAgIHZvaWQgYmxpbmtTbG90KCk7CgogICAgdm9pZCBkb0RyYWcoKTsKCiAgICB2b2lkIGRyYWdT bG90KCk7CiAgICB2b2lkIHBvcHVwQWN0aXZhdGVkKCBpbnQgciApOwoKcHJpdmF0ZToKICAgIHZv aWQgaW5pdCgpOwogICAgdm9pZCBibGlua09uKCk7CiAgICB2b2lkIHVwZGF0ZU9mZnNldCgpOwog ICAgdm9pZCB1cGRhdGVPZmZzZXQoIFFUZXh0UGFyYWdyYXBoICpwLCBRVGV4dEN1cnNvciAqYyAp OwogICAgdm9pZCB1cGRhdGVTZWxlY3Rpb24oKTsKICAgIHZvaWQgcmVtb3ZlU2VsZWN0ZWRUZXh0 KCk7CiAgICB2b2lkIGRlbE9yQmFja3NwYWNlKCBib29sIGJhY2tzcGFjZSApOwoKICAgIFFMaW5l RWRpdFByaXZhdGUgKiBkOwoKcHJpdmF0ZToKCiAgICBRTGluZUVkaXQoIGNvbnN0IFFMaW5lRWRp dCAmICk7CiAgICBRTGluZUVkaXQgJm9wZXJhdG9yPSggY29uc3QgUUxpbmVFZGl0ICYgKTsKCn07 CiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVk ZS9UeHFTdHJpbmdUYWJsZUl0ZW0uaCIgMgojIDMwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3By b2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxU3RyaW5nVGFibGVJdGVtLmgiCmNsYXNzIFR4 cVN0cmluZ1RhYmxlSXRlbTogcHVibGljIFR4cVRhYmxlSXRlbQp7CnB1YmxpYzoKIyA0MyAiL2hv bWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVN0cmlu Z1RhYmxlSXRlbS5oIgogICBUeHFTdHJpbmdUYWJsZUl0ZW0oIFFUYWJsZSAqdCwgRWRpdFR5cGUg ZSAsIFR4QXR0cmlidXRlU2V0ICphLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu ZyBzLCBjb25zdCBRVmFyaWFudCAmdiwgaW50IHIpOwoKCgoKICB2aXJ0dWFsIH5UeHFTdHJpbmdU YWJsZUl0ZW0oKSB7fQoKCgoKCiAgIFFXaWRnZXQgKmNyZWF0ZUVkaXRvcigpIGNvbnN0OwoKCgoK CiAgIHZvaWQgc2V0Q29udGVudEZyb21FZGl0b3IoIFFXaWRnZXQgKncgKTsKCgoKCgogICB2b2lk IHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJm5ld1RleHQgKTsKCgoKCgogIHZpcnR1YWwgdm9pZCBz ZXRBdHRyaWJWYWx1ZSgpOwoKCgoKICBpbnQgVHhxU3RyaW5nVGFibGVJdGVtOjphbGlnbm1lbnQo KSBjb25zdCB7cmV0dXJuIFFUYWJsZTo6QWxpZ25SaWdodDt9Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2 aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSwgY29uc3Qg c3RkOjpzdHJpbmcgdmFsdWUpOwoKcHJpdmF0ZToKCgoKCiAgIFFHdWFyZGVkUHRyPFFMaW5lRWRp dD4gbGluZUVkaXQ7CgoKfTsKIyAyOCAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z LjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIiAyCiMgMSAiL2hvbWUvcmVzZWFyY2gv Ym1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVGFibGVJdGVtLmgi IDEKIyAyMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNs dWRlL1R4cVBhcmFtVGFibGVJdGVtLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl L3F2YWxpZGF0b3IuaCIgMQojIDQ0ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXZhbGlk YXRvci5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVnZXhwLmgiIDEKIyA0 NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FyZWdleHAuaCIKY2xhc3MgUVJlZ0V4cEVu Z2luZTsKc3RydWN0IFFSZWdFeHBQcml2YXRlOwoKY2xhc3MgUVJlZ0V4cAp7CnB1YmxpYzoKICAg IGVudW0gQ2FyZXRNb2RlIHsgQ2FyZXRBdFplcm8sIENhcmV0QXRPZmZzZXQsIENhcmV0V29udE1h dGNoIH07CgogICAgUVJlZ0V4cCgpOwogICAgUVJlZ0V4cCggY29uc3QgUVN0cmluZyYgcGF0dGVy biwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gVFJVRSwKICAgICAgICAgICAgIGJvb2wgd2lsZGNhcmQg PSBGQUxTRSApOwogICAgUVJlZ0V4cCggY29uc3QgUVJlZ0V4cCYgcnggKTsKICAgIH5RUmVnRXhw KCk7CiAgICBRUmVnRXhwJiBvcGVyYXRvcj0oIGNvbnN0IFFSZWdFeHAmIHJ4ICk7CgogICAgYm9v bCBvcGVyYXRvcj09KCBjb25zdCBRUmVnRXhwJiByeCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRUmVnRXhwJiByeCApIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KCByeCAp OyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsK ICAgIFFTdHJpbmcgcGF0dGVybigpIGNvbnN0OwogICAgdm9pZCBzZXRQYXR0ZXJuKCBjb25zdCBR U3RyaW5nJiBwYXR0ZXJuICk7CiAgICBib29sIGNhc2VTZW5zaXRpdmUoKSBjb25zdDsKICAgIHZv aWQgc2V0Q2FzZVNlbnNpdGl2ZSggYm9vbCBzZW5zaXRpdmUgKTsKCiAgICBib29sIHdpbGRjYXJk KCkgY29uc3Q7CiAgICB2b2lkIHNldFdpbGRjYXJkKCBib29sIHdpbGRjYXJkICk7CgogICAgYm9v bCBtaW5pbWFsKCkgY29uc3Q7CiAgICB2b2lkIHNldE1pbmltYWwoIGJvb2wgbWluaW1hbCApOwoK ICAgIGJvb2wgZXhhY3RNYXRjaCggY29uc3QgUVN0cmluZyYgc3RyICkgY29uc3Q7CgogICAgaW50 IG1hdGNoKCBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBpbmRleCA9IDAsIGludCAqbGVuID0gMCwK ICAgICAgICAgICAgICAgYm9vbCBpbmRleElzU3RhcnQgPSBUUlVFICkgY29uc3Q7CiMgOTAgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcmVnZXhwLmgiCiAgICBpbnQgc2VhcmNoKCBjb25z dCBRU3RyaW5nJiBzdHIsIGludCBvZmZzZXQgPSAwICkgY29uc3Q7CiAgICBpbnQgc2VhcmNoKCBj b25zdCBRU3RyaW5nJiBzdHIsIGludCBvZmZzZXQsIENhcmV0TW9kZSBjYXJldE1vZGUgKSBjb25z dDsKICAgIGludCBzZWFyY2hSZXYoIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IG9mZnNldCA9IC0x ICkgY29uc3Q7CiAgICBpbnQgc2VhcmNoUmV2KCBjb25zdCBRU3RyaW5nJiBzdHIsIGludCBvZmZz ZXQsIENhcmV0TW9kZSBjYXJldE1vZGUgKSBjb25zdDsKCiAgICBpbnQgbWF0Y2hlZExlbmd0aCgp IGNvbnN0OwoKICAgIGludCBudW1DYXB0dXJlcygpIGNvbnN0OwogICAgUVN0cmluZ0xpc3QgY2Fw dHVyZWRUZXh0cygpOwogICAgUVN0cmluZyBjYXAoIGludCBudGggPSAwICk7CiAgICBpbnQgcG9z KCBpbnQgbnRoID0gMCApOwogICAgUVN0cmluZyBlcnJvclN0cmluZygpOwoKCiAgICBzdGF0aWMg UVN0cmluZyBlc2NhcGUoIGNvbnN0IFFTdHJpbmcmIHN0ciApOwoKcHJpdmF0ZToKICAgIHZvaWQg Y29tcGlsZSggYm9vbCBjYXNlU2Vuc2l0aXZlICk7CgogICAgc3RhdGljIGludCBjYXJldEluZGV4 KCBpbnQgb2Zmc2V0LCBDYXJldE1vZGUgY2FyZXRNb2RlICk7CgogICAgUVJlZ0V4cEVuZ2luZSAq ZW5nOwogICAgUVJlZ0V4cFByaXZhdGUgKnByaXY7Cn07CiMgNDUgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xdmFsaWRhdG9yLmgiIDIKCgoKCgpjbGFzcyBRVmFsaWRhdG9yIDogcHVibGlj IFFPYmplY3QKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkg Y29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAq Y2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsg dmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0 X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlk LCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFP YmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRp Y01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlz OyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsg c3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsg cHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiAgICBRVmFsaWRh dG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwogICAgflFWYWxp ZGF0b3IoKTsKCiAgICBlbnVtIFN0YXRlIHsgSW52YWxpZCwgSW50ZXJtZWRpYXRlLCBWYWxpZD1J bnRlcm1lZGlhdGUsIEFjY2VwdGFibGUgfTsKCiAgICB2aXJ0dWFsIFN0YXRlIHZhbGlkYXRlKCBR U3RyaW5nICYsIGludCAmICkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGZpeHVwKCBRU3Ry aW5nICYgKSBjb25zdDsKCnByaXZhdGU6CgogICAgUVZhbGlkYXRvciggY29uc3QgUVZhbGlkYXRv ciAmICk7CiAgICBRVmFsaWRhdG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFWYWxpZGF0b3IgJiApOwoK fTsKCgpjbGFzcyBRSW50VmFsaWRhdG9yIDogcHVibGljIFFWYWxpZGF0b3IKewogICAgcHVibGlj OiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj TWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZp cnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9r ZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3Qq ICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYp OyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFW YXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVj dCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRy KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4 KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRh T2JqZWN0ICptZXRhT2JqOwogICAKICAgCgpwdWJsaWM6CiAgICBRSW50VmFsaWRhdG9yKCBRT2Jq ZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwogICAgUUludFZhbGlkYXRvcigg aW50IGJvdHRvbSwgaW50IHRvcCwKICAgICAgICAgICAgICAgICAgIFFPYmplY3QgKiBwYXJlbnQs IGNvbnN0IGNoYXIgKm5hbWUgPSAwICk7CiAgICB+UUludFZhbGlkYXRvcigpOwoKICAgIFFWYWxp ZGF0b3I6OlN0YXRlIHZhbGlkYXRlKCBRU3RyaW5nICYsIGludCAmICkgY29uc3Q7CgogICAgdm9p ZCBzZXRCb3R0b20oIGludCApOwogICAgdm9pZCBzZXRUb3AoIGludCApOwogICAgdmlydHVhbCB2 b2lkIHNldFJhbmdlKCBpbnQgYm90dG9tLCBpbnQgdG9wICk7CgogICAgaW50IGJvdHRvbSgpIGNv bnN0IHsgcmV0dXJuIGI7IH0KICAgIGludCB0b3AoKSBjb25zdCB7IHJldHVybiB0OyB9Cgpwcml2 YXRlOgoKICAgIFFJbnRWYWxpZGF0b3IoIGNvbnN0IFFJbnRWYWxpZGF0b3IgJiApOwogICAgUUlu dFZhbGlkYXRvciYgb3BlcmF0b3I9KCBjb25zdCBRSW50VmFsaWRhdG9yICYgKTsKCgogICAgaW50 IGIsIHQ7Cn07CgoKCmNsYXNzIFFEb3VibGVWYWxpZGF0b3IgOiBwdWJsaWMgUVZhbGlkYXRvcgp7 CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJl dHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo KSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJv b2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50 LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBR VmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBp bnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVj dCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGlj IFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0 cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBz dGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRRG91 YmxlVmFsaWRhdG9yKCBRT2JqZWN0ICogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCApOwog ICAgUURvdWJsZVZhbGlkYXRvciggZG91YmxlIGJvdHRvbSwgZG91YmxlIHRvcCwgaW50IGRlY2lt YWxzLAogICAgICAgICAgICAgICAgICAgICAgUU9iamVjdCAqIHBhcmVudCwgY29uc3QgY2hhciAq bmFtZSA9IDAgKTsKICAgIH5RRG91YmxlVmFsaWRhdG9yKCk7CgogICAgUVZhbGlkYXRvcjo6U3Rh dGUgdmFsaWRhdGUoIFFTdHJpbmcgJiwgaW50ICYgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg c2V0UmFuZ2UoIGRvdWJsZSBib3R0b20sIGRvdWJsZSB0b3AsIGludCBkZWNpbWFscyA9IDAgKTsK ICAgIHZvaWQgc2V0Qm90dG9tKCBkb3VibGUgKTsKICAgIHZvaWQgc2V0VG9wKCBkb3VibGUgKTsK ICAgIHZvaWQgc2V0RGVjaW1hbHMoIGludCApOwoKICAgIGRvdWJsZSBib3R0b20oKSBjb25zdCB7 IHJldHVybiBiOyB9CiAgICBkb3VibGUgdG9wKCkgY29uc3QgeyByZXR1cm4gdDsgfQogICAgaW50 IGRlY2ltYWxzKCkgY29uc3QgeyByZXR1cm4gZDsgfQoKcHJpdmF0ZToKCiAgICBRRG91YmxlVmFs aWRhdG9yKCBjb25zdCBRRG91YmxlVmFsaWRhdG9yICYgKTsKICAgIFFEb3VibGVWYWxpZGF0b3Im IG9wZXJhdG9yPSggY29uc3QgUURvdWJsZVZhbGlkYXRvciAmICk7CgoKICAgIGRvdWJsZSBiLCB0 OwogICAgaW50IGQ7Cn07CgoKY2xhc3MgUVJlZ0V4cFZhbGlkYXRvciA6IHB1YmxpYyBRVmFsaWRh dG9yCnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0 IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz TmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1 YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0 KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50 IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0 KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh T2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZh dGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCgpwdWJsaWM6CiAgICBRUmVnRXhwVmFs aWRhdG9yKCBRT2JqZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwICk7CiAgICBRUmVn RXhwVmFsaWRhdG9yKCBjb25zdCBRUmVnRXhwJiByeCwgUU9iamVjdCAqcGFyZW50LAogICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAgKTsKICAgIH5RUmVnRXhwVmFsaWRh dG9yKCk7CgogICAgdmlydHVhbCBRVmFsaWRhdG9yOjpTdGF0ZSB2YWxpZGF0ZSggUVN0cmluZyYg aW5wdXQsIGludCYgcG9zICkgY29uc3Q7CgogICAgdm9pZCBzZXRSZWdFeHAoIGNvbnN0IFFSZWdF eHAmIHJ4ICk7CiAgICBjb25zdCBRUmVnRXhwJiByZWdFeHAoKSBjb25zdCB7IHJldHVybiByOyB9 Cgpwcml2YXRlOgoKICAgIFFSZWdFeHBWYWxpZGF0b3IoIGNvbnN0IFFSZWdFeHBWYWxpZGF0b3Im ICk7CiAgICBRUmVnRXhwVmFsaWRhdG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFSZWdFeHBWYWxpZGF0 b3ImICk7CgoKICAgIFFSZWdFeHAgcjsKfTsKIyAyMiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9w cm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVGFibGVJdGVtLmgiIDIKIyAzMyAi L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBh cmFtVGFibGVJdGVtLmgiCmNsYXNzIFR4cVBhcmFtVGFibGVJdGVtOiBwdWJsaWMgVHhxVGFibGVJ dGVtCnsKcHVibGljOgojIDQ2ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x c2NpbXBsL2luY2x1ZGUvVHhxUGFyYW1UYWJsZUl0ZW0uaCIKICAgVHhxUGFyYW1UYWJsZUl0ZW0o IFFUYWJsZSAqdCwgRWRpdFR5cGUgZSAsIFR4QXR0cmlidXRlU2V0ICphLAogICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUVN0cmluZyBzLCBjb25zdCBRVmFyaWFudCAmdiwgaW50IHIpOwoKCgoK ICB2aXJ0dWFsIH5UeHFQYXJhbVRhYmxlSXRlbSgpIHt9CgoKCgoKICAgUVdpZGdldCAqY3JlYXRl RWRpdG9yKCkgY29uc3Q7CgoKCgoKICAgdm9pZCBzZXRDb250ZW50RnJvbUVkaXRvciggUVdpZGdl dCAqdyApOwoKCgoKCiAgIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmbmV3VGV4dCApOwoK CgoKCiAgdmlydHVhbCB2b2lkIHNldEF0dHJpYlZhbHVlKCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2 aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSwgY29uc3Qg ZG91YmxlIHZhbHVlKTsKCnByaXZhdGU6CgoKCgoKICAgUUd1YXJkZWRQdHI8UUxpbmVFZGl0PiBk TGluZUVkaXQ7Cgp9OwojIDI5ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9x c2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgiIDIKIyAxICIvaG9tZS9yZXNlYXJjaC9ibWls bGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUGFyYW1WZWNUYWJsZUl0ZW0uaCIg MQojIDI3ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1 ZGUvVHhxUGFyYW1WZWNUYWJsZUl0ZW0uaCIKY2xhc3MgVHhxUGFyYW1WZWNUYWJsZUl0ZW06IHB1 YmxpYyBUeHFQYXJhbVRhYmxlSXRlbQp7CnB1YmxpYzoKIyA0MyAiL2hvbWUvcmVzZWFyY2gvYm1p bGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cVBhcmFtVmVjVGFibGVJdGVtLmgi CiAgIFR4cVBhcmFtVmVjVGFibGVJdGVtKCBRVGFibGUgKnQsIEVkaXRUeXBlIGUgLCBUeEF0dHJp YnV0ZVNldCAqYSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgcywgY29uc3Qg UVZhcmlhbnQgJnYsIGludCByLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyBu bSwgY29uc3QgaW50IGluZGV4KTsKCgoKCiAgdmlydHVhbCB+VHhxUGFyYW1WZWNUYWJsZUl0ZW0o KSB7fQoKcHJvdGVjdGVkOgoKCgoKCiAgdmlydHVhbCB2b2lkIHNldEF0dHJpYlZhbHVlKGNvbnN0 IHN0ZDo6c3RyaW5nIG5hbWUsIGNvbnN0IGRvdWJsZSB2YWx1ZSk7Cgpwcml2YXRlOgoKCgoKICBp bnQgYXR0cmliSW5kZXg7Cgp9OwojIDMwICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3Rz LzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRpdFRhYmxlLmgiIDIKIyAxICIvaG9tZS9yZXNlYXJj aC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVjVGFibGVJdGVt LmgiIDEKIyAyNiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9p bmNsdWRlL1R4cVBybVZlY1RhYmxlSXRlbS5oIgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIv cHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMQojIDI3ICIvaG9t ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVj VGFibGVJdGVtLmgiIDIKCgoKCgpjbGFzcyBUeHFQcm1WZWNUYWJsZUl0ZW06IHB1YmxpYyBUeHFU YWJsZUl0ZW0KewogIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNv bnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNs YXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZp cnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9l bWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwg aW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2Jq ZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNN ZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsg fSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0 YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHBy aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgojIDQ2ICIvaG9tZS9y ZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxUHJtVmVjVGFi bGVJdGVtLmgiCiAgIFR4cVBybVZlY1RhYmxlSXRlbSggUVRhYmxlICp0LCBFZGl0VHlwZSBlICwg VHhBdHRyaWJ1dGVTZXQgKmEsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nIHMs IGNvbnN0IHN0ZDo6dmVjdG9yPGRvdWJsZT4gJnYsIGludCByKTsKCgoKCiAgdmlydHVhbCB+VHhx UHJtVmVjVGFibGVJdGVtKCkge30KCnByb3RlY3RlZDoKCgoKCiAgdmlydHVhbCB2b2lkIGNyZWF0 ZUFjdGlvbk1hcHMoKTsKCgoKCiAgdmlydHVhbCBpbnQgZ2V0VmVjU2l6ZSgpIHtyZXR1cm4gKGlu dCl2YWx1ZXMuc2l6ZSgpO30KCgoKCgoKICB2aXJ0dWFsIGJvb2wgY2hlY2tMYWJlbChpbnQgc2Vj dGlvbik7CgoKCgoKCiAgdmlydHVhbCB2b2lkIGFkZFN1Ykl0ZW0oaW50IGluZGV4LCBpbnQgcm93 KTsKCnByb3RlY3RlZCA6Cgpwcml2YXRlOgoKCgoKICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHZhbHVl czsKCn07CiMgMzEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwv aW5jbHVkZS9UeHFFZGl0VGFibGUuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJv amVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25UYWJsZUl0ZW0uaCIgMQojIDIwICIv aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0 aW9uVGFibGVJdGVtLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzcGluYm94 LmgiIDEKIyA0OCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FzcGluYm94LmgiCmNsYXNz IFFMaW5lRWRpdDsKY2xhc3MgUVZhbGlkYXRvcjsKY2xhc3MgUVNwaW5Cb3hQcml2YXRlOwoKY2xh c3MgUVNwaW5Cb3g6IHB1YmxpYyBRV2lkZ2V0LCBwdWJsaWMgUVJhbmdlQ29udHJvbAp7CiAgICBw dWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBz dGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25z dDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRf aW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9i amVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFu dCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGlu dCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBR T2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJp bmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0 clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMg UU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAg CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRU3BpbkJveCggUVdpZGdldCogcGFyZW50PTAsIGNv bnN0IGNoYXIqIG5hbWU9MCApOwogICAgUVNwaW5Cb3goIGludCBtaW5WYWx1ZSwgaW50IG1heFZh bHVlLCBpbnQgc3RlcCA9IDEsCiAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0 IGNoYXIqIG5hbWU9MCApOwogICAgflFTcGluQm94KCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29u c3Q7CgogICAgdmlydHVhbCBRU3RyaW5nIHByZWZpeCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3Ry aW5nIHN1ZmZpeCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNsZWFuVGV4dCgpIGNvbnN0 OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVjaWFsVmFsdWVUZXh0KCBjb25zdCBRU3RyaW5nICZ0 ZXh0ICk7CiAgICBRU3RyaW5nIHNwZWNpYWxWYWx1ZVRleHQoKSBjb25zdDsKCiAgICB2aXJ0dWFs IHZvaWQgc2V0V3JhcHBpbmcoIGJvb2wgb24gKTsKICAgIGJvb2wgd3JhcHBpbmcoKSBjb25zdDsK CiAgICBlbnVtIEJ1dHRvblN5bWJvbHMgeyBVcERvd25BcnJvd3MsIFBsdXNNaW51cyB9OwogICAg dmlydHVhbCB2b2lkIHNldEJ1dHRvblN5bWJvbHMoIEJ1dHRvblN5bWJvbHMgKTsKICAgIEJ1dHRv blN5bWJvbHMgYnV0dG9uU3ltYm9scygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRWYWxp ZGF0b3IoIGNvbnN0IFFWYWxpZGF0b3IqIHYgKTsKICAgIGNvbnN0IFFWYWxpZGF0b3IgKiB2YWxp ZGF0b3IoKSBjb25zdDsKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWlu aW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgaW50IG1pblZhbHVlKCkgY29uc3Q7CiAgICBpbnQg bWF4VmFsdWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TWluVmFsdWUoIGludCApOwogICAgdm9pZCBz ZXRNYXhWYWx1ZSggaW50ICk7CiAgICBpbnQgbGluZVN0ZXAoKSBjb25zdDsKICAgIHZvaWQgc2V0 TGluZVN0ZXAoIGludCApOwogICAgaW50IHZhbHVlKCkgY29uc3Q7CgogICAgUVJlY3QgdXBSZWN0 KCkgY29uc3Q7CiAgICBRUmVjdCBkb3duUmVjdCgpIGNvbnN0OwoKcHVibGljIDoKICAgIHZpcnR1 YWwgdm9pZCBzZXRWYWx1ZSggaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4 KCBjb25zdCBRU3RyaW5nICZ0ZXh0ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U3VmZml4KCBjb25z dCBRU3RyaW5nICZ0ZXh0ICk7CiAgICB2aXJ0dWFsIHZvaWQgc3RlcFVwKCk7CiAgICB2aXJ0dWFs IHZvaWQgc3RlcERvd24oKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKCBib29sIGVuYWJs ZWQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RBbGwoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQg dmFsdWVDaGFuZ2VkKCBpbnQgdmFsdWUgKTsKICAgIHZvaWQgdmFsdWVDaGFuZ2VkKCBjb25zdCBR U3RyaW5nICZ2YWx1ZVRleHQgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgUVN0cmluZyBtYXBW YWx1ZVRvVGV4dCggaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIGludCBtYXBUZXh0VG9WYWx1ZSgg Ym9vbCogb2sgKTsKICAgIFFTdHJpbmcgY3VycmVudFZhbHVlVGV4dCgpOwoKICAgIHZpcnR1YWwg dm9pZCB1cGRhdGVEaXNwbGF5KCk7CiAgICB2aXJ0dWFsIHZvaWQgaW50ZXJwcmV0VGV4dCgpOwoK ICAgIFFMaW5lRWRpdCogZWRpdG9yKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hh bmdlKCk7CiAgICB2aXJ0dWFsIHZvaWQgcmFuZ2VDaGFuZ2UoKTsKCiAgICBib29sIGV2ZW50Rmls dGVyKCBRT2JqZWN0KiBvYmosIFFFdmVudCogZXYgKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFS ZXNpemVFdmVudCogZXYgKTsKCiAgICB2b2lkIHdoZWVsRXZlbnQoIFFXaGVlbEV2ZW50ICogKTsK CiAgICB2b2lkIGxlYXZlRXZlbnQoIFFFdmVudCogKTsKCiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBR U3R5bGUmICk7Cgpwcm90ZWN0ZWQgOgogICAgdm9pZCB0ZXh0Q2hhbmdlZCgpOwoKcHJpdmF0ZToK ICAgIHZvaWQgaW5pdFNwaW5Cb3goKTsKICAgIFFTcGluQm94UHJpdmF0ZSogZDsKICAgIFFMaW5l RWRpdCogdmk7CiAgICBRVmFsaWRhdG9yKiB2YWxpZGF0ZTsKICAgIFFTdHJpbmcgcGZpeDsKICAg IFFTdHJpbmcgc2ZpeDsKICAgIFFTdHJpbmcgc3BlY1RleHQ7CgogICAgdWludCB3cmFwIDogMTsK ICAgIHVpbnQgZWRpdGVkIDogMTsKCiAgICB2b2lkIGFycmFuZ2VXaWRnZXRzKCk7Cgpwcml2YXRl OgoKICAgIFFTcGluQm94KCBjb25zdCBRU3BpbkJveCYgKTsKICAgIFFTcGluQm94JiBvcGVyYXRv cj0oIGNvbnN0IFFTcGluQm94JiApOwoKCn07CiMgMjEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIv cHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25UYWJsZUl0ZW0uaCIgMgojIDMz ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhx T3B0aW9uVGFibGVJdGVtLmgiCmNsYXNzIFR4cU9wdGlvblRhYmxlSXRlbTogcHVibGljIFR4cVRh YmxlSXRlbQp7CnB1YmxpYzoKIyA0NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8z LjIvcXNjaW1wbC9pbmNsdWRlL1R4cU9wdGlvblRhYmxlSXRlbS5oIgogICBUeHFPcHRpb25UYWJs ZUl0ZW0oIFFUYWJsZSAqdCwgRWRpdFR5cGUgZSAsIFR4QXR0cmlidXRlU2V0ICphLCBjb25zdCBR U3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBpbnQgcik7CgoKCgogICB2aXJ0dWFsIH5UeHFP cHRpb25UYWJsZUl0ZW0oKSB7fQoKCgoKICAgUVdpZGdldCAqY3JlYXRlRWRpdG9yKCkgY29uc3Q7 CgoKCgoKICAgdm9pZCBzZXRDb250ZW50RnJvbUVkaXRvciggUVdpZGdldCAqdyApOwoKCgoKCiAg IHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmbmV3VGV4dCApOwoKCgoKCiAgdmlydHVhbCB2 b2lkIHNldEF0dHJpYlZhbHVlKCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKCiAgdmlydHVhbCB2b2lkIHNl dEF0dHJpYlZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUsIGNvbnN0IGludCB2YWx1ZSk7Cgpw cml2YXRlOgoKCgoKICAgUUd1YXJkZWRQdHI8UVNwaW5Cb3g+IHNwaW5Cb3g7CgoKfTsKIyAzMiAi L2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4cUVk aXRUYWJsZS5oIiAyCiMgMSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNj aW1wbC9pbmNsdWRlL1R4cU9wdGlvblZlY1RhYmxlSXRlbS5oIiAxCiMgMjcgIi9ob21lL3Jlc2Vh cmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRpb25WZWNUYWJs ZUl0ZW0uaCIKY2xhc3MgVHhxT3B0aW9uVmVjVGFibGVJdGVtOiBwdWJsaWMgVHhxT3B0aW9uVGFi bGVJdGVtCnsKcHVibGljOgojIDQzICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMu Mi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0aW9uVmVjVGFibGVJdGVtLmgiCiAgIFR4cU9wdGlvblZl Y1RhYmxlSXRlbSggUVRhYmxlICp0LCBFZGl0VHlwZSBlICwgVHhBdHRyaWJ1dGVTZXQgKmEsCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nIHMsIGNvbnN0IFFWYXJpYW50ICZ2LCBp bnQgciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgbm0sIGNvbnN0IGludCBp bmRleCk7CgoKCgogIHZpcnR1YWwgflR4cU9wdGlvblZlY1RhYmxlSXRlbSgpIHt9Cgpwcm90ZWN0 ZWQ6CgoKCgoKICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmliVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcg bmFtZSwgY29uc3QgaW50IHZhbHVlKTsKCnByaXZhdGU6CgoKCgogIGludCBhdHRyaWJJbmRleDsK Cn07CiMgMzMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5j bHVkZS9UeHFFZGl0VGFibGUuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVj dHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRWZWNUYWJsZUl0ZW0uaCIgMQojIDM0ICIvaG9t ZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxT3B0VmVj VGFibGVJdGVtLmgiCmNsYXNzIFR4cU9wdFZlY1RhYmxlSXRlbTogcHVibGljIFR4cVRhYmxlSXRl bQp7CiAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CiMgNDggIi9ob21lL3Jlc2VhcmNo L2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2ltcGwvaW5jbHVkZS9UeHFPcHRWZWNUYWJsZUl0ZW0u aCIKICAgVHhxT3B0VmVjVGFibGVJdGVtKCBRVGFibGUgKnQsIEVkaXRUeXBlIGUgLCBUeEF0dHJp YnV0ZVNldCAqYSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgcywgY29uc3Qg c3RkOjp2ZWN0b3I8aW50PiAmdiwgaW50IHIpOwoKCgoKICB2aXJ0dWFsIH5UeHFPcHRWZWNUYWJs ZUl0ZW0oKSB7fQoKcHJvdGVjdGVkOgoKCgoKICB2aXJ0dWFsIHZvaWQgY3JlYXRlQWN0aW9uTWFw cygpOwoKCgoKICB2aXJ0dWFsIGludCBnZXRWZWNTaXplKCkge3JldHVybiAoaW50KXZhbHVlcy5z aXplKCk7fQoKCgoKCgogIHZpcnR1YWwgYm9vbCBjaGVja0xhYmVsKGludCBzZWN0aW9uKTsKCgoK CgoKICB2aXJ0dWFsIHZvaWQgYWRkU3ViSXRlbShpbnQgaW5kZXgsIGludCByb3cpOwoKcHJvdGVj dGVkIDoKCnByaXZhdGU6CgoKCiAgc3RkOjp2ZWN0b3I8aW50PiB2YWx1ZXM7Cgp9OwojIDM0ICIv aG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi9xc2NpbXBsL2luY2x1ZGUvVHhxRWRp dFRhYmxlLmgiIDIKIyA0OSAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNj aW1wbC9pbmNsdWRlL1R4cUVkaXRUYWJsZS5oIgpjbGFzcyBUeHFFZGl0VGFibGU6IHB1YmxpYyBR VGFibGUKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29u c3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xh c3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmly dHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2Vt aXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBp bnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmpl Y3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9 IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgoKCgoKCgogICBUeHFF ZGl0VGFibGUoIFFXaWRnZXQgKiBwYXJlbnQgPSAwLCBjb25zdCBjaGFyICogbmFtZSA9IDAgKTsK CgoKCgoKCiAgIHZvaWQgc2V0QXR0cmlidXRlKFR4QXR0cmlidXRlU2V0ICphKTsKCgoKCgoKCiAg IHZvaWQgc2V0QXR0cmlidXRlRmlsdGVyKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZm4pOwoK CgoKCgoKICAgdm9pZCBhZGRTdHJpbmdJdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3QgUVN0 cmluZyB2YWx1ZSwgY29uc3QgaW50IHJvdyk7CgoKCgoKCgogICB2b2lkIGFkZE9wdGlvbkl0ZW0o Y29uc3QgUVN0cmluZyBuYW1lLCBjb25zdCBpbnQgdmFsdWUsIGNvbnN0IGludCByb3cpOwojIDEw MyAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvcXNjaW1wbC9pbmNsdWRlL1R4 cUVkaXRUYWJsZS5oIgogICB2b2lkIGFkZE9wdGlvblZlY0l0ZW0oY29uc3QgUVN0cmluZyBuYW1l LCBjb25zdCBpbnQgdmFsdWUsIGNvbnN0IGludCByb3csCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFTdHJpbmcgYXR0cmliTmFtZSwgY29uc3QgaW50IGluZGV4KTsKCgoKCgoKCiAgIHZv aWQgYWRkUGFyYW1JdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3QgZG91YmxlIHZhbHVlLCBj b25zdCBpbnQgcm93KTsKIyAxMjMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4y L3FzY2ltcGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIKICAgdm9pZCBhZGRQYXJhbVZlY0l0ZW0o Y29uc3QgUVN0cmluZyBuYW1lLCBjb25zdCBkb3VibGUgdmFsdWUsIGNvbnN0IGludCByb3csCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgYXR0cmliTmFtZSwgY29uc3QgaW50 IGluZGV4KTsKIyAxMzMgIi9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3FzY2lt cGwvaW5jbHVkZS9UeHFFZGl0VGFibGUuaCIKICAgdm9pZCBhZGRPcHRWZWNJdGVtKGNvbnN0IFFT dHJpbmcgbmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiAmdmFsdWUsIGNvbnN0IGludCByb3cp OwoKCgoKCgoKICAgdm9pZCBhZGRQcm1WZWNJdGVtKGNvbnN0IFFTdHJpbmcgbmFtZSwgY29uc3Qg c3RkOjp2ZWN0b3I8ZG91YmxlPiAmdmFsdWUsIGNvbnN0IGludCByb3cpOwoKCgoKCgogICB2b2lk IGhpZGVSb3dzKGNvbnN0IGludCBiZWdpbiwgY29uc3QgaW50IHNpemUpOwoKCgoKCgoKICAgdm9p ZCBzaG93Um93cyhjb25zdCBpbnQgYmVnaW4sIGNvbnN0IGludCBzaXplLCBjb25zdCBpbnQgcmgp OwoKCgoKICAgdm9pZCBoaWRlSGVhZGVyKCk7CgoKCgogIHZvaWQgc2hvd0hlYWRlcigpOwoKcHVi bGljIDoKCgpwcml2YXRlIDoKCnByb3RlY3RlZDoKCgoKCgogICB2b2lkIHJlc2l6ZUV2ZW50KCBR UmVzaXplRXZlbnQgKmUgKTsKCgoKCiAgIHZvaWQgdXBkYXRlTnVtUm93cygpOwoKCgoKICAgc3Rk Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbHRlck5hbWVzOwoKcHJpdmF0ZToKCgoKCiAgVHhBdHRy aWJ1dGVTZXQgKmF0dHJpYjsKCgoKCiAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGF0dHJpYk5h bWVzOwoKfTsKIyAxNyAiVHhWb3JwYWxHVUkuaCIgMgojIDEgIi9ob21lL3Jlc2VhcmNoL2JtaWxs ZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNldC5oIiAxCiMgMzUg Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGll ckF0dHJpYlNldC5oIgpjbGFzcyBUeEhpZXJBdHRyaWJTZXQgOiBwdWJsaWMgVHhBdHRyaWJ1dGVT ZXQgewoKICBwdWJsaWM6CgoKCiAgICBUeEhpZXJBdHRyaWJTZXQoKTsKCgoKCgoKICAgIFR4SGll ckF0dHJpYlNldChzdGQ6OnN0cmluZyBzKTsKCgoKCgoKICAgIFR4SGllckF0dHJpYlNldChjb25z dCBUeEhpZXJBdHRyaWJTZXQmIHRoYSk7CgoKCgoKICAgIFR4SGllckF0dHJpYlNldChjb25zdCBU eEF0dHJpYnV0ZVNldCYgdHApIDogVHhBdHRyaWJ1dGVTZXQodHApeyBzZXR1cCgpOyB9CgoKCgog ICAgdmlydHVhbCB+VHhIaWVyQXR0cmliU2V0KCk7CgoKCgoKCiAgICBUeEhpZXJBdHRyaWJTZXQm IG9wZXJhdG9yPShjb25zdCBUeEhpZXJBdHRyaWJTZXQmKTsKCgoKCgogICAgVHhIaWVyQXR0cmli U2V0JiBvcGVyYXRvcj0oY29uc3QgVHhBdHRyaWJ1dGVTZXQmIHRwKXsKICBUeEF0dHJpYnV0ZVNl dDo6b3BlcmF0b3I9KHRwKTsKICByZXR1cm4gKnRoaXM7fQoKCgoKCgoKICAgIHZpcnR1YWwgc3Rk OjpzdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlR4SGllckF0dHJpYlNldCI7 fQojIDk4ICIvaG9tZS9yZXNlYXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVk ZS9UeEhpZXJBdHRyaWJTZXQuaCIKICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZ2V0QmFzZUNsYXNz KCkgY29uc3QgeyByZXR1cm4gIlR4SGllckF0dHJpYlNldCI7fQojIDExMSAiL2hvbWUvcmVzZWFy Y2gvYm1pbGxlci9wcm9qZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhIaWVyQXR0cmliU2V0Lmgi CiAgICBib29sIGhhc0F0dHJpYihzdGQ6OnN0cmluZyBhdHRyaWJOYW1lKSBjb25zdDsKIyAxMjAg Ii9ob21lL3Jlc2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGll ckF0dHJpYlNldC5oIgogICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGdldE5hbWVzT2ZUeXBl KHN0ZDo6c3RyaW5nIHR5cGUpIGNvbnN0OwoKCgoKCgogICAgdmlydHVhbCB2b2lkIHNldEF0dHJp Yihjb25zdCBUeEhpZXJBdHRyaWJTZXQmIHZhbHVlKTsKIyAxMzYgIi9ob21lL3Jlc2VhcmNoL2Jt aWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNldC5oIgogICAg VHhIaWVyQXR0cmliU2V0IGdldEF0dHJpYihzdGQ6OnN0cmluZyBhdHRyaWJOYW1lKSBjb25zdAog IHRocm93KFR4RGVidWdFeGNlcHQpOwojIDE0NiAiL2hvbWUvcmVzZWFyY2gvYm1pbGxlci9wcm9q ZWN0cy8zLjIvdHhtYXRoL2luY2x1ZGUvVHhIaWVyQXR0cmliU2V0LmgiCiAgICBpbnQgZ2V0QXR0 cmliSW5kZXgoc3RkOjpzdHJpbmcgYXR0cmliTmFtZSkgY29uc3Q7CiMgMTU1ICIvaG9tZS9yZXNl YXJjaC9ibWlsbGVyL3Byb2plY3RzLzMuMi90eG1hdGgvaW5jbHVkZS9UeEhpZXJBdHRyaWJTZXQu aCIKICAgIGJvb2wgYXBwZW5kQXR0cmliKGNvbnN0IFR4SGllckF0dHJpYlNldCYgdmFsdWUpIHsK ICAgICAgaWYocHVibGljUmVzaGFwZSkgcmV0dXJuIGFwcGVuZEF0dHJpYk5vQ2hrKHZhbHVlKTsK ICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CgoKCgoKCiAgICBpbnQgZ2V0TnVtQXR0cmli cygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnMuc2l6ZSgpO30KCgoKCiAgICB2b2lkIHNldFRvRmly c3RBdHRyaWIoKSBjb25zdCB7IGF0dHJpYkl0ZXIgPSBhdHRyaWJJbmRpY2VzLT5iZWdpbigpO30K CgoKCgogICAgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBUeEhpZXJBdHRyaWJTZXQ+IGdldEN1cnJl bnRBdHRyaWJBbmRCdW1wKCkKICBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZShz dGQ6Om9zdHJlYW0mIG9zdHIsIGJvb2wgZHVtcD10cnVlKSBjb25zdDsKIyAxOTMgIi9ob21lL3Jl c2VhcmNoL2JtaWxsZXIvcHJvamVjdHMvMy4yL3R4bWF0aC9pbmNsdWRlL1R4SGllckF0dHJpYlNl dC5oIgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyByZWFkVHlwZShzdGQ6OmlzdHJlYW0mIGlzdHIs CiAgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUpOwoKICBwcm90ZWN0ZWQ6CgoKCgoKICAgICAgdmly dHVhbCB2b2lkIGVtcHR5Tm9DaGsoKTsKCgoKCiAgICBib29sIGFwcGVuZEF0dHJpYk5vQ2hrKGNv bnN0IFR4SGllckF0dHJpYlNldCYgdmFsdWUpOwoKCgoKCgogICAgc3RkOjptYXA8IHN0ZDo6c3Ry aW5nLCBpbnQsIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPioKICBhdHRyaWJJbmRpY2VzOwoKCgoK ICAgIGJvb2wgYXR0cmliSW5kaWNlc093bmVyOwoKCgogICAgc3RkOjp2ZWN0b3I8VHhIaWVyQXR0 cmliU2V0Kj4gYXR0cmliczsKCgoKCiAgICBtdXRhYmxlIHN0ZDo6bWFwPCBzdGQ6OnN0cmluZywg aW50LAogIHN0ZDo6bGVzczxzdGQ6OnN0cmluZz4gPjo6aXRlcmF0b3IgYXR0cmliSXRlcjsKCiAg cHJpdmF0ZToKCgoKICAgIHZvaWQgc2V0dXAoKTsKCn07CgoKaW5saW5lIHN0ZDo6b3N0cmVhbSYg b3BlcmF0b3I8PCAoc3RkOjpvc3RyZWFtJiBvc3RyLCBjb25zdCBUeEhpZXJBdHRyaWJTZXQmIHR4 cCl7CiAgdHhwLndyaXRlKG9zdHIpOwogIHJldHVybiBvc3RyOwp9CgppbmxpbmUgc3RkOjppc3Ry ZWFtJiBvcGVyYXRvcj4+IChzdGQ6OmlzdHJlYW0mIGlzdHIsIFR4SGllckF0dHJpYlNldCYgdHhw KXsKCiAgdHhwLnJlYWQoaXN0cik7CiAgcmV0dXJuIGlzdHI7Cn0KIyAxOCAiVHhWb3JwYWxHVUku aCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFpbndpbmRvdy5oIiAxCiMg NDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWFpbndpbmRvdy5oIgojIDEgIi91c3Iv bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdG9vbGJhci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQt My4xLjEvaW5jbHVkZS9xdG9vbGJhci5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVk ZS9xZG9ja3dpbmRvdy5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZG9j a3dpbmRvdy5oIgpjbGFzcyBRRG9ja1dpbmRvd0hhbmRsZTsKY2xhc3MgUURvY2tXaW5kb3dUaXRs ZUJhcjsKY2xhc3MgUVBhaW50ZXI7CmNsYXNzIFFEb2NrV2luZG93UmVzaXplSGFuZGxlOwpjbGFz cyBRQm94TGF5b3V0OwpjbGFzcyBRSEJveExheW91dDsKY2xhc3MgUVZCb3hMYXlvdXQ7CmNsYXNz IFFEb2NrQXJlYTsKY2xhc3MgUVdpZGdldFJlc2l6ZUhhbmRsZXI7CmNsYXNzIFFNYWluV2luZG93 OwpjbGFzcyBRRG9ja0FyZWFMYXlvdXQ7CmNsYXNzIFFEb2NrV2luZG93UHJpdmF0ZTsKCmNsYXNz IFFEb2NrV2luZG93IDogcHVibGljIFFGcmFtZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFP YmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0g dmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9j YXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0 KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29s IHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0 X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRp YyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyBy ZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7 CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKCiAgICBmcmllbmQg Y2xhc3MgUURvY2tXaW5kb3dIYW5kbGU7CiAgICBmcmllbmQgY2xhc3MgUURvY2tXaW5kb3dUaXRs ZUJhcjsKICAgIGZyaWVuZCBjbGFzcyBRRG9ja0FyZWE7CiAgICBmcmllbmQgY2xhc3MgUURvY2tB cmVhTGF5b3V0OwogICAgZnJpZW5kIGNsYXNzIFFNYWluV2luZG93OwoKcHVibGljOgogICAgZW51 bSBQbGFjZSB7IEluRG9jaywgT3V0c2lkZURvY2sgfTsKICAgIGVudW0gQ2xvc2VNb2RlIHsgTmV2 ZXIgPSAwLCBEb2NrZWQgPSAxLCBVbmRvY2tlZCA9IDIsIEFsd2F5cyA9IERvY2tlZCB8IFVuZG9j a2VkIH07CgogICAgUURvY2tXaW5kb3coIFBsYWNlIHAgPSBJbkRvY2ssIFFXaWRnZXQqIHBhcmVu dD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmID0gMCApOwogICAgUURvY2tXaW5kb3co IFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZiA9IDAgKTsKICAg IH5RRG9ja1dpbmRvdygpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRXaWRnZXQoIFFXaWRnZXQgKncg KTsKICAgIFFXaWRnZXQgKndpZGdldCgpIGNvbnN0OwoKICAgIFBsYWNlIHBsYWNlKCkgY29uc3Qg eyByZXR1cm4gY3VyUGxhY2U7IH0KCiAgICBRRG9ja0FyZWEgKmFyZWEoKSBjb25zdDsKCiAgICB2 aXJ0dWFsIHZvaWQgc2V0Q2xvc2VNb2RlKCBpbnQgbSApOwogICAgYm9vbCBpc0Nsb3NlRW5hYmxl ZCgpIGNvbnN0OwogICAgaW50IGNsb3NlTW9kZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBz ZXRSZXNpemVFbmFibGVkKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNb3ZpbmdFbmFi bGVkKCBib29sIGIgKTsKICAgIGJvb2wgaXNSZXNpemVFbmFibGVkKCkgY29uc3Q7CiAgICBib29s IGlzTW92aW5nRW5hYmxlZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRIb3Jpem9udGFs bHlTdHJldGNoYWJsZSggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxseVN0 cmV0Y2hhYmxlKCBib29sIGIgKTsKICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoYWJsZSgp IGNvbnN0OwogICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJldGNoYWJsZSgpIGNvbnN0OwogICAgdm9p ZCBzZXRIb3Jpem9udGFsU3RyZXRjaGFibGUoIGJvb2wgYiApIHsgc2V0SG9yaXpvbnRhbGx5U3Ry ZXRjaGFibGUoIGIgKTsgfQogICAgdm9pZCBzZXRWZXJ0aWNhbFN0cmV0Y2hhYmxlKCBib29sIGIg KSB7IHNldFZlcnRpY2FsbHlTdHJldGNoYWJsZSggYiApOyB9CiAgICBib29sIGlzSG9yaXpvbnRh bFN0cmV0Y2hhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsbHlTdHJldGNoYWJsZSgp OyB9CiAgICBib29sIGlzVmVydGljYWxTdHJldGNoYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzVmVy dGljYWxseVN0cmV0Y2hhYmxlKCk7IH0KICAgIGJvb2wgaXNTdHJldGNoYWJsZSgpIGNvbnN0OwoK ICAgIHZpcnR1YWwgdm9pZCBzZXRPZmZzZXQoIGludCBvICk7CiAgICBpbnQgb2Zmc2V0KCkgY29u c3Q7CgogICAgdmlydHVhbCB2b2lkIHNldEZpeGVkRXh0ZW50V2lkdGgoIGludCB3ICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0Rml4ZWRFeHRlbnRIZWlnaHQoIGludCBoICk7CiAgICBRU2l6ZSBmaXhl ZEV4dGVudCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXROZXdMaW5lKCBib29sIGIgKTsK ICAgIGJvb2wgbmV3TGluZSgpIGNvbnN0OwoKICAgIFF0OjpPcmllbnRhdGlvbiBvcmllbnRhdGlv bigpIGNvbnN0OwoKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVt U2l6ZSgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgUUJv eExheW91dCAqYm94TGF5b3V0KCk7CgogICAgdmlydHVhbCB2b2lkIHNldE9wYXF1ZU1vdmluZygg Ym9vbCBiICk7CiAgICBib29sIG9wYXF1ZU1vdmluZygpIGNvbnN0OwoKICAgIGJvb2wgZXZlbnRG aWx0ZXIoIFFPYmplY3QgKm8sIFFFdmVudCAqZSApOwoKCgoKCnByb3RlY3RlZDoKICAgIHZvaWQg b3JpZW50YXRpb25DaGFuZ2VkKCBPcmllbnRhdGlvbiBvICk7CiAgICB2b2lkIHBsYWNlQ2hhbmdl ZCggUURvY2tXaW5kb3c6OlBsYWNlIHAgKTsKICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoIGJv b2wgKTsKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgdW5kb2NrKCBRV2lkZ2V0ICp3ICk7CiAg ICB2aXJ0dWFsIHZvaWQgdW5kb2NrKCkgeyB1bmRvY2soIDAgKTsgfQogICAgdmlydHVhbCB2b2lk IGRvY2soKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRPcmllbnRhdGlvbiggT3JpZW50YXRpb24gbyAp OwogICAgdm9pZCBzZXRDYXB0aW9uKCBjb25zdCBRU3RyaW5nICZzICk7Cgpwcm90ZWN0ZWQ6CiAg ICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKmUgKTsKICAgIHZvaWQgc2hvd0V2ZW50 KCBRU2hvd0V2ZW50ICplICk7CiAgICB2b2lkIGhpZGVFdmVudCggUUhpZGVFdmVudCAqZSApOwog ICAgdm9pZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVudCAqZSApOwoKICAgIHZv aWQgZHJhd0ZyYW1lKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGRyYXdDb250ZW50cyggUVBhaW50 ZXIgKiApOwoKICAgIGJvb2wgZXZlbnQoIFFFdmVudCAqZSApOwoKcHJpdmF0ZSA6CiAgICB2b2lk IHRvZ2dsZVZpc2libGUoKSB7IGlmICggIWlzVmlzaWJsZSgpICkgc2hvdygpOyBlbHNlIGhpZGUo KTsgfQoKcHJpdmF0ZToKICAgIHZvaWQgaGFuZGxlTW92ZSggY29uc3QgUVBvaW50ICZwb3MsIGNv bnN0IFFQb2ludCAmZ3AsIGJvb2wgZHJhd1JlY3QgKTsKICAgIHZvaWQgdXBkYXRlR3VpKCk7CiAg ICB2b2lkIHVwZGF0ZVNwbGl0dGVyVmlzaWJpbGl0eSggYm9vbCB2aXNpYmxlICk7CgogICAgdm9p ZCBzdGFydFJlY3REcmF3KCBjb25zdCBRUG9pbnQgJnNvLCBib29sIGRyYXdSZWN0ICk7CiAgICB2 b2lkIGVuZFJlY3REcmF3KCBib29sIGRyYXdSZWN0ICk7CiAgICB2b2lkIHVwZGF0ZVBvc2l0aW9u KCBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcyApOwogICAgUVdpZGdldCAqYXJlYUF0KCBjb25zdCBR UG9pbnQgJmdwICk7CiAgICB2b2lkIHJlbW92ZUZyb21Eb2NrKCBib29sIGZpeE5ld0xpbmVzID0g VFJVRSApOwogICAgdm9pZCBzd2FwUmVjdCggUVJlY3QgJnIsIFF0OjpPcmllbnRhdGlvbiBvLCBj b25zdCBRUG9pbnQgJm9mZnNldCwgUURvY2tBcmVhICphcmVhICk7CiAgICB2b2lkIGluaXQoKTsK CnByaXZhdGU6CiAgICBRRG9ja1dpbmRvd0hhbmRsZSAqaG9ySGFuZGxlLCAqdmVySGFuZGxlOwog ICAgUURvY2tXaW5kb3dUaXRsZUJhciAqdGl0bGVCYXI7CiAgICBRV2lkZ2V0ICp3aWQ7CiAgICBR UGFpbnRlciAqdW5jbGlwcGVkUGFpbnRlcjsKICAgIFFEb2NrQXJlYSAqZG9ja0FyZWEsICp0bXBE b2NrQXJlYTsKICAgIFFSZWN0IGN1cnJSZWN0OwogICAgUGxhY2UgY3VyUGxhY2U7CiAgICBQbGFj ZSBzdGF0ZTsKICAgIGJvb2wgcmVzaXplRW5hYmxlZCA6IDE7CiAgICBib29sIG1vdmVFbmFibGVk IDogMTsKICAgIGJvb2wgbmwgOiAxOwogICAgYm9vbCBvcGFxdWUgOiAxOwogICAgYm9vbCBzdHJl dGNoYWJsZVsgMyBdOwogICAgT3JpZW50YXRpb24gc3RhcnRPcmllbnRhdGlvbjsKICAgIGludCBj TW9kZTsKICAgIFFQb2ludCBzdGFydE9mZnNldDsKICAgIGludCBvZmZzOwogICAgUVNpemUgZkV4 dGVudDsKICAgIFFEb2NrV2luZG93UmVzaXplSGFuZGxlICpoSGFuZGxlVG9wLCAqaEhhbmRsZUJv dHRvbSwgKnZIYW5kbGVMZWZ0LCAqdkhhbmRsZVJpZ2h0OwogICAgUVZCb3hMYXlvdXQgKmhib3g7 CiAgICBRSEJveExheW91dCAqdmJveDsKICAgIFFCb3hMYXlvdXQgKmxheW91dDsKICAgIHZvaWQg KmRvY2tXaW5kb3dEYXRhOwogICAgUVBvaW50IGxhc3RQb3M7CiAgICBRU2l6ZSBsYXN0U2l6ZTsK ICAgIFFXaWRnZXRSZXNpemVIYW5kbGVyICp3aWRnZXRSZXNpemVIYW5kbGVyOwogICAgUURvY2tX aW5kb3dQcml2YXRlICpkOwoKcHJpdmF0ZToKCiAgICBRRG9ja1dpbmRvdyggY29uc3QgUURvY2tX aW5kb3cgJiApOwogICAgUURvY2tXaW5kb3cmIG9wZXJhdG9yPSggY29uc3QgUURvY2tXaW5kb3cg JiApOwoKfTsKCmlubGluZSBRRG9ja0FyZWEgKlFEb2NrV2luZG93OjphcmVhKCkgY29uc3QKewog ICAgcmV0dXJuIGRvY2tBcmVhOwp9CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9x dG9vbGJhci5oIiAyCgoKCgpjbGFzcyBRTWFpbldpbmRvdzsKY2xhc3MgUUJ1dHRvbjsKY2xhc3Mg UUJveExheW91dDsKY2xhc3MgUVRvb2xCYXJQcml2YXRlOwoKY2xhc3MgUVRvb2xCYXI6IHB1Ymxp YyBRRG9ja1dpbmRvdwp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmpl Y3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBj aGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFy KiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJv b2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBp bnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0 eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCog c3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3Qq KXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g MCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g MCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKcHVibGljOgog ICAgUVRvb2xCYXIoIGNvbnN0IFFTdHJpbmcgJmxhYmVsLAogICAgICAgICAgICAgIFFNYWluV2lu ZG93ICosIFRvb2xCYXJEb2NrID0gRG9ja1RvcCwKICAgICAgICAgICAgICBib29sIG5ld0xpbmUg PSBGQUxTRSwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRVG9vbEJhciggY29uc3QgUVN0cmlu ZyAmbGFiZWwsIFFNYWluV2luZG93ICosIFFXaWRnZXQgKiwKICAgICAgICAgICAgICBib29sIG5l d0xpbmUgPSBGQUxTRSwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZiA9IDAgKTsKICAgIFFU b29sQmFyKCBRTWFpbldpbmRvdyogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAg flFUb29sQmFyKCk7CgogICAgdm9pZCBhZGRTZXBhcmF0b3IoKTsKCiAgICB2b2lkIHNob3coKTsK ICAgIHZvaWQgaGlkZSgpOwoKICAgIFFNYWluV2luZG93ICogbWFpbldpbmRvdygpIGNvbnN0OwoK ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJldGNoYWJsZVdpZGdldCggUVdpZGdldCAqICk7CgogICAg Ym9vbCBldmVudCggUUV2ZW50ICogZSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRMYWJlbCggY29u c3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nIGxhYmVsKCkgY29uc3Q7CgogICAgdmlydHVhbCB2 b2lkIGNsZWFyKCk7CgogICAgUVNpemUgbWluaW11bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1p bmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0 aW9uIG8gKTsKICAgIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53LCBpbnQgbWluaCApOwoK cHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICplICk7CiAgICB2 b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUgJiApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNyZWF0ZVBv cHVwKCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0KCk7CgogICAgUVRvb2xCYXJQcml2YXRlICog ZDsKICAgIFFNYWluV2luZG93ICogbXc7CiAgICBRV2lkZ2V0ICogc3c7CiAgICBRU3RyaW5nIGw7 CgogICAgZnJpZW5kIGNsYXNzIFFNYWluV2luZG93OwoKcHJpdmF0ZToKCiAgICBRVG9vbEJhcigg Y29uc3QgUVRvb2xCYXIgJiApOwogICAgUVRvb2xCYXImIG9wZXJhdG9yPSggY29uc3QgUVRvb2xC YXIgJiApOwoKfTsKIyA0NCAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtYWlud2luZG93 LmgiIDIKCgoKCgoKY2xhc3MgUU1lbnVCYXI7CmNsYXNzIFFTdGF0dXNCYXI7CmNsYXNzIFFUb29s VGlwR3JvdXA7CmNsYXNzIFFNYWluV2luZG93UHJpdmF0ZTsKY2xhc3MgUU1haW5XaW5kb3dMYXlv dXQ7CmNsYXNzIFFQb3B1cE1lbnU7CgpjbGFzcyBRTWFpbldpbmRvdzogcHVibGljIFFXaWRnZXQK ewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKICAgCiAgIAogICAKICAgCgpwdWJsaWM6 CiAgICBRTWFpbldpbmRvdyggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwg V0ZsYWdzIGYgPSBXVHlwZV9Ub3BMZXZlbCApOwogICAgflFNYWluV2luZG93KCk7CgoKICAgIFFN ZW51QmFyICogbWVudUJhcigpIGNvbnN0OwoKICAgIFFTdGF0dXNCYXIgKiBzdGF0dXNCYXIoKSBj b25zdDsKCiAgICBRVG9vbFRpcEdyb3VwICogdG9vbFRpcEdyb3VwKCkgY29uc3Q7CgoKICAgIHZp cnR1YWwgdm9pZCBzZXRDZW50cmFsV2lkZ2V0KCBRV2lkZ2V0ICogKTsKICAgIFFXaWRnZXQgKiBj ZW50cmFsV2lkZ2V0KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldERvY2tFbmFibGVkKCBE b2NrIGRvY2ssIGJvb2wgZW5hYmxlICk7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIERvY2sgZG9j ayApIGNvbnN0OwogICAgYm9vbCBpc0RvY2tFbmFibGVkKCBRRG9ja0FyZWEgKmFyZWEgKSBjb25z dDsKICAgIHZpcnR1YWwgdm9pZCBzZXREb2NrRW5hYmxlZCggUURvY2tXaW5kb3cgKnRiLCBEb2Nr IGRvY2ssIGJvb2wgZW5hYmxlICk7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIFFEb2NrV2luZG93 ICp0YiwgRG9jayBkb2NrICkgY29uc3Q7CiAgICBib29sIGlzRG9ja0VuYWJsZWQoIFFEb2NrV2lu ZG93ICp0YiwgUURvY2tBcmVhICphcmVhICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkZERv Y2tXaW5kb3coIFFEb2NrV2luZG93ICosIERvY2sgPSBEb2NrVG9wLCBib29sIG5ld0xpbmUgPSBG QUxTRSApOwogICAgdmlydHVhbCB2b2lkIGFkZERvY2tXaW5kb3coIFFEb2NrV2luZG93ICosIGNv bnN0IFFTdHJpbmcgJmxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY2sg PSBEb2NrVG9wLCBib29sIG5ld0xpbmUgPSBGQUxTRSApOwogICAgdmlydHVhbCB2b2lkIG1vdmVE b2NrV2luZG93KCBRRG9ja1dpbmRvdyAqLCBEb2NrID0gRG9ja1RvcCApOwogICAgdmlydHVhbCB2 b2lkIG1vdmVEb2NrV2luZG93KCBRRG9ja1dpbmRvdyAqLCBEb2NrLCBib29sIG5sLCBpbnQgaW5k ZXgsIGludCBleHRyYU9mZnNldCA9IC0xICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRG9ja1dp bmRvdyggUURvY2tXaW5kb3cgKiApOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRlKCk7 CiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemVIaW50KCkg Y29uc3Q7CgogICAgYm9vbCByaWdodEp1c3RpZmljYXRpb24oKSBjb25zdDsKICAgIGJvb2wgdXNl c0JpZ1BpeG1hcHMoKSBjb25zdDsKICAgIGJvb2wgdXNlc1RleHRMYWJlbCgpIGNvbnN0OwogICAg Ym9vbCBkb2NrV2luZG93c01vdmFibGUoKSBjb25zdDsKICAgIGJvb2wgb3BhcXVlTW92aW5nKCkg Y29uc3Q7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCosIFFFdmVudCogKTsKCiAgICBi b29sIGdldExvY2F0aW9uKCBRRG9ja1dpbmRvdyAqdGIsIERvY2sgJmRvY2ssIGludCAmaW5kZXgs IGJvb2wgJm5sLCBpbnQgJmV4dHJhT2Zmc2V0ICkgY29uc3Q7CgogICAgUVB0ckxpc3Q8UURvY2tX aW5kb3c+IGRvY2tXaW5kb3dzKCBEb2NrIGRvY2sgKSBjb25zdDsKICAgIFFQdHJMaXN0PFFEb2Nr V2luZG93PiBkb2NrV2luZG93cygpIGNvbnN0OwogICAgdm9pZCBsaW5lVXBEb2NrV2luZG93cygg Ym9vbCBrZWVwTmV3TGluZXMgPSBGQUxTRSApOwoKICAgIGJvb2wgaXNEb2NrTWVudUVuYWJsZWQo KSBjb25zdDsKCgogICAgYm9vbCBoYXNEb2NrV2luZG93KCBRRG9ja1dpbmRvdyAqZHcgKTsKCiAg ICB2b2lkIGFkZFRvb2xCYXIoIFFEb2NrV2luZG93ICosIERvY2sgPSBEb2NrVG9wLCBib29sIG5l d0xpbmUgPSBGQUxTRSApOwogICAgdm9pZCBhZGRUb29sQmFyKCBRRG9ja1dpbmRvdyAqLCBjb25z dCBRU3RyaW5nICZsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgRG9jayA9IERvY2tUb3AsIGJv b2wgbmV3TGluZSA9IEZBTFNFICk7CiAgICB2b2lkIG1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAq LCBEb2NrID0gRG9ja1RvcCApOwogICAgdm9pZCBtb3ZlVG9vbEJhciggUURvY2tXaW5kb3cgKiwg RG9jaywgYm9vbCBubCwgaW50IGluZGV4LCBpbnQgZXh0cmFPZmZzZXQgPSAtMSApOwogICAgdm9p ZCByZW1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAqICk7CgogICAgYm9vbCB0b29sQmFyc01vdmFi bGUoKSBjb25zdDsKICAgIFFQdHJMaXN0PFFUb29sQmFyPiB0b29sQmFycyggRG9jayBkb2NrICkg Y29uc3Q7CiAgICB2b2lkIGxpbmVVcFRvb2xCYXJzKCBib29sIGtlZXBOZXdMaW5lcyA9IEZBTFNF ICk7CgoKICAgIHZpcnR1YWwgUURvY2tBcmVhICpkb2NraW5nQXJlYSggY29uc3QgUVBvaW50ICZw ICk7CiAgICBRRG9ja0FyZWEgKmxlZnREb2NrKCkgY29uc3Q7CiAgICBRRG9ja0FyZWEgKnJpZ2h0 RG9jaygpIGNvbnN0OwogICAgUURvY2tBcmVhICp0b3BEb2NrKCkgY29uc3Q7CiAgICBRRG9ja0Fy ZWEgKmJvdHRvbURvY2soKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21pemFibGUo KSBjb25zdDsKCiAgICBib29sIGFwcHJvcHJpYXRlKCBRRG9ja1dpbmRvdyAqZHcgKSBjb25zdDsK CiAgICBlbnVtIERvY2tXaW5kb3dzIHsgT25seVRvb2xCYXJzLCBOb1Rvb2xCYXJzLCBBbGxEb2Nr V2luZG93cyB9OwogICAgUVBvcHVwTWVudSAqY3JlYXRlRG9ja1dpbmRvd01lbnUoIERvY2tXaW5k b3dzIGRvY2tXaW5kb3dzID0gQWxsRG9ja1dpbmRvd3MgKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2 aXJ0dWFsIHZvaWQgc2V0UmlnaHRKdXN0aWZpY2F0aW9uKCBib29sICk7CiAgICB2aXJ0dWFsIHZv aWQgc2V0VXNlc0JpZ1BpeG1hcHMoIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VzVGV4 dExhYmVsKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBi b29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlTW92aW5nKCBib29sICk7CiAgICB2aXJ0 dWFsIHZvaWQgc2V0RG9ja01lbnVFbmFibGVkKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgd2hh dHNUaGlzKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXBwcm9wcmlhdGUoIFFEb2NrV2luZG93ICpk dywgYm9vbCBhICk7CiAgICB2aXJ0dWFsIHZvaWQgY3VzdG9taXplKCk7CgoKICAgIHZvaWQgc2V0 VG9vbEJhcnNNb3ZhYmxlKCBib29sICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHBpeG1hcFNpemVD aGFuZ2VkKCBib29sICk7CiAgICB2b2lkIHVzZXNUZXh0TGFiZWxDaGFuZ2VkKCBib29sICk7CiAg ICB2b2lkIGRvY2tXaW5kb3dQb3NpdGlvbkNoYW5nZWQoIFFEb2NrV2luZG93ICogKTsKCgoKICAg IHZvaWQgdG9vbEJhclBvc2l0aW9uQ2hhbmdlZCggUVRvb2xCYXIgKiApOwoKCnByb3RlY3RlZCA6 CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBMYXlvdXQoKTsKICAgIHZpcnR1YWwgYm9vbCBzaG93RG9j a01lbnUoIGNvbnN0IFFQb2ludCAmZ2xvYmFsUG9zICk7CiAgICB2b2lkIG1lbnVBYm91dFRvU2hv dygpOwoKcHJvdGVjdGVkOgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAg ICB2b2lkIGNoaWxkRXZlbnQoIFFDaGlsZEV2ZW50ICogKTsKICAgIGJvb2wgZXZlbnQoIFFFdmVu dCAqICk7CiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZv aWQgc2xvdFBsYWNlQ2hhbmdlZCgpOwogICAgdm9pZCBkb0xpbmVVcCgpIHsgbGluZVVwRG9ja1dp bmRvd3MoIFRSVUUgKTsgfQoKcHJpdmF0ZToKICAgIFFNYWluV2luZG93UHJpdmF0ZSAqIGQ7CiAg ICB2b2lkIHRyaWdnZXJMYXlvdXQoIGJvb2wgZGVsZXRlTGF5b3V0ID0gVFJVRSk7CiAgICBib29s IGRvY2tNYWluV2luZG93KCBRT2JqZWN0ICpkb2NrICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXRN ZW51QmFyKCBRTWVudUJhciAqICk7CgogICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c0JhciggUVN0 YXR1c0JhciAqICk7CgogICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXBHcm91cCggUVRvb2xUaXBH cm91cCAqICk7CgoKICAgIGZyaWVuZCBjbGFzcyBRRG9ja1dpbmRvdzsKICAgIGZyaWVuZCBjbGFz cyBRTWVudUJhcjsKICAgIGZyaWVuZCBjbGFzcyBRSGlkZURvY2s7CiAgICBmcmllbmQgY2xhc3Mg UVRvb2xCYXI7CiAgICBmcmllbmQgY2xhc3MgUU1haW5XaW5kb3dMYXlvdXQ7CnByaXZhdGU6Cgog ICAgUU1haW5XaW5kb3coIGNvbnN0IFFNYWluV2luZG93ICYgKTsKICAgIFFNYWluV2luZG93JiBv cGVyYXRvcj0oIGNvbnN0IFFNYWluV2luZG93ICYgKTsKCn07CgoKaW5saW5lIHZvaWQgUU1haW5X aW5kb3c6OmFkZFRvb2xCYXIoIFFEb2NrV2luZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29s IG5ld0xpbmUgKQp7CiAgICBhZGREb2NrV2luZG93KCB3LCBkb2NrLCBuZXdMaW5lICk7Cn0KCmlu bGluZSB2b2lkIFFNYWluV2luZG93OjphZGRUb29sQmFyKCBRRG9ja1dpbmRvdyAqdywgY29uc3Qg UVN0cmluZyAmbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvb2xCYXJEb2Nr IGRvY2ssIGJvb2wgbmV3TGluZSApCnsKICAgIGFkZERvY2tXaW5kb3coIHcsIGxhYmVsLCBkb2Nr LCBuZXdMaW5lICk7Cn0KCmlubGluZSB2b2lkIFFNYWluV2luZG93Ojptb3ZlVG9vbEJhciggUURv Y2tXaW5kb3cgKncsIFRvb2xCYXJEb2NrIGRvY2sgKQp7CiAgICBtb3ZlRG9ja1dpbmRvdyggdywg ZG9jayApOwp9CgppbmxpbmUgdm9pZCBRTWFpbldpbmRvdzo6bW92ZVRvb2xCYXIoIFFEb2NrV2lu ZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29sIG5sLCBpbnQgaW5kZXgsIGludCBleHRyYU9m ZnNldCApCnsKICAgIG1vdmVEb2NrV2luZG93KCB3LCBkb2NrLCBubCwgaW5kZXgsIGV4dHJhT2Zm c2V0ICk7Cn0KCmlubGluZSB2b2lkIFFNYWluV2luZG93OjpyZW1vdmVUb29sQmFyKCBRRG9ja1dp bmRvdyAqdyApCnsKICAgIHJlbW92ZURvY2tXaW5kb3coIHcgKTsKfQoKaW5saW5lIGJvb2wgUU1h aW5XaW5kb3c6OnRvb2xCYXJzTW92YWJsZSgpIGNvbnN0CnsKICAgIHJldHVybiBkb2NrV2luZG93 c01vdmFibGUoKTsKfQoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OmxpbmVVcFRvb2xCYXJzKCBi b29sIGtlZXBOZXdMaW5lcyApCnsKICAgIGxpbmVVcERvY2tXaW5kb3dzKCBrZWVwTmV3TGluZXMg KTsKfQoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OnNldFRvb2xCYXJzTW92YWJsZSggYm9vbCBi ICkKewogICAgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBiICk7Cn0KCgoKIFFUZXh0U3RyZWFtICZv cGVyYXRvcjw8KCBRVGV4dFN0cmVhbSAmLCBjb25zdCBRTWFpbldpbmRvdyAmICk7CiBRVGV4dFN0 cmVhbSAmb3BlcmF0b3I+PiggUVRleHRTdHJlYW0gJiwgUU1haW5XaW5kb3cgJiApOwojIDE5ICJU eFZvcnBhbEdVSS5oIiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51YmFy LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51YmFyLmgiCiMgMSAi L3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb3B1cG1lbnUuaCIgMQojIDQzICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBvcHVwbWVudS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xbWVudWRhdGEuaCIgMQojIDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1 ZGUvcW1lbnVkYXRhLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwu aCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcW1lbnVkYXRhLmgiIDIKCiMg MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FrZXlzZXF1ZW5jZS5oIiAxCiMgNTQgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xa2V5c2VxdWVuY2UuaCIKY2xhc3MgUUtleVNlcXVl bmNlOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFLZXlT ZXF1ZW5jZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUtl eVNlcXVlbmNlICYgKTsKCgpjbGFzcyBRS2V5U2VxdWVuY2VQcml2YXRlOwoKY2xhc3MgUUtleVNl cXVlbmNlIDogcHVibGljIFF0CnsKcHVibGljOgogICAgUUtleVNlcXVlbmNlKCk7CiAgICBRS2V5 U2VxdWVuY2UoIGNvbnN0IFFTdHJpbmcmIGtleSApOwogICAgUUtleVNlcXVlbmNlKCBpbnQga2V5 ICk7CiAgICBRS2V5U2VxdWVuY2UoIGludCBrMSwgaW50IGsyLCBpbnQgazMgPSAwLCBpbnQgazQg PSAwICk7CiAgICBRS2V5U2VxdWVuY2UoIGNvbnN0IFFLZXlTZXF1ZW5jZSAmICk7CiAgICB+UUtl eVNlcXVlbmNlKCk7CgogICAgdWludCBjb3VudCgpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkg Y29uc3Q7CiAgICBRdDo6U2VxdWVuY2VNYXRjaCBtYXRjaGVzKCBjb25zdCBRS2V5U2VxdWVuY2Ug JiApIGNvbnN0OwoKICAgIG9wZXJhdG9yIFFTdHJpbmcoKSBjb25zdDsKICAgIG9wZXJhdG9yIGlu dCAoKSBjb25zdDsKICAgIGludCBvcGVyYXRvcltdKCB1aW50ICkgY29uc3Q7CiAgICBRS2V5U2Vx dWVuY2UgJm9wZXJhdG9yPSggY29uc3QgUUtleVNlcXVlbmNlICYgKTsKICAgIGJvb2wgb3BlcmF0 b3I9PSggY29uc3QgUUtleVNlcXVlbmNlJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9ICgg Y29uc3QgUUtleVNlcXVlbmNlJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIHN0YXRpYyBpbnQgZGVj b2RlU3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIHN0YXRpYyBRU3RyaW5nIGVuY29kZVN0 cmluZyggaW50ICk7CiAgICBpbnQgYXNzaWduKCBRU3RyaW5nICk7CiAgICB2b2lkIHNldEtleSgg aW50IGtleSwgaW50IGluZGV4ICk7CgogICAgUUtleVNlcXVlbmNlUHJpdmF0ZSogZDsKCiAgICBm cmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFLZXlT ZXF1ZW5jZSAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3Ry ZWFtICYsIFFLZXlTZXF1ZW5jZSAmICk7CiAgICBmcmllbmQgY2xhc3MgUUFjY2VsTWFuYWdlcjsK fTsKIyA0NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZW51ZGF0YS5oIiAyCgojIDEg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xc2lnbmFsLmgiIDEKIyA0NyAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FzaWduYWwuaCIKY2xhc3MgUVNpZ25hbCA6IHB1YmxpYyBRT2Jq ZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0 IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz TmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1 YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0 KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50 IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0 KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh T2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZh dGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCnB1YmxpYzoKICAgIFFTaWduYWwoIFFP YmplY3QgKnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIH5RU2lnbmFsKCk7Cgog ICAgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVt YmVyICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25z dCBjaGFyICptZW1iZXI9MCApOwoKICAgIHZvaWQgYWN0aXZhdGUoKTsKCgogICAgYm9vbCBpc0Js b2NrZWQoKSBjb25zdCB7IHJldHVybiBRT2JqZWN0OjpzaWduYWxzQmxvY2tlZCgpOyB9CiAgICB2 b2lkIGJsb2NrKCBib29sIGIgKSB7IFFPYmplY3Q6OmJsb2NrU2lnbmFscyggYiApOyB9CgogICAg dm9pZCBzZXRQYXJhbWV0ZXIoIGludCB2YWx1ZSApOwogICAgaW50IHBhcmFtZXRlcigpIGNvbnN0 OwoKCgoKICAgIHZvaWQgc2V0VmFsdWUoIGNvbnN0IFFWYXJpYW50ICZ2YWx1ZSApOwogICAgUVZh cmlhbnQgdmFsdWUoKSBjb25zdDsKCnByb3RlY3RlZDoKCiAgICB2b2lkIHNpZ25hbCggY29uc3Qg UVZhcmlhbnQmICk7CgogICAgdm9pZCBpbnRTaWduYWwoIGludCApOwoKcHJpdmF0ZToKCiAgICBR VmFyaWFudCB2YWw7Cgpwcml2YXRlOgoKICAgIFFTaWduYWwoIGNvbnN0IFFTaWduYWwgJiApOwog ICAgUVNpZ25hbCAmb3BlcmF0b3I9KCBjb25zdCBRU2lnbmFsICYgKTsKCn07CiMgNDcgIi91c3Iv bG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWVudWRhdGEuaCIgMgoKCgoKCmNsYXNzIFFQb3B1cE1l bnU7CmNsYXNzIFFNZW51RGF0YURhdGE7CmNsYXNzIFFPYmplY3Q7CgpjbGFzcyBRQ3VzdG9tTWVu dUl0ZW07CmNsYXNzIFFNZW51SXRlbURhdGE7CgpjbGFzcyBRTWVudUl0ZW0KewpmcmllbmQgY2xh c3MgUU1lbnVEYXRhOwpwdWJsaWM6CiAgICBRTWVudUl0ZW0oKTsKICAgflFNZW51SXRlbSgpOwoK ICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIGlkZW50OyB9CiAgICBRSWNvblNldCAqaWNvblNl dCgpIGNvbnN0IHsgcmV0dXJuIGljb25zZXRfZGF0YTsgfQogICAgUVN0cmluZyB0ZXh0KCkgY29u c3QgeyByZXR1cm4gdGV4dF9kYXRhOyB9CiAgICBRU3RyaW5nIHdoYXRzVGhpcygpIGNvbnN0IHsg cmV0dXJuIHdoYXRzdGhpc19kYXRhOyB9CiAgICBRUGl4bWFwICpwaXhtYXAoKSBjb25zdCB7IHJl dHVybiBwaXhtYXBfZGF0YTsgfQogICAgUVBvcHVwTWVudSAqcG9wdXAoKSBjb25zdCB7IHJldHVy biBwb3B1cF9tZW51OyB9CiAgICBRV2lkZ2V0ICp3aWRnZXQoKSBjb25zdCB7IHJldHVybiB3aWRn ZXRfaXRlbTsgfQogICAgUUN1c3RvbU1lbnVJdGVtICpjdXN0b20oKSBjb25zdDsKCiAgICBRS2V5 U2VxdWVuY2Uga2V5KCkgY29uc3QgeyByZXR1cm4gYWNjZWxfa2V5OyB9CgogICAgUVNpZ25hbCAq c2lnbmFsKCkgY29uc3QgeyByZXR1cm4gc2lnbmFsX2RhdGE7IH0KICAgIGJvb2wgaXNTZXBhcmF0 b3IoKSBjb25zdCB7IHJldHVybiBpc19zZXBhcmF0b3I7IH0KICAgIGJvb2wgaXNFbmFibGVkKCkg Y29uc3QgeyByZXR1cm4gaXNfZW5hYmxlZDsgfQogICAgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7 IHJldHVybiBpc19jaGVja2VkOyB9CiAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBp c19kaXJ0eTsgfQogICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc192aXNpYmxl OyB9CiAgICBib29sIGlzRW5hYmxlZEFuZFZpc2libGUoKSBjb25zdCB7IHJldHVybiBpc19lbmFi bGVkICYmIGlzX3Zpc2libGU7IH0KCiAgICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcgJnRl eHQgKSB7IHRleHRfZGF0YSA9IHRleHQ7IH0KICAgIHZvaWQgc2V0RGlydHkoIGJvb2wgZGlydHkg KSB7IGlzX2RpcnR5ID0gZGlydHk7IH0KICAgIHZvaWQgc2V0VmlzaWJsZSggYm9vbCB2aXNpYmxl ICkgeyBpc192aXNpYmxlID0gdmlzaWJsZTsgfQogICAgdm9pZCBzZXRXaGF0c1RoaXMoIGNvbnN0 IFFTdHJpbmcgJnRleHQgKSB7IHdoYXRzdGhpc19kYXRhID0gdGV4dDsgfQoKcHJpdmF0ZToKICAg IGludCBpZGVudDsKICAgIFFJY29uU2V0ICppY29uc2V0X2RhdGE7CiAgICBRU3RyaW5nIHRleHRf ZGF0YTsKICAgIFFTdHJpbmcgd2hhdHN0aGlzX2RhdGE7CiAgICBRUGl4bWFwICpwaXhtYXBfZGF0 YTsKICAgIFFQb3B1cE1lbnUgKnBvcHVwX21lbnU7CiAgICBRV2lkZ2V0ICp3aWRnZXRfaXRlbTsK CiAgICBRS2V5U2VxdWVuY2UgYWNjZWxfa2V5OwoKICAgIFFTaWduYWwgKnNpZ25hbF9kYXRhOwog ICAgdWludCBpc19zZXBhcmF0b3IgOiAxOwogICAgdWludCBpc19lbmFibGVkIDogMTsKICAgIHVp bnQgaXNfY2hlY2tlZCA6IDE7CiAgICB1aW50IGlzX2RpcnR5IDogMTsKICAgIHVpbnQgaXNfdmlz aWJsZSA6IDE7CiAgICBRTWVudUl0ZW1EYXRhKiBkOwoKICAgIFFNZW51SXRlbURhdGEqIGV4dHJh KCk7Cgpwcml2YXRlOgoKICAgIFFNZW51SXRlbSggY29uc3QgUU1lbnVJdGVtICYgKTsKICAgIFFN ZW51SXRlbSAmb3BlcmF0b3I9KCBjb25zdCBRTWVudUl0ZW0gJiApOwoKfTsKCgp0eXBlZGVmIFFQ dHJMaXN0PFFNZW51SXRlbT4gUU1lbnVJdGVtTGlzdDsKdHlwZWRlZiBRUHRyTGlzdEl0ZXJhdG9y PFFNZW51SXRlbT4gUU1lbnVJdGVtTGlzdEl0OwoKCmNsYXNzIFFDdXN0b21NZW51SXRlbSA6IHB1 YmxpYyBRdAp7CnB1YmxpYzoKICAgIFFDdXN0b21NZW51SXRlbSgpOwogICAgdmlydHVhbCB+UUN1 c3RvbU1lbnVJdGVtKCk7CiAgICB2aXJ0dWFsIGJvb2wgZnVsbFNwYW4oKSBjb25zdDsKICAgIHZp cnR1YWwgYm9vbCBpc1NlcGFyYXRvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQo IGNvbnN0IFFGb250JiBmb250ICk7CiAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoIFFQYWludGVyKiBw LCBjb25zdCBRQ29sb3JHcm91cCYgY2csIGJvb2wgYWN0LAogICAgICAgICAgICAgICAgICAgICAg ICBib29sIGVuYWJsZWQsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICkgPSAwOwogICAgdmly dHVhbCBRU2l6ZSBzaXplSGludCgpID0gMDsKfTsKCgpjbGFzcyBRTWVudURhdGEKewpmcmllbmQg Y2xhc3MgUU1lbnVCYXI7CmZyaWVuZCBjbGFzcyBRUG9wdXBNZW51OwpwdWJsaWM6CiAgICBRTWVu dURhdGEoKTsKICAgIHZpcnR1YWwgflFNZW51RGF0YSgpOwoKICAgIHVpbnQgY291bnQoKSBjb25z dDsKCgogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFTdHJpbmcgJnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciogbWVt YmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUtleVNlcXVlbmNlJiBhY2Nl bCA9IDAsIGludCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwogICAgaW50IGluc2VydEl0ZW0o IGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UVN0cmluZyAmdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg KnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBRS2V5U2VxdWVuY2UmIGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBpbmRleCA9 IC0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIq IG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFLZXlTZXF1ZW5jZSYg YWNjZWwgPSAwLCBpbnQgaWQgPSAtMSwgaW50IGluZGV4ID0gLTEgKTsKICAgIGludCBpbnNlcnRJ dGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFQaXhtYXAgJnBpeG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP YmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRS2V5U2VxdWVuY2UmIGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBp bmRleCA9IC0xICk7CgogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFTdHJpbmcgJnRleHQsIGlu dCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUUljb25T ZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZ0ZXh0 LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoKICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBR U3RyaW5nICZ0ZXh0LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3Qg UUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n ICZ0ZXh0LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBpZD0tMSwgaW50IGluZGV4PS0xICk7CgoKICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBRUGl4 bWFwICZwaXhtYXAsIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRl bSggY29uc3QgUUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBRUGl4bWFwICZwaXhtYXAsIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5z ZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQg aW5zZXJ0SXRlbSggY29uc3QgUUljb25TZXQmIGljb24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBRUGl4bWFwICZwaXhtYXAsIFFQb3B1cE1lbnUgKnBvcHVwLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICBpbnQgaW5z ZXJ0SXRlbSggUVdpZGdldCogd2lkZ2V0LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoKICAg IGludCBpbnNlcnRJdGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwgUUN1c3RvbU1lbnVJdGVtKiBj dXN0b20sIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggUUN1 c3RvbU1lbnVJdGVtKiBjdXN0b20sIGludCBpZD0tMSwgaW50IGluZGV4PS0xICk7CgoKICAgIGlu dCBpbnNlcnRTZXBhcmF0b3IoIGludCBpbmRleD0tMSApOwoKICAgIHZvaWQgcmVtb3ZlSXRlbSgg aW50IGlkICk7CiAgICB2b2lkIHJlbW92ZUl0ZW1BdCggaW50IGluZGV4ICk7CiAgICB2b2lkIGNs ZWFyKCk7CgoKICAgIFFLZXlTZXF1ZW5jZSBhY2NlbCggaW50IGlkICkgY29uc3Q7CiAgICB2b2lk IHNldEFjY2VsKCBjb25zdCBRS2V5U2VxdWVuY2UmIGtleSwgaW50IGlkICk7CgoKICAgIFFJY29u U2V0ICppY29uU2V0KCBpbnQgaWQgKSBjb25zdDsKICAgIFFTdHJpbmcgdGV4dCggaW50IGlkICkg Y29uc3Q7CiAgICBRUGl4bWFwICpwaXhtYXAoIGludCBpZCApIGNvbnN0OwoKICAgIHZvaWQgc2V0 V2hhdHNUaGlzKCBpbnQgaWQsIGNvbnN0IFFTdHJpbmcmICk7CiAgICBRU3RyaW5nIHdoYXRzVGhp cyggaW50IGlkICkgY29uc3Q7CgoKICAgIHZvaWQgY2hhbmdlSXRlbSggaW50IGlkLCBjb25zdCBR U3RyaW5nICZ0ZXh0ICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUVBpeG1h cCAmcGl4bWFwICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUUljb25TZXQg Jmljb24sIGNvbnN0IFFTdHJpbmcgJnRleHQgKTsKICAgIHZvaWQgY2hhbmdlSXRlbSggaW50IGlk LCBjb25zdCBRSWNvblNldCAmaWNvbiwgY29uc3QgUVBpeG1hcCAmcGl4bWFwICk7CgogICAgdm9p ZCBjaGFuZ2VJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKSB7IGNoYW5nZUl0ZW0o IGlkLCB0ZXh0KTsgfQogICAgdm9pZCBjaGFuZ2VJdGVtKCBjb25zdCBRUGl4bWFwICZwaXhtYXAs IGludCBpZCApIHsgY2hhbmdlSXRlbSggaWQsIHBpeG1hcCApOyB9CiAgICB2b2lkIGNoYW5nZUl0 ZW0oIGNvbnN0IFFJY29uU2V0ICZpY29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKSB7 CiAgICAgICAgY2hhbmdlSXRlbSggaWQsIGljb24sIHRleHQgKTsKICAgIH0KCiAgICBib29sIGlz SXRlbUFjdGl2ZSggaW50IGlkICkgY29uc3Q7CgogICAgYm9vbCBpc0l0ZW1FbmFibGVkKCBpbnQg aWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbUVuYWJsZWQoIGludCBpZCwgYm9vbCBlbmFibGUg KTsKCiAgICBib29sIGlzSXRlbUNoZWNrZWQoIGludCBpZCApIGNvbnN0OwogICAgdm9pZCBzZXRJ dGVtQ2hlY2tlZCggaW50IGlkLCBib29sIGNoZWNrICk7CgogICAgYm9vbCBpc0l0ZW1WaXNpYmxl KCBpbnQgaWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbVZpc2libGUoIGludCBpZCwgYm9vbCB2 aXNpYmxlICk7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIGlu dCBpbmRleE9mKCBpbnQgaWQgKSBjb25zdDsKICAgIGludCBpZEF0KCBpbnQgaW5kZXggKSBjb25z dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRJZCggaW50IGluZGV4LCBpbnQgaWQgKTsKCiAgICBib29s IGNvbm5lY3RJdGVtKCBpbnQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIqIG1lbWJlciApOwogICAgYm9vbCBkaXNjb25u ZWN0SXRlbSggaW50IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFP YmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIgKTsKCiAgICBib29sIHNldEl0ZW1Q YXJhbWV0ZXIoIGludCBpZCwgaW50IHBhcmFtICk7CiAgICBpbnQgaXRlbVBhcmFtZXRlciggaW50 IGlkICkgY29uc3Q7CgogICAgUU1lbnVJdGVtICpmaW5kSXRlbSggaW50IGlkICkgY29uc3Q7CiAg ICBRTWVudUl0ZW0gKmZpbmRJdGVtKCBpbnQgaWQsIFFNZW51RGF0YSAqKiBwYXJlbnQgKSBjb25z dDsKICAgIFFNZW51SXRlbSAqIGZpbmRQb3B1cCggUVBvcHVwTWVudSAqLCBpbnQgKmluZGV4ID0g MCApOwoKICAgIHZpcnR1YWwgdm9pZCBhY3RpdmF0ZUl0ZW1BdCggaW50IGluZGV4ICk7Cgpwcm90 ZWN0ZWQ6CiAgICBpbnQgYWN0SXRlbTsKICAgIFFNZW51SXRlbUxpc3QgKm1pdGVtczsKICAgIFFN ZW51RGF0YSAqcGFyZW50TWVudTsKICAgIHVpbnQgaXNQb3B1cE1lbnUgOiAxOwogICAgdWludCBp c01lbnVCYXIgOiAxOwogICAgdWludCBiYWRTaXplIDogMTsKICAgIHVpbnQgbW91c2VCdERuIDog MTsKICAgIHVpbnQgYXZvaWRfY2lyY3VsYXJpdHkgOiAxOwogICAgdWludCBhY3RJdGVtRG93biA6 IDE7CiAgICB2aXJ0dWFsIHZvaWQgbWVudUNvbnRlbnRzQ2hhbmdlZCgpOwogICAgdmlydHVhbCB2 b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZpcnR1YWwgdm9pZCBtZW51SW5zUG9wdXAoIFFQ b3B1cE1lbnUgKiApOwogICAgdmlydHVhbCB2b2lkIG1lbnVEZWxQb3B1cCggUVBvcHVwTWVudSAq ICk7Cgpwcml2YXRlOgogICAgaW50IGluc2VydEFueSggY29uc3QgUVN0cmluZyAqLCBjb25zdCBR UGl4bWFwICosIFFQb3B1cE1lbnUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUljb25TZXQqLCBpbnQsIGludCwgUVdpZGdldCogPSAwLCBRQ3VzdG9tTWVudUl0ZW0qID0gMCk7 CiAgICB2b2lkIHJlbW92ZVBvcHVwKCBRUG9wdXBNZW51ICogKTsKICAgIHZvaWQgY2hhbmdlSXRl bUljb25TZXQoIGludCBpZCwgY29uc3QgUUljb25TZXQgJmljb24gKTsKCiAgICBRTWVudURhdGFE YXRhICpkOwoKcHJpdmF0ZToKCiAgICBRTWVudURhdGEoIGNvbnN0IFFNZW51RGF0YSAmICk7CiAg ICBRTWVudURhdGEgJm9wZXJhdG9yPSggY29uc3QgUU1lbnVEYXRhICYgKTsKCn07CiMgNDQgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcG9wdXBtZW51LmgiIDIKCgoKY2xhc3MgUVBvcHVw TWVudVByaXZhdGU7CgpjbGFzcyBRUG9wdXBNZW51IDogcHVibGljIFFGcmFtZSwgcHVibGljIFFN ZW51RGF0YQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBj b25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpj bGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2 aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRf ZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQs IGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9i amVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGlj TWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7 IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBz dGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBw cml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIApwdWJsaWM6CiAgICBRUG9w dXBNZW51KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UVBv cHVwTWVudSgpOwoKICAgIHZvaWQgcG9wdXAoIGNvbnN0IFFQb2ludCAmIHBvcywgaW50IGluZGV4 QXRQb2ludCA9IC0xICk7CiAgICB2b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIHZpcnR1 YWwgdm9pZCBzZXRDaGVja2FibGUoIGJvb2wgKTsKICAgIGJvb2wgaXNDaGVja2FibGUoKSBjb25z dDsKCiAgICB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICYgKTsKICAgIHZvaWQgc2hvdygpOwog ICAgdm9pZCBoaWRlKCk7CgogICAgaW50IGV4ZWMoKTsKICAgIGludCBleGVjKCBjb25zdCBRUG9p bnQgJiBwb3MsIGludCBpbmRleEF0UG9pbnQgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIHNldEFj dGl2ZUl0ZW0oIGludCApOwogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICBpbnQgaWRB dCggaW50IGluZGV4ICkgY29uc3QgeyByZXR1cm4gUU1lbnVEYXRhOjppZEF0KCBpbmRleCApOyB9 CiAgICBpbnQgaWRBdCggY29uc3QgUVBvaW50JiBwb3MgKSBjb25zdDsKCiAgICBib29sIGN1c3Rv bVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIGludCBpbnNlcnRUZWFyT2ZmSGFuZGxlKCBpbnQgaWQ9 LTEsIGludCBpbmRleD0tMSApOwoKICAgIHZvaWQgYWN0aXZhdGVJdGVtQXQoIGludCBpbmRleCAp OwogICAgUVJlY3QgaXRlbUdlb21ldHJ5KCBpbnQgaW5kZXggKTsKCgpwcm90ZWN0ZWQ6CiAgICB2 b2lkIGFjdGl2YXRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGl0 ZW1JZCApOwogICAgdm9pZCBhY3RpdmF0ZWRSZWRpcmVjdCggaW50IGl0ZW1JZCApOwogICAgdm9p ZCBoaWdobGlnaHRlZFJlZGlyZWN0KCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFib3V0VG9TaG93 KCk7CiAgICB2b2lkIGFib3V0VG9IaWRlKCk7Cgpwcm90ZWN0ZWQ6CiAgICBpbnQgaXRlbUhlaWdo dCggaW50ICkgY29uc3Q7CiAgICBpbnQgaXRlbUhlaWdodCggUU1lbnVJdGVtKiBtaSApIGNvbnN0 OwogICAgdm9pZCBkcmF3SXRlbSggUVBhaW50ZXIqIHAsIGludCB0YWIsIFFNZW51SXRlbSogbWks CiAgICAgICAgICAgICAgICAgICBib29sIGFjdCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgp OwoKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqICk7CgogICAgdm9pZCBjbG9zZUV2 ZW50KCBRQ2xvc2VFdmVudCAqZSApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq ICk7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBt b3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVu dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiAp OwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9jdXNP dXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVu dCAqICk7CiAgICB2b2lkIGxlYXZlRXZlbnQoIFFFdmVudCAqICk7CiAgICB2b2lkIHN0eWxlQ2hh bmdlKCBRU3R5bGUmICk7CiAgICB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wgKTsKICAgIGludCBj b2x1bW5zKCkgY29uc3Q7CgogICAgYm9vbCBmb2N1c05leHRQcmV2Q2hpbGQoIGJvb2wgbmV4dCAp OwoKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmLCBib29sIGlnbm9yZVNlcGFyYXRv ciA9IFRSVUUgKSBjb25zdDsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQoIGludCBp dGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAgICB2b2lk IGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJveWVkKCk7 CgogICAgdm9pZCBwb3B1cERlc3Ryb3llZCggUU9iamVjdCogKTsKICAgIHZvaWQgbW9kYWxBY3Rp dmF0aW9uKCBpbnQgKTsKCiAgICB2b2lkIHN1Yk1lbnVUaW1lcigpOwogICAgdm9pZCBzdWJTY3Jv bGxUaW1lcigpOwogICAgdm9pZCBhbGxvd0FuaW1hdGlvbigpOwogICAgdm9pZCB0b2dnbGVUZWFy T2ZmKCk7CgogICAgdm9pZCBwZXJmb3JtRGVsYXllZENoYW5nZXMoKTsKCnByaXZhdGU6CiAgICB2 b2lkIHVwZGF0ZVNjcm9sbGVyU3RhdGUoKTsKICAgIHZvaWQgbWVudUNvbnRlbnRzQ2hhbmdlZCgp OwogICAgdm9pZCBtZW51U3RhdGVDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkQ29u dGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkU3RhdGVDaGFuZ2VkKCk7CiAg ICB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIG1lbnVEZWxQb3B1 cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKICAgIHZvaWQgYWN0 U2lnKCBpbnQsIGJvb2wgPSBGQUxTRSApOwogICAgdm9pZCBoaWxpdFNpZyggaW50ICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0Rmlyc3RJdGVtQWN0aXZlKCk7CiAgICB2b2lkIGhpZGVBbGxQb3B1cHMo KTsKICAgIHZvaWQgaGlkZVBvcHVwcygpOwogICAgYm9vbCB0cnlNZW51QmFyKCBRTW91c2VFdmVu dCAqICk7CiAgICB2b2lkIGJ5ZU1lbnVCYXIoKTsKCiAgICB2b2lkIHVwZGF0ZVNpemUoKTsKICAg IHZvaWQgdXBkYXRlUm93KCBpbnQgcm93ICk7CgogICAgdm9pZCB1cGRhdGVBY2NlbCggUVdpZGdl dCAqICk7CiAgICB2b2lkIGVuYWJsZUFjY2VsKCBib29sICk7CgogICAgUVBvcHVwTWVudVByaXZh dGUgKmQ7CgogICAgUUFjY2VsICphdXRvYWNjZWw7CgoKCgoKCgogICAgaW50IHBvcHVwQWN0aXZl OwogICAgaW50IHRhYjsKICAgIHVpbnQgYWNjZWxEaXNhYmxlZCA6IDE7CiAgICB1aW50IGNoZWNr YWJsZSA6IDE7CiAgICB1aW50IGNvbm5lY3RNb2RhbFJlY3Vyc2lvblNhZmV0eSA6IDE7CiAgICB1 aW50IHRvcm5PZmYgOiAxOwogICAgdWludCBwZW5kaW5nRGVsYXllZENvbnRlbnRzQ2hhbmdlcyA6 IDE7CiAgICB1aW50IHBlbmRpbmdEZWxheWVkU3RhdGVDaGFuZ2VzIDogMTsKICAgIGludCBtYXhQ TVdpZHRoOwogICAgaW50IG5jb2xzOwogICAgYm9vbCBzbmFwVG9Nb3VzZTsKICAgIGJvb2wgdHJ5 TW91c2VFdmVudCggUVBvcHVwTWVudSAqLCBRTW91c2VFdmVudCAqICk7CgogICAgZnJpZW5kIGNs YXNzIFFNZW51RGF0YTsKICAgIGZyaWVuZCBjbGFzcyBRTWVudUJhcjsKCiAgICB2b2lkIGNvbm5l Y3RNb2RhbChRUG9wdXBNZW51KiByZWNlaXZlciwgYm9vbCBkb0Nvbm5lY3QpOwoKcHJpdmF0ZToK CiAgICBRUG9wdXBNZW51KCBjb25zdCBRUG9wdXBNZW51ICYgKTsKICAgIFFQb3B1cE1lbnUgJm9w ZXJhdG9yPSggY29uc3QgUVBvcHVwTWVudSAmICk7Cgp9OwojIDQzICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcW1lbnViYXIuaCIgMgoKCgoKCgpjbGFzcyBRUG9wdXBNZW51OwoKY2xhc3Mg UU1lbnVCYXIgOiBwdWJsaWMgUUZyYW1lLCBwdWJsaWMgUU1lbnVEYXRhCnsKICAgIHB1YmxpYzog dmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01l dGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0 dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2Uo IGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiAp OyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsg c3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFy aWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3Qq IHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0cigg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCgg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9i amVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIFFNZW51QmFyKCBRV2lkZ2V0 KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UU1lbnVCYXIoKTsKCiAgICB2 b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRl KCk7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIGlu dCBoZWlnaHRGb3JXaWR0aChpbnQpIGNvbnN0OwoKICAgIGVudW0gU2VwYXJhdG9yIHsgTmV2ZXI9 MCwgSW5XaW5kb3dzU3R5bGU9MSB9OwogICAgU2VwYXJhdG9yIHNlcGFyYXRvcigpIGNvbnN0Owog ICAgdmlydHVhbCB2b2lkIHNldFNlcGFyYXRvciggU2VwYXJhdG9yIHdoZW4gKTsKCiAgICB2b2lk IHNldERlZmF1bHRVcCggYm9vbCApOwogICAgYm9vbCBpc0RlZmF1bHRVcCgpIGNvbnN0OwoKICAg IGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29uc3Q7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25z dDsKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZUhp bnQoKSBjb25zdDsKCiAgICB2b2lkIGFjdGl2YXRlSXRlbUF0KCBpbnQgaW5kZXggKTsKCgoKCgoK cHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpdGVtSWQgKTsKICAgIHZvaWQgaGln aGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhd0NvbnRlbnRz KCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYgKTsKICAg IHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUmVs ZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91 c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7CiAgICB2 b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091dEV2ZW50 KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiAp OwogICAgdm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtZW51Q29udGVudHND aGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZvaWQgc3R5bGVDaGFu Z2UoIFFTdHlsZSYgKTsKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2 b2lkIGhpZGVQb3B1cHMoKTsKICAgIFFSZWN0IGl0ZW1SZWN0KCBpbnQgaXRlbSApOwoKcHJpdmF0 ZSA6CiAgICB2b2lkIHN1YkFjdGl2YXRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBzdWJIaWdo bGlnaHRlZCggaW50IGl0ZW1JZCApOwoKICAgIHZvaWQgYWNjZWxBY3RpdmF0ZWQoIGludCBpdGVt SWQgKTsKICAgIHZvaWQgYWNjZWxEZXN0cm95ZWQoKTsKCiAgICB2b2lkIHBvcHVwRGVzdHJveWVk KCBRT2JqZWN0KiApOwogICAgdm9pZCBwZXJmb3JtRGVsYXllZENoYW5nZXMoKTsKCnByaXZhdGU6 CiAgICB2b2lkIHBlcmZvcm1EZWxheWVkQ29udGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIHBlcmZv cm1EZWxheWVkU3RhdGVDaGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVu dSAqICk7CiAgICB2b2lkIG1lbnVEZWxQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2b2lkIGZy YW1lQ2hhbmdlZCgpOwoKICAgIGJvb2wgdHJ5TW91c2VFdmVudCggUVBvcHVwTWVudSAqLCBRTW91 c2VFdmVudCAqICk7CiAgICB2b2lkIHRyeUtleUV2ZW50KCBRUG9wdXBNZW51ICosIFFLZXlFdmVu dCAqICk7CiAgICB2b2lkIGdvb2RieWUoIGJvb2wgY2FuY2VsbGVkID0gRkFMU0UgKTsKICAgIHZv aWQgb3BlbkFjdFBvcHVwKCk7CgogICAgdm9pZCBzZXRBY3RpdmVJdGVtKCBpbnQgaW5kZXgsIGJv b2wgc2hvdyA9IFRSVUUsIGJvb2wgYWN0aXZhdGVfZmlyc3RfaXRlbSA9IFRSVUUgKTsKICAgIHZv aWQgc2V0QWx0TW9kZSggYm9vbCApOwoKICAgIGludCBjYWxjdWxhdGVSZWN0cyggaW50IG1heF93 aWR0aCA9IC0xICk7CgoKICAgIHZvaWQgc2V0dXBBY2NlbGVyYXRvcnMoKTsKICAgIFFBY2NlbCAq YXV0b2FjY2VsOwoKICAgIFFSZWN0ICppcmVjdHM7CiAgICBpbnQgcmlnaHRTaWRlOwoKICAgIHVp bnQgbXNlcGFyYXRvciA6IDE7CiAgICB1aW50IHdhaXRmb3JhbHQgOiAxOwogICAgdWludCBwb3B1 cHZpc2libGUgOiAxOwogICAgdWludCBoYXNtb3VzZSA6IDE7CiAgICB1aW50IGRlZmF1bHR1cCA6 IDE7CiAgICB1aW50IHRvZ2dsZWNsb3NlIDogMTsKICAgIHVpbnQgcGVuZGluZ0RlbGF5ZWRDb250 ZW50c0NoYW5nZXMgOiAxOwogICAgdWludCBwZW5kaW5nRGVsYXllZFN0YXRlQ2hhbmdlcyA6IDE7 CgogICAgZnJpZW5kIGNsYXNzIFFQb3B1cE1lbnU7CiMgMTg3ICIvdXNyL2xvY2FsL3F0LTMuMS4x L2luY2x1ZGUvcW1lbnViYXIuaCIKcHJpdmF0ZToKCgogICAgUU1lbnVCYXIoIGNvbnN0IFFNZW51 QmFyICYgKTsKICAgIFFNZW51QmFyICZvcGVyYXRvcj0oIGNvbnN0IFFNZW51QmFyICYgKTsKCn07 CiMgMjAgIlR4Vm9ycGFsR1VJLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRl L3FsYWJlbC5oIiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbGFiZWwuaCIK Y2xhc3MgUVNpbXBsZVJpY2hUZXh0OwpjbGFzcyBRTGFiZWxQcml2YXRlOwoKY2xhc3MgUUxhYmVs IDogcHVibGljIFFGcmFtZQp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFP YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25z dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBj aGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs IGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5 KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9w ZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVj dCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmpl Y3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq ID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq ID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAg CiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRTGFiZWwoIFFXaWRnZXQgKnBhcmVudCwgY29uc3Qg Y2hhciogbmFtZT0wLCBXRmxhZ3MgZj0wICk7CiAgICBRTGFiZWwoIGNvbnN0IFFTdHJpbmcgJnRl eHQsIFFXaWRnZXQgKnBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLAogICAgICAgICAgICBXRmxh Z3MgZj0wICk7CiAgICBRTGFiZWwoIFFXaWRnZXQgKmJ1ZGR5LCBjb25zdCBRU3RyaW5nICYsCiAg ICAgICAgICAgIFFXaWRnZXQgKnBhcmVudCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZj0w ICk7CiAgICB+UUxhYmVsKCk7CgogICAgUVN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbHRl eHQ7IH0KICAgIFFQaXhtYXAgKnBpeG1hcCgpIGNvbnN0IHsgcmV0dXJuIGxwaXhtYXA7IH0KCiAg ICBRUGljdHVyZSAqcGljdHVyZSgpIGNvbnN0IHsgcmV0dXJuIGxwaWN0dXJlOyB9CgoKICAgIFFN b3ZpZSAqbW92aWUoKSBjb25zdDsKCgogICAgVGV4dEZvcm1hdCB0ZXh0Rm9ybWF0KCkgY29uc3Q7 CiAgICB2b2lkIHNldFRleHRGb3JtYXQoIFRleHRGb3JtYXQgKTsKCiAgICBpbnQgYWxpZ25tZW50 KCkgY29uc3QgeyByZXR1cm4gYWxpZ247IH0KICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQo IGludCApOwogICAgaW50IGluZGVudCgpIGNvbnN0IHsgcmV0dXJuIGV4dHJhTWFyZ2luOyB9CiAg ICB2b2lkIHNldEluZGVudCggaW50ICk7CgogICAgYm9vbCBhdXRvUmVzaXplKCkgY29uc3QgeyBy ZXR1cm4gYXV0b3Jlc2l6ZTsgfQogICAgdmlydHVhbCB2b2lkIHNldEF1dG9SZXNpemUoIGJvb2wg KTsKCiAgICBib29sIGhhc1NjYWxlZENvbnRlbnRzKCkgY29uc3Q7CiAgICB2b2lkIHNldFNjYWxl ZENvbnRlbnRzKCBib29sICk7CgogICAgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKICAgIFFTaXpl IG1pbmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRCdWRkeSggUVdp ZGdldCAqICk7CiAgICBRV2lkZ2V0ICpidWRkeSgpIGNvbnN0OwoKICAgIGludCBoZWlnaHRGb3JX aWR0aChpbnQpIGNvbnN0OwoKICAgIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJmYgKTsKCnB1 YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyAmKTsKICAgIHZp cnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIHZpcnR1YWwgdm9p ZCBzZXRQaWN0dXJlKCBjb25zdCBRUGljdHVyZSAmICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXRN b3ZpZSggY29uc3QgUU1vdmllICYgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TnVtKCBpbnQgKTsK ICAgIHZpcnR1YWwgdm9pZCBzZXROdW0oIGRvdWJsZSApOwogICAgdm9pZCBjbGVhcigpOwoKcHJv dGVjdGVkOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWludGVyICogKTsKICAgIHZvaWQgZm9u dENoYW5nZSggY29uc3QgUUZvbnQgJiApOwogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2 ZW50KiApOwoKcHJpdmF0ZSA6CgogICAgdm9pZCBhY2NlbGVyYXRvclNsb3QoKTsKICAgIHZvaWQg YnVkZHlEaWVkKCk7CgoKICAgIHZvaWQgbW92aWVVcGRhdGVkKGNvbnN0IFFSZWN0Jik7CiAgICB2 b2lkIG1vdmllUmVzaXplZChjb25zdCBRU2l6ZSYpOwoKCnByaXZhdGU6CiAgICB2b2lkIGluaXQo KTsKICAgIHZvaWQgY2xlYXJDb250ZW50cygpOwogICAgdm9pZCB1cGRhdGVMYWJlbCggUVNpemUg b2xkU2l6ZUhpbnQgKTsKICAgIFFTaXplIHNpemVGb3JXaWR0aCggaW50IHcgKSBjb25zdDsKICAg IFFTdHJpbmcgbHRleHQ7CiAgICBRUGl4bWFwICpscGl4bWFwOwoKICAgIFFQaWN0dXJlICpscGlj dHVyZTsKCgogICAgUU1vdmllICogbG1vdmllOwoKCiAgICBRV2lkZ2V0ICogbGJ1ZGR5OwoKICAg IHVzaG9ydCBhbGlnbjsKICAgIHNob3J0IGV4dHJhTWFyZ2luOwogICAgdWludCBhdXRvcmVzaXpl OjE7CiAgICB1aW50IHNjYWxlZGNvbnRlbnRzIDoxOwogICAgVGV4dEZvcm1hdCB0ZXh0Zm9ybWF0 OwoKICAgIFFTaW1wbGVSaWNoVGV4dCogZG9jOwoKCiAgICBRQWNjZWwgKiBhY2NlbDsKCiAgICBR TGFiZWxQcml2YXRlKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRVGlwTGFiZWw7Cgpwcml2YXRlOgoK ICAgIFFMYWJlbCggY29uc3QgUUxhYmVsICYgKTsKICAgIFFMYWJlbCAmb3BlcmF0b3I9KCBjb25z dCBRTGFiZWwgJiApOwoKfTsKIyAyMiAiVHhWb3JwYWxHVUkuaCIgMgojIDEgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xY2FudmFzLmgiIDEKIyA0NiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3FjYW52YXMuaCIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXBlbi5o IiAxCiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGVuLmgiCmNsYXNzIFFQZW46 IHB1YmxpYyBRdAp7CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGljOgogICAgUVBlbigpOwog ICAgUVBlbiggUGVuU3R5bGUgKTsKICAgIFFQZW4oIGNvbnN0IFFDb2xvciAmY29sb3IsIHVpbnQg d2lkdGg9MCwgUGVuU3R5bGUgc3R5bGU9U29saWRMaW5lICk7CiAgICBRUGVuKCBjb25zdCBRQ29s b3IgJmNsLCB1aW50IHcsIFBlblN0eWxlIHMsIFBlbkNhcFN0eWxlIGMsIFBlbkpvaW5TdHlsZSBq KTsKICAgIFFQZW4oIGNvbnN0IFFQZW4gJiApOwogICB+UVBlbigpOwogICAgUVBlbiAmb3BlcmF0 b3I9KCBjb25zdCBRUGVuICYgKTsKCiAgICBQZW5TdHlsZSBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu IGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkIHNldFN0eWxlKCBQZW5TdHlsZSApOwogICAgdWludCB3 aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPndpZHRoOyB9CiAgICB2b2lkIHNldFdpZHRoKCB1 aW50ICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+Y29s b3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBQZW5DYXBTdHls ZSBjYXBTdHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRDYXBTdHlsZSggUGVuQ2FwU3R5bGUgKTsK ICAgIFBlbkpvaW5TdHlsZSBqb2luU3R5bGUoKSBjb25zdDsKICAgIHZvaWQgc2V0Sm9pblN0eWxl KCBQZW5Kb2luU3R5bGUgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQZW4gJnAgKSBj b25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBlbiAmcCApIGNvbnN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0ocCkp OyB9Cgpwcml2YXRlOgogICAgUVBlbiBjb3B5KCkgY29uc3Q7CiAgICB2b2lkIGRldGFjaCgpOwog ICAgdm9pZCBpbml0KCBjb25zdCBRQ29sb3IgJiwgdWludCwgdWludCApOwogICAgc3RydWN0IFFQ ZW5EYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIFBlblN0eWxlIHN0eWxlOwogICAgICAg IHVpbnQgd2lkdGg7CiAgICAgICAgUUNvbG9yIGNvbG9yOwogICAgICAgIFFfVUlOVDE2IGxpbmVz dDsKICAgIH0gKmRhdGE7Cn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFT dHJlYW0gJiwgY29uc3QgUVBlbiAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFT dHJlYW0gJiwgUVBlbiAmICk7CiMgNDcgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xY2Fu dmFzLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb2ludGFycmF5Lmgi IDEKIyA1MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fwb2ludGFycmF5LmgiCmNsYXNz IFFQb2ludEFycmF5IDogcHVibGljIFFNZW1BcnJheTxRUG9pbnQ+CnsKcHVibGljOgogICAgUVBv aW50QXJyYXkoKSB7fQogICAgflFQb2ludEFycmF5KCkge30KICAgIFFQb2ludEFycmF5KCBpbnQg c2l6ZSApIDogUU1lbUFycmF5PFFQb2ludD4oIHNpemUgKSB7fQogICAgUVBvaW50QXJyYXkoIGNv bnN0IFFQb2ludEFycmF5ICZhICkgOiBRTWVtQXJyYXk8UVBvaW50PiggYSApIHt9CiAgICBRUG9p bnRBcnJheSggY29uc3QgUVJlY3QgJnIsIGJvb2wgY2xvc2VkPUZBTFNFICk7CiAgICBRUG9pbnRB cnJheSggaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CgogICAgUVBvaW50QXJy YXkgJm9wZXJhdG9yPSggY29uc3QgUVBvaW50QXJyYXkgJmEgKQogICAgICAgIHsgcmV0dXJuIChR UG9pbnRBcnJheSYpYXNzaWduKCBhICk7IH0KCiAgICBRUG9pbnRBcnJheSBjb3B5KCkgY29uc3QK ICAgICAgICB7IFFQb2ludEFycmF5IHRtcDsgcmV0dXJuICooKFFQb2ludEFycmF5KikmdG1wLmR1 cGxpY2F0ZSgqdGhpcykpOyB9CgogICAgdm9pZCB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5ICk7 CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKCiAgICB2b2lkIHBvaW50KCB1aW50IGks IGludCAqeCwgaW50ICp5ICkgY29uc3Q7CiAgICBRUG9pbnQgcG9pbnQoIHVpbnQgaSApIGNvbnN0 OwogICAgdm9pZCBzZXRQb2ludCggdWludCBpLCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQgc2V0 UG9pbnQoIHVpbnQgaSwgY29uc3QgUVBvaW50ICZwICk7CiAgICBib29sIHNldFBvaW50cyggaW50 IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CiAgICBib29sIHNldFBvaW50cyggaW50 IG5Qb2ludHMsIGludCBmaXJzdHgsIGludCBmaXJzdHksIC4uLiApOwogICAgYm9vbCBwdXRQb2lu dHMoIGludCBpbmRleCwgaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CiAgICBi b29sIHB1dFBvaW50cyggaW50IGluZGV4LCBpbnQgblBvaW50cywgaW50IGZpcnN0eCwgaW50IGZp cnN0eSwgLi4uICk7CiAgICBib29sIHB1dFBvaW50cyggaW50IGluZGV4LCBpbnQgblBvaW50cywK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRBcnJheSAmIGZyb20sIGludCBmcm9t SW5kZXg9MCApOwoKICAgIHZvaWQgbWFrZUFyYyggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgs IGludCBhMSwgaW50IGEyICk7CiAgICB2b2lkIG1ha2VFbGxpcHNlKCBpbnQgeCwgaW50IHksIGlu dCB3LCBpbnQgaCApOwogICAgdm9pZCBtYWtlQXJjKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg aCwgaW50IGExLCBpbnQgYTIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFXTWF0cml4JiAp OwogICAgUVBvaW50QXJyYXkgY3ViaWNCZXppZXIoKSBjb25zdDsKCiAgICB2b2lkKiBzaG9ydFBv aW50cyggaW50IGluZGV4ID0gMCwgaW50IG5Qb2ludHMgPSAtMSApIGNvbnN0OwogICAgc3RhdGlj IHZvaWQgY2xlYW5CdWZmZXJzKCk7Cgpwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgdWludCBzcGxlbjsK ICAgIHN0YXRpYyB2b2lkKiBzcDsKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR RGF0YVN0cmVhbSAmLCBjb25zdCBRUG9pbnRBcnJheSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0 b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50QXJyYXkgJiApOwoKCgoKCgppbmxpbmUgdm9pZCBR UG9pbnRBcnJheTo6c2V0UG9pbnQoIHVpbnQgaSwgY29uc3QgUVBvaW50ICZwICkKewogICAgc2V0 UG9pbnQoIGksIHAueCgpLCBwLnkoKSApOwp9CiMgNDkgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xY2FudmFzLmgiIDIKIyA2MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FjYW52 YXMuaCIKY2xhc3MgUUNhbnZhc1Nwcml0ZTsKY2xhc3MgUUNhbnZhc1BvbHlnb25hbEl0ZW07CmNs YXNzIFFDYW52YXNSZWN0YW5nbGU7CmNsYXNzIFFDYW52YXNQb2x5Z29uOwpjbGFzcyBRQ2FudmFz RWxsaXBzZTsKY2xhc3MgUUNhbnZhc1RleHQ7CmNsYXNzIFFDYW52YXNMaW5lOwpjbGFzcyBRQ2Fu dmFzQ2h1bms7CmNsYXNzIFFDYW52YXM7CmNsYXNzIFFDYW52YXNJdGVtOwpjbGFzcyBRQ2FudmFz VmlldzsKY2xhc3MgUUNhbnZhc1BpeG1hcDsKIyA4NSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3FjYW52YXMuaCIKY2xhc3MgUUNhbnZhc0l0ZW1MaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8 UUNhbnZhc0l0ZW0qPiB7CnB1YmxpYzoKICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBkcmF3VW5p cXVlKCBRUGFpbnRlciYgcGFpbnRlciApOwp9OwoKCmNsYXNzIFFDYW52YXNJdGVtRXh0cmE7Cgpj bGFzcyBRQ2FudmFzSXRlbSA6IHB1YmxpYyBRdAp7CnB1YmxpYzoKICAgIFFDYW52YXNJdGVtKFFD YW52YXMqIGNhbnZhcyk7CiAgICB2aXJ0dWFsIH5RQ2FudmFzSXRlbSgpOwoKICAgIGRvdWJsZSB4 KCkgY29uc3QKICAgICAgICB7IHJldHVybiBteXg7IH0KICAgIGRvdWJsZSB5KCkgY29uc3QKICAg ICAgICB7IHJldHVybiBteXk7IH0KICAgIGRvdWJsZSB6KCkgY29uc3QKICAgICAgICB7IHJldHVy biBteXo7IH0KCiAgICB2aXJ0dWFsIHZvaWQgbW92ZUJ5KGRvdWJsZSBkeCwgZG91YmxlIGR5KTsK ICAgIHZvaWQgbW92ZShkb3VibGUgeCwgZG91YmxlIHkpOwogICAgdm9pZCBzZXRYKGRvdWJsZSBh KSB7IG1vdmUoYSx5KCkpOyB9CiAgICB2b2lkIHNldFkoZG91YmxlIGEpIHsgbW92ZSh4KCksYSk7 IH0KICAgIHZvaWQgc2V0Wihkb3VibGUgYSkgeyBteXo9YTsgY2hhbmdlQ2h1bmtzKCk7IH0KCiAg ICBib29sIGFuaW1hdGVkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0ZWQoYm9v bCB5KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWZWxvY2l0eSggZG91YmxlIHZ4LCBkb3VibGUgdnkp OwogICAgdm9pZCBzZXRYVmVsb2NpdHkoIGRvdWJsZSB2eCApIHsgc2V0VmVsb2NpdHkodngseVZl bG9jaXR5KCkpOyB9CiAgICB2b2lkIHNldFlWZWxvY2l0eSggZG91YmxlIHZ5ICkgeyBzZXRWZWxv Y2l0eSh4VmVsb2NpdHkoKSx2eSk7IH0KICAgIGRvdWJsZSB4VmVsb2NpdHkoKSBjb25zdDsKICAg IGRvdWJsZSB5VmVsb2NpdHkoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKGludCBz dGFnZSk7CgogICAgdmlydHVhbCBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc0l0ZW0q ICkgY29uc3Q9MDsKCiAgICBRQ2FudmFzSXRlbUxpc3QgY29sbGlzaW9ucyhib29sIGV4YWN0ICkg Y29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldENhbnZhcyhRQ2FudmFzKik7CgogICAgdmlydHVh bCB2b2lkIGRyYXcoUVBhaW50ZXImKT0wOwoKICAgIHZvaWQgc2hvdygpOwogICAgdm9pZCBoaWRl KCk7CgogICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCB5ZXMpOwogICAgYm9vbCBpc1Zp c2libGUoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChib29sKXZpczsgfQogICAgdmlydHVhbCB2 b2lkIHNldFNlbGVjdGVkKGJvb2wgeWVzKTsKICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0CiAg ICAgICAgeyByZXR1cm4gKGJvb2wpc2VsOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChi b29sIHllcyk7CiAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJv b2wpZW5hOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgeWVzKTsKICAgIGJvb2wg aXNBY3RpdmUoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChib29sKWFjdDsgfQoKICAgIGJvb2wg dmlzaWJsZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpdmlzOyB9CiAgICBib29sIHNl bGVjdGVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAoYm9vbClzZWw7IH0KICAgIGJvb2wgZW5h YmxlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpZW5hOyB9CiAgICBib29sIGFjdGl2 ZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGJvb2wpYWN0OyB9CgoKICAgIGVudW0gUnR0aVZh bHVlcyB7CiAgICAgICAgUnR0aV9JdGVtID0gMCwKICAgICAgICBSdHRpX1Nwcml0ZSA9IDEsCiAg ICAgICAgUnR0aV9Qb2x5Z29uYWxJdGVtID0gMiwKICAgICAgICBSdHRpX1RleHQgPSAzLAogICAg ICAgIFJ0dGlfUG9seWdvbiA9IDQsCiAgICAgICAgUnR0aV9SZWN0YW5nbGUgPSA1LAogICAgICAg IFJ0dGlfRWxsaXBzZSA9IDYsCiAgICAgICAgUnR0aV9MaW5lID0gNywKICAgICAgICBSdHRpX1Nw bGluZSA9IDgKICAgIH07CgogICAgdmlydHVhbCBpbnQgcnR0aSgpIGNvbnN0OwogICAgc3RhdGlj IGludCBSVFRJOwoKICAgIHZpcnR1YWwgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q9MDsKICAg IHZpcnR1YWwgUVJlY3QgYm91bmRpbmdSZWN0QWR2YW5jZWQoKSBjb25zdDsKCiAgICBRQ2FudmFz KiBjYW52YXMoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNudjsgfQoKcHJvdGVjdGVkOgogICAg dm9pZCB1cGRhdGUoKSB7IGNoYW5nZUNodW5rcygpOyB9Cgpwcml2YXRlOgoKCiAgICBmcmllbmQg Y2xhc3MgUUNhbnZhc1BvbHlnb25hbEl0ZW07CiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1Nwcml0 ZTsKICAgIGZyaWVuZCBjbGFzcyBRQ2FudmFzUmVjdGFuZ2xlOwogICAgZnJpZW5kIGNsYXNzIFFD YW52YXNQb2x5Z29uOwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNFbGxpcHNlOwogICAgZnJpZW5k IGNsYXNzIFFDYW52YXNUZXh0OwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNMaW5lOwoKICAgIHZp cnR1YWwgUVBvaW50QXJyYXkgY2h1bmtzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgYWRkVG9D aHVua3MoKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ2h1bmtzKCk7CiAgICB2aXJ0dWFs IHZvaWQgY2hhbmdlQ2h1bmtzKCk7CiAgICB2aXJ0dWFsIGJvb2wgY29sbGlkZXNXaXRoKCBjb25z dCBRQ2FudmFzU3ByaXRlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD YW52YXNQb2x5Z29uYWxJdGVtKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFFDYW52YXNSZWN0YW5nbGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUNhbnZhc0VsbGlwc2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNh bnZhc1RleHQqICkgY29uc3QgPSAwOwoKCiAgICBRQ2FudmFzKiBjbnY7CiAgICBzdGF0aWMgUUNh bnZhcyogY3VycmVudF9jYW52YXM7CiAgICBkb3VibGUgbXl4LG15eSxteXo7CiAgICBRQ2FudmFz SXRlbUV4dHJhICpleHQ7CiAgICBRQ2FudmFzSXRlbUV4dHJhJiBleHRyYSgpOwogICAgdWludCBh bmk6MTsKICAgIHVpbnQgdmlzOjE7CiAgICB1aW50IHZhbDoxOwogICAgdWludCBzZWw6MTsKICAg IHVpbnQgZW5hOjE7CiAgICB1aW50IGFjdDoxOwp9OwoKCmNsYXNzIFFDYW52YXNEYXRhOwoKY2xh c3MgUUNhbnZhcyA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9i amVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2 aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nh c3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3Qq ICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg cXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRf c3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGlj IFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJl dHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsK cHVibGljOgogICAgUUNhbnZhcyggUU9iamVjdCogcGFyZW50ID0gMCwgY29uc3QgY2hhciogbmFt ZSA9IDAgKTsKICAgIFFDYW52YXMoaW50IHcsIGludCBoKTsKICAgIFFDYW52YXMoIFFQaXhtYXAg cCwgaW50IGgsIGludCB2LCBpbnQgdGlsZXdpZHRoLCBpbnQgdGlsZWhlaWdodCApOwoKICAgIHZp cnR1YWwgflFDYW52YXMoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGlsZXMoIFFQaXhtYXAgdGls ZXMsIGludCBoLCBpbnQgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbGV3aWR0 aCwgaW50IHRpbGVoZWlnaHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFw KCBjb25zdCBRUGl4bWFwJiBwICk7CiAgICBRUGl4bWFwIGJhY2tncm91bmRQaXhtYXAoKSBjb25z dDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3ImIGMg KTsKICAgIFFDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg c2V0VGlsZSggaW50IHgsIGludCB5LCBpbnQgdGlsZW51bSApOwogICAgaW50IHRpbGUoIGludCB4 LCBpbnQgeSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gZ3JpZFt4K3kqaHRpbGVzXTsgfQoKICAg IGludCB0aWxlc0hvcml6b250YWxseSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gaHRpbGVzOyB9 CiAgICBpbnQgdGlsZXNWZXJ0aWNhbGx5KCkgY29uc3QKICAgICAgICB7IHJldHVybiB2dGlsZXM7 IH0KCiAgICBpbnQgdGlsZVdpZHRoKCkgY29uc3QKICAgICAgICB7IHJldHVybiB0aWxldzsgfQog ICAgaW50IHRpbGVIZWlnaHQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHRpbGVoOyB9CgogICAg dmlydHVhbCB2b2lkIHJlc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgaW50IHdpZHRo KCkgY29uc3QKICAgICAgICB7IHJldHVybiBhd2lkdGg7IH0KICAgIGludCBoZWlnaHQoKSBjb25z dAogICAgICAgIHsgcmV0dXJuIGFoZWlnaHQ7IH0KICAgIFFTaXplIHNpemUoKSBjb25zdAogICAg ICAgIHsgcmV0dXJuIFFTaXplKGF3aWR0aCxhaGVpZ2h0KTsgfQogICAgUVJlY3QgcmVjdCgpIGNv bnN0CiAgICAgICAgeyByZXR1cm4gUVJlY3QoIDAsIDAsIGF3aWR0aCwgYWhlaWdodCApOyB9CiAg ICBib29sIG9uQ2FudmFzKCBpbnQgeCwgaW50IHkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHg+ PTAgJiYgeT49MCAmJiB4PGF3aWR0aCAmJiB5PGFoZWlnaHQ7IH0KICAgIGJvb2wgb25DYW52YXMo IGNvbnN0IFFQb2ludCYgcCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gb25DYW52YXMocC54KCks cC55KCkpOyB9CiAgICBib29sIHZhbGlkQ2h1bmsoIGludCB4LCBpbnQgeSApIGNvbnN0CiAgICAg ICAgeyByZXR1cm4geD49MCAmJiB5Pj0wICYmIHg8Y2h3aWR0aCAmJiB5PGNoaGVpZ2h0OyB9CiAg ICBib29sIHZhbGlkQ2h1bmsoIGNvbnN0IFFQb2ludCYgcCApIGNvbnN0CiAgICAgICAgeyByZXR1 cm4gdmFsaWRDaHVuayhwLngoKSxwLnkoKSk7IH0KCiAgICBpbnQgY2h1bmtTaXplKCkgY29uc3QK ICAgICAgICB7IHJldHVybiBjaHVua3NpemU7IH0KICAgIHZpcnR1YWwgdm9pZCByZXR1bmUoaW50 IGNodW5rc2l6ZSwgaW50IG1heGNsdXN0ZXJzPTEwMCk7CgogICAgYm9vbCBzYW1lQ2h1bmsoaW50 IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHgxL2No dW5rc2l6ZT09eDIvY2h1bmtzaXplICYmIHkxL2NodW5rc2l6ZT09eTIvY2h1bmtzaXplOyB9CiAg ICB2aXJ0dWFsIHZvaWQgc2V0Q2hhbmdlZENodW5rKGludCBpLCBpbnQgaik7CiAgICB2aXJ0dWFs IHZvaWQgc2V0Q2hhbmdlZENodW5rQ29udGFpbmluZyhpbnQgeCwgaW50IHkpOwogICAgdmlydHVh bCB2b2lkIHNldEFsbENoYW5nZWQoKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFuZ2VkKGNvbnN0 IFFSZWN0JiBhcmVhKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVbmNoYW5nZWQoY29uc3QgUVJlY3Qm IGFyZWEpOwoKCiAgICB2b2lkIGFkZEl0ZW1Ub0NodW5rKFFDYW52YXNJdGVtKiwgaW50IGksIGlu dCBqKTsKICAgIHZvaWQgcmVtb3ZlSXRlbUZyb21DaHVuayhRQ2FudmFzSXRlbSosIGludCBpLCBp bnQgaik7CiAgICB2b2lkIGFkZEl0ZW1Ub0NodW5rQ29udGFpbmluZyhRQ2FudmFzSXRlbSosIGlu dCB4LCBpbnQgeSk7CiAgICB2b2lkIHJlbW92ZUl0ZW1Gcm9tQ2h1bmtDb250YWluaW5nKFFDYW52 YXNJdGVtKiwgaW50IHgsIGludCB5KTsKCiAgICBRQ2FudmFzSXRlbUxpc3QgYWxsSXRlbXMoKTsK ICAgIFFDYW52YXNJdGVtTGlzdCBjb2xsaXNpb25zKCBjb25zdCBRUG9pbnQmKSBjb25zdDsKICAg IFFDYW52YXNJdGVtTGlzdCBjb2xsaXNpb25zKCBjb25zdCBRUmVjdCYpIGNvbnN0OwogICAgUUNh bnZhc0l0ZW1MaXN0IGNvbGxpc2lvbnMoIGNvbnN0IFFQb2ludEFycmF5JiBwYSwgY29uc3QgUUNh bnZhc0l0ZW0qIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGFj dCkgY29uc3Q7CgogICAgdm9pZCBkcmF3QXJlYShjb25zdCBRUmVjdCYsIFFQYWludGVyKiBwLCBi b29sIGRvdWJsZV9idWZmZXI9RkFMU0UpOwoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkVmlldyhRQ2Fu dmFzVmlldyopOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZVZpZXcoUUNhbnZhc1ZpZXcqKTsKICAg IHZvaWQgZHJhd0NhbnZhc0FyZWEoY29uc3QgUVJlY3QmLCBRUGFpbnRlciogcD0wLCBib29sIGRv dWJsZV9idWZmZXI9VFJVRSk7CiAgICB2b2lkIGRyYXdWaWV3QXJlYSggUUNhbnZhc1ZpZXcqIHZp ZXcsIFFQYWludGVyKiBwLCBjb25zdCBRUmVjdCYgciwgYm9vbCBkYnVmICk7CgoKICAgIHZpcnR1 YWwgdm9pZCBhZGRJdGVtKFFDYW52YXNJdGVtKik7CiAgICB2aXJ0dWFsIHZvaWQgYWRkQW5pbWF0 aW9uKFFDYW52YXNJdGVtKik7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShRQ2FudmFzSXRl bSopOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihRQ2FudmFzSXRlbSopOwoKICAg IHZpcnR1YWwgdm9pZCBzZXRBZHZhbmNlUGVyaW9kKGludCBtcyk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0VXBkYXRlUGVyaW9kKGludCBtcyk7CgogICAgdmlydHVhbCB2b2lkIHNldERvdWJsZUJ1ZmZl cmluZyhib29sIHkpOwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVkKCk7CgpwdWJsaWMgOgog ICAgdmlydHVhbCB2b2lkIGFkdmFuY2UoKTsKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoKTsKCnBy b3RlY3RlZDoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QmFja2dyb3VuZChRUGFpbnRlciYsIGNvbnN0 IFFSZWN0JiBhcmVhKTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9yZWdyb3VuZChRUGFpbnRlciYs IGNvbnN0IFFSZWN0JiBhcmVhKTsKCnByaXZhdGU6CiAgICB2b2lkIGluaXQoaW50IHcsIGludCBo LCBpbnQgY2h1bmtzemU9MTYsIGludCBtYXhjbHVzdD0xMDApOwoKICAgIFFDYW52YXNDaHVuayYg Y2h1bmsoaW50IGksIGludCBqKSBjb25zdDsKICAgIFFDYW52YXNDaHVuayYgY2h1bmtDb250YWlu aW5nKGludCB4LCBpbnQgeSkgY29uc3Q7CgogICAgUVJlY3QgY2hhbmdlQm91bmRzKGNvbnN0IFFS ZWN0JiBpbmFyZWEpOwogICAgdm9pZCBkcmF3Q2hhbmdlcyhjb25zdCBRUmVjdCYgaW5hcmVhKTsK CiAgICB2b2lkIGVuc3VyZU9mZlNjclNpemUoIGludCBvc3csIGludCBvc2ggKTsKICAgIFFQaXht YXAgb2Zmc2NyOwogICAgaW50IGF3aWR0aCxhaGVpZ2h0OwogICAgaW50IGNodW5rc2l6ZTsKICAg IGludCBtYXhjbHVzdGVyczsKICAgIGludCBjaHdpZHRoLGNoaGVpZ2h0OwogICAgUUNhbnZhc0No dW5rKiBjaHVua3M7CgogICAgUUNhbnZhc0RhdGEqIGQ7CgogICAgdm9pZCBpbml0VGlsZXMoUVBp eG1hcCBwLCBpbnQgaCwgaW50IHYsIGludCB0aWxld2lkdGgsIGludCB0aWxlaGVpZ2h0KTsKICAg IHVzaG9ydCAqZ3JpZDsKICAgIHVzaG9ydCBodGlsZXM7CiAgICB1c2hvcnQgdnRpbGVzOwogICAg dXNob3J0IHRpbGV3OwogICAgdXNob3J0IHRpbGVoOwogICAgYm9vbCBvbmVvbmU7CiAgICBRUGl4 bWFwIHBtOwogICAgUVRpbWVyKiB1cGRhdGVfdGltZXI7CiAgICBRQ29sb3IgYmdjb2xvcjsKICAg IGJvb2wgZGVidWdfcmVkcmF3X2FyZWFzOwogICAgYm9vbCBkYmxidWY7CgogICAgZnJpZW5kIHZv aWQgcXRfdW52aWV3KFFDYW52YXMqIGMpOwoKCiAgICBRQ2FudmFzKCBjb25zdCBRQ2FudmFzICYg KTsKICAgIFFDYW52YXMgJm9wZXJhdG9yPSggY29uc3QgUUNhbnZhcyAmICk7Cgp9OwoKY2xhc3Mg UUNhbnZhc1ZpZXdEYXRhOwoKY2xhc3MgUUNhbnZhc1ZpZXcgOiBwdWJsaWMgUVNjcm9sbFZpZXcK ewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwg UVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwg aW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl Y3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTog c3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJsaWM6CgogICAgUUNhbnZhc1ZpZXcoUVdp ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCk7CiAgICBRQ2Fu dmFzVmlldyhRQ2FudmFzKiB2aWV3aW5nLCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciog bmFtZT0wLCBXRmxhZ3MgZj0wKTsKICAgIH5RQ2FudmFzVmlldygpOwoKICAgIFFDYW52YXMqIGNh bnZhcygpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gdmlld2luZzsgfQogICAgdm9pZCBzZXRDYW52 YXMoUUNhbnZhcyogdik7CgogICAgY29uc3QgUVdNYXRyaXggJndvcmxkTWF0cml4KCkgY29uc3Q7 CiAgICBjb25zdCBRV01hdHJpeCAmaW52ZXJzZVdvcmxkTWF0cml4KCkgY29uc3Q7CiAgICBib29s IHNldFdvcmxkTWF0cml4KCBjb25zdCBRV01hdHJpeCAmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lk IGRyYXdDb250ZW50cyggUVBhaW50ZXIqLCBpbnQgY3gsIGludCBjeSwgaW50IGN3LCBpbnQgY2gg KTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBkcmF3Q29u dGVudHMoIFFQYWludGVyKiApOwogICAgUUNhbnZhcyogdmlld2luZzsKICAgIFFDYW52YXNWaWV3 RGF0YSogZDsKICAgIGZyaWVuZCB2b2lkIHF0X3VudmlldyhRQ2FudmFzKiBjKTsKCnByaXZhdGUg OgogICAgdm9pZCBjTW92aW5nKGludCxpbnQpOwogICAgdm9pZCB1cGRhdGVDb250ZW50c1NpemUo KTsKCnByaXZhdGU6CgogICAgUUNhbnZhc1ZpZXcoIGNvbnN0IFFDYW52YXNWaWV3ICYgKTsKICAg IFFDYW52YXNWaWV3ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNWaWV3ICYgKTsKCn07CgoKY2xh c3MgUUNhbnZhc1BpeG1hcCA6IHB1YmxpYyBRUGl4bWFwCnsKcHVibGljOgoKICAgIFFDYW52YXNQ aXhtYXAoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lKTsKCiAgICBRQ2FudmFzUGl4bWFwKGNv bnN0IFFJbWFnZSYgaW1hZ2UpOwogICAgUUNhbnZhc1BpeG1hcChjb25zdCBRUGl4bWFwJiwgY29u c3QgUVBvaW50JiBob3RzcG90KTsKICAgIH5RQ2FudmFzUGl4bWFwKCk7CgogICAgaW50IG9mZnNl dFgoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGhvdHg7IH0KICAgIGludCBvZmZzZXRZKCkgY29u c3QKICAgICAgICB7IHJldHVybiBob3R5OyB9CiAgICB2b2lkIHNldE9mZnNldChpbnQgeCwgaW50 IHkpIHsgaG90eCA9IHg7IGhvdHkgPSB5OyB9Cgpwcml2YXRlOgoKICAgIFFDYW52YXNQaXhtYXAo IGNvbnN0IFFDYW52YXNQaXhtYXAgJiApOwogICAgUUNhbnZhc1BpeG1hcCAmb3BlcmF0b3I9KCBj b25zdCBRQ2FudmFzUGl4bWFwICYgKTsKCiAgICB2b2lkIGluaXQoY29uc3QgUUltYWdlJik7CiAg ICB2b2lkIGluaXQoY29uc3QgUVBpeG1hcCYgcGl4bWFwLCBpbnQgaHgsIGludCBoeSk7CgogICAg ZnJpZW5kIGNsYXNzIFFDYW52YXNTcHJpdGU7CiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1BpeG1h cEFycmF5OwogICAgZnJpZW5kIGJvb2wgcXRfdGVzdENvbGxpc2lvbihjb25zdCBRQ2FudmFzU3By aXRlKiBzMSwgY29uc3QgUUNhbnZhc1Nwcml0ZSogczIpOwoKICAgIGludCBob3R4LGhvdHk7Cgog ICAgUUltYWdlKiBjb2xsaXNpb25fbWFzazsKfTsKCgpjbGFzcyBRQ2FudmFzUGl4bWFwQXJyYXkK ewpwdWJsaWM6CiAgICBRQ2FudmFzUGl4bWFwQXJyYXkoKTsKCiAgICBRQ2FudmFzUGl4bWFwQXJy YXkoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lcGF0dGVybiwgaW50IGZyYW1lY291bnQ9MCk7 CgoKICAgIFFDYW52YXNQaXhtYXBBcnJheShRUHRyTGlzdDxRUGl4bWFwPiwgUVB0ckxpc3Q8UVBv aW50PiBob3RzcG90cyk7CgogICAgUUNhbnZhc1BpeG1hcEFycmF5KFFWYWx1ZUxpc3Q8UVBpeG1h cD4sIFFQb2ludEFycmF5IGhvdHNwb3RzID0gUVBvaW50QXJyYXkoKSApOwogICAgflFDYW52YXNQ aXhtYXBBcnJheSgpOwoKCiAgICBib29sIHJlYWRQaXhtYXBzKGNvbnN0IFFTdHJpbmcmIGRhdGFm aWxlbmFtZXBhdHRlcm4sIGludCBmcmFtZWNvdW50PTApOwogICAgYm9vbCByZWFkQ29sbGlzaW9u TWFza3MoY29uc3QgUVN0cmluZyYgZmlsZW5hbWVwYXR0ZXJuKTsKCgoKICAgIGJvb2wgb3BlcmF0 b3IhKCk7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBRQ2FudmFzUGl4bWFwKiBpbWFn ZShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiBpbWcgPyBpbWdbaV0gOiAwOyB9CiAgICB2 b2lkIHNldEltYWdlKGludCBpLCBRQ2FudmFzUGl4bWFwKiBwKTsKICAgIHVpbnQgY291bnQoKSBj b25zdAogICAgICAgIHsgcmV0dXJuICh1aW50KWZyYW1lY291bnQ7IH0KCnByaXZhdGU6CgogICAg UUNhbnZhc1BpeG1hcEFycmF5KCBjb25zdCBRQ2FudmFzUGl4bWFwQXJyYXkgJiApOwogICAgUUNh bnZhc1BpeG1hcEFycmF5ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNQaXhtYXBBcnJheSAmICk7 CgoKICAgIGJvb2wgcmVhZFBpeG1hcHMoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lcGF0dGVy biwgaW50IGZyYW1lY291bnQsIGJvb2wgbWFza29ubHkpOwoKCiAgICB2b2lkIHJlc2V0KCk7CiAg ICBpbnQgZnJhbWVjb3VudDsKICAgIFFDYW52YXNQaXhtYXAqKiBpbWc7Cn07CgoKY2xhc3MgUUNh bnZhc1Nwcml0ZSA6IHB1YmxpYyBRQ2FudmFzSXRlbQp7CnB1YmxpYzoKICAgIFFDYW52YXNTcHJp dGUoUUNhbnZhc1BpeG1hcEFycmF5KiBhcnJheSwgUUNhbnZhcyogY2FudmFzKTsKCiAgICB2b2lk IHNldFNlcXVlbmNlKFFDYW52YXNQaXhtYXBBcnJheSogc2VxKTsKCiAgICB2aXJ0dWFsIH5RQ2Fu dmFzU3ByaXRlKCk7CgogICAgdm9pZCBtb3ZlKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgICB2aXJ0 dWFsIHZvaWQgbW92ZShkb3VibGUgeCwgZG91YmxlIHksIGludCBmcmFtZSk7CiAgICB2b2lkIHNl dEZyYW1lKGludCk7CiAgICBlbnVtIEZyYW1lQW5pbWF0aW9uVHlwZSB7IEN5Y2xlLCBPc2NpbGxh dGUgfTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZUFuaW1hdGlvbihGcmFtZUFuaW1hdGlvblR5 cGU9Q3ljbGUsIGludCBzdGVwPTEsIGludCBzdGF0ZT0wKTsKICAgIGludCBmcmFtZSgpIGNvbnN0 CiAgICAgICAgeyByZXR1cm4gZnJtOyB9CiAgICBpbnQgZnJhbWVDb3VudCgpIGNvbnN0CiAgICAg ICAgeyByZXR1cm4gaW1hZ2VzLT5jb3VudCgpOyB9CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAg IHN0YXRpYyBpbnQgUlRUSTsKCiAgICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc0l0 ZW0qICkgY29uc3Q7CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgoKCgogICAgaW50 IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CgogICAgaW50IGxlZnRFZGdl KCkgY29uc3Q7CiAgICBpbnQgdG9wRWRnZSgpIGNvbnN0OwogICAgaW50IHJpZ2h0RWRnZSgpIGNv bnN0OwogICAgaW50IGJvdHRvbUVkZ2UoKSBjb25zdDsKCiAgICBpbnQgbGVmdEVkZ2UoaW50IG54 KSBjb25zdDsKICAgIGludCB0b3BFZGdlKGludCBueSkgY29uc3Q7CiAgICBpbnQgcmlnaHRFZGdl KGludCBueCkgY29uc3Q7CiAgICBpbnQgYm90dG9tRWRnZShpbnQgbnkpIGNvbnN0OwogICAgUUNh bnZhc1BpeG1hcCogaW1hZ2UoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGltYWdlcy0+aW1hZ2Uo ZnJtKTsgfQogICAgdmlydHVhbCBRQ2FudmFzUGl4bWFwKiBpbWFnZUFkdmFuY2VkKCkgY29uc3Q7 CiAgICBRQ2FudmFzUGl4bWFwKiBpbWFnZShpbnQgZikgY29uc3QKICAgICAgICB7IHJldHVybiBp bWFnZXMtPmltYWdlKGYpOyB9CiAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZShpbnQgc3RhZ2UpOwoK cHVibGljOgogICAgdm9pZCBkcmF3KFFQYWludGVyJiBwYWludGVyKTsKCnByaXZhdGU6CgogICAg UUNhbnZhc1Nwcml0ZSggY29uc3QgUUNhbnZhc1Nwcml0ZSAmICk7CiAgICBRQ2FudmFzU3ByaXRl ICZvcGVyYXRvcj0oIGNvbnN0IFFDYW52YXNTcHJpdGUgJiApOwoKICAgIHZvaWQgYWRkVG9DaHVu a3MoKTsKICAgIHZvaWQgcmVtb3ZlRnJvbUNodW5rcygpOwogICAgdm9pZCBjaGFuZ2VDaHVua3Mo KTsKCiAgICBpbnQgZnJtOwogICAgdXNob3J0IGFuaW1fdmFsOwogICAgdWludCBhbmltX3N0YXRl OjI7CiAgICB1aW50IGFuaW1fdHlwZToxNDsKICAgIGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBR Q2FudmFzU3ByaXRlKiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2FudmFzUG9seWdv bmFsSXRlbSosCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1JlY3RhbmdsZSos CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc0VsbGlwc2UqLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFFDYW52YXNUZXh0KiApIGNvbnN0OwoKICAgIGZyaWVuZCBib29s IHF0X3Rlc3RDb2xsaXNpb24oIGNvbnN0IFFDYW52YXNTcHJpdGUqIHMxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1Nwcml0ZSogczIgKTsKCiAgICBRQ2Fu dmFzUGl4bWFwQXJyYXkqIGltYWdlczsKfTsKCmNsYXNzIFFQb2x5Z29uYWxQcm9jZXNzb3I7Cgpj bGFzcyBRQ2FudmFzUG9seWdvbmFsSXRlbSA6IHB1YmxpYyBRQ2FudmFzSXRlbQp7CnB1YmxpYzoK ICAgIFFDYW52YXNQb2x5Z29uYWxJdGVtKFFDYW52YXMqIGNhbnZhcyk7CiAgICB2aXJ0dWFsIH5R Q2FudmFzUG9seWdvbmFsSXRlbSgpOwoKICAgIGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBRQ2Fu dmFzSXRlbSogKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UGVuKFFQZW4gcCk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0QnJ1c2goUUJydXNoIGIpOwoKICAgIFFQZW4gcGVuKCkgY29uc3QKICAg ICAgICB7IHJldHVybiBwbjsgfQogICAgUUJydXNoIGJydXNoKCkgY29uc3QKICAgICAgICB7IHJl dHVybiBicjsgfQoKICAgIHZpcnR1YWwgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0PTA7 CiAgICB2aXJ0dWFsIFFQb2ludEFycmF5IGFyZWFQb2ludHNBZHZhbmNlZCgpIGNvbnN0OwogICAg UVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0 YXRpYyBpbnQgUlRUSTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhdyhRUGFpbnRlciAmKTsKICAg IHZpcnR1YWwgdm9pZCBkcmF3U2hhcGUoUVBhaW50ZXIgJikgPSAwOwoKICAgIGJvb2wgd2luZGlu ZygpIGNvbnN0OwogICAgdm9pZCBzZXRXaW5kaW5nKGJvb2wpOwoKICAgIHZvaWQgaW52YWxpZGF0 ZSgpOwogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAoYm9vbCl2YWw7 IH0KCnByaXZhdGU6CiAgICB2b2lkIHNjYW5Qb2x5Z29uKCBjb25zdCBRUG9pbnRBcnJheSYgcGEs IGludCB3aW5kaW5nLAogICAgICAgICAgICAgICAgICAgICAgUVBvbHlnb25hbFByb2Nlc3NvciYg cHJvY2VzcyApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgY2h1bmtzKCkgY29uc3Q7CgogICAgYm9v bCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNTcHJpdGUqLAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFFDYW52YXNQb2x5Z29uYWxJdGVtKiwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBRQ2FudmFzUmVjdGFuZ2xlKiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2Fu dmFzRWxsaXBzZSosCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1RleHQqICkg Y29uc3Q7CgogICAgUUJydXNoIGJyOwogICAgUVBlbiBwbjsKICAgIHVpbnQgd2luZDoxOwp9OwoK CmNsYXNzIFFDYW52YXNSZWN0YW5nbGUgOiBwdWJsaWMgUUNhbnZhc1BvbHlnb25hbEl0ZW0Kewpw dWJsaWM6CiAgICBRQ2FudmFzUmVjdGFuZ2xlKFFDYW52YXMqIGNhbnZhcyk7CiAgICBRQ2FudmFz UmVjdGFuZ2xlKGNvbnN0IFFSZWN0JiwgUUNhbnZhcyogY2FudmFzKTsKICAgIFFDYW52YXNSZWN0 YW5nbGUoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFFDYW52YXMqIGNhbnZh cyk7CgogICAgflFDYW52YXNSZWN0YW5nbGUoKTsKCiAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAg IGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0U2l6ZShpbnQgdywgaW50IGgpOwogICAg UVNpemUgc2l6ZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUVNpemUodyxoKTsgfQogICAgUVBv aW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0OwogICAgUVJlY3QgcmVjdCgpIGNvbnN0CiAgICAg ICAgeyByZXR1cm4gUVJlY3QoaW50KHgoKSksaW50KHkoKSksdyxoKTsgfQoKICAgIGJvb2wgY29s bGlkZXNXaXRoKCBjb25zdCBRQ2FudmFzSXRlbSogKSBjb25zdDsKCiAgICBpbnQgcnR0aSgpIGNv bnN0OwogICAgc3RhdGljIGludCBSVFRJOwoKcHJvdGVjdGVkOgogICAgdm9pZCBkcmF3U2hhcGUo UVBhaW50ZXIgJik7CiAgICBRUG9pbnRBcnJheSBjaHVua3MoKSBjb25zdDsKCnByaXZhdGU6CiAg ICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc1Nwcml0ZSosCiAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBRQ2FudmFzUG9seWdvbmFsSXRlbSosCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRQ2FudmFzUmVjdGFuZ2xlKiwKICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFDYW52YXNFbGxpcHNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD YW52YXNUZXh0KiApIGNvbnN0OwoKICAgIGludCB3LCBoOwp9OwoKCmNsYXNzIFFDYW52YXNQb2x5 Z29uIDogcHVibGljIFFDYW52YXNQb2x5Z29uYWxJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc1Bv bHlnb24oUUNhbnZhcyogY2FudmFzKTsKICAgIH5RQ2FudmFzUG9seWdvbigpOwogICAgdm9pZCBz ZXRQb2ludHMoUVBvaW50QXJyYXkpOwogICAgUVBvaW50QXJyYXkgcG9pbnRzKCkgY29uc3Q7CiAg ICB2b2lkIG1vdmVCeShkb3VibGUgZHgsIGRvdWJsZSBkeSk7CgogICAgUVBvaW50QXJyYXkgYXJl YVBvaW50cygpIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJU VEk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAmKTsKICAgIFFQb2lu dEFycmF5IHBvbHk7Cn07CgoKY2xhc3MgUUNhbnZhc1NwbGluZSA6IHB1YmxpYyBRQ2FudmFzUG9s eWdvbgp7CnB1YmxpYzoKICAgIFFDYW52YXNTcGxpbmUoUUNhbnZhcyogY2FudmFzKTsKICAgIH5R Q2FudmFzU3BsaW5lKCk7CgogICAgdm9pZCBzZXRDb250cm9sUG9pbnRzKFFQb2ludEFycmF5LCBi b29sIGNsb3NlZD1UUlVFKTsKICAgIFFQb2ludEFycmF5IGNvbnRyb2xQb2ludHMoKSBjb25zdDsK ICAgIGJvb2wgY2xvc2VkKCkgY29uc3Q7CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0YXRp YyBpbnQgUlRUSTsKCnByaXZhdGU6CiAgICB2b2lkIHJlY2FsY1BvbHkoKTsKICAgIFFQb2ludEFy cmF5IGJlejsKICAgIGJvb2wgY2w7Cn07CgoKY2xhc3MgUUNhbnZhc0xpbmUgOiBwdWJsaWMgUUNh bnZhc1BvbHlnb25hbEl0ZW0KewpwdWJsaWM6CiAgICBRQ2FudmFzTGluZShRQ2FudmFzKiBjYW52 YXMpOwogICAgflFDYW52YXNMaW5lKCk7CiAgICB2b2lkIHNldFBvaW50cyhpbnQgeDEsIGludCB5 MSwgaW50IHgyLCBpbnQgeTIpOwoKICAgIFFQb2ludCBzdGFydFBvaW50KCkgY29uc3QKICAgICAg ICB7IHJldHVybiBRUG9pbnQoeDEseTEpOyB9CiAgICBRUG9pbnQgZW5kUG9pbnQoKSBjb25zdAog ICAgICAgIHsgcmV0dXJuIFFQb2ludCh4Mix5Mik7IH0KCiAgICBpbnQgcnR0aSgpIGNvbnN0Owog ICAgc3RhdGljIGludCBSVFRJOwoKICAgIHZvaWQgc2V0UGVuKFFQZW4gcCk7Cgpwcm90ZWN0ZWQ6 CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAmKTsKICAgIFFQb2ludEFycmF5IGFyZWFQb2lu dHMoKSBjb25zdDsKCnByaXZhdGU6CiAgICBpbnQgeDEseTEseDIseTI7Cn07CgoKY2xhc3MgUUNh bnZhc0VsbGlwc2UgOiBwdWJsaWMgUUNhbnZhc1BvbHlnb25hbEl0ZW0KewoKcHVibGljOgogICAg UUNhbnZhc0VsbGlwc2UoIFFDYW52YXMqIGNhbnZhcyApOwogICAgUUNhbnZhc0VsbGlwc2UoIGlu dCB3aWR0aCwgaW50IGhlaWdodCwgUUNhbnZhcyogY2FudmFzICk7CiAgICBRQ2FudmFzRWxsaXBz ZSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RhcnRhbmdsZSwgaW50IGFuZ2xlLAogICAg ICAgICAgICAgICAgICAgIFFDYW52YXMqIGNhbnZhcyApOwoKICAgIH5RQ2FudmFzRWxsaXBzZSgp OwoKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAgdm9p ZCBzZXRTaXplKGludCB3LCBpbnQgaCk7CiAgICB2b2lkIHNldEFuZ2xlcyhpbnQgc3RhcnQsIGlu dCBsZW5ndGgpOwogICAgaW50IGFuZ2xlU3RhcnQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGEx OyB9CiAgICBpbnQgYW5nbGVMZW5ndGgoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGEyOyB9CiAg ICBRUG9pbnRBcnJheSBhcmVhUG9pbnRzKCkgY29uc3Q7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgo IGNvbnN0IFFDYW52YXNJdGVtKiApIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBz dGF0aWMgaW50IFJUVEk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAm KTsKCnByaXZhdGU6CiAgICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc1Nwcml0ZSos CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1BvbHlnb25hbEl0ZW0qLAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDYW52YXNSZWN0YW5nbGUqLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFFDYW52YXNFbGxpcHNlKiwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBRQ2FudmFzVGV4dCogKSBjb25zdDsKICAgIGludCB3LCBoOwogICAgaW50IGExLCBhMjsK fTsKCgpjbGFzcyBRQ2FudmFzVGV4dEV4dHJhOwoKY2xhc3MgUUNhbnZhc1RleHQgOiBwdWJsaWMg UUNhbnZhc0l0ZW0KewpwdWJsaWM6CiAgICBRQ2FudmFzVGV4dChRQ2FudmFzKiBjYW52YXMpOwog ICAgUUNhbnZhc1RleHQoY29uc3QgUVN0cmluZyYsIFFDYW52YXMqIGNhbnZhcyk7CiAgICBRQ2Fu dmFzVGV4dChjb25zdCBRU3RyaW5nJiwgUUZvbnQsIFFDYW52YXMqIGNhbnZhcyk7CgogICAgdmly dHVhbCB+UUNhbnZhc1RleHQoKTsKCiAgICB2b2lkIHNldFRleHQoIGNvbnN0IFFTdHJpbmcmICk7 CiAgICB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250JiApOwogICAgdm9pZCBzZXRDb2xvciggY29u c3QgUUNvbG9yJiApOwogICAgUVN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICBRRm9udCBmb250KCkg Y29uc3Q7CiAgICBRQ29sb3IgY29sb3IoKSBjb25zdDsKCiAgICB2b2lkIG1vdmVCeShkb3VibGUg ZHgsIGRvdWJsZSBkeSk7CgogICAgaW50IHRleHRGbGFncygpIGNvbnN0CiAgICAgICAgeyByZXR1 cm4gZmxhZ3M7IH0KICAgIHZvaWQgc2V0VGV4dEZsYWdzKGludCk7CgogICAgUVJlY3QgYm91bmRp bmdSZWN0KCkgY29uc3Q7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNJdGVt KiApIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7Cgpw cm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgZHJhdyhRUGFpbnRlciYpOwoKcHJpdmF0ZToKCiAg ICBRQ2FudmFzVGV4dCggY29uc3QgUUNhbnZhc1RleHQgJiApOwogICAgUUNhbnZhc1RleHQgJm9w ZXJhdG9yPSggY29uc3QgUUNhbnZhc1RleHQgJiApOwoKICAgIHZvaWQgYWRkVG9DaHVua3MoKTsK ICAgIHZvaWQgcmVtb3ZlRnJvbUNodW5rcygpOwogICAgdm9pZCBjaGFuZ2VDaHVua3MoKTsKCiAg ICB2b2lkIHNldFJlY3QoKTsKICAgIFFSZWN0IGJyZWN0OwogICAgUVN0cmluZyB0eHQ7CiAgICBp bnQgZmxhZ3M7CiAgICBRRm9udCBmbnQ7CiAgICBRQ29sb3IgY29sOwogICAgUUNhbnZhc1RleHRF eHRyYSogZXh0cmE7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNTcHJpdGUq LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1BvbHlnb25hbEl0ZW0qLAog ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNhbnZhc1JlY3RhbmdsZSosCiAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRQ2FudmFzRWxsaXBzZSosCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRQ2FudmFzVGV4dCogKSBjb25zdDsKfTsKIyAyMyAiVHhWb3JwYWxHVUku aCIgMgoKCmNsYXNzIFR4Vm9ycGFsR1VJIDogcHVibGljIFFNYWluV2luZG93CnsKICAgIHB1Ymxp YzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp Y01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2 aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZv a2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0 KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2 KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBR VmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmpl Y3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0 ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRm OCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0 YU9iamVjdCAqbWV0YU9iajsKCnB1YmxpYzoKCgoKCiBUeFZvcnBhbEdVSSAoKTsKCgoKCiBzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IHNjYWxlID0gMjA7CgoKCgogc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBwYWQgPSAyMDsKCgoKCiBzdGF0aWMgaW50IGdldFBsYWNlICgpOwoKCgoKIHN0YXRp YyB1bnNpZ25lZCBpbnQgZ2V0UmlnaHQgKCkKIHsKICAgcmV0dXJuIHJpZ2h0OwogfQoKCgoKIHN0 YXRpYyB1bnNpZ25lZCBpbnQgZ2V0Qm90dG9tICgpCiB7CiAgIHJldHVybiBib3R0b207CiB9CgoK Cgogc3RhdGljIHZvaWQgc2V0UGxhY2UgKGNvbnN0IGludCBuZXdQbGFjZSk7CgoKCgogc3RhdGlj IFFMYWJlbCYgZ2V0SG92ZXIgKCkKIHsKICAgcmV0dXJuICpob3ZlcjsKIH0KCgoKCiBzdGF0aWMg UUxhYmVsJiBnZXRQb2ludGVyICgpCiB7CiAgIHJldHVybiAqcG9pbnRlcjsKIH0KCgoKCiBzdGF0 aWMgUVRhYmxlJiBnZXRUcmVlICgpCiB7CiAgIHJldHVybiAqdHJlZTsKIH0KCgoKCiBzdGF0aWMg VHhxRWRpdFRhYmxlJiBnZXRUYWJsZSAoKQogewogICByZXR1cm4gKnRhYmxlOwogfQoKCgoKIHN0 YXRpYyB2b2lkIGRvUGljayAoY29uc3QgdW5zaWduZWQgaW50IHBhcnQpOwoKCgoKCiBzdGF0aWMg dm9pZCBzZXRCb3VuZHMgKFFDYW52YXNSZWN0YW5nbGUgJnJlY3RhbmdsZSwgY29uc3QgVHhIaWVy QXR0cmliU2V0ICZkYXRhKTsKCnB1YmxpYyA6CgoKCgogdm9pZCBvcGVuKCk7CgoKCgogdm9pZCBu ZXdzKCk7CgoKCgogdm9pZCBzYXZlKCk7CgoKCgogdm9pZCBzYXZlQXMoKTsKCgoKCiB2b2lkIHVu ZG8oKTsKCgoKCiB2b2lkIHJlZG8oKTsKCgoKCiB2b2lkIGFib3V0KCk7CgoKCgogdm9pZCBuZXdC b3VuZGFyeSgpOwoKCgoKIHZvaWQgbmV3U2luaygpOwoKCgoKIHZvaWQgbmV3U291cmNlKCk7CgoK Cgogdm9pZCBuZXdJbml0aWFsKCk7CgoKCgogdm9pZCBuZXdFbUZpZWxkKCk7CgoKCgogdm9pZCBu ZXdTcGVjaWVzKCk7CgoKCgogdm9pZCBuZXdGbHVpZCgpOwoKCgoKCgogdm9pZCB0YWJsZUNoYW5n ZSAoaW50IHJvdywgaW50IGNvbCk7CgoKCgoKCiB2b2lkIHRhYmxlUGljayAoaW50IHJvdywgaW50 IGNvbCk7CgoKCgoKIHZvaWQgY29tYm9QaWNrIChpbnQgaWR4KTsKCnByb3RlY3RlZDoKCgoKCgog IHZvaWQgcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqcmVzaXplICk7CgoKCgoKICB2b2lkIGtl eVByZXNzRXZlbnQoIFFLZXlFdmVudCAqa2V5c3Ryb2tlICk7Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2 b2lkIGV4cGxhaW4oIGNvbnN0IFFTdHJpbmcmIGl0ZW0pOwoKcHJpdmF0ZToKCgoKCiAgUU1lbnVC YXIgKm1lbnU7CgoKCgogIHN0YXRpYyBRVGFibGUgKnRyZWU7CgoKCgogIHN0YXRpYyBRTGFiZWwg KnBvaW50ZXI7CgoKCgogIHN0YXRpYyBRTGFiZWwgKmhvdmVyOwoKCgoKICBzdGF0aWMgVHhxRWRp dFRhYmxlICp0YWJsZTsKCgoKCiAgc3RhdGljIHVuc2lnbmVkIGludCByaWdodDsKCgoKCiAgc3Rh dGljIHVuc2lnbmVkIGludCBib3R0b207CgoKCgogIHN0YXRpYyB2b2lkIG9wZW4gKGNvbnN0IGNo YXIgKmNvbnN0IG5hbWUpOwp9OwojIDE0ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICJUeFBhcnQu aCIgMQojIDIzICJUeFBhcnQuaCIKY2xhc3MgVHhQYXJ0IHsKCiAgcHVibGljOgoKCgoKICAgIFFD YW52YXNJdGVtICYgZ2V0SXRlbSgpIHsKICAgICAgcmV0dXJuICppdGVtOwogICAgfQoKCgoKICAg IFR4SGllckF0dHJpYlNldCAmIGdldERhdGEoKSB7CiAgICAgIHJldHVybiAqZGF0YTsKICAgIH0K CgoKCiAgICBzdGF0aWMgc3RkOjp2ZWN0b3IgPCBUeFBhcnQgPiAmZ2V0QWxsUGFydHMoKSB7CiAg ICAgIHJldHVybiBhbGxQYXJ0czsKICAgIH0KCgoKCgoKICAgIHN0YXRpYyB2b2lkIGFkZChRQ2Fu dmFzSXRlbSAqIGNvbnN0IGl0ZW0sIGNvbnN0IFR4SGllckF0dHJpYlNldCAmIGRhdGEpOwoKICBw cml2YXRlOgoKCgoKICAgIFFDYW52YXNJdGVtICogaXRlbTsKCgoKCiAgICBUeEhpZXJBdHRyaWJT ZXQgKmRhdGE7CgoKCgogICAgc3RhdGljIHN0ZDo6dmVjdG9yIDwgVHhQYXJ0ID4gYWxsUGFydHM7 Cgp9OwojIDE1ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICJUeEdyaWRWaWV3LmgiIDEKIyAxNyAi VHhHcmlkVmlldy5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmJveC5oIiAx CiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdmJveC5oIgojIDEgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xaGJveC5oIiAxCiMgNDYgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xaGJveC5oIgpjbGFzcyBRQm94TGF5b3V0OwoKY2xhc3MgUUhCb3ggOiBwdWJsaWMg UUZyYW1lCnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNv bnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNs YXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZp cnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9l bWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwg aW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2Jq ZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNN ZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsg fSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0 YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHBy aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhCb3goIFFX aWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKCiAgICB2 b2lkIHNldFNwYWNpbmcoIGludCApOwogICAgYm9vbCBzZXRTdHJldGNoRmFjdG9yKCBRV2lkZ2V0 KiwgaW50IHN0cmV0Y2ggKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6 CiAgICBRSEJveCggYm9vbCBob3Jpem9udGFsLCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hh ciogbmFtZT0wLCBXRmxhZ3MgZj0wICk7CiAgICB2b2lkIGZyYW1lQ2hhbmdlZCgpOwoKcHJpdmF0 ZToKICAgIFFCb3hMYXlvdXQgKmxheTsKCiAgICBRSEJveCggY29uc3QgUUhCb3ggJiApOwogICAg UUhCb3ggJm9wZXJhdG9yPSggY29uc3QgUUhCb3ggJiApOwoKfTsKIyA0MyAiL3Vzci9sb2NhbC9x dC0zLjEuMS9pbmNsdWRlL3F2Ym94LmgiIDIKCgoKCmNsYXNzIFFWQm94IDogcHVibGljIFFIQm94 CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsg cmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFt ZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwg Ym9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBp bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYs IFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAs IGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2Jq ZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0 aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBR U3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6 IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUVZCb3goIFFXaWRnZXQq IHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKCnByaXZhdGU6Cgog ICAgUVZCb3goIGNvbnN0IFFWQm94ICYgKTsKICAgIFFWQm94JiBvcGVyYXRvcj0oIGNvbnN0IFFW Qm94ICYgKTsKCn07CiMgMTggIlR4R3JpZFZpZXcuaCIgMgojIDEgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xcHVzaGJ1dHRvbi5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5j bHVkZS9xcHVzaGJ1dHRvbi5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnV0 dG9uLmgiIDEKIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FidXR0b24uaCIKY2xh c3MgUUJ1dHRvbkdyb3VwOwpjbGFzcyBRVG9vbEJhcjsKY2xhc3MgUUJ1dHRvbkRhdGE7CgpjbGFz cyBRQnV0dG9uIDogcHVibGljIFFXaWRnZXQKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2Jq ZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZp cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2Fz dCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCog KTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx dF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9z dGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMg UU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0 dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwog ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgog ICAgUUJ1dHRvbiggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdz IGY9MCApOwogICAgflFCdXR0b24oKTsKCiAgICBRU3RyaW5nIHRleHQoKSBjb25zdDsKICAgIHZp cnR1YWwgdm9pZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nICYpOwogICAgY29uc3QgUVBpeG1hcCAq cGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFw ICYgKTsKCgogICAgUUtleVNlcXVlbmNlIGFjY2VsKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg c2V0QWNjZWwoIGNvbnN0IFFLZXlTZXF1ZW5jZSYgKTsKCgogICAgYm9vbCBpc1RvZ2dsZUJ1dHRv bigpIGNvbnN0OwoKICAgIGVudW0gVG9nZ2xlVHlwZSB7IFNpbmdsZVNob3QsIFRvZ2dsZSwgVHJp c3RhdGUgfTsKICAgIFRvZ2dsZVR5cGUgdG9nZ2xlVHlwZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwg dm9pZCBzZXREb3duKCBib29sICk7CiAgICBib29sIGlzRG93bigpIGNvbnN0OwoKICAgIGJvb2wg aXNPbigpIGNvbnN0OwoKICAgIGVudW0gVG9nZ2xlU3RhdGUgeyBPZmYsIE5vQ2hhbmdlLCBPbiB9 OwogICAgVG9nZ2xlU3RhdGUgc3RhdGUoKSBjb25zdDsKCgogICAgYm9vbCBhdXRvUmVzaXplKCkg Y29uc3Q7CiAgICB2b2lkIHNldEF1dG9SZXNpemUoIGJvb2wgKTsKCgogICAgYm9vbCBhdXRvUmVw ZWF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b1JlcGVhdCggYm9vbCApOwoKICAg IGJvb2wgaXNFeGNsdXNpdmVUb2dnbGUoKSBjb25zdDsKCiAgICBRQnV0dG9uR3JvdXAgKmdyb3Vw KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdm9pZCBhbmltYXRlQ2xpY2soKTsKICAgIHZvaWQgdG9n Z2xlKCk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHByZXNzZWQoKTsKICAgIHZvaWQgcmVsZWFzZWQo KTsKICAgIHZvaWQgY2xpY2tlZCgpOwogICAgdm9pZCB0b2dnbGVkKCBib29sICk7CiAgICB2b2lk IHN0YXRlQ2hhbmdlZCggaW50ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldFRvZ2dsZUJ1dHRv biggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFRvZ2dsZVR5cGUoIFRvZ2dsZVR5cGUgKTsK ICAgIHZvaWQgc2V0T24oIGJvb2wgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0ZSggVG9nZ2xl U3RhdGUgKTsKCiAgICB2aXJ0dWFsIGJvb2wgaGl0QnV0dG9uKCBjb25zdCBRUG9pbnQgJnBvcyAp IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGRyYXdCdXR0b24oIFFQYWludGVyICogKTsKICAgIHZp cnR1YWwgdm9pZCBkcmF3QnV0dG9uTGFiZWwoIFFQYWludGVyICogKTsKCiAgICB2b2lkIGtleVBy ZXNzRXZlbnQoIFFLZXlFdmVudCAqKTsKICAgIHZvaWQga2V5UmVsZWFzZUV2ZW50KCBRS2V5RXZl bnQgKik7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9p ZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVF dmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAq ICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1 c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CgogICAgdm9pZCBlbmFibGVkQ2hhbmdlKCBib29s ICk7Cgpwcml2YXRlIDoKICAgIHZvaWQgYW5pbWF0ZVRpbWVvdXQoKTsKICAgIHZvaWQgYXV0b1Jl cGVhdFRpbWVvdXQoKTsKICAgIHZvaWQgZW11bGF0ZUNsaWNrKCk7Cgpwcml2YXRlOgogICAgUVN0 cmluZyBidGV4dDsKICAgIFFQaXhtYXAgKmJwaXhtYXA7CiAgICB1aW50IHRvZ2dsZVR5cCA6IDI7 CiAgICB1aW50IGJ1dHRvbkRvd24gOiAxOwogICAgdWludCBzdGF0IDogMjsKICAgIHVpbnQgbWxi RG93biA6IDE7CiAgICB1aW50IGF1dG9yZXNpemUgOiAxOwogICAgdWludCBhbmltYXRpb24gOiAx OwogICAgdWludCByZXBlYXQgOiAxOwogICAgUUJ1dHRvbkRhdGEgKmQ7CgogICAgZnJpZW5kIGNs YXNzIFFCdXR0b25Hcm91cDsKICAgIGZyaWVuZCBjbGFzcyBRVG9vbEJhcjsKICAgIHZvaWQgZW5z dXJlRGF0YSgpOwogICAgdmlydHVhbCB2b2lkIHNldEdyb3VwKCBRQnV0dG9uR3JvdXAqICk7CiAg ICBRVGltZXIgKnRpbWVyKCk7CiAgICB2b2lkIG5leHRTdGF0ZSgpOwoKcHJpdmF0ZToKCiAgICBR QnV0dG9uKCBjb25zdCBRQnV0dG9uICYgKTsKICAgIFFCdXR0b24gJm9wZXJhdG9yPSggY29uc3Qg UUJ1dHRvbiAmICk7Cgp9OwoKCmlubGluZSBRU3RyaW5nIFFCdXR0b246OnRleHQoKSBjb25zdAp7 CiAgICByZXR1cm4gYnRleHQ7Cn0KCmlubGluZSBjb25zdCBRUGl4bWFwICpRQnV0dG9uOjpwaXht YXAoKSBjb25zdAp7CiAgICByZXR1cm4gYnBpeG1hcDsKfQoKaW5saW5lIGJvb2wgUUJ1dHRvbjo6 aXNUb2dnbGVCdXR0b24oKSBjb25zdAp7CiAgICByZXR1cm4gdG9nZ2xlVHlwICE9IFNpbmdsZVNo b3Q7Cn0KCmlubGluZSBib29sIFFCdXR0b246OmlzRG93bigpIGNvbnN0CnsKICAgIHJldHVybiBi dXR0b25Eb3duOwp9CgppbmxpbmUgYm9vbCBRQnV0dG9uOjppc09uKCkgY29uc3QKewogICAgcmV0 dXJuIHN0YXQgIT0gT2ZmOwp9CgoKaW5saW5lIGJvb2wgUUJ1dHRvbjo6YXV0b1Jlc2l6ZSgpIGNv bnN0CnsKICAgIHJldHVybiBhdXRvcmVzaXplOwp9CgppbmxpbmUgYm9vbCBRQnV0dG9uOjphdXRv UmVwZWF0KCkgY29uc3QKewogICAgcmV0dXJuIHJlcGVhdDsKfQoKCmlubGluZSBRQnV0dG9uOjpU b2dnbGVTdGF0ZSBRQnV0dG9uOjpzdGF0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBUb2dnbGVTdGF0 ZShzdGF0KTsKfQoKaW5saW5lIHZvaWQgUUJ1dHRvbjo6c2V0VG9nZ2xlQnV0dG9uKCBib29sIGIg KQp7CiAgICBzZXRUb2dnbGVUeXBlKCBiID8gVG9nZ2xlIDogU2luZ2xlU2hvdCApOwp9Cgppbmxp bmUgdm9pZCBRQnV0dG9uOjpzZXRPbiggYm9vbCB5ICkKewogICAgc2V0U3RhdGUoIHkgPyBPbiA6 IE9mZiApOwp9CgppbmxpbmUgUUJ1dHRvbjo6VG9nZ2xlVHlwZSBRQnV0dG9uOjp0b2dnbGVUeXBl KCkgY29uc3QKewogICAgcmV0dXJuIFRvZ2dsZVR5cGUodG9nZ2xlVHlwKTsKfQojIDQzICIvdXNy L2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXB1c2hidXR0b24uaCIgMgoKCgoKY2xhc3MgUVB1c2hC dXR0b25Qcml2YXRlOwpjbGFzcyBRUG9wdXBNZW51OwoKY2xhc3MgUVB1c2hCdXR0b24gOiBwdWJs aWMgUUJ1dHRvbgp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3Qo KSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFy ICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiAp OyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg cXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQg aWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSgg UU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh dGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRo aXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCAp OyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CgogICAKICAgCiAgIAogICAK ICAgCiAgIAogICAKICAgCgpwdWJsaWM6CiAgICBRUHVzaEJ1dHRvbiggUVdpZGdldCAqcGFyZW50 LCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFQdXNoQnV0dG9uKCBjb25zdCBRU3RyaW5nICZ0 ZXh0LCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUVB1c2hCdXR0 b24oIGNvbnN0IFFJY29uU2V0JiBpY29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBRV2lkZ2V0ICpw YXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgflFQdXNoQnV0dG9uKCk7CgogICAgUVNp emUgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICB2b2lkIG1vdmUoIGludCB4LCBpbnQgeSApOwogICAg dm9pZCBtb3ZlKCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgcmVzaXplKCBpbnQgdywgaW50 IGggKTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkIHNldEdlb21l dHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwoKICAgIHZvaWQgc2V0R2VvbWV0cnko IGNvbnN0IFFSZWN0ICYgKTsKCiAgICB2b2lkIHNldFRvZ2dsZUJ1dHRvbiggYm9vbCApOwoKICAg IGJvb2wgYXV0b0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiBhdXRvRGVmQnV0dG9uOyB9CiAgICB2 aXJ0dWFsIHZvaWQgc2V0QXV0b0RlZmF1bHQoIGJvb2wgYXV0b0RlZiApOwogICAgYm9vbCBpc0Rl ZmF1bHQoKSBjb25zdCB7IHJldHVybiBkZWZCdXR0b247IH0KICAgIHZpcnR1YWwgdm9pZCBzZXRE ZWZhdWx0KCBib29sIGRlZiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRJc01lbnVCdXR0b24oIGJv b2wgZW5hYmxlICkgewogICAgICAgIGlmICggKGJvb2wpaGFzTWVudUFycm93ID09IGVuYWJsZSAp CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBoYXNNZW51QXJyb3cgPSBlbmFibGUgPyAxIDog MDsKICAgICAgICB1cGRhdGUoKTsKICAgICAgICB1cGRhdGVHZW9tZXRyeSgpOwogICAgfQogICAg Ym9vbCBpc01lbnVCdXR0b24oKSBjb25zdCB7IHJldHVybiBoYXNNZW51QXJyb3c7IH0KCiAgICB2 b2lkIHNldFBvcHVwKCBRUG9wdXBNZW51KiBwb3B1cCApOwogICAgUVBvcHVwTWVudSogcG9wdXAo KSBjb25zdDsKCiAgICB2b2lkIHNldEljb25TZXQoIGNvbnN0IFFJY29uU2V0JiApOwogICAgUUlj b25TZXQqIGljb25TZXQoKSBjb25zdDsKCiAgICB2b2lkIHNldEZsYXQoIGJvb2wgKTsKICAgIGJv b2wgaXNGbGF0KCkgY29uc3Q7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldE9uKCBib29s ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdCdXR0b24oIFFQYWludGVyICogKTsKICAgIHZv aWQgZHJhd0J1dHRvbkxhYmVsKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvY3VzSW5FdmVudCgg UUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7 CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdm9pZCB1cGRhdGVN YXNrKCk7Cgpwcml2YXRlIDoKICAgIHZvaWQgcG9wdXBQcmVzc2VkKCk7Cgpwcml2YXRlOgogICAg dm9pZCBpbml0KCk7CgogICAgdWludCBhdXRvRGVmQnV0dG9uIDogMTsKICAgIHVpbnQgZGVmQnV0 dG9uIDogMTsKICAgIHVpbnQgZmx0IDogMTsKICAgIHVpbnQgcmVzZXJ2ZWQgOiAxOwogICAgdWlu dCBsYXN0RW5hYmxlZCA6IDE7CiAgICB1aW50IGhhc01lbnVBcnJvdyA6IDE7CgogICAgUVB1c2hC dXR0b25Qcml2YXRlKiBkOwoKICAgIGZyaWVuZCBjbGFzcyBRRGlhbG9nOwoKcHJpdmF0ZToKCiAg ICBRUHVzaEJ1dHRvbiggY29uc3QgUVB1c2hCdXR0b24gJiApOwogICAgUVB1c2hCdXR0b24gJm9w ZXJhdG9yPSggY29uc3QgUVB1c2hCdXR0b24gJiApOwoKfTsKIyAxOSAiVHhHcmlkVmlldy5oIiAy CgoKCgoKY2xhc3MgVHhHcmlkVmlldyA6IHB1YmxpYyBRQ2FudmFzVmlldwp7CgpwdWJsaWM6CgoK CgoKICAgVHhHcmlkVmlldyAoUVZCb3ggJnZib3gpCiAgIDogUUNhbnZhc1ZpZXcoJnZib3gpCiAg IHsKICAgICAgZ3JpZFZpZXcgPSB0aGlzOwogICB9CgoKCgogICBzdGF0aWMgVHhHcmlkVmlldyYg Z2V0R3JpZFZpZXcgKCkKICAgewogICAgIHJldHVybiAqZ3JpZFZpZXc7CiAgIH0KCgoKCiAgIHN0 YXRpYyB2b2lkIHNldFB1c2hlZCAoUVB1c2hCdXR0b24gJm5ld1B1c2hlZCkKICAgewogICAgIHB1 c2hlZCA9ICZuZXdQdXNoZWQ7CiAgIH0KCgoKCiAgIHN0YXRpYyB2b2lkIGNsZWFyICgpOwoKcHJv dGVjdGVkOgoKCgoKCiAgIHZvaWQgY29udGVudHNNb3VzZVByZXNzRXZlbnQgKFFNb3VzZUV2ZW50 ICpjb25zdCBwcmVzcyk7CgoKCgoKICAgdm9pZCBjb250ZW50c01vdXNlTW92ZUV2ZW50IChRTW91 c2VFdmVudCAqY29uc3QgbW92ZSk7CgoKCgoKICAgdm9pZCBjb250ZW50c01vdXNlUmVsZWFzZUV2 ZW50IChRTW91c2VFdmVudCAqICk7Cgpwcml2YXRlOgoKCgoKICAgc3RhdGljIFR4R3JpZFZpZXcg KmdyaWRWaWV3OwoKCgoKICAgc3RhdGljIFFQdXNoQnV0dG9uICpwdXNoZWQ7CgoKCgoKCiAgIGlu dCBoaXRUZXN0IChjb25zdCBRTW91c2VFdmVudCAmbW91c2UpOwp9OwojIDE2ICJUeFZvcnBhbEdV SS5jcHAiIDIKIyAxICJUeFZvcnBhbE1lbnVJdGVtLmgiIDEKIyAxNyAiVHhWb3JwYWxNZW51SXRl bS5oIgojIDEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRlci5oIiAxCiMgNTAg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xcGFpbnRlci5oIgojIDEgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xd21hdHJpeC5oIiAxCiMgNTEgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xd21hdHJpeC5oIgpjbGFzcyBRV01hdHJpeAp7CnB1YmxpYzoKICAgIFFXTWF0cml4 KCk7CiAgICBRV01hdHJpeCggZG91YmxlIG0xMSwgZG91YmxlIG0xMiwgZG91YmxlIG0yMSwgZG91 YmxlIG0yMiwKICAgICAgICAgICAgICBkb3VibGUgZHgsIGRvdWJsZSBkeSApOwoKICAgIHZvaWQg c2V0TWF0cml4KCBkb3VibGUgbTExLCBkb3VibGUgbTEyLCBkb3VibGUgbTIxLCBkb3VibGUgbTIy LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZHgsIGRvdWJsZSBkeSApOwoKICAg IGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVybiBfbTExOyB9CiAgICBkb3VibGUgbTEyKCkgY29u c3QgeyByZXR1cm4gX20xMjsgfQogICAgZG91YmxlIG0yMSgpIGNvbnN0IHsgcmV0dXJuIF9tMjE7 IH0KICAgIGRvdWJsZSBtMjIoKSBjb25zdCB7IHJldHVybiBfbTIyOyB9CiAgICBkb3VibGUgZHgo KSBjb25zdCB7IHJldHVybiBfZHg7IH0KICAgIGRvdWJsZSBkeSgpIGNvbnN0IHsgcmV0dXJuIF9k eTsgfQoKICAgIHZvaWQgbWFwKCBpbnQgeCwgaW50IHksIGludCAqdHgsIGludCAqdHkgKSBjb25z dDsKICAgIHZvaWQgbWFwKCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSAqdHgsIGRvdWJsZSAq dHkgKSBjb25zdDsKICAgIFFSZWN0IG1hcFJlY3QoIGNvbnN0IFFSZWN0ICYgKSBjb25zdDsKCiAg ICBRUG9pbnQgbWFwKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdCB7IHJldHVybiBvcGVyYXRvciAq KCBwICk7IH0KICAgIFFSZWN0IG1hcCggY29uc3QgUVJlY3QgJnIgKSBjb25zdCB7IHJldHVybiBt YXBSZWN0ICggciApOyB9CiAgICBRUG9pbnRBcnJheSBtYXAoIGNvbnN0IFFQb2ludEFycmF5ICZh ICkgY29uc3QgeyByZXR1cm4gb3BlcmF0b3IgKiAoIGEgKTsgfQogICAgUVJlZ2lvbiBtYXAoIGNv bnN0IFFSZWdpb24gJnIgKSBjb25zdCB7IHJldHVybiBvcGVyYXRvciAqKCByICk7IH0KICAgIFFS ZWdpb24gbWFwVG9SZWdpb24oIGNvbnN0IFFSZWN0ICZyICkgY29uc3QgeyByZXR1cm4gb3BlcmF0 b3IgKiggciApOyB9CiAgICBRUG9pbnRBcnJheSBtYXBUb1BvbHlnb24oIGNvbnN0IFFSZWN0ICZy ICkgY29uc3Q7CgogICAgdm9pZCByZXNldCgpOwogICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7 CgogICAgUVdNYXRyaXggJnRyYW5zbGF0ZSggZG91YmxlIGR4LCBkb3VibGUgZHkgKTsKICAgIFFX TWF0cml4ICZzY2FsZSggZG91YmxlIHN4LCBkb3VibGUgc3kgKTsKICAgIFFXTWF0cml4ICZzaGVh ciggZG91YmxlIHNoLCBkb3VibGUgc3YgKTsKICAgIFFXTWF0cml4ICZyb3RhdGUoIGRvdWJsZSBh ICk7CgogICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdCB7IHJldHVybiAoX20xMSpfbTIyIC0g X20xMipfbTIxKSAhPSAwOyB9CiAgICBkb3VibGUgZGV0KCkgY29uc3QgeyByZXR1cm4gX20xMSpf bTIyIC0gX20xMipfbTIxOyB9CgogICAgUVdNYXRyaXggaW52ZXJ0KCBib29sICogPSAwICkgY29u c3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRV01hdHJpeCAmICkgY29uc3Q7CiAgICBi b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFXTWF0cml4ICYgKSBjb25zdDsKICAgIFFXTWF0cml4ICZv cGVyYXRvcio9KCBjb25zdCBRV01hdHJpeCAmICk7CgoKICAgIFFQb2ludCBvcGVyYXRvciAqIChj b25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVJlZ2lvbiBvcGVyYXRvciAqIChjb25zdCBRUmVj dCAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yICogKGNvbnN0IFFSZWdpb24gJiApIGNv bnN0OwogICAgUVBvaW50QXJyYXkgb3BlcmF0b3IgKiAoIGNvbnN0IFFQb2ludEFycmF5ICZhICkg Y29uc3Q7CgogICAgZW51bSBUcmFuc2Zvcm1hdGlvbk1vZGUgewogICAgICAgIFBvaW50cywgQXJl YXMKICAgIH07CiAgICBzdGF0aWMgdm9pZCBzZXRUcmFuc2Zvcm1hdGlvbk1vZGUoIFFXTWF0cml4 OjpUcmFuc2Zvcm1hdGlvbk1vZGUgbSApOwogICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTW9kZSB0 cmFuc2Zvcm1hdGlvbk1vZGUoKTsKcHJpdmF0ZToKICAgIGRvdWJsZSBfbTExLCBfbTEyOwogICAg ZG91YmxlIF9tMjEsIF9tMjI7CiAgICBkb3VibGUgX2R4LCBfZHk7Cn07CgogUVdNYXRyaXggb3Bl cmF0b3IqKCBjb25zdCBRV01hdHJpeCAmLCBjb25zdCBRV01hdHJpeCAmICk7CgoKCgoKCiBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVdNYXRyaXggJiApOwog UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFXTWF0cml4ICYgKTsKIyA1 MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FwYWludGVyLmgiIDIKCgpjbGFzcyBRR2Z4 OwpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRVGV4dFBhcmFnOwpjbGFzcyBRUGFpbnREZXZpY2U7 CgoKCmNsYXNzIFFQYWludGVyUHJpdmF0ZTsKCmNsYXNzIFFQYWludGVyIDogcHVibGljIFF0CnsK cHVibGljOgogICAgZW51bSBDb29yZGluYXRlTW9kZSB7IENvb3JkRGV2aWNlLCBDb29yZFBhaW50 ZXIgfTsKCiAgICBRUGFpbnRlcigpOwogICAgUVBhaW50ZXIoIGNvbnN0IFFQYWludERldmljZSAq LCBib29sIHVuY2xpcHBlZCA9IEZBTFNFICk7CiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50RGV2 aWNlICosIGNvbnN0IFFXaWRnZXQgKiwgYm9vbCB1bmNsaXBwZWQgPSBGQUxTRSApOwogICB+UVBh aW50ZXIoKTsKCiAgICBib29sIGJlZ2luKCBjb25zdCBRUGFpbnREZXZpY2UgKiwgYm9vbCB1bmNs aXBwZWQgPSBGQUxTRSApOwogICAgYm9vbCBiZWdpbiggY29uc3QgUVBhaW50RGV2aWNlICosIGNv bnN0IFFXaWRnZXQgKiwgYm9vbCB1bmNsaXBwZWQgPSBGQUxTRSApOwogICAgYm9vbCBlbmQoKTsK ICAgIFFQYWludERldmljZSAqZGV2aWNlKCkgY29uc3Q7CgoKCgoKICAgIHN0YXRpYyB2b2lkIHJl ZGlyZWN0KCBRUGFpbnREZXZpY2UgKnBkZXYsIFFQYWludERldmljZSAqcmVwbGFjZW1lbnQgKTsK CiAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CgogICAgdm9pZCBmbHVzaCggY29uc3QgUVJlZ2lv biAmcmVnaW9uLCBDb29yZGluYXRlTW9kZSBjbSA9IENvb3JkRGV2aWNlICk7CiAgICB2b2lkIGZs dXNoKCk7CiAgICB2b2lkIHNhdmUoKTsKICAgIHZvaWQgcmVzdG9yZSgpOwoKCgogICAgUUZvbnRN ZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICBRRm9udEluZm8gZm9udEluZm8oKSBjb25z dDsKCiAgICBjb25zdCBRRm9udCAmZm9udCgpIGNvbnN0OwogICAgdm9pZCBzZXRGb250KCBjb25z dCBRRm9udCAmICk7CiAgICBjb25zdCBRUGVuICZwZW4oKSBjb25zdDsKICAgIHZvaWQgc2V0UGVu KCBjb25zdCBRUGVuICYgKTsKICAgIHZvaWQgc2V0UGVuKCBQZW5TdHlsZSApOwogICAgdm9pZCBz ZXRQZW4oIGNvbnN0IFFDb2xvciAmICk7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCkgY29uc3Q7 CiAgICB2b2lkIHNldEJydXNoKCBjb25zdCBRQnJ1c2ggJiApOwogICAgdm9pZCBzZXRCcnVzaCgg QnJ1c2hTdHlsZSApOwogICAgdm9pZCBzZXRCcnVzaCggY29uc3QgUUNvbG9yICYgKTsKICAgIFFQ b2ludCBwb3MoKSBjb25zdDsKCgoKICAgIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZENvbG9yKCkg Y29uc3Q7CiAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9yICYgKTsKICAg IEJHTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0OwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kTW9k ZSggQkdNb2RlICk7CiAgICBSYXN0ZXJPcCByYXN0ZXJPcCgpIGNvbnN0OwogICAgdm9pZCBzZXRS YXN0ZXJPcCggUmFzdGVyT3AgKTsKICAgIGNvbnN0IFFQb2ludCAmYnJ1c2hPcmlnaW4oKSBjb25z dDsKICAgIHZvaWQgc2V0QnJ1c2hPcmlnaW4oIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBzZXRC cnVzaE9yaWdpbiggY29uc3QgUVBvaW50ICYgKTsKCgoKCgoKICAgIGJvb2wgaGFzVmlld1hGb3Jt KCkgY29uc3Q7CiAgICBib29sIGhhc1dvcmxkWEZvcm0oKSBjb25zdDsKCgogICAgdm9pZCBzZXRW aWV3WEZvcm0oIGJvb2wgKTsKICAgIFFSZWN0IHdpbmRvdygpIGNvbnN0OwogICAgdm9pZCBzZXRX aW5kb3coIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgc2V0V2luZG93KCBpbnQgeCwgaW50IHks IGludCB3LCBpbnQgaCApOwogICAgUVJlY3Qgdmlld3BvcnQoKSBjb25zdDsKICAgIHZvaWQgc2V0 Vmlld3BvcnQoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgc2V0Vmlld3BvcnQoIGludCB4LCBp bnQgeSwgaW50IHcsIGludCBoICk7CgogICAgdm9pZCBzZXRXb3JsZFhGb3JtKCBib29sICk7CiAg ICBjb25zdCBRV01hdHJpeCAmd29ybGRNYXRyaXgoKSBjb25zdDsKICAgIHZvaWQgc2V0V29ybGRN YXRyaXgoIGNvbnN0IFFXTWF0cml4ICYsIGJvb2wgY29tYmluZT1GQUxTRSApOwoKICAgIHZvaWQg c2F2ZVdvcmxkTWF0cml4KCk7CiAgICB2b2lkIHJlc3RvcmVXb3JsZE1hdHJpeCgpOwoKICAgIHZv aWQgc2NhbGUoIGRvdWJsZSBzeCwgZG91YmxlIHN5ICk7CiAgICB2b2lkIHNoZWFyKCBkb3VibGUg c2gsIGRvdWJsZSBzdiApOwogICAgdm9pZCByb3RhdGUoIGRvdWJsZSBhICk7CgogICAgdm9pZCB0 cmFuc2xhdGUoIGRvdWJsZSBkeCwgZG91YmxlIGR5ICk7CiAgICB2b2lkIHJlc2V0WEZvcm0oKTsK ICAgIGRvdWJsZSB0cmFuc2xhdGlvblgoKSBjb25zdDsKICAgIGRvdWJsZSB0cmFuc2xhdGlvblko KSBjb25zdDsKCiAgICBRUG9pbnQgeEZvcm0oIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBR UmVjdCB4Rm9ybSggY29uc3QgUVJlY3QgJiApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgeEZvcm0o IGNvbnN0IFFQb2ludEFycmF5ICYgKSBjb25zdDsKICAgIFFQb2ludEFycmF5IHhGb3JtKCBjb25z dCBRUG9pbnRBcnJheSAmLCBpbnQgaW5kZXgsIGludCBucG9pbnRzICkgY29uc3Q7CiAgICBRUG9p bnQgeEZvcm1EZXYoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUmVjdCB4Rm9ybURldigg Y29uc3QgUVJlY3QgJiApIGNvbnN0OwogICAgUVBvaW50QXJyYXkgeEZvcm1EZXYoIGNvbnN0IFFQ b2ludEFycmF5ICYgKSBjb25zdDsKICAgIFFQb2ludEFycmF5IHhGb3JtRGV2KCBjb25zdCBRUG9p bnRBcnJheSAmLCBpbnQgaW5kZXgsIGludCBucG9pbnRzICkgY29uc3Q7CgoKCiAgICB2b2lkIHNl dENsaXBwaW5nKCBib29sICk7CiAgICBib29sIGhhc0NsaXBwaW5nKCkgY29uc3Q7CiAgICBRUmVn aW9uIGNsaXBSZWdpb24oIENvb3JkaW5hdGVNb2RlID0gQ29vcmREZXZpY2UgKSBjb25zdDsKICAg IHZvaWQgc2V0Q2xpcFJlY3QoIGNvbnN0IFFSZWN0ICYsIENvb3JkaW5hdGVNb2RlID0gQ29vcmRE ZXZpY2UgKTsKICAgIHZvaWQgc2V0Q2xpcFJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBo LCBDb29yZGluYXRlTW9kZSA9IENvb3JkRGV2aWNlICk7CiAgICB2b2lkIHNldENsaXBSZWdpb24o IGNvbnN0IFFSZWdpb24gJiwgQ29vcmRpbmF0ZU1vZGUgPSBDb29yZERldmljZSApOwoKCgogICAg dm9pZCBkcmF3UG9pbnQoIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBkcmF3UG9pbnQoIGNvbnN0 IFFQb2ludCAmICk7CiAgICB2b2lkIGRyYXdQb2ludHMoIGNvbnN0IFFQb2ludEFycmF5JiBhLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4PTAsIGludCBucG9pbnRzPS0xICk7 CiAgICB2b2lkIG1vdmVUbyggaW50IHgsIGludCB5ICk7CiAgICB2b2lkIG1vdmVUbyggY29uc3Qg UVBvaW50ICYgKTsKICAgIHZvaWQgbGluZVRvKCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQgbGlu ZVRvKCBjb25zdCBRUG9pbnQgJiApOwogICAgdm9pZCBkcmF3TGluZSggaW50IHgxLCBpbnQgeTEs IGludCB4MiwgaW50IHkyICk7CiAgICB2b2lkIGRyYXdMaW5lKCBjb25zdCBRUG9pbnQgJiwgY29u c3QgUVBvaW50ICYgKTsKICAgIHZvaWQgZHJhd1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu dCBoICk7CiAgICB2b2lkIGRyYXdSZWN0KCBjb25zdCBRUmVjdCAmICk7CiAgICB2b2lkIGRyYXdX aW5Gb2N1c1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIGRyYXdX aW5Gb2N1c1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICZiZ0NvbG9yICk7CiAgICB2b2lkIGRyYXdX aW5Gb2N1c1JlY3QoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZHJhd1dpbkZvY3VzUmVjdCgg Y29uc3QgUVJlY3QgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFD b2xvciAmYmdDb2xvciApOwogICAgdm9pZCBkcmF3Um91bmRSZWN0KCBpbnQgeCwgaW50IHksIGlu dCB3LCBpbnQgaCwgaW50ID0gMjUsIGludCA9IDI1ICk7CiAgICB2b2lkIGRyYXdSb3VuZFJlY3Qo IGNvbnN0IFFSZWN0ICYsIGludCA9IDI1LCBpbnQgPSAyNSApOwogICAgdm9pZCBkcmF3RWxsaXBz ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZHJhd0VsbGlwc2UoIGNv bnN0IFFSZWN0ICYgKTsKICAgIHZvaWQgZHJhd0FyYyggaW50IHgsIGludCB5LCBpbnQgdywgaW50 IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZCBkcmF3QXJjKCBjb25zdCBRUmVjdCAmLCBp bnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQgZHJhd1BpZSggaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZCBkcmF3UGllKCBjb25zdCBRUmVjdCAm LCBpbnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQgZHJhd0Nob3JkKCBpbnQgeCwgaW50IHksIGlu dCB3LCBpbnQgaCwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkIGRyYXdDaG9yZCggY29uc3Qg UVJlY3QgJiwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkIGRyYXdMaW5lU2VnbWVudHMoIGNv bnN0IFFQb2ludEFycmF5ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg aW5kZXg9MCwgaW50IG5saW5lcz0tMSApOwogICAgdm9pZCBkcmF3UG9seWxpbmUoIGNvbnN0IFFQ b2ludEFycmF5ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleD0wLCBp bnQgbnBvaW50cz0tMSApOwogICAgdm9pZCBkcmF3UG9seWdvbiggY29uc3QgUVBvaW50QXJyYXkg JiwgYm9vbCB3aW5kaW5nPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp bmRleD0wLCBpbnQgbnBvaW50cz0tMSApOwogICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbiggY29u c3QgUVBvaW50QXJyYXkgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXg9 MCwgaW50IG5wb2ludHM9LTEgKTsKCiAgICB2b2lkIGRyYXdDdWJpY0JlemllciggY29uc3QgUVBv aW50QXJyYXkgJiwgaW50IGluZGV4PTAgKTsKCiAgICB2b2lkIGRyYXdQaXhtYXAoIGludCB4LCBp bnQgeSwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4 PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSApOwogICAgdm9pZCBkcmF3UGl4bWFw KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUVJlY3QgJnNyICk7CiAgICB2b2lkIGRyYXdQaXhtYXAoIGNvbnN0IFFQb2lu dCAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgIHZvaWQgZHJhd1BpeG1hcCggY29uc3QgUVJlY3Qg JiwgY29uc3QgUVBpeG1hcCAmICk7CiAgICB2b2lkIGRyYXdJbWFnZSggaW50IHgsIGludCB5LCBj b25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4ID0gMCwgaW50 IHN5ID0gMCwgaW50IHN3ID0gLTEsIGludCBzaCA9IC0xLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgY29udmVyc2lvbkZsYWdzID0gMCApOwogICAgdm9pZCBkcmF3SW1hZ2UoIGNvbnN0 IFFQb2ludCAmLCBjb25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgUVJlY3QgJnNyLCBpbnQgY29udmVyc2lvbkZsYWdzID0gMCApOwogICAgdm9pZCBkcmF3SW1h Z2UoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRSW1hZ2UgJiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3MgPSAwICk7CiAgICB2b2lkIGRyYXdJbWFnZSggY29u c3QgUVJlY3QgJiwgY29uc3QgUUltYWdlICYgKTsKICAgIHZvaWQgZHJhd1RpbGVkUGl4bWFwKCBp bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUVBpeG1hcCAmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc3g9MCwgaW50IHN5PTAgKTsKICAgIHZvaWQgZHJhd1Rp bGVkUGl4bWFwKCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUGl4bWFwICYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludCAmICk7CiAgICB2b2lkIGRyYXdUaWxlZFBp eG1hcCggY29uc3QgUVJlY3QgJiwgY29uc3QgUVBpeG1hcCAmICk7CgogICAgdm9pZCBkcmF3UGlj dHVyZSggY29uc3QgUVBpY3R1cmUgJiApOwogICAgdm9pZCBkcmF3UGljdHVyZSggaW50IHgsIGlu dCB5LCBjb25zdCBRUGljdHVyZSAmICk7CiAgICB2b2lkIGRyYXdQaWN0dXJlKCBjb25zdCBRUG9p bnQgJiwgY29uc3QgUVBpY3R1cmUgJiApOwoKCiAgICB2b2lkIGZpbGxSZWN0KCBpbnQgeCwgaW50 IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUJydXNoICYgKTsKICAgIHZvaWQgZmlsbFJlY3QoIGNv bnN0IFFSZWN0ICYsIGNvbnN0IFFCcnVzaCAmICk7CiAgICB2b2lkIGVyYXNlUmVjdCggaW50IHgs IGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgZXJhc2VSZWN0KCBjb25zdCBRUmVjdCAm ICk7CgoKCiAgICBlbnVtIFRleHREaXJlY3Rpb24gewogICAgICAgIEF1dG8sCiAgICAgICAgUlRM LAogICAgICAgIExUUgogICAgfTsKCiAgICB2b2lkIGRyYXdUZXh0KCBpbnQgeCwgaW50IHksIGNv bnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xLCBUZXh0RGlyZWN0aW9uIGRpciA9IEF1dG8gKTsK ICAgIHZvaWQgZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRU3RyaW5nICYsIGludCBs ZW4gPSAtMSwgVGV4dERpcmVjdGlvbiBkaXIgPSBBdXRvICk7CgogICAgdm9pZCBkcmF3VGV4dCgg aW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYsIGludCBwb3MsIGludCBsZW4sIFRleHREaXJl Y3Rpb24gZGlyID0gQXV0byApOwogICAgdm9pZCBkcmF3VGV4dCggY29uc3QgUVBvaW50ICZwLCBj b25zdCBRU3RyaW5nICYsIGludCBwb3MsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyID0gQXV0 byApOwoKICAgIHZvaWQgZHJhd1RleHQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQg ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4g PSAtMSwgUVJlY3QgKmJyPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAq KmludGVybj0wICk7CiAgICB2b2lkIGRyYXdUZXh0KCBjb25zdCBRUmVjdCAmLCBpbnQgZmxhZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4gPSAtMSwg UVJlY3QgKmJyPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAqKmludGVy bj0wICk7CgoKCgoKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0 cmluZyYsIGludCBsZW4gPSAtMSwgUVRleHRQYXJhZyAqKmludGVybj0wICk7CiAgICBRUmVjdCBi b3VuZGluZ1JlY3QoIGNvbnN0IFFSZWN0ICYsIGludCBmbGFncywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYsIGludCBsZW4gPSAtMSwgUVRleHRQYXJhZyAqKmlu dGVybj0wICk7CgogICAgaW50IHRhYlN0b3BzKCkgY29uc3Q7CiAgICB2b2lkIHNldFRhYlN0b3Bz KCBpbnQgKTsKICAgIGludCAqdGFiQXJyYXkoKSBjb25zdDsKICAgIHZvaWQgc2V0VGFiQXJyYXko IGludCAqICk7CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCiAgICBzdGF0aWMg dm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7Cgpwcml2YXRlOgog ICAgdm9pZCBpbml0KCk7CiAgICB2b2lkIGRlc3Ryb3koKTsKICAgIHZvaWQgdXBkYXRlRm9udCgp OwogICAgdm9pZCB1cGRhdGVQZW4oKTsKICAgIHZvaWQgdXBkYXRlQnJ1c2goKTsKCiAgICB2b2lk IHVwZGF0ZVhGb3JtKCk7CiAgICB2b2lkIHVwZGF0ZUludlhGb3JtKCk7CgogICAgdm9pZCBtYXAo IGludCwgaW50LCBpbnQgKnJ4LCBpbnQgKnJ5ICkgY29uc3Q7CiAgICB2b2lkIG1hcCggaW50LCBp bnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKiApIGNvbnN0OwogICAgdm9p ZCBtYXBJbnYoIGludCwgaW50LCBpbnQgKiwgaW50ICogKSBjb25zdDsKICAgIHZvaWQgbWFwSW52 KCBpbnQsIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqICkgY29uc3Q7 CiAgICB2b2lkIGRyYXdQb2x5SW50ZXJuYWwoIGNvbnN0IFFQb2ludEFycmF5ICYsIGJvb2wgY2xv c2U9VFJVRSApOwogICAgdm9pZCBkcmF3V2luRm9jdXNSZWN0KCBpbnQgeCwgaW50IHksIGludCB3 LCBpbnQgaCwgYm9vbCB4b3JQYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFDb2xvciAmcGVuQ29sb3IgKTsKCiAgICBlbnVtIHsgSXNBY3RpdmU9MHgwMSwgRXh0 RGV2PTB4MDIsIElzU3RhcnRpbmdVcD0weDA0LCBOb0NhY2hlPTB4MDgsCiAgICAgICAgICAgVnhG PTB4MTAsIFd4Rj0weDIwLCBDbGlwT249MHg0MCwgU2FmZVBvbHlnb249MHg4MCwgTW9ub0Rldj0w eDEwMCwKICAgICAgICAgICBEaXJ0eUZvbnQ9MHgyMDAsIERpcnR5UGVuPTB4NDAwLCBEaXJ0eUJy dXNoPTB4ODAwLAogICAgICAgICAgIFJHQkNvbG9yPTB4MTAwMCwgRm9udE1ldD0weDIwMDAsIEZv bnRJbmY9MHg0MDAwLCBDdG9yQmVnaW49MHg4MDAwLAogICAgICAgICAgIFVzZVByaXZhdGVDeCA9 IDB4MTAwMDAsIFZvbGF0aWxlREMgPSAweDIwMDAwLCBRdDJDb21wYXQgPSAweDQwMDAwIH07CiAg ICB1aW50IGZsYWdzOwogICAgYm9vbCB0ZXN0ZiggdWludCBiICkgY29uc3QgeyByZXR1cm4gKGZs YWdzJmIpIT0wOyB9CiAgICB2b2lkIHNldGYoIHVpbnQgYiApIHsgZmxhZ3MgfD0gYjsgfQogICAg dm9pZCBzZXRmKCB1aW50IGIsIGJvb2wgdiApOwogICAgdm9pZCBjbGVhcmYoIHVpbnQgYiApIHsg ZmxhZ3MgJj0gKHVpbnQpKH5iKTsgfQogICAgdm9pZCBmaXhfbmVnX3JlY3QoIGludCAqeCwgaW50 ICp5LCBpbnQgKncsIGludCAqaCApOwoKICAgIFFQYWludGVyUHJpdmF0ZSAqZDsKICAgIFFQYWlu dERldmljZSAqcGRldjsKICAgIFFDb2xvciBiZ19jb2w7CiAgICB1Y2hhciBiZ19tb2RlOwogICAg dWNoYXIgcm9wOwogICAgdWNoYXIgcHU7CiAgICBRUG9pbnQgYnJvOwogICAgUUZvbnQgY2ZvbnQ7 CiAgICBRRm9udCAqcGZvbnQ7CiAgICBRUGVuIGNwZW47CiAgICBRQnJ1c2ggY2JydXNoOwogICAg UVJlZ2lvbiBjcmduOwogICAgaW50IHRhYnN0b3BzOwogICAgaW50ICp0YWJhcnJheTsKICAgIGlu dCB0YWJhcnJheWxlbjsKICAgIGJvb2wgYmxvY2tfZXh0OwoKCgogICAgUUNPT1JEIHd4LCB3eSwg d3csIHdoOwogICAgUUNPT1JEIHZ4LCB2eSwgdncsIHZoOwogICAgUVdNYXRyaXggd3htYXQ7CgoK ICAgIFFXTWF0cml4IHhtYXQ7CiAgICBRV01hdHJpeCBpeG1hdDsKCgoKICAgIGRvdWJsZSBtMTEo KSBjb25zdCB7IHJldHVybiB4bWF0Lm0xMSgpOyB9CiAgICBkb3VibGUgbTEyKCkgY29uc3QgeyBy ZXR1cm4geG1hdC5tMTIoKTsgfQogICAgZG91YmxlIG0yMSgpIGNvbnN0IHsgcmV0dXJuIHhtYXQu bTIxKCk7IH0KICAgIGRvdWJsZSBtMjIoKSBjb25zdCB7IHJldHVybiB4bWF0Lm0yMigpOyB9CiAg ICBkb3VibGUgZHgoKSBjb25zdCB7IHJldHVybiB4bWF0LmR4KCk7IH0KICAgIGRvdWJsZSBkeSgp IGNvbnN0IHsgcmV0dXJuIHhtYXQuZHkoKTsgfQogICAgZG91YmxlIGltMTEoKSBjb25zdCB7IHJl dHVybiBpeG1hdC5tMTEoKTsgfQogICAgZG91YmxlIGltMTIoKSBjb25zdCB7IHJldHVybiBpeG1h dC5tMTIoKTsgfQogICAgZG91YmxlIGltMjEoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMjEoKTsg fQogICAgZG91YmxlIGltMjIoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMjIoKTsgfQogICAgZG91 YmxlIGlkeCgpIGNvbnN0IHsgcmV0dXJuIGl4bWF0LmR4KCk7IH0KICAgIGRvdWJsZSBpZHkoKSBj b25zdCB7IHJldHVybiBpeG1hdC5keSgpOyB9CgogICAgaW50IHR4b3A7CiAgICBib29sIHR4aW52 OwoKCgoKCgoKICAgIHZvaWQgKnBlblJlZjsKICAgIHZvaWQgKmJydXNoUmVmOwogICAgdm9pZCAq cHNfc3RhY2s7CiAgICB2b2lkICp3bV9zdGFjazsKICAgIHZvaWQga2lsbFBTdGFjaygpOwoKcHJv dGVjdGVkOgoKCgoKCgogICAgRGlzcGxheSAqZHB5OwogICAgaW50IHNjcm47CiAgICBRdDo6SEFO RExFIGhkOwogICAgUXQ6OkhBTkRMRSByZW5kaGQ7CiAgICBHQyBnYzsKICAgIEdDIGdjX2JydXNo OwogICAgUVBvaW50IGN1clB0OwogICAgdWludCBjbGlwX3NlcmlhbDsKCgoKCgoKICAgIGZyaWVu ZCBjbGFzcyBRRm9udE1ldHJpY3M7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRJbmZvOwogICAgZnJp ZW5kIHZvaWQgcXRfZm9ybWF0X3RleHQoIGNvbnN0IFFGb250ICYsIGNvbnN0IFFSZWN0ICZyLAog ICAgICAgICAgICAgICAgICAgICBpbnQgdGYsIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbiwg UVJlY3QgKmJyZWN0LAogICAgICAgICAgICAgICAgICAgICBpbnQgdGFic3RvcHMsIGludCogdGFi YXJyYXksIGludCB0YWJhcnJheWxlbiwKICAgICAgICAgICAgICAgICAgICAgUVRleHRQYXJhZyAq KmludGVybmFsLCBRUGFpbnRlciogcGFpbnRlciApOwogICAgZnJpZW5kIGNsYXNzIFFQcmludGVy OwoKcHJpdmF0ZToKCiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50ZXIgJiApOwogICAgUVBhaW50 ZXIgJm9wZXJhdG9yPSggY29uc3QgUVBhaW50ZXIgJiApOwoKfTsKCgoKCgoKaW5saW5lIFFQYWlu dERldmljZSAqUVBhaW50ZXI6OmRldmljZSgpIGNvbnN0CnsKICAgIHJldHVybiBwZGV2Owp9Cgpp bmxpbmUgYm9vbCBRUGFpbnRlcjo6aXNBY3RpdmUoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdGYo SXNBY3RpdmUpOwp9CgppbmxpbmUgY29uc3QgUUZvbnQgJlFQYWludGVyOjpmb250KCkgY29uc3QK ewogICAgcmV0dXJuIGNmb250Owp9CgppbmxpbmUgY29uc3QgUVBlbiAmUVBhaW50ZXI6OnBlbigp IGNvbnN0CnsKICAgIHJldHVybiBjcGVuOwp9CgppbmxpbmUgY29uc3QgUUJydXNoICZRUGFpbnRl cjo6YnJ1c2goKSBjb25zdAp7CiAgICByZXR1cm4gY2JydXNoOwp9CiMgNDQ4ICIvdXNyL2xvY2Fs L3F0LTMuMS4xL2luY2x1ZGUvcXBhaW50ZXIuaCIKaW5saW5lIGNvbnN0IFFDb2xvciAmUVBhaW50 ZXI6OmJhY2tncm91bmRDb2xvcigpIGNvbnN0CnsKICAgIHJldHVybiBiZ19jb2w7Cn0KCmlubGlu ZSBRdDo6QkdNb2RlIFFQYWludGVyOjpiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0CnsKICAgIHJldHVy biAoQkdNb2RlKWJnX21vZGU7Cn0KCmlubGluZSBRdDo6UmFzdGVyT3AgUVBhaW50ZXI6OnJhc3Rl ck9wKCkgY29uc3QKewogICAgcmV0dXJuIChSYXN0ZXJPcClyb3A7Cn0KCmlubGluZSBjb25zdCBR UG9pbnQgJlFQYWludGVyOjpicnVzaE9yaWdpbigpIGNvbnN0CnsKICAgIHJldHVybiBicm87Cn0K CmlubGluZSBib29sIFFQYWludGVyOjpoYXNWaWV3WEZvcm0oKSBjb25zdAp7CgogICAgcmV0dXJu IHRlc3RmKFZ4Rik7CgoKCn0KCmlubGluZSBib29sIFFQYWludGVyOjpoYXNXb3JsZFhGb3JtKCkg Y29uc3QKewoKICAgIHJldHVybiB0ZXN0ZihXeEYpOwoKCgp9CgppbmxpbmUgZG91YmxlIFFQYWlu dGVyOjp0cmFuc2xhdGlvblgoKSBjb25zdAp7CgogICAgcmV0dXJuIHdvcmxkTWF0cml4KCkuZHgo KTsKCgoKfQoKaW5saW5lIGRvdWJsZSBRUGFpbnRlcjo6dHJhbnNsYXRpb25ZKCkgY29uc3QKewoK ICAgIHJldHVybiB3b3JsZE1hdHJpeCgpLmR5KCk7CgoKCn0KCgppbmxpbmUgYm9vbCBRUGFpbnRl cjo6aGFzQ2xpcHBpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gdGVzdGYoQ2xpcE9uKTsKfQoKaW5s aW5lIGludCBRUGFpbnRlcjo6dGFiU3RvcHMoKSBjb25zdAp7CiAgICByZXR1cm4gdGFic3RvcHM7 Cn0KCmlubGluZSBpbnQgKlFQYWludGVyOjp0YWJBcnJheSgpIGNvbnN0CnsKICAgIHJldHVybiB0 YWJhcnJheTsKfQoKCgoKCgoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50ZXI6OmhhbmRsZSgpIGNv bnN0CnsKICAgIHJldHVybiBoZDsKfQoKCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRCcnVzaE9y aWdpbiggY29uc3QgUVBvaW50ICZwICkKewogICAgc2V0QnJ1c2hPcmlnaW4oIHAueCgpLCBwLnko KSApOwp9CgoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OnNldFdpbmRvdyggY29uc3QgUVJlY3QgJnIg KQp7CiAgICBzZXRXaW5kb3coIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7 Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRWaWV3cG9ydCggY29uc3QgUVJlY3QgJnIgKQp7 CiAgICBzZXRWaWV3cG9ydCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsK fQoKCmlubGluZSB2b2lkIFFQYWludGVyOjpzZXRDbGlwUmVjdCggaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgsIENvb3JkaW5hdGVNb2RlIG0gKQp7CiAgICBzZXRDbGlwUmVjdCggUVJlY3QoeCx5 LHcsaCksIG0gKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdQb2ludCggY29uc3QgUVBv aW50ICZwICkKewogICAgZHJhd1BvaW50KCBwLngoKSwgcC55KCkgKTsKfQoKaW5saW5lIHZvaWQg UVBhaW50ZXI6Om1vdmVUbyggY29uc3QgUVBvaW50ICZwICkKewogICAgbW92ZVRvKCBwLngoKSwg cC55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmxpbmVUbyggY29uc3QgUVBvaW50ICZw ICkKewogICAgbGluZVRvKCBwLngoKSwgcC55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6 OmRyYXdMaW5lKCBjb25zdCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKewogICAgZHJh d0xpbmUoIHAxLngoKSwgcDEueSgpLCBwMi54KCksIHAyLnkoKSApOwp9CgppbmxpbmUgdm9pZCBR UGFpbnRlcjo6ZHJhd1JlY3QoIGNvbnN0IFFSZWN0ICZyICkKewogICAgZHJhd1JlY3QoIHIueCgp LCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVy OjpkcmF3V2luRm9jdXNSZWN0KCBjb25zdCBRUmVjdCAmciApCnsKICAgIGRyYXdXaW5Gb2N1c1Jl Y3QoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lk IFFQYWludGVyOjpkcmF3V2luRm9jdXNSZWN0KCBjb25zdCBRUmVjdCAmcixjb25zdCBRQ29sb3Ig JnBlbkNvbG9yICkKewogICAgZHJhd1dpbkZvY3VzUmVjdCggci54KCksIHIueSgpLCByLndpZHRo KCksIHIuaGVpZ2h0KCksIHBlbkNvbG9yICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3 Um91bmRSZWN0KCBjb25zdCBRUmVjdCAmciwgaW50IHhSbmQsIGludCB5Um5kICkKewogICAgZHJh d1JvdW5kUmVjdCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHhSbmQsIHlS bmQgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdFbGxpcHNlKCBjb25zdCBRUmVjdCAm ciApCnsKICAgIGRyYXdFbGxpcHNlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo KSApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd0FyYyggY29uc3QgUVJlY3QgJnIsIGlu dCBhLCBpbnQgYWxlbiApCnsKICAgIGRyYXdBcmMoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCBy LmhlaWdodCgpLCBhLCBhbGVuICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3UGllKCBj b25zdCBRUmVjdCAmciwgaW50IGEsIGludCBhbGVuICkKewogICAgZHJhd1BpZSggci54KCksIHIu eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGEsIGFsZW4gKTsKfQoKaW5saW5lIHZvaWQgUVBh aW50ZXI6OmRyYXdDaG9yZCggY29uc3QgUVJlY3QgJnIsIGludCBhLCBpbnQgYWxlbiApCnsKICAg IGRyYXdDaG9yZCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGEsIGFsZW4g KTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdQaXhtYXAoIGNvbnN0IFFQb2ludCAmcCwg Y29uc3QgUVBpeG1hcCAmcG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBRUmVjdCAmc3IgKQp7CiAgICBkcmF3UGl4bWFwKCBwLngoKSwgcC55KCksIHBtLCBzci54KCks IHNyLnkoKSwgc3Iud2lkdGgoKSwgc3IuaGVpZ2h0KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50 ZXI6OmRyYXdJbWFnZSggY29uc3QgUVBvaW50ICZwLCBjb25zdCBRSW1hZ2UgJnBtLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVjdCAmc3IsIGludCBjb252ZXJzaW9u RmxhZ3MgKQp7CiAgICBkcmF3SW1hZ2UoIHAueCgpLCBwLnkoKSwgcG0sCiAgICAgICAgICAgICAg IHNyLngoKSwgc3IueSgpLCBzci53aWR0aCgpLCBzci5oZWlnaHQoKSwgY29udmVyc2lvbkZsYWdz ICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3VGlsZWRQaXhtYXAoIGNvbnN0IFFSZWN0 ICZyLCBjb25zdCBRUGl4bWFwICZwbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUVBvaW50ICZzcCApCnsKICAgIGRyYXdUaWxlZFBpeG1hcCggci54KCksIHIu eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHBtLCBzcC54KCksIHNwLnkoKSApOwp9Cgppbmxp bmUgdm9pZCBRUGFpbnRlcjo6ZHJhd1RpbGVkUGl4bWFwKCBjb25zdCBRUmVjdCAmciwgY29uc3Qg UVBpeG1hcCAmcG0gKQp7CiAgICBkcmF3VGlsZWRQaXhtYXAoIHIueCgpLCByLnkoKSwgci53aWR0 aCgpLCByLmhlaWdodCgpLCBwbSwgMCwgMCApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6Zmls bFJlY3QoIGNvbnN0IFFSZWN0ICZyLCBjb25zdCBRQnJ1c2ggJmJydXNoICkKewogICAgZmlsbFJl Y3QoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBicnVzaCApOwp9Cgppbmxp bmUgdm9pZCBRUGFpbnRlcjo6ZXJhc2VSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCAp CnsKICAgIGZpbGxSZWN0KCB4LCB5LCB3LCBoLCBiYWNrZ3JvdW5kQ29sb3IoKSApOwp9Cgppbmxp bmUgdm9pZCBRUGFpbnRlcjo6ZXJhc2VSZWN0KCBjb25zdCBRUmVjdCAmciApCnsKICAgIGZpbGxS ZWN0KCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgYmFja2dyb3VuZENvbG9y KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAs IGNvbnN0IFFTdHJpbmcgJnMsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyICkKewogICAgZHJh d1RleHQoIHAueCgpLCBwLnkoKSwgcywgMCwgbGVuLCBkaXIgKTsKfQoKaW5saW5lIHZvaWQgUVBh aW50ZXI6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAsIGNvbnN0IFFTdHJpbmcgJnMsIGludCBw b3MsIGludCBsZW4sIFRleHREaXJlY3Rpb24gZGlyICkKewogICAgZHJhd1RleHQoIHAueCgpLCBw LnkoKSwgcywgcG9zLCBsZW4sIGRpciApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd1Rl eHQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgdGYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuLCBRUmVjdCAqYnIsIFFU ZXh0UGFyYWcgKippICkKewogICAgUVJlY3Qgcih4LCB5LCB3LCBoKTsKICAgIGRyYXdUZXh0KCBy LCB0Ziwgc3RyLCBsZW4sIGJyLCBpICk7Cn0KCmlubGluZSBRUmVjdCBRUGFpbnRlcjo6Ym91bmRp bmdSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IHRmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuLCBRVGV4 dFBhcmFnICoqaSApCnsKICAgIFFSZWN0IHIoeCwgeSwgdywgaCk7CiAgICByZXR1cm4gYm91bmRp bmdSZWN0KCByLCB0Ziwgc3RyLCBsZW4sIGkgKTsKfQojIDE4ICJUeFZvcnBhbE1lbnVJdGVtLmgi IDIKCgoKCgoKCmNsYXNzIFR4Vm9ycGFsTWVudUl0ZW0gOiBwdWJsaWMgUUN1c3RvbU1lbnVJdGVt CnsKCnB1YmxpYzoKCgoKCgoKICBUeFZvcnBhbE1lbnVJdGVtKCBjb25zdCBRU3RyaW5nJiBzLCBj b25zdCBRRm9udCYgZiApCiAgOiBzdHJpbmcoIHMgKSwgZm9udCggZiApCiAgewogIH0KIyA1MSAi VHhWb3JwYWxNZW51SXRlbS5oIgogICAgdm9pZCBwYWludCggUVBhaW50ZXIqIHAsIGNvbnN0IFFD b2xvckdyb3VwJiAsIGJvb2wgLCBib29sICwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKQog ICAgewogICAgICBwLT5zZXRGb250ICggZm9udCApOwogICAgICBwLT5kcmF3VGV4dCggeCwgeSwg dywgaCwgQWxpZ25MZWZ0IHwgQWxpZ25WQ2VudGVyIHwgU2hvd1ByZWZpeCB8IERvbnRDbGlwLCBz dHJpbmcgKTsKICAgIH0KCgoKCiAgICBRU2l6ZSBzaXplSGludCgpCiAgICB7CiAgICAgIHJldHVy biBRRm9udE1ldHJpY3MoIGZvbnQgKS5zaXplKCBBbGlnbkxlZnQgfCBBbGlnblZDZW50ZXIgfCBT aG93UHJlZml4IHwgRG9udENsaXAsIHN0cmluZyApOwogICAgfQoKcHJpdmF0ZToKCgoKCiAgICBR U3RyaW5nIHN0cmluZzsKCgoKCiAgICBRRm9udCBmb250Owp9OwojIDE3ICJUeFZvcnBhbEdVSS5j cHAiIDIKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZXNzYWdlYm94 LmgiIDEKIyA0MiAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FtZXNzYWdlYm94LmgiCiMg MSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FkaWFsb2cuaCIgMQojIDQ5ICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpYWxvZy5oIgpjbGFzcyBRUHVzaEJ1dHRvbjsKY2xhc3Mg UURpYWxvZ1ByaXZhdGU7CgpjbGFzcyBRRGlhbG9nIDogcHVibGljIFFXaWRnZXQKewpmcmllbmQg Y2xhc3MgUVB1c2hCdXR0b247CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFP YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25z dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBj aGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs IGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5 KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9w ZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVj dCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmpl Y3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq ID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq ID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKcHVibGlj OgogICAgZXhwbGljaXQgUURpYWxvZyggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h bWU9MCwgYm9vbCBtb2RhbD1GQUxTRSwKICAgICAgICAgICAgIFdGbGFncyBmPTAgKTsKICAgIH5R RGlhbG9nKCk7CgogICAgZW51bSBEaWFsb2dDb2RlIHsgUmVqZWN0ZWQsIEFjY2VwdGVkIH07Cgog ICAgaW50IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHJlc2NvZGU7IH0KCiAgICB2b2lkIHNob3co KTsKICAgIHZvaWQgaGlkZSgpOwogICAgdm9pZCBtb3ZlKCBpbnQgeCwgaW50IHkgKTsKICAgIHZv aWQgbW92ZSggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIHJlc2l6ZSggaW50IHcsIGludCBo ICk7CiAgICB2b2lkIHJlc2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRHZW9tZXRy eSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0R2VvbWV0cnkoIGNv bnN0IFFSZWN0ICYgKTsKCiAgICB2b2lkIHNldE9yaWVudGF0aW9uKCBPcmllbnRhdGlvbiBvcmll bnRhdGlvbiApOwogICAgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKCiAgICB2b2lk IHNldEV4dGVuc2lvbiggUVdpZGdldCogZXh0ZW5zaW9uICk7CiAgICBRV2lkZ2V0KiBleHRlbnNp b24oKSBjb25zdDsKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11 bVNpemVIaW50KCkgY29uc3Q7CgogICAgdm9pZCBzZXRTaXplR3JpcEVuYWJsZWQoIGJvb2wgKTsK ICAgIGJvb2wgaXNTaXplR3JpcEVuYWJsZWQoKSBjb25zdDsKCnB1YmxpYyA6CiAgICBpbnQgZXhl YygpOwoKcHJvdGVjdGVkIDoKICAgIHZpcnR1YWwgdm9pZCBkb25lKCBpbnQgKTsKICAgIHZpcnR1 YWwgdm9pZCBhY2NlcHQoKTsKICAgIHZpcnR1YWwgdm9pZCByZWplY3QoKTsKCiAgICB2b2lkIHNo b3dFeHRlbnNpb24oIGJvb2wgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0UmVzdWx0KCBpbnQg ciApIHsgcmVzY29kZSA9IHI7IH0KICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICog KTsKICAgIHZvaWQgY2xvc2VFdmVudCggUUNsb3NlRXZlbnQgKiApOwogICAgdm9pZCByZXNpemVF dmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgY29udGV4dE1lbnVFdmVudCggUUNvbnRl eHRNZW51RXZlbnQgKiApOwogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQg KiApOwogICAgdm9pZCBhZGp1c3RQb3NpdGlvbiggUVdpZGdldCopOwoKcHJpdmF0ZToKICAgIHZv aWQgc2V0RGVmYXVsdCggUVB1c2hCdXR0b24gKiApOwogICAgdm9pZCBoaWRlRGVmYXVsdCgpOwog ICAgaW50IHJlc2NvZGU7CiAgICB1aW50IGRpZF9tb3ZlIDogMTsKICAgIHVpbnQgaGFzX3JlbHBv cyA6IDE7CiAgICB1aW50IGRpZF9yZXNpemUgOiAxOwogICAgdWludCBpbl9sb29wOiAxOwogICAg dm9pZCBhZGp1c3RQb3NpdGlvbkludGVybmFsKCBRV2lkZ2V0KiwgYm9vbCB1c2VSZWxQb3MgPSBG QUxTRSApOwogICAgUURpYWxvZ1ByaXZhdGUqIGQ7Cgpwcml2YXRlOgoKICAgIFFEaWFsb2coIGNv bnN0IFFEaWFsb2cgJiApOwogICAgUURpYWxvZyAmb3BlcmF0b3I9KCBjb25zdCBRRGlhbG9nICYg KTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbWVzc2FnZWJveC5oIiAy CgoKCgpjbGFzcyBRTGFiZWw7CmNsYXNzIFFQdXNoQnV0dG9uOwpzdHJ1Y3QgUU1lc3NhZ2VCb3hE YXRhOwoKY2xhc3MgUU1lc3NhZ2VCb3ggOiBwdWJsaWMgUURpYWxvZwp7CiAgICBwdWJsaWM6IHZp cnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRh T2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVh bCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBp bnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsg dmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0 YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlh bnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBx T2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmpl Y3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoKICAgIGVudW0gSWNvbiB7 IE5vSWNvbiA9IDAsIEluZm9ybWF0aW9uID0gMSwgV2FybmluZyA9IDIsIENyaXRpY2FsID0gMyB9 OwoKICAgIFFNZXNzYWdlQm94KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0w ICk7CiAgICBRTWVzc2FnZUJveCggY29uc3QgUVN0cmluZyYgY2FwdGlvbiwgY29uc3QgUVN0cmlu ZyAmdGV4dCwgSWNvbiBpY29uLAogICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBpbnQgYnV0 dG9uMSwgaW50IGJ1dHRvbjIsCiAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNv bnN0IGNoYXIqIG5hbWU9MCwgYm9vbCBtb2RhbD1UUlVFLAogICAgICAgICAgICAgICAgIFdGbGFn cyBmPVdTdHlsZV9EaWFsb2dCb3JkZXIgKTsKICAgIH5RTWVzc2FnZUJveCgpOwoKICAgIGVudW0g eyBOb0J1dHRvbiA9IDAsIE9rID0gMSwgQ2FuY2VsID0gMiwgWWVzID0gMywgTm8gPSA0LCBBYm9y dCA9IDUsCiAgICAgICAgICAgUmV0cnkgPSA2LCBJZ25vcmUgPSA3LCBCdXR0b25NYXNrID0gMHgw NywKICAgICAgICAgICBEZWZhdWx0ID0gMHgxMDAsIEVzY2FwZSA9IDB4MjAwLCBGbGFnTWFzayA9 IDB4MzAwIH07CgogICAgc3RhdGljIGludCBpbmZvcm1hdGlvbiggUVdpZGdldCAqcGFyZW50LCBj b25zdCBRU3RyaW5nICZjYXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UVN0cmluZyYgdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBp bnQgYnV0dG9uMT0wLCBpbnQgYnV0dG9uMj0wICk7CiAgICBzdGF0aWMgaW50IGluZm9ybWF0aW9u KCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMFRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMVRleHQgPSBRU3RyaW5n OjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9u MlRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl ZmF1bHRCdXR0b25OdW1iZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVz Y2FwZUJ1dHRvbk51bWJlciA9IC0xICk7CgogICAgc3RhdGljIGludCB3YXJuaW5nKCBRV2lkZ2V0 ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24w LCBpbnQgYnV0dG9uMSwgaW50IGJ1dHRvbjI9MCApOwogICAgc3RhdGljIGludCB3YXJuaW5nKCBR V2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFFTdHJpbmcmIGJ1dHRvbjBUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUVN0cmluZyYgYnV0dG9uMVRleHQgPSBRU3RyaW5nOjpudWxsLAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBidXR0b24yVGV4dCA9IFFTdHJpbmc6Om51 bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWZhdWx0QnV0dG9uTnVtYmVyID0gMCwK ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVzY2FwZUJ1dHRvbk51bWJlciA9IC0xICk7Cgog ICAgc3RhdGljIGludCBjcml0aWNhbCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBRU3RyaW5nICZj YXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCwKICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBidXR0b24wLCBpbnQgYnV0dG9uMSwgaW50IGJ1dHRv bjI9MCApOwogICAgc3RhdGljIGludCBjcml0aWNhbCggUVdpZGdldCAqcGFyZW50LCBjb25zdCBR U3RyaW5nICZjYXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYg dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGJ1dHRvbjBUZXh0 ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcm IGJ1dHRvbjFUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcmIGJ1dHRvbjJUZXh0ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBkZWZhdWx0QnV0dG9uTnVtYmVyID0gMCwKICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBlc2NhcGVCdXR0b25OdW1iZXIgPSAtMSApOwoKICAgIHN0YXRpYyB2b2lkIGFi b3V0KCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCApOwoKICAgIHN0YXRpYyB2b2lkIGFib3V0 UXQoIFFXaWRnZXQgKnBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp bmcmIGNhcHRpb249UVN0cmluZzo6bnVsbCApOwoKCiAgICBzdGF0aWMgaW50IG1lc3NhZ2UoIGNv bnN0IFFTdHJpbmcgJmNhcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp bmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGJ1dHRvblRl eHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50 PTAsIGNvbnN0IGNoYXIgKiA9MCApIHsKICAgICAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OmluZm9y bWF0aW9uKCBwYXJlbnQsIGNhcHRpb24sIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBidXR0b25UZXh0LmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPyB0cigiT0siKSA6IGJ1dHRvblRleHQgKSA9PSAwOwogICAgfQoKCiAgICBz dGF0aWMgYm9vbCBxdWVyeSggY29uc3QgUVN0cmluZyAmY2FwdGlvbiwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFFTdHJpbmcmIHllc0J1dHRvblRleHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBRU3RyaW5nJiBub0J1dHRvblRleHQ9UVN0cmluZzo6bnVsbCwKICAgICAgICAg ICAgICAgICAgICAgICBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqID0gMCApIHsKICAg ICAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKCBwYXJlbnQsIGNhcHRpb24sIHRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXNCdXR0b25UZXh0Lmlz RW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cigiT0siKSA6 IHllc0J1dHRvblRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0J1 dHRvblRleHQgKSA9PSAwOwogICAgfQoKICAgIFFTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgdm9p ZCBzZXRUZXh0KCBjb25zdCBRU3RyaW5nICYpOwoKICAgIEljb24gaWNvbigpIGNvbnN0OwoKCiAg ICB2b2lkIHNldEljb24oIEljb24gKTsKICAgIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1hcCAm ICk7CgogICAgY29uc3QgUVBpeG1hcCAqaWNvblBpeG1hcCgpIGNvbnN0OwogICAgdm9pZCBzZXRJ Y29uUGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBRU3RyaW5nIGJ1dHRvblRleHQoIGlu dCBidXR0b24gKSBjb25zdDsKICAgIHZvaWQgc2V0QnV0dG9uVGV4dCggaW50IGJ1dHRvbiwgY29u c3QgUVN0cmluZyAmKTsKCiAgICB2b2lkIGFkanVzdFNpemUoKTsKCgogICAgc3RhdGljIFFQaXht YXAgc3RhbmRhcmRJY29uKCBJY29uIGljb24sIEdVSVN0eWxlICk7CgogICAgc3RhdGljIFFQaXht YXAgc3RhbmRhcmRJY29uKCBJY29uIGljb24gKTsKCiAgICBUZXh0Rm9ybWF0IHRleHRGb3JtYXQo KSBjb25zdDsKICAgIHZvaWQgc2V0VGV4dEZvcm1hdCggVGV4dEZvcm1hdCApOwoKcHJvdGVjdGVk OgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgc2hvd0V2 ZW50KCBRU2hvd0V2ZW50ICogKTsKICAgIHZvaWQga2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICog KTsKICAgIHZvaWQgc3R5bGVDaGFuZ2VkKCBRU3R5bGUmICk7Cgpwcml2YXRlIDoKICAgIHZvaWQg YnV0dG9uQ2xpY2tlZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdCggaW50LCBpbnQsIGludCAp OwogICAgaW50IGluZGV4T2YoIGludCApIGNvbnN0OwogICAgdm9pZCByZXNpemVCdXR0b25zKCk7 CiAgICBRTGFiZWwgKmxhYmVsOwogICAgUU1lc3NhZ2VCb3hEYXRhICptYmQ7CiAgICB2b2lkICpy ZXNlcnZlZDE7CiAgICB2b2lkICpyZXNlcnZlZDI7Cgpwcml2YXRlOgoKICAgIFFNZXNzYWdlQm94 KCBjb25zdCBRTWVzc2FnZUJveCAmICk7CiAgICBRTWVzc2FnZUJveCAmb3BlcmF0b3I9KCBjb25z dCBRTWVzc2FnZUJveCAmICk7Cgp9OwojIDI1ICJUeFZvcnBhbEdVSS5jcHAiIDIKCiMgMSAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlZGlhbG9nLmgiIDEKIyA0MSAiL3Vzci9sb2Nh bC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlZGlhbG9nLmgiCmNsYXNzIFFQdXNoQnV0dG9uOwpjbGFz cyBRQnV0dG9uOwpjbGFzcyBRTGFiZWw7CmNsYXNzIFFXaWRnZXQ7CmNsYXNzIFFGaWxlRGlhbG9n OwpjbGFzcyBRVGltZXI7CmNsYXNzIFFOZXR3b3JrT3BlcmF0aW9uOwpjbGFzcyBRTGluZUVkaXQ7 CmNsYXNzIFFMaXN0Vmlld0l0ZW07CmNsYXNzIFFMaXN0Qm94SXRlbTsKY2xhc3MgUUZpbGVEaWFs b2dQcml2YXRlOwpjbGFzcyBRRmlsZURpYWxvZ1FGaWxlTGlzdFZpZXc7CgoKIyAxICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpci5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xZGlyLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FnbG9iYWwu aCIgMQojIDQzICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWRpci5oIiAyCgojIDEgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWluZm8uaCIgMQojIDQyICIvdXNyL2xvY2Fs L3F0LTMuMS4xL2luY2x1ZGUvcWZpbGVpbmZvLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3FmaWxlLmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxl LmgiCmNsYXNzIFFEaXI7CgoKY2xhc3MgUUZpbGUgOiBwdWJsaWMgUUlPRGV2aWNlCnsKcHVibGlj OgogICAgUUZpbGUoKTsKICAgIFFGaWxlKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CiAgIH5RRmls ZSgpOwoKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgdm9pZCBzZXROYW1lKCBjb25zdCBR U3RyaW5nICZuYW1lICk7CgogICAgdHlwZWRlZiBRQ1N0cmluZyAoKkVuY29kZXJGbikoIGNvbnN0 IFFTdHJpbmcgJmZpbGVOYW1lICk7CiAgICB0eXBlZGVmIFFTdHJpbmcgKCpEZWNvZGVyRm4pKCBj b25zdCBRQ1N0cmluZyAmbG9jYWxmaWxlTmFtZSApOwogICAgc3RhdGljIFFDU3RyaW5nIGVuY29k ZU5hbWUoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CiAgICBzdGF0aWMgUVN0cmluZyBkZWNv ZGVOYW1lKCBjb25zdCBRQ1N0cmluZyAmbG9jYWxGaWxlTmFtZSApOwogICAgc3RhdGljIHZvaWQg c2V0RW5jb2RpbmdGdW5jdGlvbiggRW5jb2RlckZuICk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWNv ZGluZ0Z1bmN0aW9uKCBEZWNvZGVyRm4gKTsKCiAgICBib29sIGV4aXN0cygpIGNvbnN0OwogICAg c3RhdGljIGJvb2wgZXhpc3RzKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwoKICAgIGJvb2wg cmVtb3ZlKCk7CiAgICBzdGF0aWMgYm9vbCByZW1vdmUoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1l ICk7CgogICAgYm9vbCBvcGVuKCBpbnQgKTsKICAgIGJvb2wgb3BlbiggaW50LCBGSUxFICogKTsK ICAgIGJvb2wgb3BlbiggaW50LCBpbnQgKTsKICAgIHZvaWQgY2xvc2UoKTsKICAgIHZvaWQgZmx1 c2goKTsKCiAgICBPZmZzZXQgc2l6ZSgpIGNvbnN0OwogICAgT2Zmc2V0IGF0KCkgY29uc3Q7CiAg ICBib29sIGF0KCBPZmZzZXQgKTsKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKCiAgICBRX0xPTkcg cmVhZEJsb2NrKCBjaGFyICpkYXRhLCBRX1VMT05HIGxlbiApOwogICAgUV9MT05HIHdyaXRlQmxv Y2soIGNvbnN0IGNoYXIgKmRhdGEsIFFfVUxPTkcgbGVuICk7CiAgICBRX0xPTkcgd3JpdGVCbG9j ayggY29uc3QgUUJ5dGVBcnJheSYgZGF0YSApCiAgICAgICAgICAgICAgICAgICAgICB7IHJldHVy biBRSU9EZXZpY2U6OndyaXRlQmxvY2soZGF0YSk7IH0KICAgIFFfTE9ORyByZWFkTGluZSggY2hh ciAqZGF0YSwgUV9VTE9ORyBtYXhsZW4gKTsKICAgIFFfTE9ORyByZWFkTGluZSggUVN0cmluZyAm LCBRX1VMT05HIG1heGxlbiApOwoKICAgIGludCBnZXRjaCgpOwogICAgaW50IHB1dGNoKCBpbnQg KTsKICAgIGludCB1bmdldGNoKCBpbnQgKTsKCiAgICBpbnQgaGFuZGxlKCkgY29uc3Q7Cgpwcm90 ZWN0ZWQ6CiAgICBRU3RyaW5nIGZuOwogICAgRklMRSAqZmg7CiAgICBpbnQgZmQ7CiAgICBPZmZz ZXQgbGVuZ3RoOwogICAgYm9vbCBleHRfZjsKICAgIHZvaWQgKiBkOwoKcHJpdmF0ZToKICAgIHZv aWQgaW5pdCgpOwogICAgUUNTdHJpbmcgdW5nZXRjaEJ1ZmZlcjsKCnByaXZhdGU6CgogICAgUUZp bGUoIGNvbnN0IFFGaWxlICYgKTsKICAgIFFGaWxlICZvcGVyYXRvcj0oIGNvbnN0IFFGaWxlICYg KTsKCn07CgoKaW5saW5lIFFTdHJpbmcgUUZpbGU6Om5hbWUoKSBjb25zdAp7IHJldHVybiBmbjsg fQoKaW5saW5lIFFJT0RldmljZTo6T2Zmc2V0IFFGaWxlOjphdCgpIGNvbnN0CnsgcmV0dXJuIGlv SW5kZXg7IH0KIyA0MyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FmaWxlaW5mby5oIiAy CiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FkYXRldGltZS5oIiAxCiMgNTEgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZGF0ZXRpbWUuaCIKY2xhc3MgUURhdGUKewpwdWJs aWM6CiAgICBRRGF0ZSgpIHsgamQgPSAwOyB9CiAgICBRRGF0ZSggaW50IHksIGludCBtLCBpbnQg ZCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gamQgPT0gMDsgfQogICAgYm9v bCBpc1ZhbGlkKCkgY29uc3Q7CgogICAgaW50IHllYXIoKSBjb25zdDsKICAgIGludCBtb250aCgp IGNvbnN0OwogICAgaW50IGRheSgpIGNvbnN0OwogICAgaW50IGRheU9mV2VlaygpIGNvbnN0Owog ICAgaW50IGRheU9mWWVhcigpIGNvbnN0OwogICAgaW50IGRheXNJbk1vbnRoKCkgY29uc3Q7CiAg ICBpbnQgZGF5c0luWWVhcigpIGNvbnN0OwogICAgaW50IHdlZWtOdW1iZXIoIGludCAqeWVhck51 bSA9IDAgKSBjb25zdDsKCgoKICAgIHN0YXRpYyBRU3RyaW5nIG1vbnRoTmFtZSggaW50IG1vbnRo ICkgeyByZXR1cm4gc2hvcnRNb250aE5hbWUoIG1vbnRoICk7IH0KICAgIHN0YXRpYyBRU3RyaW5n IGRheU5hbWUoIGludCB3ZWVrZGF5ICkgeyByZXR1cm4gc2hvcnREYXlOYW1lKCB3ZWVrZGF5ICk7 IH0KCiAgICBzdGF0aWMgUVN0cmluZyBzaG9ydE1vbnRoTmFtZSggaW50IG1vbnRoICk7CiAgICBz dGF0aWMgUVN0cmluZyBzaG9ydERheU5hbWUoIGludCB3ZWVrZGF5ICk7CiAgICBzdGF0aWMgUVN0 cmluZyBsb25nTW9udGhOYW1lKCBpbnQgbW9udGggKTsKICAgIHN0YXRpYyBRU3RyaW5nIGxvbmdE YXlOYW1lKCBpbnQgd2Vla2RheSApOwoKCgogICAgUVN0cmluZyB0b1N0cmluZyggUXQ6OkRhdGVG b3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApIGNvbnN0OwoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIGNv bnN0IFFTdHJpbmcmIGZvcm1hdCApIGNvbnN0OwoKICAgIGJvb2wgc2V0WU1EKCBpbnQgeSwgaW50 IG0sIGludCBkICk7CgogICAgUURhdGUgYWRkRGF5cyggaW50IGRheXMgKSBjb25zdDsKICAgIFFE YXRlIGFkZE1vbnRocyggaW50IG1vbnRocyApIGNvbnN0OwogICAgUURhdGUgYWRkWWVhcnMoIGlu dCB5ZWFycyApIGNvbnN0OwogICAgaW50IGRheXNUbyggY29uc3QgUURhdGUgJiApIGNvbnN0OwoK ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA9 PSBkLmpkOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyBy ZXR1cm4gamQgIT0gZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFEYXRlICZkICkg Y29uc3QgeyByZXR1cm4gamQgPCBkLmpkOyB9CiAgICBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFE YXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPD0gZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcj4o IGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPiBkLmpkOyB9CiAgICBib29sIG9w ZXJhdG9yPj0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPj0gZC5qZDsgfQoK ICAgIHN0YXRpYyBRRGF0ZSBjdXJyZW50RGF0ZSgpOwogICAgc3RhdGljIFFEYXRlIGN1cnJlbnRE YXRlKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUURhdGUgZnJvbVN0cmluZyggY29uc3Qg UVN0cmluZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKICAgIHN0YXRp YyBib29sIGlzVmFsaWQoIGludCB5LCBpbnQgbSwgaW50IGQgKTsKICAgIHN0YXRpYyBib29sIGxl YXBZZWFyKCBpbnQgeWVhciApOwoKICAgIHN0YXRpYyB1aW50IGdyZWdvcmlhblRvSnVsaWFuKCBp bnQgeSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMgdm9pZCBqdWxpYW5Ub0dyZWdvcmlhbigg dWludCBqZCwgaW50ICZ5LCBpbnQgJm0sIGludCAmZCApOwpwcml2YXRlOgogICAgdWludCBqZDsK ICAgIGZyaWVuZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVy YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZSAmICk7CiAgICBmcmllbmQgUURhdGFT dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlICYgKTsKCn07CgoKCgoKCmNs YXNzIFFUaW1lCnsKcHVibGljOgogICAgUVRpbWUoKSB7IGRzPTA7IH0KICAgIFFUaW1lKCBpbnQg aCwgaW50IG0sIGludCBzPTAsIGludCBtcz0wICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7 IHJldHVybiBkcyA9PSAwOyB9CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBpbnQgaG91 cigpIGNvbnN0OwogICAgaW50IG1pbnV0ZSgpIGNvbnN0OwogICAgaW50IHNlY29uZCgpIGNvbnN0 OwogICAgaW50IG1zZWMoKSBjb25zdDsKCgogICAgUVN0cmluZyB0b1N0cmluZyggUXQ6OkRhdGVG b3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApIGNvbnN0OwoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIGNv bnN0IFFTdHJpbmcmIGZvcm1hdCApIGNvbnN0OwoKICAgIGJvb2wgc2V0SE1TKCBpbnQgaCwgaW50 IG0sIGludCBzLCBpbnQgbXM9MCApOwoKICAgIFFUaW1lIGFkZFNlY3MoIGludCBzZWNzICkgY29u c3Q7CiAgICBpbnQgc2Vjc1RvKCBjb25zdCBRVGltZSAmICkgY29uc3Q7CiAgICBRVGltZSBhZGRN U2VjcyggaW50IG1zICkgY29uc3Q7CiAgICBpbnQgbXNlY3NUbyggY29uc3QgUVRpbWUgJiApIGNv bnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRpbWUgJmQgKSBjb25zdCB7IHJldHVy biBkcyA9PSBkLmRzOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUaW1lICZkICkgY29u c3QgeyByZXR1cm4gZHMgIT0gZC5kczsgfQogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFUaW1l ICZkICkgY29uc3QgeyByZXR1cm4gZHMgPCBkLmRzOyB9CiAgICBib29sIG9wZXJhdG9yPD0oIGNv bnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPD0gZC5kczsgfQogICAgYm9vbCBvcGVy YXRvcj4oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPiBkLmRzOyB9CiAgICBi b29sIG9wZXJhdG9yPj0oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPj0gZC5k czsgfQoKICAgIHN0YXRpYyBRVGltZSBjdXJyZW50VGltZSgpOwogICAgc3RhdGljIFFUaW1lIGN1 cnJlbnRUaW1lKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUVRpbWUgZnJvbVN0cmluZygg Y29uc3QgUVN0cmluZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKICAg IHN0YXRpYyBib29sIGlzVmFsaWQoIGludCBoLCBpbnQgbSwgaW50IHMsIGludCBtcz0wICk7Cgog ICAgdm9pZCBzdGFydCgpOwogICAgaW50IHJlc3RhcnQoKTsKICAgIGludCBlbGFwc2VkKCkgY29u c3Q7Cgpwcml2YXRlOgogICAgc3RhdGljIGJvb2wgY3VycmVudFRpbWUoIFFUaW1lICogKTsKICAg IHN0YXRpYyBib29sIGN1cnJlbnRUaW1lKCBRVGltZSAqLCBRdDo6VGltZVNwZWMgKTsKCiAgICB1 aW50IGRzOwogICAgZnJpZW5kIGNsYXNzIFFEYXRlVGltZTsKCiAgICBmcmllbmQgUURhdGFTdHJl YW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFUaW1lICYgKTsKICAgIGZyaWVu ZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVRpbWUgJiApOwoKfTsK CgoKCgoKY2xhc3MgUURhdGVUaW1lCnsKcHVibGljOgogICAgUURhdGVUaW1lKCkge30KICAgIFFE YXRlVGltZSggY29uc3QgUURhdGUgJiApOwogICAgUURhdGVUaW1lKCBjb25zdCBRRGF0ZSAmLCBj b25zdCBRVGltZSAmICk7CgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBkLmlzTnVs bCgpICYmIHQuaXNOdWxsKCk7IH0KICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGQu aXNWYWxpZCgpICYmIHQuaXNWYWxpZCgpOyB9CgogICAgUURhdGUgZGF0ZSgpIGNvbnN0IHsgcmV0 dXJuIGQ7IH0KICAgIFFUaW1lIHRpbWUoKSBjb25zdCB7IHJldHVybiB0OyB9CiAgICB1aW50IHRv VGltZV90KCkgY29uc3Q7CiAgICB2b2lkIHNldERhdGUoIGNvbnN0IFFEYXRlICZkYXRlICkgeyBk ID0gZGF0ZTsgfQogICAgdm9pZCBzZXRUaW1lKCBjb25zdCBRVGltZSAmdGltZSApIHsgdCA9IHRp bWU7IH0KICAgIHZvaWQgc2V0VGltZV90KCB1aW50IHNlY3NTaW5jZTFKYW4xOTcwVVRDICk7CiAg ICB2b2lkIHNldFRpbWVfdCggdWludCBzZWNzU2luY2UxSmFuMTk3MFVUQywgUXQ6OlRpbWVTcGVj ICk7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh dGUgKSBjb25zdDsKCiAgICBRU3RyaW5nIHRvU3RyaW5nKCBjb25zdCBRU3RyaW5nJiBmb3JtYXQg KSBjb25zdDsKCiAgICBRRGF0ZVRpbWUgYWRkRGF5cyggaW50IGRheXMgKSBjb25zdDsKICAgIFFE YXRlVGltZSBhZGRNb250aHMoIGludCBtb250aHMgKSBjb25zdDsKICAgIFFEYXRlVGltZSBhZGRZ ZWFycyggaW50IHllYXJzICkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgYWRkU2VjcyggaW50IHNlY3Mg KSBjb25zdDsKICAgIGludCBkYXlzVG8oIGNvbnN0IFFEYXRlVGltZSAmICkgY29uc3Q7CiAgICBp bnQgc2Vjc1RvKCBjb25zdCBRRGF0ZVRpbWUgJiApIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9 PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z dCBRRGF0ZVRpbWUgJmR0ICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUURhdGVU aW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRRGF0ZVRpbWUgJmR0 ICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPiggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0 OwogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRRGF0ZVRpbWUgJmR0ICkgY29uc3Q7CgogICAg c3RhdGljIFFEYXRlVGltZSBjdXJyZW50RGF0ZVRpbWUoKTsKICAgIHN0YXRpYyBRRGF0ZVRpbWUg Y3VycmVudERhdGVUaW1lKCBRdDo6VGltZVNwZWMgKTsKCiAgICBzdGF0aWMgUURhdGVUaW1lIGZy b21TdHJpbmcoIGNvbnN0IFFTdHJpbmcmIHMsIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh dGUgKTsKCnByaXZhdGU6CiAgICBRRGF0ZSBkOwogICAgUVRpbWUgdDsKCiAgICBmcmllbmQgUURh dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFEYXRlVGltZSAmKTsK ICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUURhdGVU aW1lICYgKTsKCn07CgoKCgoKCgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt ICYsIGNvbnN0IFFEYXRlICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVh bSAmLCBRRGF0ZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg Y29uc3QgUVRpbWUgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs IFFUaW1lICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z dCBRRGF0ZVRpbWUgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs IFFEYXRlVGltZSAmICk7CiMgNDQgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWlu Zm8uaCIgMgoKCgpjbGFzcyBRRGlyOwpzdHJ1Y3QgUUZpbGVJbmZvQ2FjaGU7CgoKY2xhc3MgUUZp bGVJbmZvCnsKcHVibGljOgogICAgZW51bSBQZXJtaXNzaW9uU3BlYyB7CiAgICAgICAgUmVhZFVz ZXIgPSAwNDAwLCBXcml0ZVVzZXIgPSAwMjAwLCBFeGVVc2VyID0gMDEwMCwKICAgICAgICBSZWFk R3JvdXAgPSAwMDQwLCBXcml0ZUdyb3VwID0gMDAyMCwgRXhlR3JvdXAgPSAwMDEwLAogICAgICAg IFJlYWRPdGhlciA9IDAwMDQsIFdyaXRlT3RoZXIgPSAwMDAyLCBFeGVPdGhlciA9IDAwMDEgfTsK CiAgICBRRmlsZUluZm8oKTsKICAgIFFGaWxlSW5mbyggY29uc3QgUVN0cmluZyAmZmlsZSApOwog ICAgUUZpbGVJbmZvKCBjb25zdCBRRmlsZSAmICk7CgogICAgUUZpbGVJbmZvKCBjb25zdCBRRGly ICYsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CgogICAgUUZpbGVJbmZvKCBjb25zdCBRRmls ZUluZm8gJiApOwogICB+UUZpbGVJbmZvKCk7CgogICAgUUZpbGVJbmZvICZvcGVyYXRvcj0oIGNv bnN0IFFGaWxlSW5mbyAmICk7CgogICAgdm9pZCBzZXRGaWxlKCBjb25zdCBRU3RyaW5nICZmaWxl ICk7CiAgICB2b2lkIHNldEZpbGUoIGNvbnN0IFFGaWxlICYgKTsKCiAgICB2b2lkIHNldEZpbGUo IGNvbnN0IFFEaXIgJiwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKCiAgICBib29sIGV4aXN0 cygpIGNvbnN0OwogICAgdm9pZCByZWZyZXNoKCkgY29uc3Q7CiAgICBib29sIGNhY2hpbmcoKSBj b25zdDsKICAgIHZvaWQgc2V0Q2FjaGluZyggYm9vbCApOwoKICAgIFFTdHJpbmcgZmlsZVBhdGgo KSBjb25zdDsKICAgIFFTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKCiAgICBRU3RyaW5nIGFic0Zp bGVQYXRoKCkgY29uc3Q7CgogICAgUVN0cmluZyBiYXNlTmFtZSggYm9vbCBjb21wbGV0ZSA9IEZB TFNFICkgY29uc3Q7CiAgICBRU3RyaW5nIGV4dGVuc2lvbiggYm9vbCBjb21wbGV0ZSA9IFRSVUUg KSBjb25zdDsKCgogICAgUVN0cmluZyBkaXJQYXRoKCBib29sIGFic1BhdGggPSBGQUxTRSApIGNv bnN0OwoKCiAgICBRRGlyIGRpciggYm9vbCBhYnNQYXRoID0gRkFMU0UgKSBjb25zdDsKCiAgICBi b29sIGlzUmVhZGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0OwogICAg Ym9vbCBpc0V4ZWN1dGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdDsKCgog ICAgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3Q7CiAgICBib29sIGNvbnZlcnRUb0FicygpOwoKCiAg ICBib29sIGlzRmlsZSgpIGNvbnN0OwogICAgYm9vbCBpc0RpcigpIGNvbnN0OwogICAgYm9vbCBp c1N5bUxpbmsoKSBjb25zdDsKCiAgICBRU3RyaW5nIHJlYWRMaW5rKCkgY29uc3Q7CgogICAgUVN0 cmluZyBvd25lcigpIGNvbnN0OwogICAgdWludCBvd25lcklkKCkgY29uc3Q7CiAgICBRU3RyaW5n IGdyb3VwKCkgY29uc3Q7CiAgICB1aW50IGdyb3VwSWQoKSBjb25zdDsKCiAgICBib29sIHBlcm1p c3Npb24oIGludCBwZXJtaXNzaW9uU3BlYyApIGNvbnN0OwoKCgoKCgogICAgdWludCBzaXplKCkg Y29uc3Q7CgoKICAgIFFEYXRlVGltZSBjcmVhdGVkKCkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgbGFz dE1vZGlmaWVkKCkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgbGFzdFJlYWQoKSBjb25zdDsKCnByaXZh dGU6CiAgICB2b2lkIGRvU3RhdCgpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2xhc2hpZnkoIFFT dHJpbmcgJiApOwogICAgc3RhdGljIHZvaWQgbWFrZUFicyggUVN0cmluZyAmICk7CgogICAgUVN0 cmluZyBmbjsKICAgIFFGaWxlSW5mb0NhY2hlICpmaWM7CiAgICBib29sIGNhY2hlOwoKICAgIGJv b2wgc3ltTGluazsKCgp9OwoKCmlubGluZSBib29sIFFGaWxlSW5mbzo6Y2FjaGluZygpIGNvbnN0 CnsKICAgIHJldHVybiBjYWNoZTsKfQojIDQ1ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUv cWRpci5oIiAyCgoKCgp0eXBlZGVmIFFQdHJMaXN0PFFGaWxlSW5mbz4gUUZpbGVJbmZvTGlzdDsK dHlwZWRlZiBRUHRyTGlzdEl0ZXJhdG9yPFFGaWxlSW5mbz4gUUZpbGVJbmZvTGlzdEl0ZXJhdG9y OwpjbGFzcyBRU3RyaW5nTGlzdDsKCgpjbGFzcyBRRGlyCnsKcHVibGljOgogICAgZW51bSBGaWx0 ZXJTcGVjIHsgRGlycyA9IDB4MDAxLAogICAgICAgICAgICAgICAgICAgICAgRmlsZXMgPSAweDAw MiwKICAgICAgICAgICAgICAgICAgICAgIERyaXZlcyA9IDB4MDA0LAogICAgICAgICAgICAgICAg ICAgICAgTm9TeW1MaW5rcyA9IDB4MDA4LAogICAgICAgICAgICAgICAgICAgICAgQWxsID0gMHgw MDcsCiAgICAgICAgICAgICAgICAgICAgICBUeXBlTWFzayA9IDB4MDBGLAoKICAgICAgICAgICAg ICAgICAgICAgIFJlYWRhYmxlID0gMHgwMTAsCiAgICAgICAgICAgICAgICAgICAgICBXcml0YWJs ZSA9IDB4MDIwLAogICAgICAgICAgICAgICAgICAgICAgRXhlY3V0YWJsZSA9IDB4MDQwLAogICAg ICAgICAgICAgICAgICAgICAgUldFTWFzayA9IDB4MDcwLAoKICAgICAgICAgICAgICAgICAgICAg IE1vZGlmaWVkID0gMHgwODAsCiAgICAgICAgICAgICAgICAgICAgICBIaWRkZW4gPSAweDEwMCwK ICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSA9IDB4MjAwLAogICAgICAgICAgICAgICAgICAg ICAgQWNjZXNzTWFzayA9IDB4M0YwLAoKICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRGaWx0 ZXIgPSAtMSB9OwoKICAgIGVudW0gU29ydFNwZWMgeyBOYW1lID0gMHgwMCwKICAgICAgICAgICAg ICAgICAgICAgIFRpbWUgPSAweDAxLAogICAgICAgICAgICAgICAgICAgICAgU2l6ZSA9IDB4MDIs CiAgICAgICAgICAgICAgICAgICAgICBVbnNvcnRlZCA9IDB4MDMsCiAgICAgICAgICAgICAgICAg ICAgICBTb3J0QnlNYXNrID0gMHgwMywKCiAgICAgICAgICAgICAgICAgICAgICBEaXJzRmlyc3Qg PSAweDA0LAogICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZWQgPSAweDA4LAogICAgICAgICAg ICAgICAgICAgICAgSWdub3JlQ2FzZSA9IDB4MTAsCiAgICAgICAgICAgICAgICAgICAgICBEZWZh dWx0U29ydCA9IC0xIH07CgogICAgUURpcigpOwogICAgUURpciggY29uc3QgUVN0cmluZyAmcGF0 aCwgY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICBp bnQgc29ydFNwZWMgPSBOYW1lIHwgSWdub3JlQ2FzZSwgaW50IGZpbHRlclNwZWMgPSBBbGwgKTsK ICAgIFFEaXIoIGNvbnN0IFFEaXIgJiApOwoKICAgIHZpcnR1YWwgflFEaXIoKTsKCiAgICBRRGly ICZvcGVyYXRvcj0oIGNvbnN0IFFEaXIgJiApOwogICAgUURpciAmb3BlcmF0b3I9KCBjb25zdCBR U3RyaW5nICZwYXRoICk7CgogICAgdmlydHVhbCB2b2lkIHNldFBhdGgoIGNvbnN0IFFTdHJpbmcg JnBhdGggKTsKICAgIHZpcnR1YWwgUVN0cmluZyBwYXRoKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFT dHJpbmcgYWJzUGF0aCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNhbm9uaWNhbFBhdGgo KSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgZGlyTmFtZSgpIGNvbnN0OwogICAgdmlydHVh bCBRU3RyaW5nIGZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAg dmlydHVhbCBRU3RyaW5nIGFic0ZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSAp IGNvbnN0OwoKICAgIHN0YXRpYyBRU3RyaW5nIGNvbnZlcnRTZXBhcmF0b3JzKCBjb25zdCBRU3Ry aW5nICZwYXRoTmFtZSApOwoKICAgIHZpcnR1YWwgYm9vbCBjZCggY29uc3QgUVN0cmluZyAmZGly TmFtZSwgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGNkVXAo KTsKCiAgICBRU3RyaW5nIG5hbWVGaWx0ZXIoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRO YW1lRmlsdGVyKCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyICk7CiAgICBGaWx0ZXJTcGVjIGZp bHRlcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZpbHRlciggaW50IGZpbHRlclNwZWMg KTsKICAgIFNvcnRTcGVjIHNvcnRpbmcoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTb3J0 aW5nKCBpbnQgc29ydFNwZWMgKTsKCiAgICBib29sIG1hdGNoQWxsRGlycygpIGNvbnN0OwogICAg dmlydHVhbCB2b2lkIHNldE1hdGNoQWxsRGlycyggYm9vbCApOwoKICAgIHVpbnQgY291bnQoKSBj b25zdDsKICAgIFFTdHJpbmcgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CgogICAgdmlydHVhbCBR U3RyTGlzdCBlbmNvZGVkRW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERl ZmF1bHRTb3J0ICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJMaXN0IGVuY29kZWRFbnRyeUxpc3Qo IGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRTcGVjID0gRGVmYXVsdFNvcnQgKSBjb25z dDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERl ZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRT cGVjID0gRGVmYXVsdFNvcnQgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlM aXN0KCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwoK ICAgIHZpcnR1YWwgY29uc3QgUUZpbGVJbmZvTGlzdCAqZW50cnlJbmZvTGlzdCggaW50IGZpbHRl clNwZWMgPSBEZWZhdWx0RmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0OwogICAgdmly dHVhbCBjb25zdCBRRmlsZUluZm9MaXN0ICplbnRyeUluZm9MaXN0KCBjb25zdCBRU3RyaW5nICZu YW1lRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29u c3Q7CgogICAgc3RhdGljIGNvbnN0IFFGaWxlSW5mb0xpc3QgKmRyaXZlcygpOwoKICAgIHZpcnR1 YWwgYm9vbCBta2RpciggY29uc3QgUVN0cmluZyAmZGlyTmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAgdmlydHVhbCBib29s IHJtZGlyKCBjb25zdCBRU3RyaW5nICZkaXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBi b29sIGFjY2VwdEFic1BhdGggPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGlzUmVh ZGFibGUoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBleGlzdHMoKSBjb25zdDsKICAgIHZpcnR1 YWwgYm9vbCBpc1Jvb3QoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNSZWxhdGl2ZSgpIGNv bnN0OwogICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0FicygpOwoKICAgIHZpcnR1YWwgYm9vbCBv cGVyYXRvcj09KCBjb25zdCBRRGlyICYgKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRRGlyICYgKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlKCBjb25z dCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0 QWJzUGF0aCA9IFRSVUUgKTsKICAgIHZpcnR1YWwgYm9vbCByZW5hbWUoIGNvbnN0IFFTdHJpbmcg Jm5hbWUsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGFjY2VwdEFic1BhdGhzID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGV4aXN0cyggY29u c3QgUVN0cmluZyAmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZXB0QWJz UGF0aCA9IFRSVUUgKTsKCiAgICBzdGF0aWMgY2hhciBzZXBhcmF0b3IoKTsKCiAgICBzdGF0aWMg Ym9vbCBzZXRDdXJyZW50KCBjb25zdCBRU3RyaW5nICZwYXRoICk7CiAgICBzdGF0aWMgUURpciBj dXJyZW50KCk7CiAgICBzdGF0aWMgUURpciBob21lKCk7CiAgICBzdGF0aWMgUURpciByb290KCk7 CiAgICBzdGF0aWMgUVN0cmluZyBjdXJyZW50RGlyUGF0aCgpOwogICAgc3RhdGljIFFTdHJpbmcg aG9tZURpclBhdGgoKTsKICAgIHN0YXRpYyBRU3RyaW5nIHJvb3REaXJQYXRoKCk7CgogICAgc3Rh dGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmdMaXN0ICZmaWx0ZXJzLCBjb25zdCBRU3RyaW5n ICZmaWxlTmFtZSApOwogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmcgJmZpbHRl ciwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKICAgIHN0YXRpYyBRU3RyaW5nIGNsZWFuRGly UGF0aCggY29uc3QgUVN0cmluZyAmZGlyUGF0aCApOwogICAgc3RhdGljIGJvb2wgaXNSZWxhdGl2 ZVBhdGgoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKICAgIHZvaWQgcmVmcmVzaCgpIGNvbnN0OwoK cHJpdmF0ZToKCgoKCiAgICB2b2lkIGluaXQoKTsKICAgIHZpcnR1YWwgYm9vbCByZWFkRGlyRW50 cmllcyggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IEZpbHRlclNwZWMsIGludCBTb3J0U3BlYyApOwoKICAgIHN0YXRpYyB2b2lk IHNsYXNoaWZ5KCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nIGRQYXRoOwogICAgUVN0cmluZ0xp c3QgKmZMaXN0OwogICAgUUZpbGVJbmZvTGlzdCAqZmlMaXN0OwogICAgUVN0cmluZyBuYW1lRmls dDsKICAgIEZpbHRlclNwZWMgZmlsdFM7CiAgICBTb3J0U3BlYyBzb3J0UzsKICAgIHVpbnQgZGly dHkgOiAxOwogICAgdWludCBhbGxEaXJzIDogMTsKfTsKCgppbmxpbmUgUVN0cmluZyBRRGlyOjpw YXRoKCkgY29uc3QKewogICAgcmV0dXJuIGRQYXRoOwp9CgppbmxpbmUgUVN0cmluZyBRRGlyOjpu YW1lRmlsdGVyKCkgY29uc3QKewogICAgcmV0dXJuIG5hbWVGaWx0Owp9CgppbmxpbmUgUURpcjo6 RmlsdGVyU3BlYyBRRGlyOjpmaWx0ZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZmlsdFM7Cn0KCmlu bGluZSBRRGlyOjpTb3J0U3BlYyBRRGlyOjpzb3J0aW5nKCkgY29uc3QKewogICAgcmV0dXJuIHNv cnRTOwp9CgppbmxpbmUgYm9vbCBRRGlyOjptYXRjaEFsbERpcnMoKSBjb25zdAp7CiAgICByZXR1 cm4gYWxsRGlyczsKfQoKaW5saW5lIGJvb2wgUURpcjo6b3BlcmF0b3IhPSggY29uc3QgUURpciAm ZCApIGNvbnN0CnsKICAgIHJldHVybiAhKCp0aGlzID09IGQpOwp9CgoKc3RydWN0IFFEaXJTb3J0 SXRlbSB7CiAgICBRU3RyaW5nIGZpbGVuYW1lX2NhY2hlOwogICAgUUZpbGVJbmZvKiBpdGVtOwp9 OwojIDU2ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWZpbGVkaWFsb2cuaCIgMgoKIyAx ICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXVybG9wZXJhdG9yLmgiIDEKIyA0MyAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1cmxvcGVyYXRvci5oIgojIDEgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xdXJsLmgiIDEKIyA0NyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNs dWRlL3F1cmwuaCIKY2xhc3MgUVVybFByaXZhdGU7CgpjbGFzcyBRVXJsCnsKcHVibGljOgogICAg UVVybCgpOwogICAgUVVybCggY29uc3QgUVN0cmluZyYgdXJsICk7CiAgICBRVXJsKCBjb25zdCBR VXJsJiB1cmwgKTsKICAgIFFVcmwoIGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgcmVs VXJsLCBib29sIGNoZWNrU2xhc2ggPSBGQUxTRSApOwogICAgdmlydHVhbCB+UVVybCgpOwoKICAg IFFTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQcm90b2NvbCgg Y29uc3QgUVN0cmluZyYgcHJvdG9jb2wgKTsKCiAgICBRU3RyaW5nIHVzZXIoKSBjb25zdDsKICAg IHZpcnR1YWwgdm9pZCBzZXRVc2VyKCBjb25zdCBRU3RyaW5nJiB1c2VyICk7CiAgICBib29sIGhh c1VzZXIoKSBjb25zdDsKCiAgICBRU3RyaW5nIHBhc3N3b3JkKCkgY29uc3Q7CiAgICB2aXJ0dWFs IHZvaWQgc2V0UGFzc3dvcmQoIGNvbnN0IFFTdHJpbmcmIHBhc3MgKTsKICAgIGJvb2wgaGFzUGFz c3dvcmQoKSBjb25zdDsKCiAgICBRU3RyaW5nIGhvc3QoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p ZCBzZXRIb3N0KCBjb25zdCBRU3RyaW5nJiB1c2VyICk7CiAgICBib29sIGhhc0hvc3QoKSBjb25z dDsKCiAgICBpbnQgcG9ydCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBvcnQoIGludCBw b3J0ICk7CiAgICBib29sIGhhc1BvcnQoKSBjb25zdDsKCiAgICBRU3RyaW5nIHBhdGgoIGJvb2wg Y29ycmVjdCA9IFRSVUUgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYXRoKCBjb25zdCBR U3RyaW5nJiBwYXRoICk7CiAgICBib29sIGhhc1BhdGgoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZv aWQgc2V0RW5jb2RlZFBhdGhBbmRRdWVyeSggY29uc3QgUVN0cmluZyYgZW5jICk7CiAgICBRU3Ry aW5nIGVuY29kZWRQYXRoQW5kUXVlcnkoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UXVlcnkoIGNv bnN0IFFTdHJpbmcmIHR4dCApOwogICAgUVN0cmluZyBxdWVyeSgpIGNvbnN0OwoKICAgIFFTdHJp bmcgcmVmKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UmVmKCBjb25zdCBRU3RyaW5nJiB0 eHQgKTsKICAgIGJvb2wgaGFzUmVmKCkgY29uc3Q7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7 CiAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkZFBhdGgo IGNvbnN0IFFTdHJpbmcmIHBhdGggKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlTmFtZSggY29u c3QgUVN0cmluZyYgdHh0ICk7CgogICAgUVN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OwogICAgUVN0 cmluZyBkaXJQYXRoKCkgY29uc3Q7CgogICAgUVVybCYgb3BlcmF0b3I9KCBjb25zdCBRVXJsJiB1 cmwgKTsKICAgIFFVcmwmIG9wZXJhdG9yPSggY29uc3QgUVN0cmluZyYgdXJsICk7CgogICAgYm9v bCBvcGVyYXRvcj09KCBjb25zdCBRVXJsJiB1cmwgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I9 PSggY29uc3QgUVN0cmluZyYgdXJsICkgY29uc3Q7CgogICAgc3RhdGljIHZvaWQgZGVjb2RlKCBR U3RyaW5nJiB1cmwgKTsKICAgIHN0YXRpYyB2b2lkIGVuY29kZSggUVN0cmluZyYgdXJsICk7Cgog ICAgb3BlcmF0b3IgUVN0cmluZygpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIHRvU3RyaW5n KCBib29sIGVuY29kZWRQYXRoID0gRkFMU0UsIGJvb2wgZm9yY2VQcmVwZW5kUHJvdG9jb2wgPSBU UlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGNkVXAoKTsKCiAgICBzdGF0aWMgYm9vbCBp c1JlbGF0aXZlVXJsKCBjb25zdCBRU3RyaW5nICZ1cmwgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1 YWwgdm9pZCByZXNldCgpOwogICAgdmlydHVhbCBib29sIHBhcnNlKCBjb25zdCBRU3RyaW5nJiB1 cmwgKTsKCnByaXZhdGU6CiAgICBRVXJsUHJpdmF0ZSAqZDsKCn07CiMgNDQgIi91c3IvbG9jYWwv cXQtMy4xLjEvaW5jbHVkZS9xdXJsb3BlcmF0b3IuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcW5ldHdvcmtwcm90b2NvbC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9p bmNsdWRlL3F1cmxpbmZvLmgiIDEKIyA0OSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1 cmxpbmZvLmgiCmNsYXNzIFFVcmxPcGVyYXRvcjsKY2xhc3MgUVVybDsKY2xhc3MgUVVybEluZm9Q cml2YXRlOwoKY2xhc3MgUVVybEluZm8KewpwdWJsaWM6CiAgICBRVXJsSW5mbygpOwogICAgUVVy bEluZm8oIGNvbnN0IFFVcmxPcGVyYXRvciAmcGF0aCwgY29uc3QgUVN0cmluZyAmZmlsZSApOwog ICAgUVVybEluZm8oIGNvbnN0IFFVcmxJbmZvICZ1aSApOwojIDcxICIvdXNyL2xvY2FsL3F0LTMu MS4xL2luY2x1ZGUvcXVybGluZm8uaCIKICAgIFFVcmxJbmZvKCBjb25zdCBRU3RyaW5nICZuYW1l LCBpbnQgcGVybWlzc2lvbnMsIGNvbnN0IFFTdHJpbmcgJm93bmVyLAogICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcgJmdyb3VwLCB1aW50IHNpemUsIGNvbnN0IFFEYXRlVGltZSAmbGFzdE1vZGlm aWVkLAogICAgICAgICAgICAgIGNvbnN0IFFEYXRlVGltZSAmbGFzdFJlYWQsIGJvb2wgaXNEaXIs IGJvb2wgaXNGaWxlLCBib29sIGlzU3ltTGluaywKICAgICAgICAgICAgICBib29sIGlzV3JpdGFi bGUsIGJvb2wgaXNSZWFkYWJsZSwgYm9vbCBpc0V4ZWN1dGFibGUgKTsKICAgIFFVcmxJbmZvKCBj b25zdCBRVXJsICZ1cmwsIGludCBwZXJtaXNzaW9ucywgY29uc3QgUVN0cmluZyAmb3duZXIsCiAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZ3JvdXAsIHVpbnQgc2l6ZSwgY29uc3QgUURhdGVU aW1lICZsYXN0TW9kaWZpZWQsCiAgICAgICAgICAgICAgY29uc3QgUURhdGVUaW1lICZsYXN0UmVh ZCwgYm9vbCBpc0RpciwgYm9vbCBpc0ZpbGUsIGJvb2wgaXNTeW1MaW5rLAogICAgICAgICAgICAg IGJvb2wgaXNXcml0YWJsZSwgYm9vbCBpc1JlYWRhYmxlLCBib29sIGlzRXhlY3V0YWJsZSApOwoK ICAgIFFVcmxJbmZvICZvcGVyYXRvcj0oIGNvbnN0IFFVcmxJbmZvICZ1aSApOwogICAgdmlydHVh bCB+UVVybEluZm8oKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZSggY29uc3QgUVN0cmluZyAm bmFtZSApOwogICAgdmlydHVhbCB2b2lkIHNldERpciggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZv aWQgc2V0RmlsZSggYm9vbCBiICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U3ltTGluayggYm9vbCBi ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoIGNvbnN0IFFTdHJpbmcgJnMgKTsKICAgIHZp cnR1YWwgdm9pZCBzZXRHcm91cCggY29uc3QgUVN0cmluZyAmcyApOwoKCgoKCiAgICB2aXJ0dWFs IHZvaWQgc2V0U2l6ZSggdWludCBzaXplICk7CgogICAgdmlydHVhbCB2b2lkIHNldFdyaXRhYmxl KCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkYWJsZSggYm9vbCBiICk7CiAgICB2 aXJ0dWFsIHZvaWQgc2V0UGVybWlzc2lvbnMoIGludCBwICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0 TGFzdE1vZGlmaWVkKCBjb25zdCBRRGF0ZVRpbWUgJmR0ICk7CgogICAgYm9vbCBpc1ZhbGlkKCkg Y29uc3Q7CgogICAgUVN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICBpbnQgcGVybWlzc2lvbnMoKSBj b25zdDsKICAgIFFTdHJpbmcgb3duZXIoKSBjb25zdDsKICAgIFFTdHJpbmcgZ3JvdXAoKSBjb25z dDsKCgoKCgogICAgdWludCBzaXplKCkgY29uc3Q7CgogICAgUURhdGVUaW1lIGxhc3RNb2RpZmll ZCgpIGNvbnN0OwogICAgUURhdGVUaW1lIGxhc3RSZWFkKCkgY29uc3Q7CiAgICBib29sIGlzRGly KCkgY29uc3Q7CiAgICBib29sIGlzRmlsZSgpIGNvbnN0OwogICAgYm9vbCBpc1N5bUxpbmsoKSBj b25zdDsKICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1JlYWRhYmxlKCkg Y29uc3Q7CiAgICBib29sIGlzRXhlY3V0YWJsZSgpIGNvbnN0OwoKICAgIHN0YXRpYyBib29sIGdy ZWF0ZXJUaGFuKCBjb25zdCBRVXJsSW5mbyAmaTEsIGNvbnN0IFFVcmxJbmZvICZpMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ydEJ5ICk7CiAgICBzdGF0aWMgYm9vbCBsZXNz VGhhbiggY29uc3QgUVVybEluZm8gJmkxLCBjb25zdCBRVXJsSW5mbyAmaTIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHNvcnRCeSApOwogICAgc3RhdGljIGJvb2wgZXF1YWwoIGNvbnN0 IFFVcmxJbmZvICZpMSwgY29uc3QgUVVybEluZm8gJmkyLAogICAgICAgICAgICAgICAgICAgICAg IGludCBzb3J0QnkgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFVcmxJbmZvICZpICkg Y29uc3Q7CnByaXZhdGU6CiAgICBRVXJsSW5mb1ByaXZhdGUgKmQ7Cgp9OwojIDQzICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgojIDEgIi91c3IvbG9j YWwvcXQtMy4xLjEvaW5jbHVkZS9xZGljdC5oIiAxCiMgNDUgIi91c3IvbG9jYWwvcXQtMy4xLjEv aW5jbHVkZS9xZGljdC5oIgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRRGljdAoKCgogICAg ICAgIDogcHVibGljIFFHRGljdAoKewpwdWJsaWM6CiAgICBRRGljdCggaW50IHNpemUgPSAxNywg Ym9vbCBjYXNlU2Vuc2l0aXZlID0gVFJVRSApCiAgICAgICAgOiBRR0RpY3QoIHNpemUsIFN0cmlu Z0tleSwgY2FzZVNlbnNpdGl2ZSwgRkFMU0UgKSB7IH0KICAgIFFEaWN0KCBjb25zdCBRRGljdDx0 eXBlPiAmZCApIDogUUdEaWN0KCBkICkgeyB9CiAgICB+UURpY3QoKSB7IGNsZWFyKCk7IH0KICAg IFFEaWN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUURpY3Q8dHlwZT4gJmQpCiAgICAgICAgICAg ICAgICAgICAgICAgIHsgcmV0dXJuIChRRGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRvcj0oZCk7 IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCk7IH0KICAg IHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgpOyB9CiAgICBib29sIGlz RW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0gMDsgfQoKICAgIHZvaWQg aW5zZXJ0KCBjb25zdCBRU3RyaW5nICZrLCBjb25zdCB0eXBlICpkICkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX3N0cmluZyhrLChJdGVtKWQs MSk7IH0KICAgIHZvaWQgcmVwbGFjZSggY29uc3QgUVN0cmluZyAmaywgY29uc3QgdHlwZSAqZCAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHRGljdDo6bG9va19z dHJpbmcoaywoSXRlbSlkLDIpOyB9CiAgICBib29sIHJlbW92ZSggY29uc3QgUVN0cmluZyAmayAp IHsgcmV0dXJuIFFHRGljdDo6cmVtb3ZlX3N0cmluZyhrKTsgfQogICAgdHlwZSAqdGFrZSggY29u c3QgUVN0cmluZyAmayApIHsgcmV0dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX3N0cmluZyhrKTsg fQogICAgdHlwZSAqZmluZCggY29uc3QgUVN0cmluZyAmayApIGNvbnN0CiAgICAgICAgICAgICAg ICB7IHJldHVybiAodHlwZSAqKSgoUUdEaWN0Kil0aGlzKS0+UUdEaWN0Ojpsb29rX3N0cmluZyhr LDAsMCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGNvbnN0IFFTdHJpbmcgJmsgKSBjb25zdAog ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6 bG9va19zdHJpbmcoaywwLDApOyB9CgogICAgdm9pZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigp OyB9CiAgICB2b2lkIHJlc2l6ZSggdWludCBuICkgeyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAg dm9pZCBzdGF0aXN0aWNzKCkgY29uc3QgeyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQoKCgoKCgoK cHJpdmF0ZToKICAgICAgICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRl PD4gaW5saW5lIHZvaWQgUURpY3Q8dm9pZD46OmRlbGV0ZUl0ZW0oIEl0ZW0gKQp7Cn0KCgp0ZW1w bGF0ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0 ckNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUg KilkOwp9Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRRGljdEl0ZXJhdG9yIDogcHVibGlj IFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUURpY3RJdGVyYXRvcihjb25zdCBRRGljdDx0 eXBlPiAmZCkgOiBRR0RpY3RJdGVyYXRvcigoUUdEaWN0ICYpZCkgeyB9CiAgICB+UURpY3RJdGVy YXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKTsg fQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gZGljdC0+Y291bnQoKSA9PSAwOyB9 CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6dG9G aXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICooKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFH RGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IqKCkgeyByZXR1cm4gKHR5 cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7 IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgUVN0cmluZyBjdXJy ZW50S2V5KCkgY29uc3R7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCk7IH0K ICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpv cGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7IHJldHVybiAodHlwZSAqKVFH RGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBq KSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcis9KGopOyB9Cn07CiMg NDUgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiIDIKCgoK CgpjbGFzcyBRTmV0d29ya1Byb3RvY29sOwpjbGFzcyBRTmV0d29ya09wZXJhdGlvbjsKY2xhc3Mg UVRpbWVyOwpjbGFzcyBRVXJsT3BlcmF0b3I7CmNsYXNzIFFOZXR3b3JrUHJvdG9jb2xQcml2YXRl Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUVZhbHVlTGlzdDsKCmNsYXNzIFFOZXR3b3JrUHJv dG9jb2xGYWN0b3J5QmFzZQp7CnB1YmxpYzoKICAgdmlydHVhbCBRTmV0d29ya1Byb3RvY29sICpj cmVhdGVPYmplY3QoKSA9IDA7Cgp9OwoKdGVtcGxhdGU8IGNsYXNzIFByb3RvY29sID4KY2xhc3Mg UU5ldHdvcmtQcm90b2NvbEZhY3RvcnkgOiBwdWJsaWMgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlC YXNlCnsKcHVibGljOgogICAgUU5ldHdvcmtQcm90b2NvbCAqY3JlYXRlT2JqZWN0KCkgewogICAg ICAgIHJldHVybiBuZXcgUHJvdG9jb2w7CiAgICB9Cgp9OwoKdHlwZWRlZiBRRGljdDwgUU5ldHdv cmtQcm90b2NvbEZhY3RvcnlCYXNlID4gUU5ldHdvcmtQcm90b2NvbERpY3Q7CgpjbGFzcyBRTmV0 d29ya1Byb3RvY29sIDogcHVibGljIFFPYmplY3QKewogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRh T2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9 IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRf Y2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVj dCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9v bCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBx dF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0 aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsg cmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2Jq OwoKcHVibGljOgogICAgZW51bSBTdGF0ZSB7CiAgICAgICAgU3RXYWl0aW5nID0gMCwKICAgICAg ICBTdEluUHJvZ3Jlc3MsCiAgICAgICAgU3REb25lLAogICAgICAgIFN0RmFpbGVkLAogICAgICAg IFN0U3RvcHBlZAogICAgfTsKCiAgICBlbnVtIE9wZXJhdGlvbiB7CiAgICAgICAgT3BMaXN0Q2hp bGRyZW4gPSAxLAogICAgICAgIE9wTWtEaXIgPSAyLAogICAgICAgIE9wTWtkaXIgPSBPcE1rRGly LAogICAgICAgIE9wUmVtb3ZlID0gNCwKICAgICAgICBPcFJlbmFtZSA9IDgsCiAgICAgICAgT3BH ZXQgPSAzMiwKICAgICAgICBPcFB1dCA9IDY0CiAgICB9OwoKICAgIGVudW0gQ29ubmVjdGlvblN0 YXRlIHsKICAgICAgICBDb25Ib3N0Rm91bmQsCiAgICAgICAgQ29uQ29ubmVjdGVkLAogICAgICAg IENvbkNsb3NlZAogICAgfTsKCiAgICBlbnVtIEVycm9yIHsKCiAgICAgICAgTm9FcnJvciA9IDAs CgogICAgICAgIEVyclZhbGlkLAogICAgICAgIEVyclVua25vd25Qcm90b2NvbCwKICAgICAgICBF cnJVbnN1cHBvcnRlZCwKICAgICAgICBFcnJQYXJzZSwKCiAgICAgICAgRXJyTG9naW5JbmNvcnJl Y3QsCiAgICAgICAgRXJySG9zdE5vdEZvdW5kLAoKICAgICAgICBFcnJMaXN0Q2hpbGRyZW4sCiAg ICAgICAgRXJyTGlzdENobGlkcmVuID0gRXJyTGlzdENoaWxkcmVuLAogICAgICAgIEVyck1rRGly LAogICAgICAgIEVyck1rZGlyID0gRXJyTWtEaXIsCiAgICAgICAgRXJyUmVtb3ZlLAogICAgICAg IEVyclJlbmFtZSwKICAgICAgICBFcnJHZXQsCiAgICAgICAgRXJyUHV0LAogICAgICAgIEVyckZp bGVOb3RFeGlzdGluZywKICAgICAgICBFcnJQZXJtaXNzaW9uRGVuaWVkCiAgICB9OwoKICAgIFFO ZXR3b3JrUHJvdG9jb2woKTsKICAgIHZpcnR1YWwgflFOZXR3b3JrUHJvdG9jb2woKTsKCiAgICB2 aXJ0dWFsIHZvaWQgc2V0VXJsKCBRVXJsT3BlcmF0b3IgKnUgKTsKCiAgICB2aXJ0dWFsIHZvaWQg c2V0QXV0b0RlbGV0ZSggYm9vbCBiLCBpbnQgaSA9IDEwMDAwICk7CiAgICBib29sIGF1dG9EZWxl dGUoKSBjb25zdDsKCiAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck5ldHdvcmtQcm90b2NvbCggY29u c3QgUVN0cmluZyAmcHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlCYXNlICpwcm90b2NvbEZhY3RvcnkgKTsKICAg IHN0YXRpYyBRTmV0d29ya1Byb3RvY29sICpnZXROZXR3b3JrUHJvdG9jb2woIGNvbnN0IFFTdHJp bmcgJnByb3RvY29sICk7CiAgICBzdGF0aWMgYm9vbCBoYXNPbmx5TG9jYWxGaWxlU3lzdGVtKCk7 CgogICAgdmlydHVhbCBpbnQgc3VwcG9ydGVkT3BlcmF0aW9ucygpIGNvbnN0OwogICAgdmlydHVh bCB2b2lkIGFkZE9wZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CgogICAgUVVybE9w ZXJhdG9yICp1cmwoKSBjb25zdDsKICAgIFFOZXR3b3JrT3BlcmF0aW9uICpvcGVyYXRpb25JblBy b2dyZXNzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPcGVyYXRpb25RdWV1ZSgpOwog ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZGF0YSggY29uc3Qg UUJ5dGVBcnJheSAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGNvbm5lY3Rp b25TdGF0ZUNoYW5nZWQoIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAmZGF0YSApOwogICAgdm9p ZCBmaW5pc2hlZCggUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBzdGFydCggUU5l dHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdDaGlsZHJlbiggY29uc3QgUVZhbHVl TGlzdDxRVXJsSW5mbz4gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBuZXdD aGlsZCggY29uc3QgUVVybEluZm8gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9p ZCBjcmVhdGVkRGlyZWN0b3J5KCBjb25zdCBRVXJsSW5mbyAmLCBRTmV0d29ya09wZXJhdGlvbiAq cmVzICk7CiAgICB2b2lkIHJlbW92ZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZv aWQgaXRlbUNoYW5nZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgZGF0YVRy YW5zZmVyUHJvZ3Jlc3MoIGludCBieXRlc0RvbmUsIGludCBieXRlc1RvdGFsLCBRTmV0d29ya09w ZXJhdGlvbiAqcmVzICk7Cgpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc09wZXJh dGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9u TGlzdENoaWxkcmVuKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9pZCBv cGVyYXRpb25Na0RpciggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQg b3BlcmF0aW9uUmVtb3ZlKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9p ZCBvcGVyYXRpb25SZW5hbWUoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdmlydHVhbCB2 b2lkIG9wZXJhdGlvbkdldCggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFsIHZv aWQgb3BlcmF0aW9uUHV0KCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9p ZCBvcGVyYXRpb25QdXRDaHVuayggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2aXJ0dWFs IGJvb2wgY2hlY2tDb25uZWN0aW9uKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKCnByaXZhdGU6 CiAgICBRTmV0d29ya1Byb3RvY29sUHJpdmF0ZSAqZDsKCnByaXZhdGUgOgogICAgdm9pZCBwcm9j ZXNzTmV4dE9wZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRpb24gKm9sZCApOwogICAgdm9pZCBzdGFy dE9wcygpOwogICAgdm9pZCBlbWl0TmV3Q2hpbGRyZW4oIGNvbnN0IFFVcmxJbmZvICZpLCBRTmV0 d29ya09wZXJhdGlvbiAqb3AgKTsKCiAgICB2b2lkIHJlbW92ZU1lKCk7Cgpwcml2YXRlOgoKICAg IFFOZXR3b3JrUHJvdG9jb2woIGNvbnN0IFFOZXR3b3JrUHJvdG9jb2wgJiApOwogICAgUU5ldHdv cmtQcm90b2NvbCAmb3BlcmF0b3I9KCBjb25zdCBRTmV0d29ya1Byb3RvY29sICYgKTsKCn07Cgpj bGFzcyBRTmV0d29ya09wZXJhdGlvblByaXZhdGU7CgpjbGFzcyBRTmV0d29ya09wZXJhdGlvbiA6 IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9i amVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0 IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNo YXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwg Ym9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHko IGludCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3Bl cnR5KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0 KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVj dCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog PSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog PSAwICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgIGZyaWVuZCBj bGFzcyBRVXJsT3BlcmF0b3I7CgpwdWJsaWM6CiAgICBRTmV0d29ya09wZXJhdGlvbiggUU5ldHdv cmtQcm90b2NvbDo6T3BlcmF0aW9uIG9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25z dCBRU3RyaW5nICZhcmcwLCBjb25zdCBRU3RyaW5nICZhcmcxLAogICAgICAgICAgICAgICAgICAg IGNvbnN0IFFTdHJpbmcgJmFyZzIgKTsKICAgIFFOZXR3b3JrT3BlcmF0aW9uKCBRTmV0d29ya1By b3RvY29sOjpPcGVyYXRpb24gb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFC eXRlQXJyYXkgJmFyZzAsIGNvbnN0IFFCeXRlQXJyYXkgJmFyZzEsCiAgICAgICAgICAgICAgICAg ICAgY29uc3QgUUJ5dGVBcnJheSAmYXJnMiApOwogICAgflFOZXR3b3JrT3BlcmF0aW9uKCk7Cgog ICAgdm9pZCBzZXRTdGF0ZSggUU5ldHdvcmtQcm90b2NvbDo6U3RhdGUgc3RhdGUgKTsKICAgIHZv aWQgc2V0UHJvdG9jb2xEZXRhaWwoIGNvbnN0IFFTdHJpbmcgJmRldGFpbCApOwogICAgdm9pZCBz ZXRFcnJvckNvZGUoIGludCBlYyApOwogICAgdm9pZCBzZXRBcmcoIGludCBudW0sIGNvbnN0IFFT dHJpbmcgJmFyZyApOwogICAgdm9pZCBzZXRSYXdBcmcoIGludCBudW0sIGNvbnN0IFFCeXRlQXJy YXkgJmFyZyApOwoKICAgIFFOZXR3b3JrUHJvdG9jb2w6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBj b25zdDsKICAgIFFOZXR3b3JrUHJvdG9jb2w6OlN0YXRlIHN0YXRlKCkgY29uc3Q7CiAgICBRU3Ry aW5nIGFyZyggaW50IG51bSApIGNvbnN0OwogICAgUUJ5dGVBcnJheSByYXdBcmcoIGludCBudW0g KSBjb25zdDsKICAgIFFTdHJpbmcgcHJvdG9jb2xEZXRhaWwoKSBjb25zdDsKICAgIGludCBlcnJv ckNvZGUoKSBjb25zdDsKCiAgICB2b2lkIGZyZWUoKTsKCnByaXZhdGUgOgogICAgdm9pZCBkZWxl dGVNZSgpOwoKcHJpdmF0ZToKICAgIFFCeXRlQXJyYXkgJnJhdyggaW50IG51bSApIGNvbnN0Owog ICAgUU5ldHdvcmtPcGVyYXRpb25Qcml2YXRlICpkOwoKcHJpdmF0ZToKCiAgICBRTmV0d29ya09w ZXJhdGlvbiggY29uc3QgUU5ldHdvcmtPcGVyYXRpb24gJiApOwogICAgUU5ldHdvcmtPcGVyYXRp b24gJm9wZXJhdG9yPSggY29uc3QgUU5ldHdvcmtPcGVyYXRpb24gJiApOwoKfTsKIyA0NiAiL3Vz ci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3F1cmxvcGVyYXRvci5oIiAyCgoKCgoKY2xhc3MgUVVy bEluZm87CmNsYXNzIFFVcmxPcGVyYXRvclByaXZhdGU7CgpjbGFzcyBRVXJsT3BlcmF0b3IgOiBw dWJsaWMgUU9iamVjdCwgcHVibGljIFFVcmwKewogICAgZnJpZW5kIGNsYXNzIFFOZXR3b3JrUHJv dG9jb2w7CgogICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29u c3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xh c3NOYW1lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmly dHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2Vt aXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBp bnQgZiwgUVZhcmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmpl Y3QqICwgaW50LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01l dGFPYmplY3QoKTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9 IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3Rh dGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJp dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwoKcHVibGljOgogICAgUVVybE9wZXJh dG9yKCk7CiAgICBRVXJsT3BlcmF0b3IoIGNvbnN0IFFTdHJpbmcgJnVyTCApOwogICAgUVVybE9w ZXJhdG9yKCBjb25zdCBRVXJsT3BlcmF0b3ImIHVybCApOwogICAgUVVybE9wZXJhdG9yKCBjb25z dCBRVXJsT3BlcmF0b3ImIHVybCwgY29uc3QgUVN0cmluZyYgcmVsVXJsLCBib29sIGNoZWNrU2xh c2ggPSBGQUxTRSApOwogICAgdmlydHVhbCB+UVVybE9wZXJhdG9yKCk7CgogICAgdmlydHVhbCB2 b2lkIHNldFBhdGgoIGNvbnN0IFFTdHJpbmcmIHBhdGggKTsKICAgIHZpcnR1YWwgYm9vbCBjZFVw KCk7CgogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09wZXJhdGlvbiAqbGlzdENoaWxkcmVuKCk7 CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpta2RpciggY29uc3QgUVN0cmlu ZyAmZGlybmFtZSApOwogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09wZXJhdGlvbiAqcmVtb3Zl KCBjb25zdCBRU3RyaW5nICZmaWxlbmFtZSApOwogICAgdmlydHVhbCBjb25zdCBRTmV0d29ya09w ZXJhdGlvbiAqcmVuYW1lKCBjb25zdCBRU3RyaW5nICZvbGRuYW1lLCBjb25zdCBRU3RyaW5nICZu ZXduYW1lICk7CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpnZXQoIGNvbnN0 IFFTdHJpbmcgJmxvY2F0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgdmlydHVhbCBjb25zdCBR TmV0d29ya09wZXJhdGlvbiAqcHV0KCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3Ry aW5nICZsb2NhdGlvbiA9IFFTdHJpbmc6Om51bGwgKTsKICAgIHZpcnR1YWwgUVB0ckxpc3Q8UU5l dHdvcmtPcGVyYXRpb24+IGNvcHkoIGNvbnN0IFFTdHJpbmcgJmZyb20sIGNvbnN0IFFTdHJpbmcg JnRvLCBib29sIG1vdmUgPSBGQUxTRSwgYm9vbCB0b1BhdGggPSBUUlVFICk7CiAgICB2aXJ0dWFs IHZvaWQgY29weSggY29uc3QgUVN0cmluZ0xpc3QgJmZpbGVzLCBjb25zdCBRU3RyaW5nICZkZXN0 LCBib29sIG1vdmUgPSBGQUxTRSApOwogICAgdmlydHVhbCBib29sIGlzRGlyKCBib29sICpvayA9 IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZUZpbHRlciggY29uc3QgUVN0cmluZyAmbmFt ZUZpbHRlciApOwogICAgUVN0cmluZyBuYW1lRmlsdGVyKCkgY29uc3Q7CgogICAgdmlydHVhbCBR VXJsSW5mbyBpbmZvKCBjb25zdCBRU3RyaW5nICZlbnRyeSApIGNvbnN0OwoKICAgIFFVcmxPcGVy YXRvciYgb3BlcmF0b3I9KCBjb25zdCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAgUVVybE9wZXJh dG9yJiBvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJnVybCApOwoKICAgIHZpcnR1YWwgdm9pZCBz dG9wKCk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIG5ld0NoaWxkcmVuKCBjb25zdCBRVmFsdWVMaXN0 PFFVcmxJbmZvPiAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGZpbmlzaGVk KCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIHN0YXJ0KCBRTmV0d29ya09wZXJh dGlvbiAqcmVzICk7CiAgICB2b2lkIGNyZWF0ZWREaXJlY3RvcnkoIGNvbnN0IFFVcmxJbmZvICYs IFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgcmVtb3ZlZCggUU5ldHdvcmtPcGVy YXRpb24gKnJlcyApOwogICAgdm9pZCBpdGVtQ2hhbmdlZCggUU5ldHdvcmtPcGVyYXRpb24gKnJl cyApOwogICAgdm9pZCBkYXRhKCBjb25zdCBRQnl0ZUFycmF5ICYsIFFOZXR3b3JrT3BlcmF0aW9u ICpyZXMgKTsKICAgIHZvaWQgZGF0YVRyYW5zZmVyUHJvZ3Jlc3MoIGludCBieXRlc0RvbmUsIGlu dCBieXRlc1RvdGFsLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIHN0YXJ0ZWRO ZXh0Q29weSggY29uc3QgUVB0ckxpc3Q8UU5ldHdvcmtPcGVyYXRpb24+ICZsc3QgKTsKICAgIHZv aWQgY29ubmVjdGlvblN0YXRlQ2hhbmdlZCggaW50IHN0YXRlLCBjb25zdCBRU3RyaW5nICZkYXRh ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHJlc2V0KCk7CiAgICBib29sIHBhcnNlKCBjb25zdCBR U3RyaW5nJiB1cmwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVja1ZhbGlkKCk7CiAgICB2aXJ0dWFs IHZvaWQgY2xlYXJFbnRyaWVzKCk7CiAgICB2b2lkIGdldE5ldHdvcmtQcm90b2NvbCgpOwogICAg dm9pZCBkZWxldGVOZXR3b3JrUHJvdG9jb2woKTsKCnByaXZhdGUgOgogICAgY29uc3QgUU5ldHdv cmtPcGVyYXRpb24gKnN0YXJ0T3BlcmF0aW9uKCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAg IHZvaWQgY29weUdvdERhdGEoIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEsIFFOZXR3b3JrT3BlcmF0 aW9uICpvcCApOwogICAgdm9pZCBjb250aW51ZUNvcHkoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCAp OwogICAgdm9pZCBmaW5pc2hlZENvcHkoKTsKICAgIHZvaWQgYWRkRW50cnkoIGNvbnN0IFFWYWx1 ZUxpc3Q8UVVybEluZm8+ICZpICk7CiAgICB2b2lkIHNsb3RJdGVtQ2hhbmdlZCggUU5ldHdvcmtP cGVyYXRpb24gKm9wICk7Cgpwcml2YXRlOgogICAgdm9pZCBkZWxldGVPcGVyYXRpb24oIFFOZXR3 b3JrT3BlcmF0aW9uICpvcCApOwoKICAgIFFVcmxPcGVyYXRvclByaXZhdGUgKmQ7Cn07CiMgNTgg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWRpYWxvZy5oIiAyCgoKCgoKY2xhc3Mg UUZpbGVJY29uUHJvdmlkZXIgOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1YWwg UU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0 KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lk KiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFV T2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVh bCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBi b29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7 IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0 KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1l dGFPYmo7CnB1YmxpYzoKICAgIFFGaWxlSWNvblByb3ZpZGVyKCBRT2JqZWN0ICogcGFyZW50ID0g MCwgY29uc3QgY2hhciogbmFtZSA9IDAgKTsKICAgIHZpcnR1YWwgY29uc3QgUVBpeG1hcCAqIHBp eG1hcCggY29uc3QgUUZpbGVJbmZvICYgKTsKCnByaXZhdGU6CgogICAgUUZpbGVJY29uUHJvdmlk ZXIoIGNvbnN0IFFGaWxlSWNvblByb3ZpZGVyICYgKTsKICAgIFFGaWxlSWNvblByb3ZpZGVyJiBv cGVyYXRvcj0oIGNvbnN0IFFGaWxlSWNvblByb3ZpZGVyICYgKTsKCn07CgpjbGFzcyBRRmlsZVBy ZXZpZXcKewpwdWJsaWM6CiAgICBRRmlsZVByZXZpZXcoKTsKICAgIHZpcnR1YWwgdm9pZCBwcmV2 aWV3VXJsKCBjb25zdCBRVXJsICZ1cmwgKSA9IDA7Cgp9OwoKY2xhc3MgUUZpbGVEaWFsb2cgOiBw dWJsaWMgUURpYWxvZwp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmpl Y3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBj aGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFy KiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJv b2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBp bnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0 eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCog c3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3Qq KXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g MCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g MCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAoKICAgCiAgIAog ICAKCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVibGljOgogICAgUUZpbGVEaWFsb2co IGNvbnN0IFFTdHJpbmcmIGRpck5hbWUsIGNvbnN0IFFTdHJpbmcmIGZpbHRlciA9IFFTdHJpbmc6 Om51bGwsCiAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5h bWU9MCwgYm9vbCBtb2RhbCA9IEZBTFNFICk7CiAgICBRRmlsZURpYWxvZyggUVdpZGdldCogcGFy ZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwgYm9vbCBtb2RhbCA9IEZBTFNFICk7CiAgICB+UUZp bGVEaWFsb2coKTsKCgoKICAgIHN0YXRpYyBRU3RyaW5nIGdldE9wZW5GaWxlTmFtZSggY29uc3Qg UVN0cmluZyAmaW5pdGlhbGx5ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmZmlsdGVyID0gUVN0cmluZzo6bnVsbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50ID0gMCwgY29u c3QgY2hhciogbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcgJmNhcHRpb24gPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciA9IDAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJVRSk7CiAg ICBzdGF0aWMgUVN0cmluZyBnZXRTYXZlRmlsZU5hbWUoIGNvbnN0IFFTdHJpbmcgJmluaXRpYWxs eSA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcgJmZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFXaWRnZXQgKnBhcmVudCA9IDAsIGNvbnN0IGNoYXIqIG5hbWUgPSAw LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZjYXB0 aW9uID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVN0cmluZyAqc2VsZWN0ZWRGaWx0ZXIgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIHJlc29sdmVTeW1saW5rcyA9IFRSVUUpOwogICAgc3RhdGljIFFTdHJpbmcg Z2V0RXhpc3RpbmdEaXJlY3RvcnkoIGNvbnN0IFFTdHJpbmcgJmRpciA9IFFTdHJpbmc6Om51bGws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50 ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy KiBuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBRU3RyaW5nICZjYXB0aW9uID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIGRpck9ubHkgPSBUUlVFLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJVRSk7CiAg ICBzdGF0aWMgUVN0cmluZ0xpc3QgZ2V0T3BlbkZpbGVOYW1lcyggY29uc3QgUVN0cmluZyAmZmls dGVyPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFFTdHJpbmcgJmRpciA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCAqcGFyZW50ID0gMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gMCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZjYXB0aW9u ID0gUVN0cmluZzo6bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRU3RyaW5nICpzZWxlY3RlZEZpbHRlciA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlU3ltbGlua3MgPSBUUlVFKTsKCgoKICAgIHN0YXRp YyB2b2lkIHNldEljb25Qcm92aWRlciggUUZpbGVJY29uUHJvdmlkZXIgKiApOwogICAgc3RhdGlj IFFGaWxlSWNvblByb3ZpZGVyICogaWNvblByb3ZpZGVyKCk7CgoKCiAgICBRU3RyaW5nIHNlbGVj dGVkRmlsZSgpIGNvbnN0OwogICAgUVN0cmluZyBzZWxlY3RlZEZpbHRlcigpIGNvbnN0OwogICAg dmlydHVhbCB2b2lkIHNldFNlbGVjdGVkRmlsdGVyKCBjb25zdCBRU3RyaW5nJiApOwogICAgdmly dHVhbCB2b2lkIHNldFNlbGVjdGVkRmlsdGVyKCBpbnQgKTsKCiAgICB2b2lkIHNldFNlbGVjdGlv biggY29uc3QgUVN0cmluZyAmKTsKCiAgICB2b2lkIHNlbGVjdEFsbCggYm9vbCBiICk7CgogICAg UVN0cmluZ0xpc3Qgc2VsZWN0ZWRGaWxlcygpIGNvbnN0OwoKICAgIFFTdHJpbmcgZGlyUGF0aCgp IGNvbnN0OwoKICAgIHZvaWQgc2V0RGlyKCBjb25zdCBRRGlyICYgKTsKICAgIGNvbnN0IFFEaXIg KmRpcigpIGNvbnN0OwoKICAgIHZvaWQgc2V0U2hvd0hpZGRlbkZpbGVzKCBib29sIHMgKTsKICAg IGJvb2wgc2hvd0hpZGRlbkZpbGVzKCkgY29uc3Q7CgogICAgdm9pZCByZXJlYWREaXIoKTsKICAg IHZvaWQgcmVzb3J0RGlyKCk7CgogICAgZW51bSBNb2RlIHsgQW55RmlsZSwgRXhpc3RpbmdGaWxl LCBEaXJlY3RvcnksIEV4aXN0aW5nRmlsZXMsIERpcmVjdG9yeU9ubHkgfTsKICAgIHZvaWQgc2V0 TW9kZSggTW9kZSApOwogICAgTW9kZSBtb2RlKCkgY29uc3Q7CgogICAgZW51bSBWaWV3TW9kZSB7 IERldGFpbCwgTGlzdCB9OwogICAgZW51bSBQcmV2aWV3TW9kZSB7IE5vUHJldmlldywgQ29udGVu dHMsIEluZm8gfTsKICAgIHZvaWQgc2V0Vmlld01vZGUoIFZpZXdNb2RlIG0gKTsKICAgIFZpZXdN b2RlIHZpZXdNb2RlKCkgY29uc3Q7CiAgICB2b2lkIHNldFByZXZpZXdNb2RlKCBQcmV2aWV3TW9k ZSBtICk7CiAgICBQcmV2aWV3TW9kZSBwcmV2aWV3TW9kZSgpIGNvbnN0OwoKICAgIGJvb2wgZXZl bnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCiAgICBib29sIGlzSW5mb1ByZXZpZXdF bmFibGVkKCkgY29uc3Q7CiAgICBib29sIGlzQ29udGVudHNQcmV2aWV3RW5hYmxlZCgpIGNvbnN0 OwogICAgdm9pZCBzZXRJbmZvUHJldmlld0VuYWJsZWQoIGJvb2wgKTsKICAgIHZvaWQgc2V0Q29u dGVudHNQcmV2aWV3RW5hYmxlZCggYm9vbCApOwoKICAgIHZvaWQgc2V0SW5mb1ByZXZpZXcoIFFX aWRnZXQgKncsIFFGaWxlUHJldmlldyAqcHJldmlldyApOwogICAgdm9pZCBzZXRDb250ZW50c1By ZXZpZXcoIFFXaWRnZXQgKncsIFFGaWxlUHJldmlldyAqcHJldmlldyApOwoKICAgIFFVcmwgdXJs KCkgY29uc3Q7CgogICAgdm9pZCBhZGRGaWx0ZXIoIGNvbnN0IFFTdHJpbmcgJmZpbHRlciApOwoK cHVibGljIDoKICAgIHZvaWQgZG9uZSggaW50ICk7CiAgICB2b2lkIHNldERpciggY29uc3QgUVN0 cmluZyYgKTsKICAgIHZvaWQgc2V0VXJsKCBjb25zdCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAg dm9pZCBzZXRGaWx0ZXIoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIHNldEZpbHRlcnMoIGNv bnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIHNldEZpbHRlcnMoIGNvbnN0IGNoYXIgKiogKTsKICAg IHZvaWQgc2V0RmlsdGVycyggY29uc3QgUVN0cmluZ0xpc3QmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2 b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwogICAgdm9pZCBrZXlQcmVzc0V2ZW50 KCBRS2V5RXZlbnQgKiApOwoKICAgIHZvaWQgYWRkV2lkZ2V0cyggUUxhYmVsICosIFFXaWRnZXQg KiwgUVB1c2hCdXR0b24gKiApOwogICAgdm9pZCBhZGRUb29sQnV0dG9uKCBRQnV0dG9uICpiLCBi b29sIHNlcGFyYXRvciA9IEZBTFNFICk7CiAgICB2b2lkIGFkZExlZnRXaWRnZXQoIFFXaWRnZXQg KncgKTsKICAgIHZvaWQgYWRkUmlnaHRXaWRnZXQoIFFXaWRnZXQgKncgKTsKCnByb3RlY3RlZDoK ICAgIHZvaWQgZmlsZUhpZ2hsaWdodGVkKCBjb25zdCBRU3RyaW5nJiApOwogICAgdm9pZCBmaWxl U2VsZWN0ZWQoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIGZpbGVzU2VsZWN0ZWQoIGNvbnN0 IFFTdHJpbmdMaXN0JiApOwogICAgdm9pZCBkaXJFbnRlcmVkKCBjb25zdCBRU3RyaW5nJiApOwog ICAgdm9pZCBmaWx0ZXJTZWxlY3RlZCggY29uc3QgUVN0cmluZyYgKTsKCnByaXZhdGUgOgogICAg dm9pZCBkZXRhaWxWaWV3U2VsZWN0aW9uQ2hhbmdlZCgpOwogICAgdm9pZCBsaXN0Qm94U2VsZWN0 aW9uQ2hhbmdlZCgpOwogICAgdm9pZCBjaGFuZ2VNb2RlKCBpbnQgKTsKICAgIHZvaWQgZmlsZU5h bWVFZGl0UmV0dXJuUHJlc3NlZCgpOwogICAgdm9pZCBzdG9wQ29weSgpOwogICAgdm9pZCByZW1v dmVQcm9ncmVzc0RpYSgpOwoKICAgIHZvaWQgZmlsZVNlbGVjdGVkKCBpbnQgKTsKICAgIHZvaWQg ZmlsZUhpZ2hsaWdodGVkKCBpbnQgKTsKICAgIHZvaWQgZGlyU2VsZWN0ZWQoIGludCApOwogICAg dm9pZCBwYXRoU2VsZWN0ZWQoIGludCApOwoKICAgIHZvaWQgdXBkYXRlRmlsZU5hbWVFZGl0KCBR TGlzdFZpZXdJdGVtICopOwogICAgdm9pZCBzZWxlY3REaXJlY3RvcnlPckZpbGUoIFFMaXN0Vmll d0l0ZW0gKiApOwogICAgdm9pZCBwb3B1cENvbnRleHRNZW51KCBRTGlzdFZpZXdJdGVtICosIGNv bnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIHZvaWQgcG9wdXBDb250ZXh0TWVudSggUUxpc3RCb3hJ dGVtICosIGNvbnN0IFFQb2ludCAmICk7CiAgICB2b2lkIHVwZGF0ZUZpbGVOYW1lRWRpdCggUUxp c3RCb3hJdGVtICopOwogICAgdm9pZCBzZWxlY3REaXJlY3RvcnlPckZpbGUoIFFMaXN0Qm94SXRl bSAqICk7CiAgICB2b2lkIGZpbGVOYW1lRWRpdERvbmUoKTsKCiAgICB2b2lkIG9rQ2xpY2tlZCgp OwogICAgdm9pZCBmaWx0ZXJDbGlja2VkKCk7CiAgICB2b2lkIGNhbmNlbENsaWNrZWQoKTsKCiAg ICB2b2lkIGNkVXBDbGlja2VkKCk7CiAgICB2b2lkIG5ld0ZvbGRlckNsaWNrZWQoKTsKCiAgICB2 b2lkIGZpeHVwTmFtZUVkaXQoKTsKCiAgICB2b2lkIGRvTWltZVR5cGVMb29rdXAoKTsKCiAgICB2 b2lkIHVwZGF0ZUdlb21ldHJpZXMoKTsKICAgIHZvaWQgbW9kZUJ1dHRvbnNEZXN0cm95ZWQoKTsK ICAgIHZvaWQgdXJsU3RhcnQoIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdm9pZCB1cmxG aW5pc2hlZCggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2b2lkIGRhdGFUcmFuc2ZlclBy b2dyZXNzKCBpbnQgYnl0ZXNEb25lLCBpbnQgYnl0ZXNUb3RhbCwgUU5ldHdvcmtPcGVyYXRpb24g KiApOwogICAgdm9pZCBpbnNlcnRFbnRyeSggY29uc3QgUVZhbHVlTGlzdDxRVXJsSW5mbz4gJmZp LCBRTmV0d29ya09wZXJhdGlvbiAqb3AgKTsKICAgIHZvaWQgcmVtb3ZlRW50cnkoIFFOZXR3b3Jr T3BlcmF0aW9uICogKTsKICAgIHZvaWQgY3JlYXRlZERpcmVjdG9yeSggY29uc3QgUVVybEluZm8g JmluZm8sIFFOZXR3b3JrT3BlcmF0aW9uICogKTsKICAgIHZvaWQgaXRlbUNoYW5nZWQoIFFOZXR3 b3JrT3BlcmF0aW9uICogKTsKICAgIHZvaWQgZ29CYWNrKCk7Cgpwcml2YXRlOgogICAgZW51bSBQ b3B1cEFjdGlvbiB7CiAgICAgICAgUEFfT3BlbiA9IDAsCiAgICAgICAgUEFfRGVsZXRlLAogICAg ICAgIFBBX1JlbmFtZSwKICAgICAgICBQQV9Tb3J0TmFtZSwKICAgICAgICBQQV9Tb3J0U2l6ZSwK ICAgICAgICBQQV9Tb3J0VHlwZSwKICAgICAgICBQQV9Tb3J0RGF0ZSwKICAgICAgICBQQV9Tb3J0 VW5zb3J0ZWQsCiAgICAgICAgUEFfQ2FuY2VsLAogICAgICAgIFBBX1JlbG9hZCwKICAgICAgICBQ QV9IaWRkZW4KICAgIH07CgogICAgdm9pZCBpbml0KCk7CiAgICBib29sIHRyeVNldFNlbGVjdGlv biggYm9vbCBpc0RpciwgY29uc3QgUVVybE9wZXJhdG9yICYsIGJvb2wgKTsKICAgIHZvaWQgZGVs ZXRlRmlsZSggY29uc3QgUVN0cmluZyAmZmlsZW5hbWUgKTsKICAgIHZvaWQgcG9wdXBDb250ZXh0 TWVudSggY29uc3QgUVN0cmluZyAmZmlsZW5hbWUsIGJvb2wgd2l0aFNvcnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBvcHVwQWN0aW9uICZhY3Rpb24sIGNvbnN0IFFQb2ludCAmcCApOwog ICAgdm9pZCB1cGRhdGVQcmV2aWV3cyggY29uc3QgUVVybCAmdSApOwoKICAgIFFEaXIgcmVzZXJ2 ZWQ7CiAgICBRU3RyaW5nIGZpbGVOYW1lOwoKICAgIGZyaWVuZCBjbGFzcyBRRmlsZURpYWxvZ1FG aWxlTGlzdFZpZXc7CiAgICBmcmllbmQgY2xhc3MgUUZpbGVMaXN0Qm94OwoKICAgIFFGaWxlRGlh bG9nUHJpdmF0ZSAqZDsKICAgIFFGaWxlRGlhbG9nUUZpbGVMaXN0VmlldyAqZmlsZXM7CgogICAg UUxpbmVFZGl0ICpuYW1lRWRpdDsKICAgIFFQdXNoQnV0dG9uICpva0I7CiAgICBRUHVzaEJ1dHRv biAqY2FuY2VsQjsKIyAzMzEgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZmlsZWRpYWxv Zy5oIgpwcml2YXRlOgoKICAgIFFGaWxlRGlhbG9nKCBjb25zdCBRRmlsZURpYWxvZyAmICk7CiAg ICBRRmlsZURpYWxvZyAmb3BlcmF0b3I9KCBjb25zdCBRRmlsZURpYWxvZyAmICk7Cgp9OwojIDI3 ICJUeFZvcnBhbEdVSS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWhn cm91cGJveC5oIiAxCiMgNDIgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGdyb3VwYm94 LmgiCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3Fncm91cGJveC5oIiAxCiMgNDgg Ii91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xZ3JvdXBib3guaCIKY2xhc3MgUUFjY2VsOwpj bGFzcyBRR3JvdXBCb3hQcml2YXRlOwpjbGFzcyBRVkJveExheW91dDsKY2xhc3MgUUdyaWRMYXlv dXQ7CmNsYXNzIFFTcGFjZXJJdGVtOwoKY2xhc3MgUUdyb3VwQm94IDogcHVibGljIFFGcmFtZQp7 CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJl dHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo KSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJv b2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50 LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBR VmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBp bnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVj dCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGlj IFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0 cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBz dGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgIAogICAKICAgCiAgIAogICAKCnB1YmxpYzoK ICAgIFFHcm91cEJveCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwog ICAgUUdyb3VwQm94KCBjb25zdCBRU3RyaW5nICZ0aXRsZSwKICAgICAgICAgICAgICAgUVdpZGdl dCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUdyb3VwQm94KCBpbnQgc3Ry aXBzLCBPcmllbnRhdGlvbiBvLAogICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29u c3QgY2hhciogbmFtZT0wICk7CiAgICBRR3JvdXBCb3goIGludCBzdHJpcHMsIE9yaWVudGF0aW9u IG8sIGNvbnN0IFFTdHJpbmcgJnRpdGxlLAogICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQ9 MCwgY29uc3QgY2hhciogbmFtZT0wICk7CgogICAgdmlydHVhbCB2b2lkIHNldENvbHVtbkxheW91 dChpbnQgc3RyaXBzLCBPcmllbnRhdGlvbiBvKTsKCiAgICBRU3RyaW5nIHRpdGxlKCkgY29uc3Qg eyByZXR1cm4gc3RyOyB9CiAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoIGNvbnN0IFFTdHJpbmcg Jik7CgogICAgaW50IGFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIGFsaWduOyB9CiAgICB2aXJ0 dWFsIHZvaWQgc2V0QWxpZ25tZW50KCBpbnQgKTsKCiAgICBpbnQgY29sdW1ucygpIGNvbnN0Owog ICAgdm9pZCBzZXRDb2x1bW5zKCBpbnQgKTsKCiAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigp IGNvbnN0IHsgcmV0dXJuIGRpcjsgfQogICAgdm9pZCBzZXRPcmllbnRhdGlvbiggT3JpZW50YXRp b24gKTsKCiAgICBpbnQgaW5zaWRlTWFyZ2luKCkgY29uc3Q7CiAgICBpbnQgaW5zaWRlU3BhY2lu ZygpIGNvbnN0OwogICAgdm9pZCBzZXRJbnNpZGVNYXJnaW4oIGludCBtICk7CiAgICB2b2lkIHNl dEluc2lkZVNwYWNpbmcoIGludCBzICk7CgogICAgdm9pZCBhZGRTcGFjZSggaW50ICk7CiAgICBR U2l6ZSBzaXplSGludCgpIGNvbnN0OwoKICAgIGJvb2wgaXNGbGF0KCkgY29uc3Q7CiAgICB2b2lk IHNldEZsYXQoIGJvb2wgYiApOwoKcHJvdGVjdGVkOgogICAgYm9vbCBldmVudCggUUV2ZW50ICog KTsKICAgIHZvaWQgY2hpbGRFdmVudCggUUNoaWxkRXZlbnQgKiApOwogICAgdm9pZCByZXNpemVF dmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQg KiApOwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9u dENoYW5nZSggY29uc3QgUUZvbnQgJiApOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGZpeEZvY3VzKCk7 Cgpwcml2YXRlOgogICAgdm9pZCBza2lwKCk7CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgY2Fs Y3VsYXRlRnJhbWUoKTsKICAgIHZvaWQgaW5zZXJ0V2lkKCBRV2lkZ2V0KiApOwogICAgdm9pZCBz ZXRUZXh0U3BhY2VyKCk7CgogICAgUVN0cmluZyBzdHI7CiAgICBpbnQgYWxpZ247CiAgICBpbnQg bGVudmlzaWJsZTsKCiAgICBRQWNjZWwgKiBhY2NlbDsKCiAgICBRR3JvdXBCb3hQcml2YXRlICog ZDsKCiAgICBRVkJveExheW91dCAqdmJveDsKICAgIFFHcmlkTGF5b3V0ICpncmlkOwogICAgaW50 IHJvdzsKICAgIGludCBjb2wgOiAzMDsKICAgIHVpbnQgYkZsYXQgOiAxOwogICAgaW50IG5Sb3dz LCBuQ29sczsKICAgIE9yaWVudGF0aW9uIGRpcjsKICAgIGludCBzcGFjLCBtYXJnOwoKcHJpdmF0 ZToKCiAgICBRR3JvdXBCb3goIGNvbnN0IFFHcm91cEJveCAmICk7CiAgICBRR3JvdXBCb3ggJm9w ZXJhdG9yPSggY29uc3QgUUdyb3VwQm94ICYgKTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xaGdyb3VwYm94LmgiIDIKCgoKCmNsYXNzIFFIR3JvdXBCb3ggOiBwdWJsaWMg UUdyb3VwQm94CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgp IGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIg KmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7 IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx dF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBp ZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBR T2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0 aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhp czsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7 IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7 IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhHcm91 cEJveCggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUhHcm91 cEJveCggY29uc3QgUVN0cmluZyAmdGl0bGUsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFy KiBuYW1lPTAgKTsKICAgIH5RSEdyb3VwQm94KCk7Cgpwcml2YXRlOgoKICAgIFFIR3JvdXBCb3go IGNvbnN0IFFIR3JvdXBCb3ggJiApOwogICAgUUhHcm91cEJveCAmb3BlcmF0b3I9KCBjb25zdCBR SEdyb3VwQm94ICYgKTsKCn07CiMgMjggIlR4Vm9ycGFsR1VJLmNwcCIgMgoKIyAxICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWN1cnNvci5oIiAxCiMgNjUgIi91c3IvbG9jYWwvcXQtMy4x LjEvaW5jbHVkZS9xY3Vyc29yLmgiCnN0cnVjdCBRQ3Vyc29yRGF0YTsKCgpjbGFzcyBRQ3Vyc29y IDogcHVibGljIFF0CnsKcHVibGljOgogICAgUUN1cnNvcigpOwogICAgUUN1cnNvciggaW50IHNo YXBlICk7CiAgICBRQ3Vyc29yKCBjb25zdCBRQml0bWFwICZiaXRtYXAsIGNvbnN0IFFCaXRtYXAg Jm1hc2ssCiAgICAgICAgICAgICBpbnQgaG90WD0tMSwgaW50IGhvdFk9LTEgKTsKICAgIFFDdXJz b3IoIGNvbnN0IFFQaXhtYXAgJnBpeG1hcCwKICAgICAgICAgICAgIGludCBob3RYPS0xLCBpbnQg aG90WT0tMSApOwogICAgUUN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgIH5RQ3Vyc29yKCk7 CiAgICBRQ3Vyc29yICZvcGVyYXRvcj0oIGNvbnN0IFFDdXJzb3IgJiApOwoKICAgIGludCBzaGFw ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTaGFwZSggaW50ICk7CgogICAgY29uc3QgUUJpdG1hcCAq Yml0bWFwKCkgY29uc3Q7CiAgICBjb25zdCBRQml0bWFwICptYXNrKCkgY29uc3Q7CiAgICBRUG9p bnQgaG90U3BvdCgpIGNvbnN0OwoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgoK CiAgICBzdGF0aWMgUVBvaW50IHBvcygpOwogICAgc3RhdGljIHZvaWQgc2V0UG9zKCBpbnQgeCwg aW50IHkgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBvcyggY29uc3QgUVBvaW50ICYgKTsKCiAgICBz dGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7CgoKICAg IHN0YXRpYyBpbnQgeDExU2NyZWVuKCk7Cgpwcml2YXRlOgogICAgdm9pZCBzZXRCaXRtYXAoIGNv bnN0IFFCaXRtYXAgJmJpdG1hcCwgY29uc3QgUUJpdG1hcCAmbWFzaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGhvdFgsIGludCBob3RZICk7CiAgICB2b2lkIHVwZGF0ZSgp IGNvbnN0OwogICAgUUN1cnNvckRhdGEgKmRhdGE7CiAgICBRQ3Vyc29yICpmaW5kX2N1cihpbnQp OwoKCgp9OwojIDEyNyAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FjdXJzb3IuaCIKdHlw ZWRlZiBRdDo6Q3Vyc29yU2hhcGUgUUN1cnNvclNoYXBlOwojIDEzOCAiL3Vzci9sb2NhbC9xdC0z LjEuMS9pbmNsdWRlL3FjdXJzb3IuaCIKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0 cmVhbSAmLCBjb25zdCBRQ3Vyc29yICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0 YVN0cmVhbSAmLCBRQ3Vyc29yICYgKTsKCgoKCmlubGluZSB2b2lkIFFDdXJzb3I6OnNldFBvcygg Y29uc3QgUVBvaW50ICZwICkKewogICAgc2V0UG9zKCBwLngoKSwgcC55KCkgKTsKfQojIDMwICJU eFZvcnBhbEdVSS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcXRhYndp ZGdldC5oIiAxCiMgNDggIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xdGFid2lkZ2V0Lmgi CmNsYXNzIFFUYWJCYXI7CmNsYXNzIFFUYWJXaWRnZXREYXRhOwpjbGFzcyBRVGFiOwpjbGFzcyBR V2lkZ2V0U3RhY2s7CgoKY2xhc3MgUVRhYldpZGdldCA6IHB1YmxpYyBRV2lkZ2V0CnsKICAgIHB1 YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0 YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0 OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9p bnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2Jq ZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFWYXJpYW50 KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGludCwgaW50 LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7IFFP YmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmlu ZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRy VXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0YXRpYyBR TWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAoKcHVi bGljOgogICAgUVRhYldpZGdldCggUVdpZGdldCAqcGFyZW50ID0gMCwgY29uc3QgY2hhciAqbmFt ZSA9IDAsIFdGbGFncyBmID0gMCApOwogICAgflFUYWJXaWRnZXQoKTsKCiAgICB2aXJ0dWFsIHZv aWQgYWRkVGFiKCBRV2lkZ2V0ICosIGNvbnN0IFFTdHJpbmcgJiApOwogICAgdmlydHVhbCB2b2lk IGFkZFRhYiggUVdpZGdldCAqY2hpbGQsIGNvbnN0IFFJY29uU2V0JiBpY29uc2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmbGFiZWwgKTsKICAgIHZpcnR1YWwgdm9p ZCBhZGRUYWIoIFFXaWRnZXQgKiwgUVRhYiogKTsKCiAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0VGFi KCBRV2lkZ2V0ICosIGNvbnN0IFFTdHJpbmcgJiwgaW50IGluZGV4ID0gLTEgKTsKICAgIHZpcnR1 YWwgdm9pZCBpbnNlcnRUYWIoIFFXaWRnZXQgKmNoaWxkLCBjb25zdCBRSWNvblNldCYgaWNvbnNl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJmxhYmVsLCBpbnQg aW5kZXggPSAtMSApOwogICAgdmlydHVhbCB2b2lkIGluc2VydFRhYiggUVdpZGdldCAqLCBRVGFi KiwgaW50IGluZGV4ID0gLTEgKTsKCiAgICB2b2lkIGNoYW5nZVRhYiggUVdpZGdldCAqLCBjb25z dCBRU3RyaW5nICYpOwogICAgdm9pZCBjaGFuZ2VUYWIoIFFXaWRnZXQgKmNoaWxkLCBjb25zdCBR SWNvblNldCYgaWNvbnNldCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZsYWJl bCApOwoKICAgIGJvb2wgaXNUYWJFbmFibGVkKCBRV2lkZ2V0ICogKSBjb25zdDsKICAgIHZvaWQg c2V0VGFiRW5hYmxlZCggUVdpZGdldCAqLCBib29sICk7CgogICAgUVN0cmluZyB0YWJMYWJlbCgg UVdpZGdldCAqICkgY29uc3Q7CiAgICB2b2lkIHNldFRhYkxhYmVsKCBRV2lkZ2V0ICpwLCBjb25z dCBRU3RyaW5nICZsICk7CgogICAgUUljb25TZXQgdGFiSWNvblNldCggUVdpZGdldCAqIHcgKSBj b25zdDsKICAgIHZvaWQgc2V0VGFiSWNvblNldCggUVdpZGdldCAqIHcsIGNvbnN0IFFJY29uU2V0 ICYgaWNvbnNldCApOwoKICAgIHZvaWQgcmVtb3ZlVGFiVG9vbFRpcCggUVdpZGdldCAqIHcgKTsK ICAgIHZvaWQgc2V0VGFiVG9vbFRpcCggUVdpZGdldCAqIHcsIGNvbnN0IFFTdHJpbmcgJiB0aXAg KTsKICAgIFFTdHJpbmcgdGFiVG9vbFRpcCggUVdpZGdldCAqIHcgKSBjb25zdDsKCiAgICBRV2lk Z2V0ICogY3VycmVudFBhZ2UoKSBjb25zdDsKICAgIFFXaWRnZXQgKnBhZ2UoIGludCApIGNvbnN0 OwogICAgUVN0cmluZyBsYWJlbCggaW50ICkgY29uc3Q7CiAgICBpbnQgY3VycmVudFBhZ2VJbmRl eCgpIGNvbnN0OwogICAgaW50IGluZGV4T2YoIFFXaWRnZXQgKiApIGNvbnN0OwoKICAgIFFTaXpl IHNpemVIaW50KCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZUhpbnQoKSBjb25zdDsKCiAg ICBlbnVtIFRhYlBvc2l0aW9uIHsgVG9wLCBCb3R0b20gfTsKICAgIFRhYlBvc2l0aW9uIHRhYlBv c2l0aW9uKCkgY29uc3Q7CiAgICB2b2lkIHNldFRhYlBvc2l0aW9uKCBUYWJQb3NpdGlvbiApOwoK ICAgIGVudW0gVGFiU2hhcGUgeyBSb3VuZGVkLCBUcmlhbmd1bGFyIH07CiAgICBUYWJTaGFwZSB0 YWJTaGFwZSgpIGNvbnN0OwogICAgdm9pZCBzZXRUYWJTaGFwZSggVGFiU2hhcGUgcyApOwoKICAg IGludCBtYXJnaW4oKSBjb25zdDsKICAgIHZvaWQgc2V0TWFyZ2luKCBpbnQgKTsKCiAgICBpbnQg Y291bnQoKSBjb25zdDsKCnB1YmxpYyA6CiAgICB2b2lkIHNldEN1cnJlbnRQYWdlKCBpbnQgKTsK ICAgIHZpcnR1YWwgdm9pZCBzaG93UGFnZSggUVdpZGdldCAqICk7CiAgICB2aXJ0dWFsIHZvaWQg cmVtb3ZlUGFnZSggUVdpZGdldCAqICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNob3dFdmVudCgg UVNob3dFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKiApOwog ICAgdm9pZCBzZXRUYWJCYXIoIFFUYWJCYXIgKiApOwogICAgUVRhYkJhciogdGFiQmFyKCkgY29u c3Q7CiAgICB2b2lkIHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7CiAgICB2b2lkIHVwZGF0ZU1hc2so KTsKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCnByb3RlY3Rl ZDoKICAgIHZvaWQgY3VycmVudENoYW5nZWQoIFFXaWRnZXQgKiApOwoKICAgIHZvaWQgc2VsZWN0 ZWQoIGNvbnN0IFFTdHJpbmcmICk7CgoKcHJpdmF0ZSA6CiAgICB2b2lkIHNob3dUYWIoIGludCBp ICk7Cgpwcml2YXRlOgogICAgUVRhYldpZGdldERhdGEgKmQ7CiAgICB2b2lkIHNldFVwTGF5b3V0 KCBib29sID0gRkFMU0UgKTsKCiAgICBmcmllbmQgY2xhc3MgUVRhYkRpYWxvZzsKCnByaXZhdGU6 CgogICAgUVRhYldpZGdldCggY29uc3QgUVRhYldpZGdldCAmICk7CiAgICBRVGFiV2lkZ2V0JiBv cGVyYXRvcj0oIGNvbnN0IFFUYWJXaWRnZXQgJiApOwoKfTsKIyAzMSAiVHhWb3JwYWxHVUkuY3Bw IiAyCiMgMSAiL3Vzci9sb2NhbC9xdC0zLjEuMS9pbmNsdWRlL3FoYnV0dG9uZ3JvdXAuaCIgMQoj IDQyICIvdXNyL2xvY2FsL3F0LTMuMS4xL2luY2x1ZGUvcWhidXR0b25ncm91cC5oIgojIDEgIi91 c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xYnV0dG9uZ3JvdXAuaCIgMQojIDQ4ICIvdXNyL2xv Y2FsL3F0LTMuMS4xL2luY2x1ZGUvcWJ1dHRvbmdyb3VwLmgiCmNsYXNzIFFCdXR0b247CmNsYXNz IFFCdXR0b25MaXN0OwoKCmNsYXNzIFFCdXR0b25Hcm91cCA6IHB1YmxpYyBRR3JvdXBCb3gKewog ICAgcHVibGljOiB2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1 cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IHZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkg Y29uc3Q7IHZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29s IHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwg UVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50IGlkLCBpbnQgZiwgUVZh cmlhbnQqIHYpOyBzdGF0aWMgYm9vbCBxdF9zdGF0aWNfcHJvcGVydHkoIFFPYmplY3QqICwgaW50 LCBpbnQsIFFWYXJpYW50KiApOyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3Qo KTsgUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBR U3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJp bmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgcHJpdmF0ZTogc3Rh dGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwogICAKICAgCgpwdWJsaWM6CiAgICBRQnV0dG9uR3Jv dXAoIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25H cm91cCggY29uc3QgUVN0cmluZyAmdGl0bGUsCiAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHBh cmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25Hcm91cCggaW50IGNvbHVt bnMsIE9yaWVudGF0aW9uIG8sCiAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHBhcmVudD0wLCBj b25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFCdXR0b25Hcm91cCggaW50IGNvbHVtbnMsIE9yaWVu dGF0aW9uIG8sIGNvbnN0IFFTdHJpbmcgJnRpdGxlLAogICAgICAgICAgICAgICAgICBRV2lkZ2V0 KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UUJ1dHRvbkdyb3VwKCk7Cgog ICAgYm9vbCBpc0V4Y2x1c2l2ZSgpIGNvbnN0OwogICAgYm9vbCBpc1JhZGlvQnV0dG9uRXhjbHVz aXZlKCkgY29uc3QgeyByZXR1cm4gcmFkaW9fZXhjbDsgfQogICAgdmlydHVhbCB2b2lkIHNldEV4 Y2x1c2l2ZSggYm9vbCApOwogICAgdmlydHVhbCB2b2lkIHNldFJhZGlvQnV0dG9uRXhjbHVzaXZl KCBib29sICk7CgpwdWJsaWM6CiAgICBpbnQgaW5zZXJ0KCBRQnV0dG9uICosIGludCBpZD0tMSAp OwogICAgdm9pZCByZW1vdmUoIFFCdXR0b24gKiApOwogICAgUUJ1dHRvbiAqZmluZCggaW50IGlk ICkgY29uc3Q7CiAgICBpbnQgaWQoIFFCdXR0b24gKiApIGNvbnN0OwogICAgaW50IGNvdW50KCkg Y29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvbiggaW50IGlkICk7CgogICAgdmlydHVh bCB2b2lkIG1vdmVGb2N1cyggaW50ICk7CgogICAgUUJ1dHRvbiAqc2VsZWN0ZWQoKSBjb25zdDsK CnByb3RlY3RlZDoKICAgIHZvaWQgcHJlc3NlZCggaW50IGlkICk7CiAgICB2b2lkIHJlbGVhc2Vk KCBpbnQgaWQgKTsKICAgIHZvaWQgY2xpY2tlZCggaW50IGlkICk7Cgpwcm90ZWN0ZWQgOgogICAg dm9pZCBidXR0b25QcmVzc2VkKCk7CiAgICB2b2lkIGJ1dHRvblJlbGVhc2VkKCk7CiAgICB2b2lk IGJ1dHRvbkNsaWNrZWQoKTsKICAgIHZvaWQgYnV0dG9uVG9nZ2xlZCggYm9vbCBvbiApOwoKcHJv dGVjdGVkOgogICAgYm9vbCBldmVudCggUUV2ZW50ICogZSApOwoKcHJpdmF0ZToKICAgIHZvaWQg aW5pdCgpOwogICAgYm9vbCBleGNsX2dycDsKICAgIGJvb2wgcmFkaW9fZXhjbDsKICAgIFFCdXR0 b25MaXN0ICpidXR0b25zOwoKcHJpdmF0ZToKCiAgICBRQnV0dG9uR3JvdXAoIGNvbnN0IFFCdXR0 b25Hcm91cCAmICk7CiAgICBRQnV0dG9uR3JvdXAgJm9wZXJhdG9yPSggY29uc3QgUUJ1dHRvbkdy b3VwICYgKTsKCn07CiMgNDMgIi91c3IvbG9jYWwvcXQtMy4xLjEvaW5jbHVkZS9xaGJ1dHRvbmdy b3VwLmgiIDIKCgoKCmNsYXNzIFFIQnV0dG9uR3JvdXAgOiBwdWJsaWMgUUJ1dHRvbkdyb3VwCnsK ICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0 dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp IGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9v bCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQs IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFW YXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGlu dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0 KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0 YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUhCdXR0b25Hcm91cCggUVdp ZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUUhCdXR0b25Hcm91cCgg Y29uc3QgUVN0cmluZyAmdGl0bGUsIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1l PTAgKTsKICAgIH5RSEJ1dHRvbkdyb3VwKCk7Cgpwcml2YXRlOgoKICAgIFFIQnV0dG9uR3JvdXAo IGNvbnN0IFFIQnV0dG9uR3JvdXAgJiApOwogICAgUUhCdXR0b25Hcm91cCAmb3BlcmF0b3I9KCBj b25zdCBRSEJ1dHRvbkdyb3VwICYgKTsKCn07CiMgMzIgIlR4Vm9ycGFsR1VJLmNwcCIgMgoKCgoK c3RhdGljIGNvbnN0IGNoYXIgKiBwMV94cG1bXSA9IHsKIjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIs CiIuCWMgIzAwMDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZGRkZGMDAwMCIsCiIgICAgICAgICAgICAg ICAgIiwKIiAgICAgICAgICAgICAgICAiLAoiICAgICAgICAgLi4uLiAgICIsCiIgICAgICAgIC5Y WFhYLiAgIiwKIiAuLi4uLi4uLi4uLi4uLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIgLlhYWFhY WFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIgLlhY WFhYWFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC5YWFhYWFhYWFhYWFguICIsCiIg LlhYWFhYWFhYWFhYWC4gIiwKIiAuWFhYWFhYWFhYWFhYLiAiLAoiIC4uLi4uLi4uLi4uLi4uICIs CiIgICAgICAgICAgICAgICAgIn07CgoKc3RhdGljIGNvbnN0IGNoYXIgKiBwMl94cG1bXSA9IHsK IjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIsCiIuCWMgIzAwMDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZG RkZGRkZGRiIsCiIgICAgICAgICAgICAgICAgIiwKIiAgIC4uLi4uLiAgICAgICAiLAoiICAgLlhY WC5YLiAgICAgICIsCiIgICAuWFhYLlhYLiAgICAgIiwKIiAgIC5YWFguWFhYLiAgICAiLAoiICAg LlhYWC4uLi4uICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC5YWFhYWFhYLiAgICAiLAoi ICAgLlhYWFhYWFguICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC5YWFhYWFhYLiAgICAi LAoiICAgLlhYWFhYWFguICAgICIsCiIgICAuWFhYWFhYWC4gICAgIiwKIiAgIC4uLi4uLi4uLiAg ICAiLAoiICAgICAgICAgICAgICAgICIsCiIgICAgICAgICAgICAgICAgIn07CgoKc3RhdGljIGNv bnN0IGNoYXIgKiBwM194cG1bXSA9IHsKIjE2IDE2IDMgMSIsCiIgCWMgTm9uZSIsCiIuCWMgIzAw MDAwMDAwMDAwMCIsCiJYCWMgI0ZGRkZGRkZGRkZGRiIsCiIgICAgICAgICAgICAgICAgIiwKIiAg ICAgICAgICAgICAgICAiLAoiICAgLi4uLi4uLi4uICAgICIsCiIgIC4uLi4uLi4uLi4uICAgIiwK IiAgLi4uLi4uLi4gLi4gICAiLAoiICAuLi4uLi4uLi4uLiAgICIsCiIgIC4uLi4uLi4uLi4uICAg IiwKIiAgLi4uLi4uLi4uLi4gICAiLAoiICAuLi4uLi4uLi4uLiAgICIsCiIgIC4uLlhYWFhYLi4u ICAgIiwKIiAgLi4uWFhYWFguLi4gICAiLAoiICAuLi5YWFhYWC4uLiAgICIsCiIgIC4uLlhYWFhY Li4uICAgIiwKIiAgIC4uLi4uLi4uLiAgICAiLAoiICAgICAgICAgICAgICAgICIsCiIgICAgICAg ICAgICAgICAgIn07CgoKCnN0YXRpYyBRQ2FudmFzICpsaW5lQ2FudmFzOwoKUUxhYmVsICpUeFZv cnBhbEdVSTo6cG9pbnRlciwKICAgICAgICpUeFZvcnBhbEdVSTo6aG92ZXI7CgoKc3RhdGljIGNv bnN0IFFQZW4gKmdyaWRQZW47CgoKVHhxRWRpdFRhYmxlICpUeFZvcnBhbEdVSTo6dGFibGU7CgoK c3RhdGljIFR4Vm9ycGFsR1VJICp3aW5kb3c7CgoKUVRhYmxlICpUeFZvcnBhbEdVSTo6dHJlZTsK CnVuc2lnbmVkIGludCBUeFZvcnBhbEdVSTo6cmlnaHQsCiAgICAgICAgICAgICBUeFZvcnBhbEdV STo6Ym90dG9tOwoKCnN0YXRpYyBpbnQgcGxhY2U7CgoKc3RhdGljIFFDb21ib0JveCAqcGlja1Bh cmVudDsKCgoKaW50IFR4Vm9ycGFsR1VJOjpnZXRQbGFjZSAoKQp7CiAgcmV0dXJuIHBsYWNlOwp9 CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNldFBsYWNlIChjb25zdCBpbnQgbmV3UGxhY2UpCnsKICBw bGFjZSA9IG5ld1BsYWNlOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNldEJvdW5kcyAoUUNhbnZh c1JlY3RhbmdsZSAmcmVjdGFuZ2xlLCBjb25zdCBUeEhpZXJBdHRyaWJTZXQgJmRhdGEpCnsKICBz dGQ6OnZlY3RvcjxpbnQ+IHNpemUgPSBkYXRhLmdldE9wdFZlYygibG93ZXJCb3VuZHMiKTsKICBj b25zdCBpbnQgeG1pbiA9IHNpemVbMF0sCiAgICAgICAgICAgIHltaW4gPSBzaXplWzFdOwogIHNp emUgPSBkYXRhLmdldE9wdFZlYygidXBwZXJCb3VuZHMiKTsKICByZWN0YW5nbGUubW92ZSh4bWlu KnNjYWxlK3BhZCx5bWluKnNjYWxlK3BhZCk7CiAgcmVjdGFuZ2xlLnNldFNpemUoc2NhbGUqKHNp emVbMF0teG1pbiksc2NhbGUqKHNpemVbMV0teW1pbikpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6 OmRvUGljayAoY29uc3QgdW5zaWduZWQgaW50IHBhcnQpCnsKICBjb25zdCBpbnQgY29sdW1uID0g dHJlZS0+dGV4dChwYXJ0LDEpLmlzTnVsbCgpPyAyIDogMTsKICB3aW5kb3ctPnRhYmxlUGljayhw YXJ0LGNvbHVtbik7CiAgdHJlZS0+c2V0Q3VycmVudENlbGwocGFydCxjb2x1bW4pOwogIHRyZWUt PmVuc3VyZUNlbGxWaXNpYmxlKHBhcnQsY29sdW1uKTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjp0 YWJsZVBpY2sgKGNvbnN0IGludCByb3csIGludCApCnsKICAgaWYgKHRyZWUtPm51bVJvd3MoKSkK ICAgICAgdGFibGUtPnNldEF0dHJpYnV0ZSgmVHhQYXJ0OjpnZXRBbGxQYXJ0cygpW3Jvd10uZ2V0 RGF0YSgpKTsKfQoKCnN0YXRpYyBRUHVzaEJ1dHRvbiAqdG9vbEJ1dHRvbnNbMl1bNV07CgoKCnZv aWQgVHhWb3JwYWxHVUk6OmNvbWJvUGljayAoY29uc3QgaW50IGlkeCkKewogICBjb25zdCBRU3Ry aW5nIHBhcmVudCA9IHBpY2tQYXJlbnQtPmN1cnJlbnRUZXh0KCk7CiAgIGNvbnN0IGJvb2wgc3Bl Y2llc0ZsYWdzW10gPSB7IGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UgfSwKICAgICAg ICAgICAgICBmbHVpZEZsYWdzW10gPSB7IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Ug fSwKICAgICAgICAgICAgICBmaWVsZEZsYWdzW10gPSB7IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSwgdHJ1ZSB9LAogICAgICAgICAgICAgIG5vRmxhZ3NbXSA9IHsgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlIH0sCiAgICAgICAgICAgICAgKmZsYWdzID0gMD5pZHg/IG5vRmxhZ3Mg OiBwYXJlbnQuZW5kc1dpdGgoIihTcGVjaWVzKSIpPyBzcGVjaWVzRmxhZ3MgOiBwYXJlbnQuZW5k c1dpdGgoIihGbHVpZCkiKT8gZmx1aWRGbGFncyA6IGZpZWxkRmxhZ3M7CiAgIGZvciAoaW50IGlk eCA9IDU7IDA8aWR4LS07IHRvb2xCdXR0b25zWzBdW2lkeF0tPnNldEVuYWJsZWQoZmxhZ3NbaWR4 XSkpOwp9CgoKCnN0YXRpYyBjb25zdCBRQnJ1c2ggKnNvdXJjZUJydXNoOwoKCnN0cnVjdCBUeFRy ZWUgOiBRVGFibGUKewogIFR4VHJlZSAoUUhCb3ggJmJyb3dzZSkKICAgICAgOiBRVGFibGUobmV3 IFFIR3JvdXBCb3goIkNvbnRhaW5tZW50IGhpZXJhcmNoeToiLCZicm93c2UpKQogIHsKICAgIHNl dE51bUNvbHMoMyk7CiAgfQoKCiAgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKmNvbnN0 IGtleXN0cm9rZSkKICB7CnN0ZDo6Y291dDw8Inh4eEtFWTogICI8PGtleXN0cm9rZS0+a2V5KCk8 PCdcbic7CiAgfQp9CgoKClR4Vm9ycGFsR1VJOjpUeFZvcnBhbEdVSSAoKQp7CiAgICB3aW5kb3cg PSB0aGlzOwogICAgUVBpeG1hcCBwMSggcDFfeHBtICk7CiAgICBRUGl4bWFwIHAyKCBwMl94cG0g KTsKICAgIFFQaXhtYXAgcDMoIHAzX3hwbSApOwoKICAgIFFQb3B1cE1lbnUgKmZpbGUgPSBuZXcg UVBvcHVwTWVudSggdGhpcyApOwogICAgKHF0X2NoZWNrX3BvaW50ZXIoKGZpbGUpPT0wLCJUeFZv cnBhbEdVSS5jcHAiLDIyMikpOwogICAgZmlsZS0+aW5zZXJ0SXRlbSggcDEsICImT3BlbiIsIHRo aXMsICIxIiJvcGVuKCkiLCBDVFJMK0tleV9PICk7CiAgICBmaWxlLT5pbnNlcnRJdGVtKCBwMiwg IiZOZXciLCB0aGlzLCAiMSIibmV3cygpIiwgQ1RSTCtLZXlfTiApOwogICAgZmlsZS0+aW5zZXJ0 SXRlbSggcDMsICImU2F2ZSIsIHRoaXMsICIxIiJzYXZlKCkiLCBDVFJMK0tleV9TICk7CiAgICBm aWxlLT5pbnNlcnRJdGVtKCJTYXZlICZBcyIsIHRoaXMsICIxIiJzYXZlQXMoKSIsIENUUkwrS2V5 X0EgKTsKICAgIGZpbGUtPmluc2VydFNlcGFyYXRvcigpOwogICAgZmlsZS0+aW5zZXJ0SXRlbSgg IkUmeGl0IiwgcUFwcCwgIjEiInF1aXQoKSIsIENUUkwrS2V5X1EgKTsKCiAgICBRUG9wdXBNZW51 ICplZGl0ID0gbmV3IFFQb3B1cE1lbnUoIHRoaXMgKTsKICAgIChxdF9jaGVja19wb2ludGVyKChl ZGl0KT09MCwiVHhWb3JwYWxHVUkuY3BwIiwyMzEpKTsKICAgIGludCB1bmRvSUQgPSBlZGl0LT5p bnNlcnRJdGVtKCAiJlVuZG8iLCB0aGlzLCAiMSIidW5kbygpIiApOwogICAgaW50IHJlZG9JRCA9 IGVkaXQtPmluc2VydEl0ZW0oICImUmVkbyIsIHRoaXMsICIxIiJyZWRvKCkiICk7CiAgICBlZGl0 LT5zZXRJdGVtRW5hYmxlZCggdW5kb0lELCBGQUxTRSApOwogICAgZWRpdC0+c2V0SXRlbUVuYWJs ZWQoIHJlZG9JRCwgRkFMU0UgKTsKCiAgICBRUG9wdXBNZW51ICpoZWxwID0gbmV3IFFQb3B1cE1l bnUoIHRoaXMgKTsKICAgIChxdF9jaGVja19wb2ludGVyKChoZWxwKT09MCwiVHhWb3JwYWxHVUku Y3BwIiwyMzgpKTsKICAgIGhlbHAtPmluc2VydEl0ZW0oICImQWJvdXQiLCB0aGlzLCAiMSIiYWJv dXQoKSIsIENUUkwrS2V5X0ggKTsKCiAgICBtZW51ID0gbmV3IFFNZW51QmFyKCB0aGlzICk7CiAg ICAocXRfY2hlY2tfcG9pbnRlcigobWVudSk9PTAsIlR4Vm9ycGFsR1VJLmNwcCIsMjQyKSk7CiAg ICBtZW51LT5pbnNlcnRJdGVtKCAiJkZpbGUiLCBmaWxlICk7CiAgICBtZW51LT5pbnNlcnRJdGVt KCAiJkVkaXQiLCBlZGl0ICk7CiAgICBtZW51LT5pbnNlcnRTZXBhcmF0b3IoKTsKICAgIG1lbnUt Pmluc2VydEl0ZW0oICImSGVscCIsIGhlbHAgKTsKICAgIG1lbnUtPnNldFNlcGFyYXRvciggUU1l bnVCYXI6OkluV2luZG93c1N0eWxlICk7CgogICAgUVZCb3ggJnZib3ggPSAqbmV3IFFWQm94KHRo aXMpOwogICAgUUhCb3ggJmJyb3dzZSA9ICpuZXcgUUhCb3goJnZib3gpOwogICAgKHRyZWUgPSBu ZXcgUVRhYmxlKG5ldyBRSEdyb3VwQm94KCJDb250YWlubWVudCBoaWVyYXJjaHk6IiwmYnJvd3Nl KSkpLT5zZXROdW1Db2xzKDMpOwogICAgdHJlZS0+c2V0U29ydGluZyhmYWxzZSk7CiAgICB0cmVl LT5zZXRSZWFkT25seSh0cnVlKTsKICAgIHRyZWUtPnNldFNlbGVjdGlvbk1vZGUodHJlZS0+U2lu Z2xlUm93KTsKICAgIFFIZWFkZXIgJmhlYWRlciA9ICp0cmVlLT5ob3Jpem9udGFsSGVhZGVyKCk7 CiAgICBoZWFkZXIuc2V0TGFiZWwoMCwiTGVnZW5kIik7CiAgICBoZWFkZXIuc2V0TGFiZWwoMSwi UGFyZW50Iik7CiAgICBoZWFkZXIuc2V0TGFiZWwoMiwiQ2hpbGQiKTsKICAgIGNvbm5lY3QodHJl ZSwiMiIiY3VycmVudENoYW5nZWQoaW50LGludCkiLHRoaXMsIjEiInRhYmxlUGljayhpbnQsaW50 KSIpOwogICAgKHRhYmxlID0gbmV3IFR4cUVkaXRUYWJsZShuZXcgUUhHcm91cEJveCgiVHhQYXJ0 IGRldGFpbHM6IiwmYnJvd3NlLDApKSktPnNldE1pbmltdW1TaXplKDQwMCwxNTApOwogICAgY29u bmVjdCh0YWJsZSwiMiIidmFsdWVDaGFuZ2VkKGludCxpbnQpIix0aGlzLCIxIiJ0YWJsZUNoYW5n ZShpbnQsaW50KSIpOwogICAgUUhHcm91cEJveCAmaGJveCA9ICpuZXcgUUhHcm91cEJveCgiTW91 c2UgdHJhY2tlcjoiLCZ2Ym94KTsKICAgIGNvbnN0IGludCBzdW5rZW4gPSBRRnJhbWU6OlBhbmVs IHwgUUZyYW1lOjpTdW5rZW47CiAgICAocG9pbnRlciA9IG5ldyBRTGFiZWwoIjAgLCAwIiwmaGJv eCkpLT5zZXRGcmFtZVN0eWxlKHN1bmtlbik7CiAgICAoaG92ZXIgPSBuZXcgUUxhYmVsKCIiLCZo Ym94KSktPnNldEZyYW1lU3R5bGUoc3Vua2VuKTsKICAgIG5ldyBRQ2FudmFzVmlldyhsaW5lQ2Fu dmFzID0gbmV3IFFDYW52YXMoMzAsMTApLCZoYm94KTsKICAgIChuZXcgVHhHcmlkVmlldyh2Ym94 KSktPnZpZXdwb3J0KCktPnNldE1vdXNlVHJhY2tpbmcodHJ1ZSk7CiAgICBzZXRDZW50cmFsV2lk Z2V0KCZ2Ym94KTsKICAgIHNldE1pbmltdW1TaXplKCAxMDAsIDgwICk7CgogICAgUVRhYldpZGdl dCAmdGFiYmVyID0gKm5ldyBRVGFiV2lkZ2V0KG5ldyBRSEdyb3VwQm94KCJBZGQgYSBuZXcgcGFy dDoiLCZ2Ym94KSk7CiAgICBRSEJveCAmYmFyMiA9ICpuZXcgUUhCb3goKSwKICAgICAgICAgICZi YXIgPSAqbmV3IFFIQm94KCksCiAgICAgICAgICAqIGNvbnN0IGJvdGhbXSA9IHsgJmJhciwgJmJh cjIgfTsKICAgIChuZXcgUUxhYmVsKCJQYXJlbnQ6IiwmYmFyKSktPnNldEFsaWdubWVudChRdDo6 QWxpZ25SaWdodCk7CiAgICBjb25uZWN0KHBpY2tQYXJlbnQgPSBuZXcgUUNvbWJvQm94KCZiYXIp LCIyIiJhY3RpdmF0ZWQoaW50KSIsdGhpcywiMSIiY29tYm9QaWNrKGludCkiKTsKICAgIChuZXcg UUxhYmVsKCJUeFBhcnQ6IiwmYmFyKSktPnNldEFsaWdubWVudChRdDo6QWxpZ25SaWdodCk7CiAg ICBjb25zdCBjaGFyICpjb25zdCB0YWJOYW1lc1tdID0geyAiQ2hpbGQiLCAiUGFyZW50IiB9LAog ICAgICAgICAgICAgICAqY29uc3QgbGFiZWxzW11bNV0gPSB7IHsgIkJvdW5kYXJ5Q29uZGl0aW9u IiwgIlBhcnRpY2xlU2luayIsICJQYXJ0aWNsZVNvdXJjZSIsICJJbml0aWFsQ29uZGl0aW9uIiwg IlNwZWNpZXMiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAiRW1G aWVsZCIsICJGbHVpZCIgfSB9LAogICAgICAgICAgICAgICAqY29uc3Qgc2xvdE5hbWVzW11bNV0g PSB7IHsgIjEiIm5ld0JvdW5kYXJ5KCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjEiIm5ld1NpbmsoKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiMSIibmV3U291cmNlKCkiLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIjEiIm5ld0luaXRpYWwoKSIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiMSIibmV3U3BlY2llcygpIiB9LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIjEiIm5ld0VtRmllbGQoKSIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIibmV3Rmx1aWQoKSIgfSB9Owog ICAgZm9yIChpbnQgdGFiSWR4ID0gMjsgMDx0YWJJZHg7ICkKICAgIHsKICAgICAgIGNvbnN0IGNo YXIgKmNvbnN0KmNvbnN0IGJ1dHRvbkxhYmVscyA9IGxhYmVsc1stLXRhYklkeF0sCiAgICAgICAg ICAgICAgICAgICpjb25zdCpjb25zdCB0aGVzZVNsb3RzID0gc2xvdE5hbWVzW3RhYklkeF07CiAg ICAgICBRSEJveCAmaGJhciA9ICpib3RoW3RhYklkeF07CiAgICAgICBRUHVzaEJ1dHRvbiAqKmNv bnN0IHNpYmxpbmdzID0gdG9vbEJ1dHRvbnNbdGFiSWR4XTsKICAgICAgIGZvciAoaW50IGlkeCA9 IHRhYklkeD8gMiA6IDU7IDA8aWR4LS07ICkKICAgICAgICAgIGNvbm5lY3Qoc2libGluZ3NbaWR4 XSA9IG5ldyBRUHVzaEJ1dHRvbihidXR0b25MYWJlbHNbaWR4XSwmaGJhciksIjIiInByZXNzZWQo KSIsdGhpcyx0aGVzZVNsb3RzW2lkeF0pOwogICAgICAgdGFiYmVyLmFkZFRhYigmaGJhcix0YWJO YW1lc1t0YWJJZHhdKTsKICAgIH0KICAgIHRhYmJlci5zZXRDdXJyZW50UGFnZSgxKTsKICAgIHNv dXJjZUJydXNoID0gbmV3IFFCcnVzaChRdDo6d2hpdGUpOwogICAgZ3JpZFBlbiA9IG5ldyBRUGVu KFF0OjpkYXJrR3JheSwxLFF0OjpEb3RMaW5lKTsKICAgIG5ld3MoKTsKfQoKCgplbnVtIFpvcmRl ciB7IHpHcmlkLCB6RmllbGQsIHpTaW5rLCB6U291cmNlIH07CgoKCnN0YXRpYyBUeEhpZXJBdHRy aWJTZXQgZG9jdW1lbnQoImRvY3VtZW50Iik7CgoKCnN0YXRpYyB2b2lkIGFkZFJlY3QgKGNvbnN0 IFR4SGllckF0dHJpYlNldCAmYm91bmRhcnksIGNvbnN0IFFDb2xvciAmY29sb3IsIGNvbnN0IFpv cmRlciB6KQp7CiAgUUNhbnZhc1JlY3RhbmdsZSAmcmVjdGFuZ2xlID0gKm5ldyBRQ2FudmFzUmVj dGFuZ2xlKFR4R3JpZFZpZXc6OmdldEdyaWRWaWV3KCkuY2FudmFzKCkpOwogIFR4Vm9ycGFsR1VJ OjpzZXRCb3VuZHMocmVjdGFuZ2xlLGJvdW5kYXJ5KTsKICBjb25zdCBib29sIG9uVG9wID0gej4x OwogIHJlY3RhbmdsZS5zZXRQZW4oKm5ldyBRUGVuKGNvbG9yLG9uVG9wPzM6NyxvblRvcD9RdDo6 RGFzaExpbmU6UXQ6OlNvbGlkTGluZSkpOwogIHJlY3RhbmdsZS5zZXRaKHopOwogIFR4UGFydDo6 YWRkKCZyZWN0YW5nbGUsYm91bmRhcnkpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJTZXQmIG5l d1BhcnQoY29uc3QgYm9vbCBpc0NoaWxkLAogIGNvbnN0IHVuc2lnbmVkIGludCBidXR0b25JZHgs IGNvbnN0IHN0ZDo6c3RyaW5nICZraW5kKQp7CiAgIHN0YXRpYyBpbnQgdGFsbHk7CiAgIGNoYXIg bmFtZVs1MF07CiAgIFFQdXNoQnV0dG9uICZwdXNoZWQgPSAqdG9vbEJ1dHRvbnNbaXNDaGlsZD8g MCA6IDFdW2J1dHRvbklkeF07CiAgIFR4R3JpZFZpZXc6OnNldFB1c2hlZChwdXNoZWQpOwogICBj b25zdCBjaGFyICp0eXBlTmFtZSA9IHB1c2hlZC50ZXh0KCk7CiAgIHNwcmludGYobmFtZSwiJXMl ZCIsdHlwZU5hbWUsdGFsbHkrKyk7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSAqbmV3IFR4 SGllckF0dHJpYlNldChuYW1lKTsKICAgbmV3Ynkuc2V0VHlwZSh0eXBlTmFtZSk7CiAgIG5ld2J5 LmFwcGVuZFN0cmluZygia2luZCIsa2luZCk7CiAgIHJldHVybiBuZXdieTsKfQoKCgpzdGF0aWMg dm9pZCBhcHBlbmRQYXJlbnQgKFR4SGllckF0dHJpYlNldCYgbmV3YnkpCnsKICAgZG9jdW1lbnQu YXBwZW5kQXR0cmliKG5ld2J5KTsKICAgcGxhY2UgPSAzOwogICBUeFBhcnQ6OmFkZChfX251bGws bmV3YnkpOwogICBwbGFjZSA9IC0xOwogICBwaWNrUGFyZW50LT5pbnNlcnRJdGVtKFR4Vm9ycGFs R1VJOjpnZXRUcmVlKCkudGV4dCgzLDEpKTsKICAgaWYgKDI+cGlja1BhcmVudC0+Y291bnQoKSkK ICAgICAgd2luZG93LT5jb21ib1BpY2soMCk7CiAgIFR4Vm9ycGFsR1VJOjpkb1BpY2soMyk7Cn0K CgoKdm9pZCBUeFZvcnBhbEdVSTo6bmV3RW1GaWVsZCAoKQp7CiAgIGFwcGVuZFBhcmVudChuZXdQ YXJ0KGZhbHNlLDAsInllZUVtRmllbGQiKSk7Cn0KCgoKc3RhdGljIHN0ZDo6c3RyaW5nIGdldFBh cmVudE5hbWUgKCkKewogICByZXR1cm4gcGlja1BhcmVudC0+Y3VycmVudFRleHQoKS5zZWN0aW9u KCcgJywwLDApLmxhdGluMSgpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJTZXQmIG5ld1BhcmVu dCAoY29uc3QgYm9vbCBpc1NwZWNpZXMpCnsKICAgVHhIaWVyQXR0cmliU2V0ICZuZXdieSA9IG5l d1BhcnQoaXNTcGVjaWVzLGlzU3BlY2llcz8gNCA6IDEsaXNTcGVjaWVzPyAicmVsQm9yaXMiIDog InBvc0RlbkNSRmx1aWQiKTsKICAgbmV3YnkuYXBwZW5kUGFyYW0oImNoYXJnZSIsMCk7CiAgIG5l d2J5LmFwcGVuZFBhcmFtKCJtYXNzIiwwKTsKICAgcmV0dXJuIG5ld2J5Owp9CgoKCnZvaWQgVHhW b3JwYWxHVUk6Om5ld1NwZWNpZXMgKCkKewogICBUeEhpZXJBdHRyaWJTZXQgJm5ld2J5ID0gbmV3 UGFyZW50KHRydWUpOwogICBuZXdieS5hcHBlbmRQYXJhbSgibnVtUHRjbHNJbk1hY3JvIiwwKTsK ICAgbmV3YnkuYXBwZW5kU3RyaW5nKCJlbUZpZWxkIixnZXRQYXJlbnROYW1lKCkpOwogICBhcHBl bmRQYXJlbnQobmV3YnkpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om5ld0ZsdWlkICgpCnsKICAg YXBwZW5kUGFyZW50KG5ld1BhcmVudChmYWxzZSkpOwp9CgoKCnN0YXRpYyBUeEhpZXJBdHRyaWJT ZXQmIG5ld0NoaWxkIChjb25zdCB1bnNpZ25lZCBpbnQgYnV0dG9uSWR4LAogIGNvbnN0IHN0ZDo6 c3RyaW5nICZraW5kKQp7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSBuZXdQYXJ0KHRydWUs YnV0dG9uSWR4LGtpbmQpOwogICBuZXdieS5hcHBlbmRPcHRpb24oIm1pbkRpbSIsMik7CiAgIHJl dHVybiBuZXdieTsKfQoKCgpzdGF0aWMgVHhIaWVyQXR0cmliU2V0JiBuZXdCb3VuZGVkIChjb25z dCB1bnNpZ25lZCBpbnQgYnV0dG9uSWR4LAogIGNvbnN0IHN0ZDo6c3RyaW5nICZraW5kKQp7CiAg IFR4SGllckF0dHJpYlNldCAmbmV3YnkgPSBuZXdDaGlsZChidXR0b25JZHgsa2luZCk7CiAgIHN0 ZDo6dmVjdG9yPGludD4gYm91bmRzOwogICBib3VuZHMucHVzaF9iYWNrKDApOwogICBib3VuZHMu cHVzaF9iYWNrKDEpOwogICBuZXdieS5hcHBlbmRPcHRWZWMoImxvd2VyQm91bmRzIixib3VuZHMp OwogICBib3VuZHNbMF0gPSAxOwogICBib3VuZHNbMV0gPSAyOwogICBuZXdieS5hcHBlbmRPcHRW ZWMoInVwcGVyQm91bmRzIixib3VuZHMpOwogICByZXR1cm4gbmV3Ynk7Cn0KCgoKc3RhdGljIHZv aWQgYXBwZW5kQ2hpbGQgKFR4SGllckF0dHJpYlNldCYgbmV3YnkpCnsKICAgY29uc3Qgc3RkOjpz dHJpbmcgcGFyZW50TmFtZShnZXRQYXJlbnROYW1lKCkpOwogICBUeEhpZXJBdHRyaWJTZXQgJnBh cmVudCA9ICpuZXcgVHhIaWVyQXR0cmliU2V0KGRvY3VtZW50LmdldEF0dHJpYihwYXJlbnROYW1l KSk7CiAgIHBhcmVudC5hcHBlbmRBdHRyaWIobmV3YnkpOwogICBkb2N1bWVudC5zZXRBdHRyaWIo cGFyZW50KTsKICAgc3RkOjp2ZWN0b3I8VHhQYXJ0PiAmYWxsUGFydHMgPSBUeFBhcnQ6OmdldEFs bFBhcnRzKCk7CiAgIHdoaWxlIChwYXJlbnROYW1lIT1hbGxQYXJ0c1srK3BsYWNlXS5nZXREYXRh KCkuZ2V0T2JqZWN0TmFtZSgpKTsKICAgcGxhY2UrKzsKfQoKCgpzdGF0aWMgdm9pZCBuZXdDb25k aXRpb24gKGNvbnN0IGJvb2wgaXNJbml0aWFsKQp7CiAgIFR4SGllckF0dHJpYlNldCAmbmV3Ynkg PSBuZXdCb3VuZGVkKGlzSW5pdGlhbD8gMyA6IDAsImNvbnN0YW50Iik7CiAgIG5ld2J5LmFwcGVu ZE9wdFZlYygiaW5kaWNlcyIsbmV3YnkuZ2V0T3B0VmVjKCJ1cHBlckJvdW5kcyIpKTsKICAgbmV3 YnkuYXBwZW5kUHJtVmVjKCJhbXBsaXR1ZGVzIixzdGQ6OnZlY3Rvcjxkb3VibGU+KDIsMCkpOwog ICBhcHBlbmRDaGlsZChuZXdieSk7CiAgIGFkZFJlY3QobmV3YnkscGlja1BhcmVudC0+Y3VycmVu dFRleHQoKS5zZWN0aW9uKCcgJywxLDEpPT0iKEVtRmllbGQpIj8gaXNJbml0aWFsPyBRdDo6Y3lh biA6IFF0OjpyZWQgOiBpc0luaXRpYWw/IFF0Ojp5ZWxsb3cgOiBRdDo6bWFnZW50YSx6RmllbGQp Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om5ld1NpbmsgKCkKewogICBUeEhpZXJBdHRyaWJTZXQg Jm5ld2J5ID0gbmV3Qm91bmRlZCgxLCJhYnNvcmJlciIpOwogICBhcHBlbmRDaGlsZChuZXdieSk7 CiAgIGFkZFJlY3QobmV3YnksUXQ6OmdyZWVuLHpTaW5rKTsKfQoKCgpzdGF0aWMgdm9pZCBhZGRQ b2ludCAoY29uc3QgVHhIaWVyQXR0cmliU2V0ICZzb3VyY2UpCnsKICBjb25zdCBzdGQ6OnZlY3Rv cjxkb3VibGU+IHBvcyA9IHNvdXJjZS5nZXRQcm1WZWMoInhiYXIiKTsKICBRQ2FudmFzRWxsaXBz ZSAmcG9pbnQgPSAqbmV3IFFDYW52YXNFbGxpcHNlKDYsNixUeEdyaWRWaWV3OjpnZXRHcmlkVmll dygpLmNhbnZhcygpKTsKICBjb25zdCB1bnNpZ25lZCBpbnQgcGFkID0gVHhWb3JwYWxHVUk6OnBh ZDsKICBwb2ludC5tb3ZlKHBvc1swXSpUeFZvcnBhbEdVSTo6Z2V0UmlnaHQoKStwYWQscG9zWzFd KlR4Vm9ycGFsR1VJOjpnZXRCb3R0b20oKStwYWQpOwogIHBvaW50LnNldEJydXNoKCpzb3VyY2VC cnVzaCk7CiAgcG9pbnQuc2V0Wih6U291cmNlKTsKICBUeFBhcnQ6OmFkZCgmcG9pbnQsc291cmNl KTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjpuZXdTb3VyY2UgKCkKewogICBUeEhpZXJBdHRyaWJT ZXQgJm5ld2J5ID0gbmV3Q2hpbGQoMiwiZ2F1c3NTb3VyY2UiKTsKICAgbmV3YnkuYXBwZW5kT3B0 aW9uKCJudW1QdGNscyIsMSk7CiAgIG5ld2J5LmFwcGVuZE9wdGlvbigiYXBwbHlQZXJpb2QiLDAp OwogICBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+IHRyaXBsZXQoMywwKTsKICAgbmV3YnkuYXBw ZW5kUHJtVmVjKCJ4YmFyIix0cmlwbGV0KTsKICAgbmV3YnkuYXBwZW5kUHJtVmVjKCJ4c2lnIix0 cmlwbGV0KTsKICAgbmV3YnkuYXBwZW5kUHJtVmVjKCJ2YmFyIix0cmlwbGV0KTsKICAgbmV3Ynku YXBwZW5kUHJtVmVjKCJ2c2lnIix0cmlwbGV0KTsKICAgYXBwZW5kQ2hpbGQobmV3YnkpOwogICBh ZGRQb2ludChuZXdieSk7Cn0KCgoKdm9pZCBUeFZvcnBhbEdVSTo6bmV3SW5pdGlhbCAoKQp7CiAg IG5ld0NvbmRpdGlvbih0cnVlKTsKfQoKCgp2b2lkIFR4Vm9ycGFsR1VJOjpuZXdCb3VuZGFyeSAo KQp7CiAgIG5ld0NvbmRpdGlvbihmYWxzZSk7Cn0KCgoKc3RhdGljIHZvaWQgYWRkR3JpZExpbmUg KGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgeDEsIGNvbnN0IGludCB5MSkK ewogICBRQ2FudmFzTGluZSAmbGluZSA9ICpuZXcgUUNhbnZhc0xpbmUoVHhHcmlkVmlldzo6Z2V0 R3JpZFZpZXcoKS5jYW52YXMoKSk7CiAgIGxpbmUuc2V0UG9pbnRzKHgwLHkwLHgxLHkxKTsKICAg bGluZS5zZXRQZW4oKmdyaWRQZW4pOwogICBsaW5lLnNob3coKTsKfQoKCgpzdGF0aWMgdm9pZCBh ZGRSZWN0YW5nbGVzIChjb25zdCBUeEhpZXJBdHRyaWJTZXQgJmRvY3VtZW50LCBjb25zdCBzdGQ6 OnN0cmluZyAmcGFyZW50TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk OjpzdHJpbmcgJmVkZ2VOYW1lLCBjb25zdCBRQ29sb3IgJmNvbG9yLCBjb25zdCBab3JkZXIgeiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBpc1BhcmVudE5ldyA9IHRydWUp CnsKICBjb25zdCBib29sIG9uVG9wID0gej4xOwogIGNvbnN0IFFQZW4gJnBlbiA9ICpuZXcgUVBl bihjb2xvcixvblRvcD8zOjcsb25Ub3A/UXQ6OkRhc2hMaW5lOlF0OjpTb2xpZExpbmUpOwogIHN0 ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXJlbnROYW1lcyA9IGRvY3VtZW50LmdldE5hbWVzT2ZU eXBlKHBhcmVudE5hbWUpOwogIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRv ciBpdCA9IHBhcmVudE5hbWVzLmJlZ2luKCk7IGl0PHBhcmVudE5hbWVzLmVuZCgpOyApCiAgewog ICAgIGNvbnN0IFR4SGllckF0dHJpYlNldCBwYXJlbnQgPSBkb2N1bWVudC5nZXRBdHRyaWIoKml0 KyspOwogICAgIGlmIChpc1BhcmVudE5ldykKICAgICB7CiAgICAgICAgVHhQYXJ0OjphZGQoX19u dWxsLHBhcmVudCk7CiAgICAgICAgcGlja1BhcmVudC0+aW5zZXJ0SXRlbShUeFZvcnBhbEdVSTo6 Z2V0VHJlZSgpLnRleHQoVHhQYXJ0OjpnZXRBbGxQYXJ0cygpLnNpemUoKS0xLDEpKTsKICAgICB9 CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGJvdW5kYXJ5TmFtZXMgPSBwYXJlbnQuZ2V0 TmFtZXNPZlR5cGUoZWRnZU5hbWUpOwogICAgIGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ OjppdGVyYXRvciBpdCA9IGJvdW5kYXJ5TmFtZXMuYmVnaW4oKTsgaXQ8Ym91bmRhcnlOYW1lcy5l bmQoKTsgKQogICAgIHsKICAgICAgICBjb25zdCBUeEhpZXJBdHRyaWJTZXQgYm91bmRhcnkgPSBw YXJlbnQuZ2V0QXR0cmliKCppdCsrKTsKICAgICAgICBpZiAoYm91bmRhcnkuaGFzT3B0aW9uKCJt aW5EaW0iKSYmMjxib3VuZGFyeS5nZXRPcHRpb24oIm1pbkRpbSIpKQogICAgICAgICAgIGNvbnRp bnVlOwogICAgICAgIFFDYW52YXNSZWN0YW5nbGUgJnJlY3RhbmdsZSA9ICpuZXcgUUNhbnZhc1Jl Y3RhbmdsZShUeEdyaWRWaWV3OjpnZXRHcmlkVmlldygpLmNhbnZhcygpKTsKICAgICAgICBUeFZv cnBhbEdVSTo6c2V0Qm91bmRzKHJlY3RhbmdsZSxib3VuZGFyeSk7CiAgICAgICAgcmVjdGFuZ2xl LnNldFBlbihwZW4pOwogICAgICAgIHJlY3RhbmdsZS5zZXRaKHopOwogICAgICAgIFR4UGFydDo6 YWRkKCZyZWN0YW5nbGUsYm91bmRhcnkpOwogICAgIH0KICB9Cn0KCgoKc3RhdGljIHZvaWQgdXBk YXRlRG9jdW1lbnQgKCkKewogICBUeEhpZXJBdHRyaWJTZXQgKnBhcmVudCA9IF9fbnVsbDsKICAg c3RkOjp2ZWN0b3I8VHhQYXJ0PiAmYWxsUGFydHMgPSBUeFBhcnQ6OmdldEFsbFBhcnRzKCk7CiAg IFFUYWJsZSAmdHJlZSA9IFR4Vm9ycGFsR1VJOjpnZXRUcmVlKCk7CiAgIGZvciAoaW50IHJvdyA9 IDA7ICsrcm93PHRyZWUubnVtUm93cygpOyApCiAgIHsKICAgICAgVHhIaWVyQXR0cmliU2V0ICZw YXJ0ID0gYWxsUGFydHNbcm93XS5nZXREYXRhKCk7CiAgICAgIGlmICh0cmVlLnRleHQocm93LDEp LmlzTnVsbCgpKQogICAgICB7CiAgICAgICAgIHBhcmVudC0+aGFzQXR0cmliKHBhcnQuZ2V0T2Jq ZWN0TmFtZSgpKT8gcGFyZW50LT5zZXRBdHRyaWIocGFydCkgOiB2b2lkKHBhcmVudC0+YXBwZW5k QXR0cmliKHBhcnQpKTsKICAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHBhcmVu dCkKICAgICAgICAgZG9jdW1lbnQuc2V0QXR0cmliKCpwYXJlbnQpOwogICAgICBwYXJlbnQgPSAm cGFydDsKICAgfQogICBkb2N1bWVudC5zZXRBdHRyaWIoKnBhcmVudCk7Cn0KCgoKc3RhdGljIFFT dHJpbmcgZmlsZU5hbWU7CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om9wZW4gKGNvbnN0IGNoYXIgKmNv bnN0IG5hbWUpCnsKICAgIHN0ZDo6dmVjdG9yPFR4UGFydD4gJmFsbFBhcnRzID0gVHhQYXJ0Ojpn ZXRBbGxQYXJ0cygpOwogICAgYWxsUGFydHMuY2xlYXIoKTsKICAgIHBsYWNlID0gLTE7CiAgICBw aWNrUGFyZW50LT5jbGVhcigpOwogICAgdHJlZS0+c2V0TnVtUm93cygwKTsKICAgIFR4R3JpZFZp ZXc6OmNsZWFyKCk7CiAgICBpZiAobmFtZSkKICAgIHsKICAgICAgIGRvY3VtZW50LmVtcHR5KCk7 CiAgICAgICBzdGQ6Omlmc3RyZWFtIGlucHV0KGZpbGVOYW1lID0gbmFtZSk7CiAgICAgICBpbnB1 dCA+PiBkb2N1bWVudDsKICAgICAgIHN0ZDo6Y291dDw8IlJFQUQgQ09NUExFVEVcbiI7CiAgICB9 CiAgICBUeFBhcnQ6OmFkZChfX251bGwsZG9jdW1lbnQpOwogICAgVHhQYXJ0OjphZGQoX19udWxs LGRvY3VtZW50LmdldEF0dHJpYihkb2N1bWVudC5nZXROYW1lc09mVHlwZSgiR3JpZCIpWzBdKSk7 CiAgICBUeFBhcnQ6OmFkZChfX251bGwsZG9jdW1lbnQuZ2V0QXR0cmliKGRvY3VtZW50LmdldE5h bWVzT2ZUeXBlKCJEZWNvbXAiKVswXSkpOwojIDU5NCAiVHhWb3JwYWxHVUkuY3BwIgogICAgY29u c3QgVHhIaWVyQXR0cmliU2V0ICZncmlkID0gYWxsUGFydHNbMV0uZ2V0RGF0YSgpOwogICAgY29u c3Qgc3RkOjp2ZWN0b3I8aW50PiBzaXplID0gZ3JpZC5nZXRPcHRWZWMoIm51bVBoeXNDZWxscyIp OwogICAgY29uc3QgdW5zaWduZWQgaW50IHdpZHRoID0gc2l6ZVswXSwKICAgICAgICAgICAgICAg ICAgICAgICBoZWlnaHQgPSBzaXplWzFdOwogICAgcmlnaHQgPSB3aWR0aCpzY2FsZTsKICAgIGJv dHRvbSA9IGhlaWdodCpzY2FsZTsKICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhSaWdodCA9IHJp Z2h0KzIqcGFkLAogICAgICAgICAgICAgICAgICAgICAgIG1heEJvdHRvbSA9IGJvdHRvbSsyKnBh ZDsKICAgIFR4R3JpZFZpZXc6OmdldEdyaWRWaWV3KCkuY2FudmFzKCktPnJlc2l6ZShtYXhSaWdo dCtwYWQsbWF4Qm90dG9tK3BhZCk7CiAgICBmb3IgKGludCBpZHggPSB3aWR0aCsxOyBpZHg7ICkK ICAgIHsKICAgICAgIGNvbnN0IGludCBwb3MgPSAtLWlkeCpzY2FsZStwYWQ7CiAgICAgICBhZGRH cmlkTGluZShwb3MsMCxwb3MsbWF4Qm90dG9tKTsKICAgIH0KICAgIGZvciAoaW50IGlkeCA9IGhl aWdodCsxOyBpZHg7ICkKICAgIHsKICAgICAgIGNvbnN0IGludCBwb3MgPSAtLWlkeCpzY2FsZStw YWQ7CiAgICAgICBhZGRHcmlkTGluZSgwLHBvcyxtYXhSaWdodCxwb3MpOwogICAgfQogICAgYWRk UmVjdGFuZ2xlcyhkb2N1bWVudCwiRW1GaWVsZCIsIkJvdW5kYXJ5Q29uZGl0aW9uIixRdDo6cmVk LHpGaWVsZCk7CiAgICBhZGRSZWN0YW5nbGVzKGRvY3VtZW50LCJFbUZpZWxkIiwiSW5pdGlhbENv bmRpdGlvbiIsUXQ6OmN5YW4sekZpZWxkLGZhbHNlKTsKICAgIGFkZFJlY3RhbmdsZXMoZG9jdW1l bnQsIkZsdWlkIiwiQm91bmRhcnlDb25kaXRpb24iLFF0OjptYWdlbnRhLHpGaWVsZCk7CiAgICBh ZGRSZWN0YW5nbGVzKGRvY3VtZW50LCJGbHVpZCIsIkluaXRpYWxDb25kaXRpb24iLFF0Ojp5ZWxs b3csekZpZWxkLGZhbHNlKTsKICAgIGFkZFJlY3RhbmdsZXMoZG9jdW1lbnQsIlNwZWNpZXMiLCJQ YXJ0aWNsZVNpbmsiLFF0OjpncmVlbix6U2luayk7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu Zz4gc3BlY2llc05hbWVzID0gZG9jdW1lbnQuZ2V0TmFtZXNPZlR5cGUoIlNwZWNpZXMiKTsKICAg IGZvciAoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBpdCA9IHNwZWNpZXNOYW1l cy5iZWdpbigpOyBpdDxzcGVjaWVzTmFtZXMuZW5kKCk7ICkKICAgIHsKICAgICAgIGNvbnN0IFR4 SGllckF0dHJpYlNldCBzcGVjaWVzID0gZG9jdW1lbnQuZ2V0QXR0cmliKCppdCsrKTsKICAgICAg IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzb3VyY2VOYW1lcyA9IHNwZWNpZXMuZ2V0TmFtZXNP ZlR5cGUoIlBhcnRpY2xlU291cmNlIik7CiAgICAgICBmb3Ioc3RkOjp2ZWN0b3I8c3RkOjpzdHJp bmc+OjppdGVyYXRvciBpdCA9IHNvdXJjZU5hbWVzLmJlZ2luKCk7IGl0PHNvdXJjZU5hbWVzLmVu ZCgpOyBhZGRQb2ludChzcGVjaWVzLmdldEF0dHJpYigqaXQrKykpKTsKICAgIH0KICAgIHRyZWUt PmFkanVzdENvbHVtbigyKTsKICAgIHdpbmRvdy0+Y29tYm9QaWNrKHBpY2tQYXJlbnQtPmNvdW50 KCk/IHBpY2tQYXJlbnQtPmN1cnJlbnRJdGVtKCkgOiAtMSk7CiAgICBUeEdyaWRWaWV3OjpnZXRH cmlkVmlldygpLmNhbnZhcygpLT51cGRhdGUoKTsKICBzdGQ6OmNvdXQ8PCJcblNVQ0NFU1MhXG4i Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnRhYmxlQ2hhbmdlIChpbnQgcm93LCBjb25zdCBpbnQg Y29sKQp7CiAgIGlmICgxIT1jb2wgfHwgMSE9dHJlZS0+Y3VycmVudFJvdygpKQogICAgICByZXR1 cm47CiAgIFFTdHJpbmcgdGV4dDsKICAgZm9yICggOyAodGV4dCA9IHRhYmxlLT50ZXh0KHJvdyww KSkuc3RhcnRzV2l0aCgiIFsgIik7IHJvdy0tKTsKICAgaWYgKCIgbnVtUGh5c0NlbGxzIiE9dGV4 dCkKICAgICAgcmV0dXJuOwogICB1cGRhdGVEb2N1bWVudCgpOwogICBvcGVuKF9fbnVsbCk7Cn0K CgoKc3RhdGljIGJvb2wgaXNOZXc7CgoKCnZvaWQgVHhWb3JwYWxHVUk6Om9wZW4oKQp7CiAgICBj b25zdCBRU3RyaW5nIG5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKCIqLmluIik7 CiAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgIHJldHVybjsKICAgIGlzTmV3ID0gZmFsc2U7 CiAgICBvcGVuKG5hbWUpOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnNhdmVBcyAoKQp7CiAgICBj b25zdCBRU3RyaW5nIG5hbWUgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKCIqLmluIik7 CiAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgIHJldHVybjsKICAgIGlzTmV3ID0gZmFsc2U7 CiAgICBmaWxlTmFtZSA9IG5hbWU7CiAgICBzYXZlKCk7Cn0KCgoKdm9pZCBUeFZvcnBhbEdVSTo6 bmV3cygpCnsKICAgaXNOZXcgPSB0cnVlOwogICBvcGVuKCJub3BlcmRlY29tcDIuaW4iKTsKfQoK Cgp2b2lkIFR4Vm9ycGFsR1VJOjpzYXZlKCkKewogICBpZiAoaXNOZXcpCiAgIHsKICAgICBzYXZl QXMoKTsKICAgICByZXR1cm47CiAgIH0KICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgc3RkOjpvZnN0 cmVhbSBvdXQoZmlsZU5hbWUubGF0aW4xKCkpOwogICBkb2N1bWVudC53cml0ZShvdXQsZmFsc2Up Owp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnVuZG8oKQp7CiAgICBleHBsYWluKCAiRWRpdC9VbmRv IHNlbGVjdGVkIiApOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OnJlZG8oKQp7CiAgICBleHBsYWlu KCAiRWRpdC9SZWRvIHNlbGVjdGVkIiApOwp9CgoKCnZvaWQgVHhWb3JwYWxHVUk6OmFib3V0KCkK ewogICAgUU1lc3NhZ2VCb3g6OmFib3V0KCB0aGlzLCAiVm9ycGFsIGVkaXRvciBHVUkiLAogICAg ICAiV1lTSVdJRyBlZGl0aW5nIG9mIFZvcnBhbCBpbnB1dCBmaWxlcy5cbkNvcHlyaWdodCBUZWNo LVggY29ycG9yYXRpb24uXG5odHRwOi8vd3d3LnRlY2h4aG9tZS5jb20iICk7Cn0KCgoKdm9pZCBU eFZvcnBhbEdVSTo6cmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICkKewoKfQoKCnZvaWQgVHhW b3JwYWxHVUk6OmtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqY29uc3Qga2V5c3Ryb2tlKQp7CnN0 ZDo6Y291dDw8IktFWTogICI8PGtleXN0cm9rZS0+a2V5KCk8PCdcbic7Cn0KCgppbnQgbWFpbigg aW50IGFyZ2MsIGNoYXIgKiogYXJndiApCnsKICAgIFFBcHBsaWNhdGlvbiBhKCBhcmdjLCBhcmd2 ICk7CiAgICBUeFZvcnBhbEdVSSBtOwogICAgbS5zZXRDYXB0aW9uKCJWT1JQQUwgZWRpdG9yIEdV SSIpOwogICAgYS5zZXRNYWluV2lkZ2V0KCAmbSApOwogICAgbS5zaG93KCk7CiAgICByZXR1cm4g YS5leGVjKCk7Cn0K