From mboxrd@z Thu Jan 1 00:00:00 1970 From: georg.wild@gmx.de To: gcc-gnats@gcc.gnu.org Subject: c++/4671: SegFault compiling qt qabstractlayout.cpp Date: Thu, 25 Oct 2001 16:26:00 -0000 Message-id: <20011024101236.4440.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00499.html List-Id: >Number: 4671 >Category: c++ >Synopsis: SegFault compiling qt qabstractlayout.cpp >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Oct 25 16:26:11 PDT 2001 >Closed-Date: >Last-Modified: >Originator: georg.wild@gmx.de >Release: gcc latest cvs >Organization: >Environment: i686-pc-linux-gnu cvs glibc after 2.2.4 >Description: kernel/qabstractlayout.cpp:1042: Internal error: Segmentation fault g++ -c -I/usr/X11R6/include -I/usr/lib/qt/include -I/usr/X11R6/include -pipe -O2 -fPIC -DQT_BUILTIN_GIF_READER=1 -DQT_NAS_SUPPORT -DQT_XFT -I/usr/lib/qt/src/3rdparty/zlib -I/usr/lib/qt/src/3rdparty/libpng -o kernel/qabstractlayout.o kernel/qabstractlayout.cpp cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3" cc1plus: warning: as it has already been specified as a system directory cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3/i686-pc-linux-gnu" cc1plus: warning: as it has already been specified as a system directory cc1plus: warning: changing search order for system directory "/usr/local/include/g++-v3/backward" cc1plus: warning: as it has already been specified as a system directory cc1plus: warning: changing search order for system directory "/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include" cc1plus: warning: as it has already been specified as a system directory cc1plus: warning: changing search order for system directory "/usr/local/i686-pc-linux-gnu/include" cc1plus: warning: as it has already been specified as a system directory kernel/qabstractlayout.cpp: In member function `virtual bool QLayout::eventFilter(QObject*, QEvent*)': kernel/qabstractlayout.cpp:1042: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: g++ -c -O2 qabstractlayout.ii >Fix: g++ -c -O1 qabstractlayout.ii >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="qabstractlayout.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qabstractlayout.ii" IyAzOCAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiCiMgMSAia2VybmVsL3FhYnN0cmFjdGxh eW91dC5oIiAxCiMgNDIgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuaCIKIyAxICJrZXJuZWwvcW9i amVjdC5oIiAxCiMgNDIgImtlcm5lbC9xb2JqZWN0LmgiCiMgMSAia2VybmVsL3FvYmplY3RkZWZz LmgiIDEKIyA0MiAia2VybmVsL3FvYmplY3RkZWZzLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVk ZS9xZ2xvYmFsLmgiIDEKIyAzNjcgIi91c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0 eXBlZGVmIHVuc2lnbmVkIHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKdHlwZWRl ZiBjaGFyICpwY2hhcjsKdHlwZWRlZiB1Y2hhciAqcHVjaGFyOwp0eXBlZGVmIGNvbnN0IGNoYXIg KnBjY2hhcjsKCgoKCgoKCmNvbnN0IGJvb2wgRkFMU0UgPSAwOwpjb25zdCBib29sIFRSVUUgPSAh MDsKIyA0MDUgIi91c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3Vu ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0w LjUpOwp9CiMgNDE4ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIKdHlwZWRlZiBzaWdu ZWQgY2hhciBJTlQ4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CnR5cGVkZWYgc2hvcnQg SU5UMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2Owp0eXBlZGVmIGludCBJTlQzMjsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOwoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgUV9JTlQ4 Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUV9VSU5UODsKdHlwZWRlZiBzaG9ydCBRX0lOVDE2Owp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IFFfVUlOVDE2Owp0eXBlZGVmIGludCBRX0lOVDMyOwp0eXBl ZGVmIHVuc2lnbmVkIGludCBRX1VJTlQzMjsKdHlwZWRlZiBsb25nIFFfSU5UNjQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBRX1VJTlQ2NDsKCgoKCgpjbGFzcyBRRGF0YVN0cmVhbTsKIyA0NDggIi91 c3IvbGliL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWZl YXR1cmVzLmgiIDEKIyA1MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZmVhdHVyZXMuaCIKIyAxICIv dXNyL2xpYi9xdC9pbmNsdWRlL3Fjb25maWcuaCIgMQojIDU0ICIvdXNyL2xpYi9xdC9pbmNsdWRl L3FmZWF0dXJlcy5oIiAyCiMgNDQ5ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMgoj IDQ4NiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCiAgICAgICAgIGNvbnN0IGNoYXIg KnFWZXJzaW9uKCk7CiAgICAgICAgIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNpemUsIGJvb2wg KmJpZ0VuZGlhbiApOwojIDU1MCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCiAgICAg ICAgIHZvaWQgcURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAo KGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgogICAgICAgICB2b2lkIHFXYXJuaW5nKCBjb25z dCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAy KSkpCgo7CgogICAgICAgICB2b2lkIHFGYXRhbCggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9f YXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCgoKCgoKICAgICAgICAg dm9pZCBkZWJ1ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3Jt YXQgKHByaW50ZiwgMSwgMikpKQoKOwoKICAgICAgICAgdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFy ICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7 CgogICAgICAgICB2b2lkIGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1 dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgNjA5ICIvdXNyL2xpYi9xdC9pbmNs dWRlL3FnbG9iYWwuaCIKICAgICAgICAgYm9vbCBxdF9jaGVja19wb2ludGVyKCBib29sIGMsIGNv bnN0IGNoYXIgKiwgaW50ICk7CgoKCgoKCgplbnVtIFF0TXNnVHlwZSB7IFF0RGVidWdNc2csIFF0 V2FybmluZ01zZywgUXRGYXRhbE1zZyB9OwoKdHlwZWRlZiB2b2lkICgqbXNnX2hhbmRsZXIpKFF0 TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKICAgICAgICAgbXNnX2hhbmRsZXIgcUluc3RhbGxNc2dI YW5kbGVyKCBtc2dfaGFuZGxlciApOwoKCiAgICAgICAgIHZvaWQgcVN1cHByZXNzT2Jzb2xldGVX YXJuaW5ncyggYm9vbCA9IFRSVUUgKTsKCgoKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0 IGNoYXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNo YXIgKm9iaiwgY29uc3QgY2hhciAqb2xkZnVuYyApOwogICAgICAgICB2b2lkIHFPYnNvbGV0ZSgg Y29uc3QgY2hhciAqbWVzc2FnZSApOwojIDQzICJrZXJuZWwvcW9iamVjdGRlZnMuaCIgMgojIDEx NyAia2VybmVsL3FvYmplY3RkZWZzLmgiCmNsYXNzIFFPYmplY3Q7CmNsYXNzIFFNZXRhT2JqZWN0 OwpjbGFzcyBRU2lnbmFsOwpjbGFzcyBRQ29ubmVjdGlvbjsKY2xhc3MgUUV2ZW50OwpzdHJ1Y3Qg UU1ldGFEYXRhOwpjbGFzcyBRQ29ubmVjdGlvbkxpc3Q7CmNsYXNzIFFDb25uZWN0aW9uTGlzdEl0 OwpjbGFzcyBRU2lnbmFsRGljdDsKY2xhc3MgUVNpZ25hbERpY3RJdDsKY2xhc3MgUU9iamVjdExp c3Q7CmNsYXNzIFFPYmplY3RMaXN0SXQ7CmNsYXNzIFFNZW1iZXJEaWN0OwojIDQzICJrZXJuZWwv cW9iamVjdC5oIiAyCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAia2VybmVsL3F3 aW5kb3dkZWZzLmgiCiMgMSAia2VybmVsL3FvYmplY3RkZWZzLmgiIDEKIyA0NCAia2VybmVsL3F3 aW5kb3dkZWZzLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDQz ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRl L3Fjc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY3N0cmluZy5oIgojIDEg Ii91c3IvbGliL3F0L2luY2x1ZGUvcWFycmF5LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVk ZS9xYXJyYXkuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnYXJyYXkuaCIgMQojIDQyICIv dXNyL2xpYi9xdC9pbmNsdWRlL3FnYXJyYXkuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz aGFyZWQuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzaGFyZWQuaCIKIyAxICIvdXNy L2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz aGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7CiAgICBRU2hhcmVkKCkgeyBjb3VudCA9IDE7 IH0KICAgIHZvaWQgcmVmKCkgeyBjb3VudCsrOyB9CiAgICBib29sIGRlcmVmKCkgeyByZXR1cm4g IS0tY291bnQ7IH0KICAgIHVpbnQgY291bnQ7Cn07CiMgNDMgIi91c3IvbGliL3F0L2luY2x1ZGUv cWdhcnJheS5oIiAyCgoKCmNsYXNzIFFHQXJyYXkKewpmcmllbmQgY2xhc3MgUUJ1ZmZlcjsKcHVi bGljOgoKICAgIHN0cnVjdCBhcnJheV9kYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIGFy cmF5X2RhdGEoKSB7IGRhdGE9MDsgbGVuPTA7IH0KICAgICAgICBjaGFyICpkYXRhOwogICAgICAg IHVpbnQgbGVuOwogICAgfTsKICAgIFFHQXJyYXkoKTsKcHJvdGVjdGVkOgogICAgUUdBcnJheSgg aW50LCBpbnQgKTsKICAgIFFHQXJyYXkoIGludCBzaXplICk7CiAgICBRR0FycmF5KCBjb25zdCBR R0FycmF5ICZhICk7CiAgICB2aXJ0dWFsIH5RR0FycmF5KCk7CgogICAgUUdBcnJheSAmb3BlcmF0 b3I9KCBjb25zdCBRR0FycmF5ICZhICkgeyByZXR1cm4gYXNzaWduKCBhICk7IH0KCiAgICB2aXJ0 dWFsIHZvaWQgZGV0YWNoKCkgeyBkdXBsaWNhdGUoKnRoaXMpOyB9CgogICAgY2hhciAqZGF0YSgp IGNvbnN0IHsgcmV0dXJuIHNoZC0+ZGF0YTsgfQogICAgdWludCBucmVmcygpIGNvbnN0IHsgcmV0 dXJuIHNoZC0+Y291bnQ7IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNoZC0+bGVu OyB9CiAgICBib29sIGlzRXF1YWwoIGNvbnN0IFFHQXJyYXkgJmEgKSBjb25zdDsKCiAgICBib29s IHJlc2l6ZSggdWludCBuZXdzaXplICk7CgogICAgYm9vbCBmaWxsKCBjb25zdCBjaGFyICpkLCBp bnQgbGVuLCB1aW50IHN6ICk7CgogICAgUUdBcnJheSAmYXNzaWduKCBjb25zdCBRR0FycmF5ICZh ICk7CiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAgICBR R0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFHQXJyYXkgJmR1cGxp Y2F0ZSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQgc3RvcmUoIGNvbnN0IGNo YXIgKmQsIHVpbnQgbGVuICk7CgogICAgYXJyYXlfZGF0YSAqc2hhcmVkQmxvY2soKSBjb25zdCB7 IHJldHVybiBzaGQ7IH0KICAgIHZvaWQgc2V0U2hhcmVkQmxvY2soIGFycmF5X2RhdGEgKnAgKSB7 IHNoZD0oYXJyYXlfZGF0YSopcDsgfQoKICAgIFFHQXJyYXkgJnNldFJhd0RhdGEoIGNvbnN0IGNo YXIgKmQsIHVpbnQgbGVuICk7CiAgICB2b2lkIHJlc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwg dWludCBsZW4gKTsKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciAqZCwgdWludCBpbmRleCwgdWlu dCBzeiApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICkg Y29uc3Q7CgogICAgdm9pZCBzb3J0KCB1aW50IHN6ICk7CiAgICBpbnQgYnNlYXJjaCggY29uc3Qg Y2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIGNoYXIgKmF0KCB1aW50IGluZGV4ICkgY29u c3Q7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQg c3ogKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgYXJyYXlfZGF0YSAqbmV3RGF0YSgpOwogICAg dmlydHVhbCB2b2lkIGRlbGV0ZURhdGEoIGFycmF5X2RhdGEgKnAgKTsKCnByaXZhdGU6CiAgICBz dGF0aWMgdm9pZCBtc2dfaW5kZXgoIHVpbnQgKTsKICAgIGFycmF5X2RhdGEgKnNoZDsKfTsKCgpp bmxpbmUgY2hhciAqUUdBcnJheTo6YXQoIHVpbnQgaW5kZXggKSBjb25zdAp7CgogICAgaWYgKCBp bmRleCA+PSBzaXplKCkgKSB7CiAgICAgICAgbXNnX2luZGV4KCBpbmRleCApOwogICAgICAgIGlu ZGV4ID0gMDsKICAgIH0KCiAgICByZXR1cm4gJnNoZC0+ZGF0YVtpbmRleF07Cn0KIyA0MyAiL3Vz ci9saWIvcXQvaW5jbHVkZS9xYXJyYXkuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFz cyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZSogSXRl cmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUqIENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVm IHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAgUUFycmF5KCBpbnQsIGludCApIDogUUdB cnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBRQXJyYXkoKSB7fQogICAgUUFycmF5KCBpbnQg c2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0eXBlKSkge30KICAgIFFBcnJheSggY29uc3Qg UUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9CiAgIH5RQXJyYXkoKSB7fQogICAgUUFy cmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFycmF5PHR5cGU+ICZhKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2ln bihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdBcnJheTo6 ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6bnJlZnMo KTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVv Zih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogICAg Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpID09IDA7IH0KICAg IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gUUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAg IGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJldHVybiBRR0FycmF5OjpyZXNpemUoc2l6ZSpz aXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5jYXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFH QXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUpKTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0 eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAgICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChj aGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJh eTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBlPiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFB cnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVwbGljYXRlKCp0aGlzKTsgfQogICAgUUFycmF5 PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0eXBlPiYgYSApCiAgICAgICAgeyByZXR1cm4g KFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGFz c2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5 cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJy YXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJl dHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNhdGUoYSk7IH0KICAgIFFBcnJheTx0 eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJu IChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBl KSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBu ICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChj aGFyKilhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUg KmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipz aXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCggY29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBj b25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5 cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7 IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hhciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAg dm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNpemVvZih0eXBlKSk7IH0KICAgIGludCBic2Vh cmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpic2Vh cmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlwZSkpOyB9CiAgICB0eXBlJiBvcGVyYXRvcltd KCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJh eTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgdHlwZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAg ICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlw ZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25zdCB0eXBlKigpIGNvbnN0IHsgcmV0dXJuIChj b25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0 IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0dXJuIGlzRXF1YWwoYSk7IH0KICAgIGJvb2wg b3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4gIWlzRXF1 YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVy YXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBzaXplKCk7IH0KICAgIENvbnN0SXRlcmF0b3Ig YmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkg Y29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgpOyB9Cn07CiMgNDQgIi91c3IvbGliL3F0L2lu Y2x1ZGUvcWNzdHJpbmcuaCIgMgoKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcu aCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0 dXJlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQg Ii91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvbG9jYWwvaW5j bHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2dudS9zdHVicy5oIiAx IDMKIyAzMTMgIi91c3IvbG9jYWwvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9s b2NhbC9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDM0ICIvdXNy L2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVt bW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9f ZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICpt ZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lk ICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lk ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4 dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFy ICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBz dHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9f bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50 IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJt IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvaW5jbHVk ZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0 IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50 ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpf X2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2xvY2FsL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIg Kl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0 cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv Y19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7 CiMgMTU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNo ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBj aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAq X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0 YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9f cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7Cgpl eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19j b25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19t ZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0 ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4g KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50 IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vy cm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g dm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g dm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19u KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2 b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVy biBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f bG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJu IGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9f ZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5 IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQg Kl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAo X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvbG9jYWwvaW5j bHVkZS9zdHJpbmcuaCIgMwp9CiMgNTEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNzdHJpbmcuaCIg MgojIDc4ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjc3RyaW5nLmgiCiAgICAgICAgIHZvaWQgKnFt ZW1tb3ZlKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdWludCBsZW4gKTsKCgoKCgogICAg ICAgICBjaGFyICpxc3RyZHVwKCBjb25zdCBjaGFyICogKTsKCiAgICAgICAgIGlubGluZSB1aW50 IGNzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0cmxlbihzdHIpOyB9CgogICAg ICAgICBpbmxpbmUgdWludCBxc3RybGVuKCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiBzdHIg PyBzdHJsZW4oc3RyKSA6IDA7IH0KCiAgICAgICAgIGlubGluZSBjaGFyICpjc3RyY3B5KCBjaGFy ICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHN0cmNweShkc3Qsc3JjKTsgfQoKICAg ICAgICAgaW5saW5lIGNoYXIgKnFzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkK eyByZXR1cm4gc3JjID8gc3RyY3B5KGRzdCwgc3JjKSA6IDA7IH0KCiAgICAgICAgIGNoYXIgKnFz dHJuY3B5KCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgdWludCBsZW4gKTsKCiAgICAgICAg IGlubGluZSBpbnQgY3N0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiAp CnsgcmV0dXJuIHN0cmNtcChzdHIxLHN0cjIpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFzdHJj bXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIgKQp7IHJldHVybiAoc3RyMSAm JiBzdHIyKSA/IHN0cmNtcChzdHIxLHN0cjIpIDogKGludCkoKGxvbmcpc3RyMiAtIChsb25nKXN0 cjEpOyB9CgogICAgICAgICBpbmxpbmUgaW50IGNzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBj b25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsgcmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxl bik7IH0KCiAgICAgICAgIGlubGluZSBpbnQgcXN0cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNv bnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKeyByZXR1cm4gKHN0cjEgJiYgc3RyMikgPyBzdHJu Y21wKHN0cjEsc3RyMixsZW4pIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSgobG9u ZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0KCiAgICAgICAgIGludCBxc3RyaWNtcCggY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICogKTsKCiAgICAgICAgIGludCBxc3RybmljbXAoIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCB1aW50IGxlbiApOwojIDE0NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x Y3N0cmluZy5oIgogICAgICAgICBRX1VJTlQxNiBxQ2hlY2tzdW0oIGNvbnN0IGNoYXIgKnMsIHVp bnQgbGVuICk7CiMgMTU2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjc3RyaW5nLmgiCnR5cGVkZWYg UUFycmF5PGNoYXI+IFFCeXRlQXJyYXk7CgoKCgoKCiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVy YXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKICAgICAgICAgUURh dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFCeXRlQXJyYXkgJiApOwojIDE3 MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY3N0cmluZy5oIgpjbGFzcyBRUmVnRXhwOwoKY2xhc3Mg UUNTdHJpbmcgOiBwdWJsaWMgUUJ5dGVBcnJheQp7CnB1YmxpYzoKICAgIFFDU3RyaW5nKCkge30K ICAgIFFDU3RyaW5nKCBpbnQgc2l6ZSApOwogICAgUUNTdHJpbmcoIGNvbnN0IFFDU3RyaW5nICZz ICkgOiBRQnl0ZUFycmF5KCBzICkge30KICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIgKTsK ICAgIFFDU3RyaW5nKCBjb25zdCBjaGFyICpzdHIsIHVpbnQgbWF4bGVuICk7CgogICAgUUNTdHJp bmcgJm9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKTsKICAgIFFDU3RyaW5nICZvcGVyYXRv cj0oIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s IGlzRW1wdHkoKSBjb25zdDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICBib29sIHJlc2l6 ZSggdWludCBuZXdsZW4gKTsKICAgIGJvb2wgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CiAgICBib29s IGZpbGwoIGNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUUNTdHJpbmcgY29weSgpIGNvbnN0 OwoKICAgIFFDU3RyaW5nICZzcHJpbnRmKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOwoKICAg IGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAg IGludCBmaW5kKCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj b25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0wICkgY29uc3Q7 CiAgICBpbnQgZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29u c3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgY2hhciAqc3RyLCBpbnQgaW5kZXg9LTEsIGJvb2wg Y3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5k ZXg9LTEgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBj b25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNzPVRSVUUgKSBj b25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgogICAgUUNT dHJpbmcgbGVmdCggdWludCBsZW4gKSBjb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0KCB1aW50IGxl biApIGNvbnN0OwogICAgUUNTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZmZmZm ZmZmKSBjb25zdDsKCiAgICBRQ1N0cmluZyBsZWZ0SnVzdGlmeSggdWludCB3aWR0aCwgY2hhciBm aWxsPScgJywgYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKICAgIFFDU3RyaW5nIHJpZ2h0SnVzdGlm eSggdWludCB3aWR0aCwgY2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAg IFFDU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICBRQ1N0cmluZyB1cHBlcigpIGNvbnN0OwoKICAg IFFDU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwogICAgUUNTdHJpbmcgc2ltcGxpZnlX aGl0ZVNwYWNlKCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJmluc2VydCggdWludCBpbmRleCwgY29u c3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjaGFyICk7CiAg ICBRQ1N0cmluZyAmYXBwZW5kKCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZwcmVwZW5k KCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQg bGVuICk7CiAgICBRQ1N0cmluZyAmcmVwbGFjZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0 IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAgJiwgY29uc3Qg Y2hhciAqICk7CgogICAgc2hvcnQgdG9TaG9ydCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdXNo b3J0IHRvVVNob3J0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBpbnQgdG9JbnQoIGJvb2wgKm9r PTAgKSBjb25zdDsKICAgIHVpbnQgdG9VSW50KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBsb25n IHRvTG9uZyggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9 MCApIGNvbnN0OwogICAgZmxvYXQgdG9GbG9hdCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgZG91 YmxlIHRvRG91YmxlKCBib29sICpvaz0wICkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNldFN0cigg Y29uc3QgY2hhciAqcyApOwogICAgUUNTdHJpbmcgJnNldE51bSggc2hvcnQgKTsKICAgIFFDU3Ry aW5nICZzZXROdW0oIHVzaG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggaW50ICk7CiAgICBR Q1N0cmluZyAmc2V0TnVtKCB1aW50ICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBsb25nICk7CiAg ICBRQ1N0cmluZyAmc2V0TnVtKCB1bG9uZyApOwogICAgUUNTdHJpbmcgJnNldE51bSggZmxvYXQs IGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGRvdWJsZSwg Y2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIGJvb2wgc2V0RXhwYW5kKCB1aW50IGluZGV4 LCBjaGFyIGMgKTsKCiAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyICooKSBjb25z dDsKICAgIFFDU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3Ry aW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKfTsKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0g Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsKICAgICAgICAg UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDU3RyaW5nICYgKTsKCgoK CgoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAm cyApCnsgcmV0dXJuIChRQ1N0cmluZyYpYXNzaWduKCBzICk7IH0KCmlubGluZSBRQ1N0cmluZyAm UUNTdHJpbmc6Om9wZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKFFDU3RyaW5n JilkdXBsaWNhdGUoIHN0ciwgcXN0cmxlbihzdHIpKzEgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJp bmc6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBR Q1N0cmluZzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwIHx8ICpkYXRhKCkg PT0gJ1wwJzsgfQoKaW5saW5lIHVpbnQgUUNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJu IHFzdHJsZW4oIGRhdGEoKSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6dHJ1bmNhdGUoIHVp bnQgcG9zICkKeyByZXR1cm4gcmVzaXplKHBvcysxKTsgfQoKaW5saW5lIFFDU3RyaW5nIFFDU3Ry aW5nOjpjb3B5KCkgY29uc3QKeyByZXR1cm4gUUNTdHJpbmcoIGRhdGEoKSApOyB9CgppbmxpbmUg UUNTdHJpbmcgJlFDU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gaW5z ZXJ0KDAscyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hh ciAqcyApCnsgcmV0dXJuIG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJp bmc6OnNldE51bSggc2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5saW5l IFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgo dWxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggaW50IG4gKQp7 IHJldHVybiBzZXROdW0oKGxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNl dE51bSggdWludCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3Ry aW5nICZRQ1N0cmluZzo6c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1 cm4gc2V0TnVtKChkb3VibGUpbixmLHByZWMpOyB9CgppbmxpbmUgUUNTdHJpbmc6Om9wZXJhdG9y IGNvbnN0IGNoYXIgKigpIGNvbnN0CnsgcmV0dXJuIChjb25zdCBjaGFyICopZGF0YSgpOyB9CgoK CgoKCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwg Y29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgp KSA9PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRQ1N0cmlu ZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpID09 IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIgKnMxLCBj b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPT0gMDsg fQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBj b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMi5kYXRhKCkp ICE9IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFDU3RyaW5n ICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgIT0g MDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgY2hhciAqczEsIGNv bnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSAhPSAwOyB9 CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u c3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA8 IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgUUNTdHJpbmcgJnMx LCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA8IDA7IH0K CiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFD U3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA8IDA7IH0KCiAgICAg ICAgIGlubGluZSBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hh ciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPD0gMDsgfQoKICAgICAgICAg aW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZz MiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA8PSAwOyB9CgogICAgICAgICBpbmxp bmUgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7 IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPiAwOyB9CgogICAgICAgICBpbmxpbmUgYm9v bCBvcGVyYXRvcj4oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVy biBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPiAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVy YXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0 cmNtcChzMS5kYXRhKCksczIpID49IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9y Pj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21w KHMxLHMyLmRhdGEoKSkgPj0gMDsgfQoKICAgICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9y KyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmlu ZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAg ICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25z dCBjaGFyICpzMiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0g czI7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3Ir KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1w KCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5l IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAg UUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBjMjsKICAgIHJldHVybiB0bXA7 Cn0KCiAgICAgICAgIGlubGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNoYXIgYzEsIGNvbnN0IFFD U3RyaW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCAr PSBzMjsKICAgIHJldHVybiB0bXA7Cn0KIyA0NCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5n LmgiIDIKCgoKCgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFyUmVm OwoKY2xhc3MgUUNoYXIgewpwdWJsaWM6CiAgICBRQ2hhcigpOwogICAgUUNoYXIoIGNoYXIgYyAp OwogICAgUUNoYXIoIHVjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICk7CiAg ICBRQ2hhciggY29uc3QgUUNoYXImIGMgKTsKICAgIFFDaGFyKCB1c2hvcnQgcmMgKTsKICAgIFFD aGFyKCBzaG9ydCByYyApOwogICAgUUNoYXIoIHVpbnQgcmMgKTsKICAgIFFDaGFyKCBpbnQgcmMg KTsKCiAgICBzdGF0aWMgY29uc3QgUUNoYXIgbnVsbDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBy ZXBsYWNlbWVudDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJNYXJrOwogICAgc3Rh dGljIGNvbnN0IFFDaGFyIGJ5dGVPcmRlclN3YXBwZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIg bmJzcDsKCgoKICAgIGVudW0gQ2F0ZWdvcnkKICAgIHsKICAgICAgICBOb0NhdGVnb3J5LAoKICAg ICAgICBNYXJrX05vblNwYWNpbmcsCiAgICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nLAogICAg ICAgIE1hcmtfRW5jbG9zaW5nLAoKICAgICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0LAogICAgICAg IE51bWJlcl9MZXR0ZXIsCiAgICAgICAgTnVtYmVyX090aGVyLAoKICAgICAgICBTZXBhcmF0b3Jf U3BhY2UsCiAgICAgICAgU2VwYXJhdG9yX0xpbmUsCiAgICAgICAgU2VwYXJhdG9yX1BhcmFncmFw aCwKCiAgICAgICAgT3RoZXJfQ29udHJvbCwKICAgICAgICBPdGhlcl9Gb3JtYXQsCiAgICAgICAg T3RoZXJfU3Vycm9nYXRlLAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsCiAgICAgICAgT3RoZXJf Tm90QXNzaWduZWQsCgogICAgICAgIExldHRlcl9VcHBlcmNhc2UsCiAgICAgICAgTGV0dGVyX0xv d2VyY2FzZSwKICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLAogICAgICAgIExldHRlcl9Nb2RpZmll ciwKICAgICAgICBMZXR0ZXJfT3RoZXIsCgogICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciwK ICAgICAgICBQdW5jdHVhdGlvbl9EYXNrLAogICAgICAgIFB1bmN0dWF0aW9uX09wZW4sCiAgICAg ICAgUHVuY3R1YXRpb25fQ2xvc2UsCiAgICAgICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3RlLAog ICAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fT3RoZXIs CgogICAgICAgIFN5bWJvbF9NYXRoLAogICAgICAgIFN5bWJvbF9DdXJyZW5jeSwKICAgICAgICBT eW1ib2xfTW9kaWZpZXIsCiAgICAgICAgU3ltYm9sX090aGVyCiAgICB9OwoKICAgIGVudW0gRGly ZWN0aW9uCiAgICB7CiAgICAgICAgRGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwgRGly QU4sIERpckNTLCBEaXJCLCBEaXJTLCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBEaXJM Uk8sIERpckFMLCBEaXJSTEUsIERpclJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9OwoK ICAgIGVudW0gRGVjb21wb3NpdGlvbgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2FsLCBG b250LCBOb0JyZWFrLCBJbml0aWFsLCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVkLCBD aXJjbGUsIFN1cGVyLCBTdWIsIFZlcnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21hbGws IFNxdWFyZSwgQ29tcGF0LCBGcmFjdGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAgIHsK ICAgICAgICBPdGhlckpvaW5pbmcsIER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgoKCiAgICBp bnQgZGlnaXRWYWx1ZSgpIGNvbnN0OwogICAgUUNoYXIgbG93ZXIoKSBjb25zdDsKICAgIFFDaGFy IHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKICAgIERpcmVj dGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKICAgIEpvaW5pbmcgam9pbmluZygpIGNvbnN0OwogICAg Ym9vbCBtaXJyb3JlZCgpIGNvbnN0OwogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3Q7CiAg ICBRU3RyaW5nIGRlY29tcG9zaXRpb24oKSBjb25zdDsKICAgIERlY29tcG9zaXRpb24gZGVjb21w b3NpdGlvblRhZygpIGNvbnN0OwoKICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcncg PyAwIDogY2w7IH0KICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gKHJ3IDw8IDgp IHwgY2w7IH0KCgogICAgb3BlcmF0b3IgY2hhcigpIGNvbnN0IHsgcmV0dXJuIGxhdGluMSgpOyB9 CgoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdW5pY29kZSgpPT0wOyB9CiAgICBi b29sIGlzUHJpbnQoKSBjb25zdDsKICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0OwogICAgYm9vbCBp c1NwYWNlKCkgY29uc3Q7CiAgICBib29sIGlzTWFyaygpIGNvbnN0OwogICAgYm9vbCBpc0xldHRl cigpIGNvbnN0OwogICAgYm9vbCBpc051bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0xldHRlck9y TnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzRGlnaXQoKSBjb25zdDsKCiAgICB1Y2hhciYgY2Vs bCgpIHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciYgcm93KCkgeyByZXR1cm4gcnc7IH0KICAgIHVj aGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiBjbDsgfQogICAgdWNoYXIgcm93KCkgY29uc3QgeyBy ZXR1cm4gcnc7IH0KCiAgICBzdGF0aWMgYm9vbCBuZXR3b3JrT3JkZXJlZCgpIHsgcmV0dXJuIChp bnQpbmV0X29yZGVyZWQgPT0gMTsgfQoKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0o IGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFD aGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFy IGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNoYXIg YzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNo LCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBjLCBj aGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFy IGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBjaGFyIGNoLCBRQ2hhciBj ICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIgYzIg KTsKCnByaXZhdGU6CgoKCiAgICB1Y2hhciBydzsKICAgIHVjaGFyIGNsOwoKCgogICAgZW51bSB7 IG5ldF9vcmRlcmVkID0gMSB9OwojIDIwMiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgi Cn0gOwoKaW5saW5lIFFDaGFyOjpRQ2hhcigpCnsKICAgIHJ3ID0gMDsgY2wgPSAwOwoKCgp9Cmlu bGluZSBRQ2hhcjo6UUNoYXIoIGNoYXIgYyApCnsKICAgIHJ3ID0gMDsgY2wgPSAodWNoYXIpYzsK CgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCB1Y2hhciBjICkKewogICAgcncgPSAwOyBjbCA9IGM7 CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHJ3ID0g cjsgY2wgPSBjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkKewog ICAgcncgPSBjLnJ3OyBjbCA9IGMuY2w7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdXNob3J0 IHJjICkKewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYw eGZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVj aGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFD aGFyOjpRQ2hhciggdWludCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBj bCA9ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggaW50IHJjICkK ewogICAgcncgPSAodWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsK CgoKfQoKCmlubGluZSBpbnQgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJl dHVybiBjaCA9PSBjLmNsICYmICFjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFy IGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5l IGludCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wg PT0gYzIuY2wKICAgICAgICAmJiBjMS5ydyA9PSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRv ciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgIT0gYzIuY2wKICAg ICAgICB8fCBjMS5ydyAhPSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNo LCBRQ2hhciBjICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5lIGlu dCBvcGVyYXRvciE9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wg fHwgYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewog ICAgcmV0dXJuICEoY2ggPCBjLmNsIHx8IGMucncpOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0o IGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gY2ggPD0gYy5jbCB8fCBjLnJ3Owp9Cgpp bmxpbmUgaW50IG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBj MS5ydyA+IGMyLnJ3CiAgICAgICAgPyBGQUxTRQogICAgICAgIDogYzEucncgPCBjMi5ydwogICAg ICAgICAgICA/IFRSVUUKICAgICAgICAgICAgOiBjMS5jbCA8PSBjMi5jbDsKfQoKaW5saW5lIGlu dCBvcGVyYXRvcj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxp bmUgaW50IG9wZXJhdG9yPj0oIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiBjIDw9IGNoOyB9 CmlubGluZSBpbnQgb3BlcmF0b3I+PSggUUNoYXIgYzEsIFFDaGFyIGMyICkgeyByZXR1cm4gYzIg PD0gYzE7IH0KaW5saW5lIGludCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVy biAhKGNoPD1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPCggY2hhciBjaCwgUUNoYXIgYyApIHsg cmV0dXJuICEoYzw9Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I8KCBRQ2hhciBjMSwgUUNoYXIg YzIgKSB7IHJldHVybiAhKGMyPD1jMSk7IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMs IGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggY2hh ciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuICEoYz49Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+ KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiAhKGMyPj1jMSk7IH0KCgpzdHJ1Y3QgUVN0 cmluZ0RhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICBRU3RyaW5nRGF0YSgpIDoKICAgICAgICB1 bmljb2RlKDApLCBhc2NpaSgwKSwgbGVuKDApLCBtYXhsKDApLCBkaXJ0eWFzY2lpKDApIHsgcmVm KCk7IH0KICAgIFFTdHJpbmdEYXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgogICAgICAg IHVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIG1heGwobSksIGRpcnR5YXNjaWkoMCkgeyB9 CgogICAgflFTdHJpbmdEYXRhKCkgeyBpZiAoIHVuaWNvZGUgKSBkZWxldGVbXSAoKGNoYXIqKXVu aWNvZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIGFzY2lpICkgZGVsZXRlW10gYXNjaWk7 IH0KCiAgICB2b2lkIGRlbGV0ZVNlbGYoKTsKICAgIFFDaGFyICp1bmljb2RlOwogICAgY2hhciAq YXNjaWk7CiAgICB1aW50IGxlbjsKICAgIHVpbnQgbWF4bDozMDsKICAgIHVpbnQgZGlydHlhc2Np aToxOwp9OwoKCmNsYXNzIFFTdHJpbmcKewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3Ry aW5nKCBRQ2hhciApOwogICAgUVN0cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5n KCBjb25zdCBRQnl0ZUFycmF5JiApOwogICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUs IHVpbnQgbGVuZ3RoICk7CgogICAgUVN0cmluZyggY29uc3QgY2hhciAqc3RyICk7CgogICAgflFT dHJpbmcoKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJiApOwoKICAg IFFTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmb3BlcmF0 b3I9KCBjb25zdCBRQ1N0cmluZyYgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggUUNoYXIgYyAp OwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjaGFyIGMgKTsKCiAgICBzdGF0aWMgY29uc3QgUVN0 cmluZyBudWxsOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBj b25zdDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICB2b2lkIHRydW5jYXRlKCB1aW50IHBv cyApOwoKCgoKICAgIHZvaWQgZmlsbCggUUNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUVN0 cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUVN0cmluZyBhcmcobG9uZyBhLCBpbnQgZmllbGR3aWR0 aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1bG9uZyBhLCBpbnQgZmll bGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhpbnQgYSwgaW50 IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWludCBh LCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhz aG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5n IGFyZyh1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAg UVN0cmluZyBhcmcoY2hhciBhLCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcg YXJnKFFDaGFyIGEsIGludCBmaWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY29u c3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhk b3VibGUgYSwgaW50IGZpZWxkd2lkdGg9MCwgY2hhciBmbXQ9J2cnLCBpbnQgcHJlYz0tMSkgY29u c3Q7CgogICAgUVN0cmluZyAmc3ByaW50ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoKICAg ICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKCiAgICAgICAgOwoK ICAgIGludCBmaW5kKCBRQ2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7 CiAgICBpbnQgZmluZCggY2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7 CiAgICBpbnQgZmluZCggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1U UlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCAp IGNvbnN0OwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0wICkgY29u c3Q7CgogICAgaW50IGZpbmRSZXYoIFFDaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVF KSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1U UlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRl eD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhw ICYsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBz dHIsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9v bCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVF ICkgY29uc3QKICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwg Y3MpOyB9CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSAp IGNvbnN0OwoKICAgIGludCBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRS VUUgKSBjb25zdDsKICAgIGludCBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7Cgog ICAgUVN0cmluZyBsZWZ0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyByaWdodCggdWlu dCBsZW4gKSBjb25zdDsKICAgIFFTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZm ZmZmZmZmKSBjb25zdDsKCiAgICBRU3RyaW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hh ciBmaWxsPScgJywgYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKICAgIFFTdHJpbmcgcmlnaHRKdXN0 aWZ5KCB1aW50IHdpZHRoLCBRQ2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoK ICAgIFFTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgIFFTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAg ICBRU3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwogICAgUVN0cmluZyBzaW1wbGlmeVdo aXRlU3BhY2UoKSBjb25zdDsKCiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0 IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRQ2hh ciosIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIFFDaGFyICk7 CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNoYXIgYyApIHsgcmV0dXJuIGluc2Vy dChpbmRleCxRQ2hhcihjKSk7IH0KICAgIFFTdHJpbmcgJmFwcGVuZCggY2hhciApOwogICAgUVN0 cmluZyAmYXBwZW5kKCBRQ2hhciApOwogICAgUVN0cmluZyAmYXBwZW5kKCBjb25zdCBRU3RyaW5n ICYgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQo IFFDaGFyICk7CiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFT dHJpbmcgJnJlbW92ZSggdWludCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnJlcGxh Y2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcg JnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjb25zdCBRQ2hhciosIHVpbnQgY2xlbiAp OwogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3RyaW5nICYg KTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0Owog ICAgdXNob3J0IHRvVVNob3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAg aW50IHRvSW50KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWludCB0b1VJ bnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9uZyggYm9v bCAqb2s9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9r PTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkg Y29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRU3Ry aW5nICZzZXROdW0oIHNob3J0LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1 c2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50IGJhc2U9 MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJp bmcgJnNldE51bSggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWxv bmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFyIGY9J2cn LCBpbnQgcHJlYz02ICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBmPSdnJywg aW50IHByZWM9NiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50IGJhc2U9 MTAgKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggdWxvbmcsIGludCBiYXNlPTEwKTsKICAg IHN0YXRpYyBRU3RyaW5nIG51bWJlciggaW50LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFT dHJpbmcgbnVtYmVyKCB1aW50LCBpbnQgYmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1i ZXIoIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0RXhwYW5k KCB1aW50IGluZGV4LCBRQ2hhciBjICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggY29uc3Qg UVN0cmluZyAmc3RyICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBR U3RyaW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKCgogICAgUUNoYXIgYXQoIHVpbnQgaSApIGNv bnN0CiAgICAgICAgeyByZXR1cm4gaTxkLT5sZW4gPyBkLT51bmljb2RlW2ldIDogUUNoYXI6Om51 bGw7IH0KICAgIFFDaGFyIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gYXQoKHVp bnQpaSk7IH0KICAgIFFDaGFyUmVmIGF0KCB1aW50IGkgKTsKICAgIFFDaGFyUmVmIG9wZXJhdG9y W10oIGludCBpICk7CgogICAgUUNoYXIgY29uc3RyZWYodWludCBpKSBjb25zdAogICAgICAgIHsg cmV0dXJuIGF0KGkpOyB9CiAgICBRQ2hhciYgcmVmKHVpbnQgaSkKICAgICAgICB7CiAgICAgICAg ICAgIGlmIChkLT5jb3VudCE9MSB8fCBpPj1kLT5sZW4pCiAgICAgICAgICAgICAgICBzdWJhdChp KTsKICAgICAgICAgICAgZC0+ZGlydHlhc2NpaT0xOwogICAgICAgICAgICByZXR1cm4gZC0+dW5p Y29kZVtpXTsKICAgICAgICB9CgogICAgY29uc3QgUUNoYXIqIHVuaWNvZGUoKSBjb25zdCB7IHJl dHVybiBkLT51bmljb2RlOyB9CiAgICBjb25zdCBjaGFyKiBhc2NpaSgpIGNvbnN0OwogICAgY29u c3QgY2hhciogbGF0aW4xKCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNv bnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKCiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBz dGF0aWMgUVN0cmluZyBmcm9tVXRmOChjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNT dHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0 KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7Cgog ICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgog ICAgUVN0cmluZyAmc2V0VW5pY29kZSggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7 CiAgICBRU3RyaW5nICZzZXRVbmljb2RlQ29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191 c2hvcnRzLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwg aW50IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7 CiAgICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5n JiBzMiApCiAgICAgICAgeyByZXR1cm4gczEuY29tcGFyZShzMik7IH0KCgogICAgZnJpZW5kIFFE YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAg dm9pZCBjb21wb3NlKCk7CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGJhc2ljRGlyZWN0aW9uKCk7CiAg ICBRU3RyaW5nIHZpc3VhbChpbnQgaW5kZXggPSAwLCBpbnQgbGVuID0gLTEpOwoKCiAgICBjb25z dCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBzdGFy dHNXaXRoKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGlu dCBzaXplLCBib29sICk7CgogICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgp OwogICAgdm9pZCBzZXRMZW5ndGgoIHVpbnQgcG9zICk7CiAgICB2b2lkIHN1YmF0KCB1aW50ICk7 CiAgICBib29sIGZpbmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKCiAgICBzdGF0aWMg UUNoYXIqIGFzY2lpVG9Vbmljb2RlKCBjb25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWludCBtYXhs ZW49KHVpbnQpLTEgKTsKICAgIHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IFFC eXRlQXJyYXkmLCB1aW50ICogbGVuICk7CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRvQXNjaWko IGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRp YyBRU3RyaW5nRGF0YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VT aGFyZWROdWxsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIFFTdHJpbmco UVN0cmluZ0RhdGEqIGRkLCBib29sICkgOiBkKGRkKSB7IH0KfTsKCmNsYXNzIFFDaGFyUmVmIHsK ICAgIGZyaWVuZCBjbGFzcyBRU3RyaW5nOwogICAgUVN0cmluZyYgczsKICAgIHVpbnQgcDsKICAg IFFDaGFyUmVmKFFTdHJpbmcqIHN0ciwgdWludCBwb3MpIDogcygqc3RyKSwgcChwb3MpIHsgfQoK cHVibGljOgoKCgoKICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl ZihwKS51bmljb2RlKCk7IH0KICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcy5jb25z dHJlZihwKS5sYXRpbjEoKTsgfQoKCiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oY2hhciBjICkgeyBz LnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1Y2hhciBj ICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShR Q2hhciBjICkgeyBzLnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJh dG9yPShjb25zdCBRQ2hhclJlZiYgYyApIHsgcy5yZWYocCk9Yy51bmljb2RlKCk7IHJldHVybiAq dGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVzaG9ydCByYyApIHsgcy5yZWYocCk9cmM7 IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHNob3J0IHJjICkgeyBzLnJl ZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odWludCByYyAp IHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGlu dCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIFFDaGFy ICgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBj b25zdCB7IHJldHVybiB1bmljb2RlKCk9PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0IHsg cmV0dXJuIHMuY29uc3RyZWYocCkuaXNQcmludCgpOyB9CiAgICBib29sIGlzUHVuY3QoKSBjb25z dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzUHVuY3QoKTsgfQogICAgYm9vbCBpc1NwYWNlKCkg Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc1NwYWNlKCk7IH0KICAgIGJvb2wgaXNNYXJr KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc01hcmsoKTsgfQogICAgYm9vbCBpc0xl dHRlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNMZXR0ZXIoKTsgfQogICAgYm9v bCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNOdW1iZXIoKTsgfQog ICAgYm9vbCBpc0xldHRlck9yTnVtYmVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRl ck9yTnVtYmVyKCk7IH0KICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry ZWYocCkuaXNEaWdpdCgpOyB9CgogICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdCB7IHJldHVybiBz LmNvbnN0cmVmKHApLmRpZ2l0VmFsdWUoKTsgfQogICAgUUNoYXIgbG93ZXIoKSB7IHJldHVybiBz LmNvbnN0cmVmKHApLmxvd2VyKCk7IH0KICAgIFFDaGFyIHVwcGVyKCkgeyByZXR1cm4gcy5jb25z dHJlZihwKS51cHBlcigpOyB9CgogICAgUUNoYXI6OkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Qg eyByZXR1cm4gcy5jb25zdHJlZihwKS5jYXRlZ29yeSgpOyB9CiAgICBRQ2hhcjo6RGlyZWN0aW9u IGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlyZWN0aW9uKCk7IH0K ICAgIFFDaGFyOjpKb2luaW5nIGpvaW5pbmcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp LmpvaW5pbmcoKTsgfQogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3Ry ZWYocCkubWlycm9yZWQoKTsgfQogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3QgeyByZXR1 cm4gcy5jb25zdHJlZihwKS5taXJyb3JlZENoYXIoKTsgfQogICAgUVN0cmluZyBkZWNvbXBvc2l0 aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAg IFFDaGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBz LmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQoKCiAgICB1Y2hhciBjZWxsKCkgY29u c3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0 IHsgcmV0dXJuIHMuY29uc3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNoYXJSZWYgUVN0 cmluZzo6YXQoIHVpbnQgaSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0KaW5saW5lIFFD aGFyUmVmIFFTdHJpbmc6Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7 IH0KCgpjbGFzcyBRQ29uc3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBR Q29uc3RTdHJpbmcoIFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0 cmluZygpOwogICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7 IH0KfTsKCgoKCgoKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt ICYsIGNvbnN0IFFTdHJpbmcgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg UURhdGFTdHJlYW0gJiwgUVN0cmluZyAmICk7CiMgNjQxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz dHJpbmcuaCIKaW5saW5lIFFTdHJpbmc6OlFTdHJpbmcoKSA6CiAgICBkKHNoYXJlZF9udWxsID8g c2hhcmVkX251bGwgOiBtYWtlU2hhcmVkTnVsbCgpKQp7CiAgICBkLT5yZWYoKTsKfQoKaW5saW5l IFFTdHJpbmc6On5RU3RyaW5nKCkKewogICAgaWYgKCBkLT5kZXJlZigpICkgewogICAgICAgIGlm ICggZCA9PSBzaGFyZWRfbnVsbCApCiAgICAgICAgICAgIHNoYXJlZF9udWxsID0gMDsKICAgICAg ICBkLT5kZWxldGVTZWxmKCk7CiAgICB9Cn0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpvcGVy YXRvcj0oIFFDaGFyIGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoYyk7IH0KCmlubGluZSBR U3RyaW5nICZRU3RyaW5nOjpvcGVyYXRvcj0oIGNoYXIgYyApCnsgcmV0dXJuICp0aGlzID0gUVN0 cmluZyhRQ2hhcihjKSk7IH0KCmlubGluZSBib29sIFFTdHJpbmc6OmlzTnVsbCgpIGNvbnN0Cnsg cmV0dXJuIHVuaWNvZGUoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjpvcGVyYXRvciEo KSBjb25zdAp7IHJldHVybiBpc051bGwoKTsgfQoKaW5saW5lIHVpbnQgUVN0cmluZzo6bGVuZ3Ro KCkgY29uc3QKeyByZXR1cm4gZC0+bGVuOyB9CgppbmxpbmUgYm9vbCBRU3RyaW5nOjppc0VtcHR5 KCkgY29uc3QKeyByZXR1cm4gbGVuZ3RoKCkgPT0gMDsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmlu Zzo6Y29weSgpIGNvbnN0CnsgcmV0dXJuIFFTdHJpbmcoICp0aGlzICk7IH0KCmlubGluZSBRU3Ry aW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsgcmV0dXJuIGluc2Vy dCgwLHMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggUUNoYXIgYyApCnsg cmV0dXJuIGluc2VydCgwLGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCgg Y2hhciBjICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5n OjphcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoK aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggUUNoYXIgYyApCnsgcmV0dXJuIG9wZXJh dG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNoYXIgYyApCnsg cmV0dXJuIG9wZXJhdG9yKz0oYyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0o IHNob3J0IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9Cgpp bmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCB1c2hvcnQgbiwgaW50IGJhc2UgKQp7IHJl dHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6 c2V0TnVtKCBpbnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0oKGxvbmcpbiwgYmFzZSk7 IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHVpbnQgbiwgaW50IGJhc2UgKQp7 IHJldHVybiBzZXROdW0oKHVsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmlu Zzo6c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChk b3VibGUpbixmLHByZWMpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcoaW50IGEsIGlu dCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4gYXJnKChsb25nKWEsIGZpZWxk d2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjphcmcodWludCBhLCBpbnQg ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3 aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmFyZyhzaG9ydCBhLCBpbnQg ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdp ZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmluZzo6YXJnKHVzaG9ydCBhLCBpbnQg ZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0CnsgcmV0dXJuIGFyZygodWxvbmcpYSwgZmllbGR3 aWR0aCwgYmFzZSk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY2hhciBjLCBpbnQgaW5k ZXgsIGJvb2wgY3MgKSBjb25zdAp7IHJldHVybiBmaW5kKFFDaGFyKGMpLCBpbmRleCwgY3MpOyB9 CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNz KSBjb25zdAp7IHJldHVybiBmaW5kUmV2KCBRQ2hhcihjKSwgaW5kZXgsIGNzICk7IH0KCgoKaW5s aW5lIGludCBRU3RyaW5nOjpmaW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0 CnsgcmV0dXJuIGZpbmQoUVN0cmluZzo6ZnJvbUxhdGluMShzdHIpLCBpbmRleCk7IH0KCmlubGlu ZSBpbnQgUVN0cmluZzo6ZmluZFJldiggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXggKSBjb25z dAp7IHJldHVybiBmaW5kUmV2KFFTdHJpbmc6OmZyb21MYXRpbjEoc3RyKSwgaW5kZXgpOyB9CgoK CgoKCgogICAgICAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBR U3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAmczEs IGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVN0 cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PSgg Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3Bl cmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICAgICAgICAg Ym9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsK CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIg KnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3Qg Y2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZzMSwg Y29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5n ICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj4oIGNvbnN0IFFT dHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNv bnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9y IT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9w ZXJhdG9yPCggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJv b2wgb3BlcmF0b3I8PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgICAg ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7 CgogICAgICAgICBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5n ICZzMiApOwoKCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmlu ZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0 bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3Bl cmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRU3RyaW5n IHRtcCggczEgKTsKICAgIHRtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKHMyKTsKICAgIHJldHVy biB0bXA7Cn0KCiAgICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAq czEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9t TGF0aW4xKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiAgICAgICAg IGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkK ewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9 CgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBj aGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1 cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIFFDaGFyIGMxLCBj b25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAg dG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3Bl cmF0b3IrKCBjaGFyIGMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwog ICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ1ICJrZXJu ZWwvcXdpbmRvd2RlZnMuaCIgMgojIDEgImtlcm5lbC9xbmFtZXNwYWNlLmgiIDEKIyA0MiAia2Vy bmVsL3FuYW1lc3BhY2UuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQoj IDQzICJrZXJuZWwvcW5hbWVzcGFjZS5oIiAyCgoKCmNsYXNzIFFDb2xvcjsKY2xhc3MgUUN1cnNv cjsKCgpjbGFzcyBRdCB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBjb2xvcjA7 CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgY29sb3IxOwogICAgc3RhdGljIGNvbnN0IFFDb2xv ciAmIGJsYWNrOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIHdoaXRlOwogICAgc3RhdGljIGNv bnN0IFFDb2xvciAmIGRhcmtHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGdyYXk7CiAg ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgbGlnaHRHcmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xv ciAmIHJlZDsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBncmVlbjsKICAgIHN0YXRpYyBjb25z dCBRQ29sb3IgJiBibHVlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGN5YW47CiAgICBzdGF0 aWMgY29uc3QgUUNvbG9yICYgbWFnZW50YTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB5ZWxs b3c7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1JlZDsKICAgIHN0YXRpYyBjb25zdCBR Q29sb3IgJiBkYXJrR3JlZW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0JsdWU7CiAg ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0N5YW47CiAgICBzdGF0aWMgY29uc3QgUUNvbG9y ICYgZGFya01hZ2VudGE7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya1llbGxvdzsKCgog ICAgZW51bSBCdXR0b25TdGF0ZSB7CiAgICAgICAgTm9CdXR0b24gPSAweDAwMDAsCiAgICAgICAg TGVmdEJ1dHRvbiA9IDB4MDAwMSwKICAgICAgICBSaWdodEJ1dHRvbiA9IDB4MDAwMiwKICAgICAg ICBNaWRCdXR0b24gPSAweDAwMDQsCiAgICAgICAgTW91c2VCdXR0b25NYXNrID0gMHgwMDA3LAog ICAgICAgIFNoaWZ0QnV0dG9uID0gMHgwMDA4LAogICAgICAgIENvbnRyb2xCdXR0b24gPSAweDAw MTAsCiAgICAgICAgQWx0QnV0dG9uID0gMHgwMDIwLAogICAgICAgIEtleUJ1dHRvbk1hc2sgPSAw eDAwMzgsCiAgICAgICAgS2V5cGFkID0gMHg0MDAwCiAgICB9OwoKCiAgICBlbnVtIE9yaWVudGF0 aW9uIHsKICAgICAgICBIb3Jpem9udGFsLAogICAgICAgIFZlcnRpY2FsCiAgICB9OwoKCgoKICAg IGVudW0gQWxpZ25tZW50RmxhZ3MgewogICAgICAgIEFsaWduTGVmdCA9IDB4MDAwMSwKICAgICAg ICBBbGlnblJpZ2h0ID0gMHgwMDAyLAogICAgICAgIEFsaWduSENlbnRlciA9IDB4MDAwNCwKICAg ICAgICBBbGlnblRvcCA9IDB4MDAwOCwKICAgICAgICBBbGlnbkJvdHRvbSA9IDB4MDAxMCwKICAg ICAgICBBbGlnblZDZW50ZXIgPSAweDAwMjAsCiAgICAgICAgQWxpZ25DZW50ZXIgPSBBbGlnblZD ZW50ZXIgfCBBbGlnbkhDZW50ZXIsCgogICAgICAgIFNpbmdsZUxpbmUgPSAweDAwNDAsCiAgICAg ICAgRG9udENsaXAgPSAweDAwODAsCiAgICAgICAgRXhwYW5kVGFicyA9IDB4MDEwMCwKICAgICAg ICBTaG93UHJlZml4ID0gMHgwMjAwLAogICAgICAgIFdvcmRCcmVhayA9IDB4MDQwMCwKICAgICAg ICBEb250UHJpbnQgPSAweDEwMDAKICAgIH07CgoKICAgIGVudW0gV2lkZ2V0U3RhdGUgewogICAg ICAgIFdTdGF0ZV9DcmVhdGVkID0gMHgwMDAwMDAwMSwKICAgICAgICBXU3RhdGVfRGlzYWJsZWQg PSAweDAwMDAwMDAyLAogICAgICAgIFdTdGF0ZV9WaXNpYmxlID0gMHgwMDAwMDAwNCwKICAgICAg ICBXU3RhdGVfRm9yY2VIaWRlID0gMHgwMDAwMDAwOCwKICAgICAgICBXU3RhdGVfT3duQ3Vyc29y ID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3RhdGVfTW91c2VUcmFja2luZyA9IDB4MDAwMDAwMjAs CiAgICAgICAgV1N0YXRlX0NvbXByZXNzS2V5cyA9IDB4MDAwMDAwNDAsCiAgICAgICAgV1N0YXRl X0Jsb2NrVXBkYXRlcyA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0YXRlX0luUGFpbnRFdmVudCA9 IDB4MDAwMDAxMDAsCiAgICAgICAgV1N0YXRlX1JlcGFyZW50ZWQgPSAweDAwMDAwMjAwLAogICAg ICAgIFdTdGF0ZV9Db25maWdQZW5kaW5nID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3RhdGVfUmVz aXplZCA9IDB4MDAwMDA4MDAsCiAgICAgICAgV1N0YXRlX0F1dG9NYXNrID0gMHgwMDAwMTAwMCwK ICAgICAgICBXU3RhdGVfUG9saXNoZWQgPSAweDAwMDAyMDAwLAogICAgICAgIFdTdGF0ZV9ETkQg PSAweDAwMDA0MDAwLAogICAgICAgIFdTdGF0ZV9Nb2RhbCA9IDB4MDAwMDgwMDAsCiAgICAgICAg V1N0YXRlX1Jlc2VydmVkMSA9IDB4MDAwMTAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMiA9 IDB4MDAwMjAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMyA9IDB4MDAwNDAwMDAsCiAgICAg ICAgV1N0YXRlX01heGltaXplZCA9IDB4MDAwODAwMDAsCiAgICAgICAgV1N0YXRlX1RyYW5zbGF0 ZUJhY2tncm91bmQgPSAweDAwMTAwMDAwLAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0g MHgwMDIwMDAwMCwKICAgICAgICBXU3RhdGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAKICAgIH07CgoK ICAgIHR5cGVkZWYgdWludCBXRmxhZ3M7CgoKICAgIGVudW0gV2lkZ2V0RmxhZ3MgewogICAgICAg IFdUeXBlX1RvcExldmVsID0gMHgwMDAwMDAwMSwKICAgICAgICBXVHlwZV9Nb2RhbCA9IDB4MDAw MDAwMDIsCiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAogICAgICAgIFdUeXBlX0Rl c2t0b3AgPSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAweDAwMDAwMDBmLAoKICAg ICAgICBXU3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAgICBXU3R5bGVfTm9ybWFs Qm9yZGVyID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9nQm9yZGVyID0gMHgwMDAw MDA0MCwKICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAwMDAwLAogICAgICAgIFdTdHls ZV9UaXRsZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01lbnUgPSAweDAwMDAwMTAw LAogICAgICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0eWxlX01h eGltaXplID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4ID0gV1N0eWxlX01pbmlt aXplIHwgV1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29sID0gMHgwMDAwMDgwMCwK ICAgICAgICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAgICAgICAgV1N0eWxlX0Rp YWxvZyA9IDB4MDAwMDIwMDAsCiAgICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAw MCwKICAgICAgICBXU3R5bGVfTm9Cb3JkZXJFeCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0eWxl X01hc2sgPSAweDAwMDBmZmYwLAoKICAgICAgICBXRGVzdHJ1Y3RpdmVDbG9zZSA9IDB4MDAwMTAw MDAsCiAgICAgICAgV1BhaW50RGVza3RvcCA9IDB4MDAwMjAwMDAsCiAgICAgICAgV1BhaW50VW5j bGlwcGVkID0gMHgwMDA0MDAwMCwKICAgICAgICBXUGFpbnRDbGV2ZXIgPSAweDAwMDgwMDAwLAog ICAgICAgIFdSZXNpemVOb0VyYXNlID0gMHgwMDEwMDAwMCwKICAgICAgICBXTW91c2VOb01hc2sg PSAweDAwMjAwMDAwLAogICAgICAgIFdOb3J0aFdlc3RHcmF2aXR5ID0gMHgwMDQwMDAwMCwKICAg ICAgICBXUmVwYWludE5vRXJhc2UgPSAweDAwODAwMDAwLAogICAgICAgIFdYMTFCeXBhc3NXTSA9 IDB4MDEwMDAwMDAsCiAgICAgICAgV0dyb3VwTGVhZGVyID0gMHgwMjAwMDAwMAoKICAgIH07CgoK CgogICAgZW51bSBJbWFnZUNvbnZlcnNpb25GbGFncyB7CiAgICAgICAgQ29sb3JNb2RlX01hc2sg PSAweDAwMDAwMDAzLAogICAgICAgIEF1dG9Db2xvciA9IDB4MDAwMDAwMDAsCiAgICAgICAgQ29s b3JPbmx5ID0gMHgwMDAwMDAwMywKICAgICAgICBNb25vT25seSA9IDB4MDAwMDAwMDIsCgoKICAg ICAgICBBbHBoYURpdGhlcl9NYXNrID0gMHgwMDAwMDAwYywKICAgICAgICBUaHJlc2hvbGRBbHBo YURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZEFscGhhRGl0aGVyID0gMHgwMDAw MDAwNCwKICAgICAgICBEaWZmdXNlQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA4LAogICAgICAgIE5v QWxwaGEgPSAweDAwMDAwMDBjLAoKICAgICAgICBEaXRoZXJfTWFzayA9IDB4MDAwMDAwMzAsCiAg ICAgICAgRGlmZnVzZURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZERpdGhlciA9 IDB4MDAwMDAwMTAsCiAgICAgICAgVGhyZXNob2xkRGl0aGVyID0gMHgwMDAwMDAyMCwKCgogICAg ICAgIERpdGhlck1vZGVfTWFzayA9IDB4MDAwMDAwYzAsCiAgICAgICAgQXV0b0RpdGhlciA9IDB4 MDAwMDAwMDAsCiAgICAgICAgUHJlZmVyRGl0aGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBBdm9p ZERpdGhlciA9IDB4MDAwMDAwODAKICAgIH07CgogICAgZW51bSBCR01vZGUgewogICAgICAgIFRy YW5zcGFyZW50TW9kZSwKICAgICAgICBPcGFxdWVNb2RlCiAgICB9OwoKICAgIGVudW0gUGFpbnRV bml0IHsKICAgICAgICBQaXhlbFVuaXQsCiAgICAgICAgTG9NZXRyaWNVbml0LAogICAgICAgIEhp TWV0cmljVW5pdCwKICAgICAgICBMb0VuZ2xpc2hVbml0LAogICAgICAgIEhpRW5nbGlzaFVuaXQs CiAgICAgICAgVHdpcHNVbml0CiAgICB9OwoKICAgIGVudW0gR1VJU3R5bGUgewogICAgICAgIE1h Y1N0eWxlLAogICAgICAgIFdpbmRvd3NTdHlsZSwKICAgICAgICBXaW4zU3R5bGUsCiAgICAgICAg UE1TdHlsZSwKICAgICAgICBNb3RpZlN0eWxlCiAgICB9OwoKICAgIGVudW0gTW9kaWZpZXIgewog ICAgICAgIFNISUZUID0gMHgwMDIwMDAwMCwKICAgICAgICBDVFJMID0gMHgwMDQwMDAwMCwKICAg ICAgICBBTFQgPSAweDAwODAwMDAwLAogICAgICAgIE1PRElGSUVSX01BU0sgPSAweDAwZTAwMDAw LAogICAgICAgIFVOSUNPREVfQUNDRUwgPSAweDEwMDAwMDAwLAoKICAgICAgICBBU0NJSV9BQ0NF TCA9IFVOSUNPREVfQUNDRUwKICAgIH07CgogICAgZW51bSBLZXkgewogICAgICAgIEtleV9Fc2Nh cGUgPSAweDEwMDAsCiAgICAgICAgS2V5X1RhYiA9IDB4MTAwMSwKICAgICAgICBLZXlfQmFja3Rh YiA9IDB4MTAwMiwgS2V5X0JhY2tUYWIgPSBLZXlfQmFja3RhYiwKICAgICAgICBLZXlfQmFja3Nw YWNlID0gMHgxMDAzLCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFjZSwKICAgICAgICBLZXlf UmV0dXJuID0gMHgxMDA0LAogICAgICAgIEtleV9FbnRlciA9IDB4MTAwNSwKICAgICAgICBLZXlf SW5zZXJ0ID0gMHgxMDA2LAogICAgICAgIEtleV9EZWxldGUgPSAweDEwMDcsCiAgICAgICAgS2V5 X1BhdXNlID0gMHgxMDA4LAogICAgICAgIEtleV9QcmludCA9IDB4MTAwOSwKICAgICAgICBLZXlf U3lzUmVxID0gMHgxMDBhLAogICAgICAgIEtleV9Ib21lID0gMHgxMDEwLAogICAgICAgIEtleV9F bmQgPSAweDEwMTEsCiAgICAgICAgS2V5X0xlZnQgPSAweDEwMTIsCiAgICAgICAgS2V5X1VwID0g MHgxMDEzLAogICAgICAgIEtleV9SaWdodCA9IDB4MTAxNCwKICAgICAgICBLZXlfRG93biA9IDB4 MTAxNSwKICAgICAgICBLZXlfUHJpb3IgPSAweDEwMTYsIEtleV9QYWdlVXAgPSBLZXlfUHJpb3Is CiAgICAgICAgS2V5X05leHQgPSAweDEwMTcsIEtleV9QYWdlRG93biA9IEtleV9OZXh0LAogICAg ICAgIEtleV9TaGlmdCA9IDB4MTAyMCwKICAgICAgICBLZXlfQ29udHJvbCA9IDB4MTAyMSwKICAg ICAgICBLZXlfTWV0YSA9IDB4MTAyMiwKICAgICAgICBLZXlfQWx0ID0gMHgxMDIzLAogICAgICAg IEtleV9DYXBzTG9jayA9IDB4MTAyNCwKICAgICAgICBLZXlfTnVtTG9jayA9IDB4MTAyNSwKICAg ICAgICBLZXlfU2Nyb2xsTG9jayA9IDB4MTAyNiwKICAgICAgICBLZXlfRjEgPSAweDEwMzAsCiAg ICAgICAgS2V5X0YyID0gMHgxMDMxLAogICAgICAgIEtleV9GMyA9IDB4MTAzMiwKICAgICAgICBL ZXlfRjQgPSAweDEwMzMsCiAgICAgICAgS2V5X0Y1ID0gMHgxMDM0LAogICAgICAgIEtleV9GNiA9 IDB4MTAzNSwKICAgICAgICBLZXlfRjcgPSAweDEwMzYsCiAgICAgICAgS2V5X0Y4ID0gMHgxMDM3 LAogICAgICAgIEtleV9GOSA9IDB4MTAzOCwKICAgICAgICBLZXlfRjEwID0gMHgxMDM5LAogICAg ICAgIEtleV9GMTEgPSAweDEwM2EsCiAgICAgICAgS2V5X0YxMiA9IDB4MTAzYiwKICAgICAgICBL ZXlfRjEzID0gMHgxMDNjLAogICAgICAgIEtleV9GMTQgPSAweDEwM2QsCiAgICAgICAgS2V5X0Yx NSA9IDB4MTAzZSwKICAgICAgICBLZXlfRjE2ID0gMHgxMDNmLAogICAgICAgIEtleV9GMTcgPSAw eDEwNDAsCiAgICAgICAgS2V5X0YxOCA9IDB4MTA0MSwKICAgICAgICBLZXlfRjE5ID0gMHgxMDQy LAogICAgICAgIEtleV9GMjAgPSAweDEwNDMsCiAgICAgICAgS2V5X0YyMSA9IDB4MTA0NCwKICAg ICAgICBLZXlfRjIyID0gMHgxMDQ1LAogICAgICAgIEtleV9GMjMgPSAweDEwNDYsCiAgICAgICAg S2V5X0YyNCA9IDB4MTA0NywKICAgICAgICBLZXlfRjI1ID0gMHgxMDQ4LAogICAgICAgIEtleV9G MjYgPSAweDEwNDksCiAgICAgICAgS2V5X0YyNyA9IDB4MTA0YSwKICAgICAgICBLZXlfRjI4ID0g MHgxMDRiLAogICAgICAgIEtleV9GMjkgPSAweDEwNGMsCiAgICAgICAgS2V5X0YzMCA9IDB4MTA0 ZCwKICAgICAgICBLZXlfRjMxID0gMHgxMDRlLAogICAgICAgIEtleV9GMzIgPSAweDEwNGYsCiAg ICAgICAgS2V5X0YzMyA9IDB4MTA1MCwKICAgICAgICBLZXlfRjM0ID0gMHgxMDUxLAogICAgICAg IEtleV9GMzUgPSAweDEwNTIsCiAgICAgICAgS2V5X1N1cGVyX0wgPSAweDEwNTMsCiAgICAgICAg S2V5X1N1cGVyX1IgPSAweDEwNTQsCiAgICAgICAgS2V5X01lbnUgPSAweDEwNTUsCiAgICAgICAg S2V5X0h5cGVyX0wgPSAweDEwNTYsCiAgICAgICAgS2V5X0h5cGVyX1IgPSAweDEwNTcsCiAgICAg ICAgS2V5X0hlbHAgPSAweDEwNTgsCiAgICAgICAgS2V5X1NwYWNlID0gMHgyMCwKICAgICAgICBL ZXlfQW55ID0gS2V5X1NwYWNlLAogICAgICAgIEtleV9FeGNsYW0gPSAweDIxLAogICAgICAgIEtl eV9RdW90ZURibCA9IDB4MjIsCiAgICAgICAgS2V5X051bWJlclNpZ24gPSAweDIzLAogICAgICAg IEtleV9Eb2xsYXIgPSAweDI0LAogICAgICAgIEtleV9QZXJjZW50ID0gMHgyNSwKICAgICAgICBL ZXlfQW1wZXJzYW5kID0gMHgyNiwKICAgICAgICBLZXlfQXBvc3Ryb3BoZSA9IDB4MjcsCiAgICAg ICAgS2V5X1BhcmVuTGVmdCA9IDB4MjgsCiAgICAgICAgS2V5X1BhcmVuUmlnaHQgPSAweDI5LAog ICAgICAgIEtleV9Bc3RlcmlzayA9IDB4MmEsCiAgICAgICAgS2V5X1BsdXMgPSAweDJiLAogICAg ICAgIEtleV9Db21tYSA9IDB4MmMsCiAgICAgICAgS2V5X01pbnVzID0gMHgyZCwKICAgICAgICBL ZXlfUGVyaW9kID0gMHgyZSwKICAgICAgICBLZXlfU2xhc2ggPSAweDJmLAogICAgICAgIEtleV8w ID0gMHgzMCwKICAgICAgICBLZXlfMSA9IDB4MzEsCiAgICAgICAgS2V5XzIgPSAweDMyLAogICAg ICAgIEtleV8zID0gMHgzMywKICAgICAgICBLZXlfNCA9IDB4MzQsCiAgICAgICAgS2V5XzUgPSAw eDM1LAogICAgICAgIEtleV82ID0gMHgzNiwKICAgICAgICBLZXlfNyA9IDB4MzcsCiAgICAgICAg S2V5XzggPSAweDM4LAogICAgICAgIEtleV85ID0gMHgzOSwKICAgICAgICBLZXlfQ29sb24gPSAw eDNhLAogICAgICAgIEtleV9TZW1pY29sb24gPSAweDNiLAogICAgICAgIEtleV9MZXNzID0gMHgz YywKICAgICAgICBLZXlfRXF1YWwgPSAweDNkLAogICAgICAgIEtleV9HcmVhdGVyID0gMHgzZSwK ICAgICAgICBLZXlfUXVlc3Rpb24gPSAweDNmLAogICAgICAgIEtleV9BdCA9IDB4NDAsCiAgICAg ICAgS2V5X0EgPSAweDQxLAogICAgICAgIEtleV9CID0gMHg0MiwKICAgICAgICBLZXlfQyA9IDB4 NDMsCiAgICAgICAgS2V5X0QgPSAweDQ0LAogICAgICAgIEtleV9FID0gMHg0NSwKICAgICAgICBL ZXlfRiA9IDB4NDYsCiAgICAgICAgS2V5X0cgPSAweDQ3LAogICAgICAgIEtleV9IID0gMHg0OCwK ICAgICAgICBLZXlfSSA9IDB4NDksCiAgICAgICAgS2V5X0ogPSAweDRhLAogICAgICAgIEtleV9L ID0gMHg0YiwKICAgICAgICBLZXlfTCA9IDB4NGMsCiAgICAgICAgS2V5X00gPSAweDRkLAogICAg ICAgIEtleV9OID0gMHg0ZSwKICAgICAgICBLZXlfTyA9IDB4NGYsCiAgICAgICAgS2V5X1AgPSAw eDUwLAogICAgICAgIEtleV9RID0gMHg1MSwKICAgICAgICBLZXlfUiA9IDB4NTIsCiAgICAgICAg S2V5X1MgPSAweDUzLAogICAgICAgIEtleV9UID0gMHg1NCwKICAgICAgICBLZXlfVSA9IDB4NTUs CiAgICAgICAgS2V5X1YgPSAweDU2LAogICAgICAgIEtleV9XID0gMHg1NywKICAgICAgICBLZXlf WCA9IDB4NTgsCiAgICAgICAgS2V5X1kgPSAweDU5LAogICAgICAgIEtleV9aID0gMHg1YSwKICAg ICAgICBLZXlfQnJhY2tldExlZnQgPSAweDViLAogICAgICAgIEtleV9CYWNrc2xhc2ggPSAweDVj LAogICAgICAgIEtleV9CcmFja2V0UmlnaHQgPSAweDVkLAogICAgICAgIEtleV9Bc2NpaUNpcmN1 bSA9IDB4NWUsCiAgICAgICAgS2V5X1VuZGVyc2NvcmUgPSAweDVmLAogICAgICAgIEtleV9RdW90 ZUxlZnQgPSAweDYwLAogICAgICAgIEtleV9CcmFjZUxlZnQgPSAweDdiLAogICAgICAgIEtleV9C YXIgPSAweDdjLAogICAgICAgIEtleV9CcmFjZVJpZ2h0ID0gMHg3ZCwKICAgICAgICBLZXlfQXNj aWlUaWxkZSA9IDB4N2UsCgoKCiAgICAgICAgS2V5X25vYnJlYWtzcGFjZSA9IDB4MGEwLAogICAg ICAgIEtleV9leGNsYW1kb3duID0gMHgwYTEsCiAgICAgICAgS2V5X2NlbnQgPSAweDBhMiwKICAg ICAgICBLZXlfc3RlcmxpbmcgPSAweDBhMywKICAgICAgICBLZXlfY3VycmVuY3kgPSAweDBhNCwK ICAgICAgICBLZXlfeWVuID0gMHgwYTUsCiAgICAgICAgS2V5X2Jyb2tlbmJhciA9IDB4MGE2LAog ICAgICAgIEtleV9zZWN0aW9uID0gMHgwYTcsCiAgICAgICAgS2V5X2RpYWVyZXNpcyA9IDB4MGE4 LAogICAgICAgIEtleV9jb3B5cmlnaHQgPSAweDBhOSwKICAgICAgICBLZXlfb3JkZmVtaW5pbmUg PSAweDBhYSwKICAgICAgICBLZXlfZ3VpbGxlbW90bGVmdCA9IDB4MGFiLAogICAgICAgIEtleV9u b3RzaWduID0gMHgwYWMsCiAgICAgICAgS2V5X2h5cGhlbiA9IDB4MGFkLAogICAgICAgIEtleV9y ZWdpc3RlcmVkID0gMHgwYWUsCiAgICAgICAgS2V5X21hY3JvbiA9IDB4MGFmLAogICAgICAgIEtl eV9kZWdyZWUgPSAweDBiMCwKICAgICAgICBLZXlfcGx1c21pbnVzID0gMHgwYjEsCiAgICAgICAg S2V5X3R3b3N1cGVyaW9yID0gMHgwYjIsCiAgICAgICAgS2V5X3RocmVlc3VwZXJpb3IgPSAweDBi MywKICAgICAgICBLZXlfYWN1dGUgPSAweDBiNCwKICAgICAgICBLZXlfbXUgPSAweDBiNSwKICAg ICAgICBLZXlfcGFyYWdyYXBoID0gMHgwYjYsCiAgICAgICAgS2V5X3BlcmlvZGNlbnRlcmVkID0g MHgwYjcsCiAgICAgICAgS2V5X2NlZGlsbGEgPSAweDBiOCwKICAgICAgICBLZXlfb25lc3VwZXJp b3IgPSAweDBiOSwKICAgICAgICBLZXlfbWFzY3VsaW5lID0gMHgwYmEsCiAgICAgICAgS2V5X2d1 aWxsZW1vdHJpZ2h0ID0gMHgwYmIsCiAgICAgICAgS2V5X29uZXF1YXJ0ZXIgPSAweDBiYywKICAg ICAgICBLZXlfb25laGFsZiA9IDB4MGJkLAogICAgICAgIEtleV90aHJlZXF1YXJ0ZXJzID0gMHgw YmUsCiAgICAgICAgS2V5X3F1ZXN0aW9uZG93biA9IDB4MGJmLAogICAgICAgIEtleV9BZ3JhdmUg PSAweDBjMCwKICAgICAgICBLZXlfQWFjdXRlID0gMHgwYzEsCiAgICAgICAgS2V5X0FjaXJjdW1m bGV4ID0gMHgwYzIsCiAgICAgICAgS2V5X0F0aWxkZSA9IDB4MGMzLAogICAgICAgIEtleV9BZGlh ZXJlc2lzID0gMHgwYzQsCiAgICAgICAgS2V5X0FyaW5nID0gMHgwYzUsCiAgICAgICAgS2V5X0FF ID0gMHgwYzYsCiAgICAgICAgS2V5X0NjZWRpbGxhID0gMHgwYzcsCiAgICAgICAgS2V5X0VncmF2 ZSA9IDB4MGM4LAogICAgICAgIEtleV9FYWN1dGUgPSAweDBjOSwKICAgICAgICBLZXlfRWNpcmN1 bWZsZXggPSAweDBjYSwKICAgICAgICBLZXlfRWRpYWVyZXNpcyA9IDB4MGNiLAogICAgICAgIEtl eV9JZ3JhdmUgPSAweDBjYywKICAgICAgICBLZXlfSWFjdXRlID0gMHgwY2QsCiAgICAgICAgS2V5 X0ljaXJjdW1mbGV4ID0gMHgwY2UsCiAgICAgICAgS2V5X0lkaWFlcmVzaXMgPSAweDBjZiwKICAg ICAgICBLZXlfRVRIID0gMHgwZDAsCiAgICAgICAgS2V5X050aWxkZSA9IDB4MGQxLAogICAgICAg IEtleV9PZ3JhdmUgPSAweDBkMiwKICAgICAgICBLZXlfT2FjdXRlID0gMHgwZDMsCiAgICAgICAg S2V5X09jaXJjdW1mbGV4ID0gMHgwZDQsCiAgICAgICAgS2V5X090aWxkZSA9IDB4MGQ1LAogICAg ICAgIEtleV9PZGlhZXJlc2lzID0gMHgwZDYsCiAgICAgICAgS2V5X211bHRpcGx5ID0gMHgwZDcs CiAgICAgICAgS2V5X09vYmxpcXVlID0gMHgwZDgsCiAgICAgICAgS2V5X1VncmF2ZSA9IDB4MGQ5 LAogICAgICAgIEtleV9VYWN1dGUgPSAweDBkYSwKICAgICAgICBLZXlfVWNpcmN1bWZsZXggPSAw eDBkYiwKICAgICAgICBLZXlfVWRpYWVyZXNpcyA9IDB4MGRjLAogICAgICAgIEtleV9ZYWN1dGUg PSAweDBkZCwKICAgICAgICBLZXlfVEhPUk4gPSAweDBkZSwKICAgICAgICBLZXlfc3NoYXJwID0g MHgwZGYsCiAgICAgICAgS2V5X2FncmF2ZSA9IDB4MGUwLAogICAgICAgIEtleV9hYWN1dGUgPSAw eDBlMSwKICAgICAgICBLZXlfYWNpcmN1bWZsZXggPSAweDBlMiwKICAgICAgICBLZXlfYXRpbGRl ID0gMHgwZTMsCiAgICAgICAgS2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKICAgICAgICBLZXlfYXJp bmcgPSAweDBlNSwKICAgICAgICBLZXlfYWUgPSAweDBlNiwKICAgICAgICBLZXlfY2NlZGlsbGEg PSAweDBlNywKICAgICAgICBLZXlfZWdyYXZlID0gMHgwZTgsCiAgICAgICAgS2V5X2VhY3V0ZSA9 IDB4MGU5LAogICAgICAgIEtleV9lY2lyY3VtZmxleCA9IDB4MGVhLAogICAgICAgIEtleV9lZGlh ZXJlc2lzID0gMHgwZWIsCiAgICAgICAgS2V5X2lncmF2ZSA9IDB4MGVjLAogICAgICAgIEtleV9p YWN1dGUgPSAweDBlZCwKICAgICAgICBLZXlfaWNpcmN1bWZsZXggPSAweDBlZSwKICAgICAgICBL ZXlfaWRpYWVyZXNpcyA9IDB4MGVmLAogICAgICAgIEtleV9ldGggPSAweDBmMCwKICAgICAgICBL ZXlfbnRpbGRlID0gMHgwZjEsCiAgICAgICAgS2V5X29ncmF2ZSA9IDB4MGYyLAogICAgICAgIEtl eV9vYWN1dGUgPSAweDBmMywKICAgICAgICBLZXlfb2NpcmN1bWZsZXggPSAweDBmNCwKICAgICAg ICBLZXlfb3RpbGRlID0gMHgwZjUsCiAgICAgICAgS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKICAg ICAgICBLZXlfZGl2aXNpb24gPSAweDBmNywKICAgICAgICBLZXlfb3NsYXNoID0gMHgwZjgsCiAg ICAgICAgS2V5X3VncmF2ZSA9IDB4MGY5LAogICAgICAgIEtleV91YWN1dGUgPSAweDBmYSwKICAg ICAgICBLZXlfdWNpcmN1bWZsZXggPSAweDBmYiwKICAgICAgICBLZXlfdWRpYWVyZXNpcyA9IDB4 MGZjLAogICAgICAgIEtleV95YWN1dGUgPSAweDBmZCwKICAgICAgICBLZXlfdGhvcm4gPSAweDBm ZSwKICAgICAgICBLZXlfeWRpYWVyZXNpcyA9IDB4MGZmLAoKICAgICAgICBLZXlfdW5rbm93biA9 IDB4ZmZmZgogICAgfTsKCiAgICBlbnVtIEFycm93VHlwZSB7CiAgICAgICAgVXBBcnJvdywKICAg ICAgICBEb3duQXJyb3csCiAgICAgICAgTGVmdEFycm93LAogICAgICAgIFJpZ2h0QXJyb3cKICAg IH07CgoKICAgIGVudW0gUmFzdGVyT3AgewogICAgICAgIENvcHlST1AsCiAgICAgICAgT3JST1As CiAgICAgICAgWG9yUk9QLAogICAgICAgIE5vdEFuZFJPUCwKICAgICAgICBFcmFzZVJPUD1Ob3RB bmRST1AsCiAgICAgICAgTm90Q29weVJPUCwKICAgICAgICBOb3RPclJPUCwKICAgICAgICBOb3RY b3JST1AsCiAgICAgICAgQW5kUk9QLCBOb3RFcmFzZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9Q LAogICAgICAgIENsZWFyUk9QLAogICAgICAgIFNldFJPUCwKICAgICAgICBOb3BST1AsCiAgICAg ICAgQW5kTm90Uk9QLAogICAgICAgIE9yTm90Uk9QLAogICAgICAgIE5hbmRST1AsCiAgICAgICAg Tm9yUk9QLCBMYXN0Uk9QPU5vclJPUAogICAgfTsKCgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAg ICAgTm9QZW4sCiAgICAgICAgU29saWRMaW5lLAogICAgICAgIERhc2hMaW5lLAogICAgICAgIERv dExpbmUsCiAgICAgICAgRGFzaERvdExpbmUsCiAgICAgICAgRGFzaERvdERvdExpbmUsCiAgICAg ICAgTVBlblN0eWxlID0gMHgwZgogICAgfTsKCiAgICBlbnVtIFBlbkNhcFN0eWxlIHsKICAgICAg ICBGbGF0Q2FwID0gMHgwMCwKICAgICAgICBTcXVhcmVDYXAgPSAweDEwLAogICAgICAgIFJvdW5k Q2FwID0gMHgyMCwKICAgICAgICBNUGVuQ2FwU3R5bGUgPSAweDMwCiAgICB9OwoKICAgIGVudW0g UGVuSm9pblN0eWxlIHsKICAgICAgICBNaXRlckpvaW4gPSAweDAwLAogICAgICAgIEJldmVsSm9p biA9IDB4NDAsCiAgICAgICAgUm91bmRKb2luID0gMHg4MCwKICAgICAgICBNUGVuSm9pblN0eWxl ID0gMHhjMAogICAgfTsKCiAgICBlbnVtIEJydXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAg ICAgICAgU29saWRQYXR0ZXJuLAogICAgICAgIERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2Uy UGF0dGVybiwKICAgICAgICBEZW5zZTNQYXR0ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAg ICAgICAgRGVuc2U1UGF0dGVybiwKICAgICAgICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNl N1BhdHRlcm4sCiAgICAgICAgSG9yUGF0dGVybiwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAg IENyb3NzUGF0dGVybiwKICAgICAgICBCRGlhZ1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJu LAogICAgICAgIERpYWdDcm9zc1BhdHRlcm4sCiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAg fTsKCiAgICBlbnVtIFdpbmRvd3NWZXJzaW9uIHsKICAgICAgICBXVl8zMnMgPSAweDAwMDEsCiAg ICAgICAgV1ZfOTUgPSAweDAwMDIsCiAgICAgICAgV1ZfOTggPSAweDAwMDMsCiAgICAgICAgV1Zf RE9TX2Jhc2VkID0gMHgwMDBmLAoKICAgICAgICBXVl9OVCA9IDB4MDAxMCwKICAgICAgICBXVl8y MDAwID0gMHgwMDIwLAogICAgICAgIFdWX05UX2Jhc2VkID0gMHgwMGYwCiAgICB9OwoKICAgIGVu dW0gVUlFZmZlY3QgewogICAgICAgIFVJX0dlbmVyYWwsCiAgICAgICAgVUlfQW5pbWF0ZU1lbnUs CiAgICAgICAgVUlfRmFkZU1lbnUsCiAgICAgICAgVUlfQW5pbWF0ZUNvbWJvLAogICAgICAgIFVJ X0FuaW1hdGVUb29sdGlwLAogICAgICAgIFVJX0ZhZGVUb29sdGlwCiAgICB9OwoKCgoKICAgIHN0 YXRpYyBjb25zdCBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNv ciAmIHVwQXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29y OwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0 IFFDdXJzb3IgJiBpYmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZl ckN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0 YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFD dXJzb3IgJiBzaXplRkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVB bGxDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3Rh dGljIGNvbnN0IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJz b3IgJiBzcGxpdEhDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hh bmRDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKCgog ICAgZW51bSBUZXh0Rm9ybWF0IHsKICAgICAgICBQbGFpblRleHQsCiAgICAgICAgUmljaFRleHQs CiAgICAgICAgQXV0b1RleHQKICAgIH07Cn07CgoKY2xhc3MgUUludGVybmFsIHsKcHVibGljOgog ICAgZW51bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZpY2UgPSAweDAw LAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwKICAgICAgICBQ cmludGVyID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBTeXN0ZW0gPSAw eDA1LAogICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRlcm5hbERldmlj ZSA9IDB4MTAKICAgIH07Cn07CiMgNDYgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAyCgoKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL2xpbWl0 cy5oIiAxIDMKIyA0OSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDIKCgoKY2xhc3MgUVBhaW50RGV2 aWNlOwpjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBRV2lkZ2V0OwpjbGFzcyBRV2lk Z2V0TWFwcGVyOwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7CmNsYXNzIFFDb2xvckdyb3Vw OwpjbGFzcyBRUGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVBvaW50OwpjbGFzcyBRU2l6 ZTsKY2xhc3MgUVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFzcyBRUGFpbnRlcjsKY2xhc3Mg UVJlZ2lvbjsKY2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmljczsKY2xhc3MgUUZvbnRJbmZv OwpjbGFzcyBRUGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0cml4OwpjbGFzcyBRUGl4bWFw OwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJbWFnZTsKY2xhc3MgUUltYWdl SU87CmNsYXNzIFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xhc3MgUUFjY2VsOwpjbGFzcyBR VGltZXI7CmNsYXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoKCgoKY2xhc3MgUVdpZGdldExp c3Q7CmNsYXNzIFFXaWRnZXRMaXN0SXQ7CiMgMTE4ICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgV0lkOwp0eXBlZGVmIHVuc2lnbmVkIGludCBIQU5ETEU7CgoKdHlw ZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVkZWYgdW5pb24gX1hFdmVudCBYRXZl bnQ7CnR5cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVn aW9uOwoKICAgICAgICAgRGlzcGxheSAqcXRfeGRpc3BsYXkoKTsKICAgICAgICAgaW50IHF0X3hz Y3JlZW4oKTsKICAgICAgICAgV0lkIHF0X3hyb290d2luKCk7CiAgICAgICAgIEdDIHF0X3hnZXRf cmVhZG9ubHlfZ2MoIGJvb2wgbW9ub2Nocm9tZT1GQUxTRSApOwogICAgICAgICBHQyBxdF94Z2V0 X3RlbXBfZ2MoIGJvb2wgbW9ub2Nocm9tZT1GQUxTRSApOwojIDE0NCAia2VybmVsL3F3aW5kb3dk ZWZzLmgiCmNsYXNzIFFBcHBsaWNhdGlvbjsKIyAxNTMgImtlcm5lbC9xd2luZG93ZGVmcy5oIgp0 eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwpjb25zdCBRQ09PUkQgUUNPT1JEX01BWCA9IDIxNDc0ODM2 NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFDT09SRF9NQVggLSAxOwoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgUVJnYjsKCiAgICAgICAgIGNoYXIgKnFBcHBOYW1lKCk7CgoKCgp0eXBlZGVm IHZvaWQgKCpRX0NsZWFuVXBGdW5jdGlvbikoKTsKICAgICAgICAgdm9pZCBxQWRkUG9zdFJvdXRp bmUoIFFfQ2xlYW5VcEZ1bmN0aW9uICk7CiAgICAgICAgIHZvaWQgcVJlbW92ZVBvc3RSb3V0aW5l KCBRX0NsZWFuVXBGdW5jdGlvbiApOwoKCiAgICAgICAgIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxk KCBRT2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiMgNDQgImtlcm5lbC9x b2JqZWN0LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmcuaCIgMQojIDQ1ICJr ZXJuZWwvcW9iamVjdC5oIiAyCiMgMSAia2VybmVsL3FldmVudC5oIiAxCiMgNDIgImtlcm5lbC9x ZXZlbnQuaCIKIyAxICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIgMQojIDQzICJrZXJuZWwvcWV2ZW50 LmgiIDIKIyAxICJrZXJuZWwvcXJlZ2lvbi5oIiAxCiMgNDIgImtlcm5lbC9xcmVnaW9uLmgiCiMg MSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0MyAia2VybmVsL3FyZWdpb24u aCIgMgojIDEgImtlcm5lbC9xcmVjdC5oIiAxCiMgNDIgImtlcm5lbC9xcmVjdC5oIgojIDEgImtl cm5lbC9xc2l6ZS5oIiAxCiMgNDIgImtlcm5lbC9xc2l6ZS5oIgojIDEgImtlcm5lbC9xcG9pbnQu aCIgMQojIDQyICJrZXJuZWwvcXBvaW50LmgiCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEK IyA0MyAia2VybmVsL3Fwb2ludC5oIiAyCgoKCmNsYXNzIFFQb2ludAp7CnB1YmxpYzoKICAgIFFQ b2ludCgpOwogICAgUVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKTsKCiAgICBib29sIGlzTnVs bCgpIGNvbnN0OwoKICAgIGludCB4KCkgY29uc3Q7CiAgICBpbnQgeSgpIGNvbnN0OwogICAgdm9p ZCBzZXRYKCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIGludCBtYW5oYXR0 YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ4KCk7CiAgICBRQ09PUkQgJnJ5KCk7Cgog ICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFQb2ludCAmb3Bl cmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGludCBj ICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7CiAgICBRUG9pbnQgJm9wZXJh dG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGRvdWJsZSBjICk7CgogICAg ZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUG9p bnQgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQb2ludCAm LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IrKCBj b25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50 IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQg aW5saW5lIFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmLCBpbnQgKTsKICAgIGZyaWVu ZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yKiggaW50LCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJp ZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJiwgZG91YmxlICk7CiAg ICBmcmllbmQgaW5saW5lIFFQb2ludCBvcGVyYXRvciooIGRvdWJsZSwgY29uc3QgUVBvaW50ICYg KTsKICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICYgKTsK ICAgIGZyaWVuZCBpbmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICYsIGludCAp OwogICAgZnJpZW5kIGlubGluZSBRUG9pbnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwgZG91 YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0RpdkJ5WmVybygpOwoKCgoK CiAgICBRQ09PUkQgeHA7CiAgICBRQ09PUkQgeXA7Cgp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0 cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVBvaW50ICYgKTsKICAgICAg ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFQb2ludCAmICk7CgoK CgoKCmlubGluZSBRUG9pbnQ6OlFQb2ludCgpCnsgeHA9MDsgeXA9MDsgfQoKaW5saW5lIFFQb2lu dDo6UVBvaW50KCBpbnQgeHBvcywgaW50IHlwb3MgKQp7IHhwPShRQ09PUkQpeHBvczsgeXA9KFFD T09SRCl5cG9zOyB9CgppbmxpbmUgYm9vbCBRUG9pbnQ6OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJu IHhwID09IDAgJiYgeXAgPT0gMDsgfQoKaW5saW5lIGludCBRUG9pbnQ6OngoKSBjb25zdAp7IHJl dHVybiB4cDsgfQoKaW5saW5lIGludCBRUG9pbnQ6OnkoKSBjb25zdAp7IHJldHVybiB5cDsgfQoK aW5saW5lIHZvaWQgUVBvaW50OjpzZXRYKCBpbnQgeCApCnsgeHAgPSAoUUNPT1JEKXg7IH0KCmlu bGluZSB2b2lkIFFQb2ludDo6c2V0WSggaW50IHkgKQp7IHlwID0gKFFDT09SRCl5OyB9Cgppbmxp bmUgUUNPT1JEICZRUG9pbnQ6OnJ4KCkKeyByZXR1cm4geHA7IH0KCmlubGluZSBRQ09PUkQgJlFQ b2ludDo6cnkoKQp7IHJldHVybiB5cDsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRv cis9KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwKz1wLnhwOyB5cCs9cC55cDsgcmV0dXJuICp0aGlz OyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLT0oIGNvbnN0IFFQb2ludCAmcCAp CnsgeHAtPXAueHA7IHlwLT1wLnlwOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQ b2ludDo6b3BlcmF0b3IqPSggaW50IGMgKQp7IHhwKj0oUUNPT1JEKWM7IHlwKj0oUUNPT1JEKWM7 IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvcio9KCBkb3Vi bGUgYyApCnsgeHA9KFFDT09SRCkoeHAqYyk7IHlwPShRQ09PUkQpKHlwKmMpOyByZXR1cm4gKnRo aXM7IH0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQb2ludCAmcDEsIGNvbnN0IFFQ b2ludCAmcDIgKQp7IHJldHVybiBwMS54cCA9PSBwMi54cCAmJiBwMS55cCA9PSBwMi55cDsgfQoK aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZw MiApCnsgcmV0dXJuIHAxLnhwICE9IHAyLnhwIHx8IHAxLnlwICE9IHAyLnlwOyB9CgppbmxpbmUg UVBvaW50IG9wZXJhdG9yKyggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsg cmV0dXJuIFFQb2ludChwMS54cCtwMi54cCwgcDEueXArcDIueXApOyB9CgppbmxpbmUgUVBvaW50 IG9wZXJhdG9yLSggY29uc3QgUVBvaW50ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJu IFFQb2ludChwMS54cC1wMi54cCwgcDEueXAtcDIueXApOyB9CgppbmxpbmUgUVBvaW50IG9wZXJh dG9yKiggY29uc3QgUVBvaW50ICZwLCBpbnQgYyApCnsgcmV0dXJuIFFQb2ludChwLnhwKmMsIHAu eXAqYyk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3IqKCBpbnQgYywgY29uc3QgUVBvaW50ICZw ICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIFFQb2ludCBvcGVy YXRvciooIGNvbnN0IFFQb2ludCAmcCwgZG91YmxlIGMgKQp7IHJldHVybiBRUG9pbnQoKFFDT09S RCkocC54cCpjKSwgKFFDT09SRCkocC55cCpjKSk7IH0KCmlubGluZSBRUG9pbnQgb3BlcmF0b3Iq KCBkb3VibGUgYywgY29uc3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAu eHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgUVBvaW50IG9wZXJhdG9yLSggY29u c3QgUVBvaW50ICZwICkKeyByZXR1cm4gUVBvaW50KC1wLnhwLCAtcC55cCk7IH0KCmlubGluZSBR UG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQog ICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB4cC89KFFDT09SRCljOwogICAgeXAvPShR Q09PUkQpYzsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVy YXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5n RGl2QnlaZXJvKCk7CgogICAgeHA9KFFDT09SRCkoeHAvYyk7CiAgICB5cD0oUUNPT1JEKSh5cC9j KTsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQ b2ludCAmcCwgaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIFFQb2ludDo6d2Fy bmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVybiBRUG9pbnQocC54cC9jLCBwLnlwL2MpOwp9Cgpp bmxpbmUgUVBvaW50IG9wZXJhdG9yLyggY29uc3QgUVBvaW50ICZwLCBkb3VibGUgYyApCnsKCiAg ICBpZiAoIGMgPT0gMC4wICkKICAgICAgICBRUG9pbnQ6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAg ICByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAueHAvYyksIChRQ09PUkQpKHAueXAvYykpOwp9CiMg NDMgImtlcm5lbC9xc2l6ZS5oIiAyCgoKCmNsYXNzIFFTaXplCnsKcHVibGljOgogICAgUVNpemUo KTsKICAgIFFTaXplKCBpbnQgdywgaW50IGggKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0Owog ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBp bnQgd2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lk dGgoIGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgdHJhbnNw b3NlKCk7CgogICAgUVNpemUgZXhwYW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNvbnN0OwogICAg UVNpemUgYm91bmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CgogICAgUUNPT1JEICZyd2lk dGgoKTsKICAgIFFDT09SRCAmcmhlaWdodCgpOwoKICAgIFFTaXplICZvcGVyYXRvcis9KCBjb25z dCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3ItPSggY29uc3QgUVNpemUgJiApOwogICAg UVNpemUgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSggZG91Ymxl IGMgKTsKICAgIFFTaXplICZvcGVyYXRvci89KCBpbnQgYyApOwogICAgUVNpemUgJm9wZXJhdG9y Lz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0 IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRv ciE9KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIFFT aXplIG9wZXJhdG9yKyggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5k IGlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNvbnN0IFFTaXplICYsIGNvbnN0IFFTaXplICYgKTsK ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBpbnQgKTsK ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFTaXplICYgKTsK ICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmLCBkb3VibGUg KTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUsIGNvbnN0IFFTaXpl ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBp bnQgKTsKICAgIGZyaWVuZCBpbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmLCBk b3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7Cgog ICAgUUNPT1JEIHdkOwogICAgUUNPT1JEIGh0Owp9OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVh bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVNpemUgJiApOwogICAgICAgICBR RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVNpemUgJiApOwoKCgoKCgpp bmxpbmUgUVNpemU6OlFTaXplKCkKeyB3ZCA9IGh0ID0gLTE7IH0KCmlubGluZSBRU2l6ZTo6UVNp emUoIGludCB3LCBpbnQgaCApCnsgd2Q9KFFDT09SRCl3OyBodD0oUUNPT1JEKWg7IH0KCmlubGlu ZSBib29sIFFTaXplOjppc051bGwoKSBjb25zdAp7IHJldHVybiB3ZD09MCAmJiBodD09MDsgfQoK aW5saW5lIGJvb2wgUVNpemU6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB3ZDwxIHx8IGh0PDE7 IH0KCmlubGluZSBib29sIFFTaXplOjppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4gd2Q+PTAgJiYg aHQ+PTA7IH0KCmlubGluZSBpbnQgUVNpemU6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gd2Q7IH0K CmlubGluZSBpbnQgUVNpemU6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGh0OyB9CgppbmxpbmUg dm9pZCBRU2l6ZTo6c2V0V2lkdGgoIGludCB3ICkKeyB3ZD0oUUNPT1JEKXc7IH0KCmlubGluZSB2 b2lkIFFTaXplOjpzZXRIZWlnaHQoIGludCBoICkKeyBodD0oUUNPT1JEKWg7IH0KCmlubGluZSBR Q09PUkQgJlFTaXplOjpyd2lkdGgoKQp7IHJldHVybiB3ZDsgfQoKaW5saW5lIFFDT09SRCAmUVNp emU6OnJoZWlnaHQoKQp7IHJldHVybiBodDsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0 b3IrPSggY29uc3QgUVNpemUgJnMgKQp7IHdkKz1zLndkOyBodCs9cy5odDsgcmV0dXJuICp0aGlz OyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmcyApCnsg d2QtPXMud2Q7IGh0LT1zLmh0OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6 Om9wZXJhdG9yKj0oIGludCBjICkKeyB3ZCo9KFFDT09SRCljOyBodCo9KFFDT09SRCljOyByZXR1 cm4gKnRoaXM7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJhdG9yKj0oIGRvdWJsZSBjICkK eyB3ZD0oUUNPT1JEKSh3ZCpjKTsgaHQ9KFFDT09SRCkoaHQqYyk7IHJldHVybiAqdGhpczsgfQoK aW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIg KQp7IHJldHVybiBzMS53ZCA9PSBzMi53ZCAmJiBzMS5odCA9PSBzMi5odDsgfQoKaW5saW5lIGJv b2wgb3BlcmF0b3IhPSggY29uc3QgUVNpemUgJnMxLCBjb25zdCBRU2l6ZSAmczIgKQp7IHJldHVy biBzMS53ZCAhPSBzMi53ZCB8fCBzMS5odCAhPSBzMi5odDsgfQoKaW5saW5lIFFTaXplIG9wZXJh dG9yKyggY29uc3QgUVNpemUgJiBzMSwgY29uc3QgUVNpemUgJiBzMiApCnsgcmV0dXJuIFFTaXpl KHMxLndkK3MyLndkLCBzMS5odCtzMi5odCk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvci0oIGNv bnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1cm4gUVNpemUoczEud2QtczIu d2QsIHMxLmh0LXMyLmh0KTsgfQoKaW5saW5lIFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUg JnMsIGludCBjICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9CgppbmxpbmUgUVNp emUgb3BlcmF0b3IqKCBpbnQgYywgY29uc3QgUVNpemUgJnMgKQp7IHJldHVybiBRU2l6ZShzLndk KmMsIHMuaHQqYyk7IH0KCmlubGluZSBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICZzLCBk b3VibGUgYyApCnsgcmV0dXJuIFFTaXplKChRQ09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQq YykpOyB9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IqKCBkb3VibGUgYywgY29uc3QgUVNpemUgJnMg KQp7IHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoK aW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggaW50IGMgKQp7CgogICAgaWYgKCBjID09 IDAgKQogICAgICAgIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICB3ZC89KFFDT09SRCljOyBodC89 KFFDT09SRCljOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVy YXRvci89KCBkb3VibGUgYyApCnsKCiAgICBpZiAoIGMgPT0gMC4wICkKICAgICAgICB3YXJuaW5n RGl2QnlaZXJvKCk7CgogICAgd2Q9KFFDT09SRCkod2QvYyk7IGh0PShRQ09PUkQpKGh0L2MpOwog ICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm cywgaW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2 QnlaZXJvKCk7CgogICAgcmV0dXJuIFFTaXplKHMud2QvYywgcy5odC9jKTsKfQoKaW5saW5lIFFT aXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9 PSAwLjAgKQogICAgICAgIFFTaXplOjp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFT aXplKChRQ09PUkQpKHMud2QvYyksIChRQ09PUkQpKHMuaHQvYykpOwp9CgppbmxpbmUgUVNpemUg UVNpemU6OmV4cGFuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXplICkgY29uc3QKewogICAg cmV0dXJuIFFTaXplKCAoKHdkKSA+IChvdGhlclNpemUud2QpID8gKHdkKSA6IChvdGhlclNpemUu d2QpKSwgKChodCkgPiAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3RoZXJTaXplLmh0KSkgKTsK fQoKaW5saW5lIFFTaXplIFFTaXplOjpib3VuZGVkVG8oIGNvbnN0IFFTaXplICYgb3RoZXJTaXpl ICkgY29uc3QKewogICAgcmV0dXJuIFFTaXplKCAoKHdkKSA8IChvdGhlclNpemUud2QpID8gKHdk KSA6IChvdGhlclNpemUud2QpKSwgKChodCkgPCAob3RoZXJTaXplLmh0KSA/IChodCkgOiAob3Ro ZXJTaXplLmh0KSkgKTsKfQojIDQzICJrZXJuZWwvcXJlY3QuaCIgMgoKCgoKCgoKY2xhc3MgUVJl Y3QKewpwdWJsaWM6CiAgICBRUmVjdCgpIHsgeDEgPSB5MSA9IDA7IHgyID0geTIgPSAtMTsgfQog ICAgUVJlY3QoIGNvbnN0IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVBvaW50ICZib3R0b21yaWdo dCApOwogICAgUVJlY3QoIGNvbnN0IFFQb2ludCAmdG9wbGVmdCwgY29uc3QgUVNpemUgJnNpemUg KTsKICAgIFFSZWN0KCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7 CgogICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBRUmVjdCBub3JtYWxpemUoKSBjb25zdDsKCiAgICBp bnQgbGVmdCgpIGNvbnN0OwogICAgaW50IHRvcCgpIGNvbnN0OwogICAgaW50IHJpZ2h0KCkgY29u c3Q7CiAgICBpbnQgYm90dG9tKCkgY29uc3Q7CgogICAgUUNPT1JEICZyTGVmdCgpOwogICAgUUNP T1JEICZyVG9wKCk7CiAgICBRQ09PUkQgJnJSaWdodCgpOwogICAgUUNPT1JEICZyQm90dG9tKCk7 CgogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICB2b2lkIHNldExlZnQo IGludCBwb3MgKTsKICAgIHZvaWQgc2V0VG9wKCBpbnQgcG9zICk7CiAgICB2b2lkIHNldFJpZ2h0 KCBpbnQgcG9zICk7CiAgICB2b2lkIHNldEJvdHRvbSggaW50IHBvcyApOwogICAgdm9pZCBzZXRY KCBpbnQgeCApOwogICAgdm9pZCBzZXRZKCBpbnQgeSApOwoKICAgIFFQb2ludCB0b3BMZWZ0KCkg Y29uc3Q7CiAgICBRUG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQb2ludCB0b3BSaWdo dCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbUxlZnQoKSBjb25zdDsKICAgIFFQb2ludCBjZW50 ZXIoKSBjb25zdDsKCiAgICB2b2lkIHJlY3QoIGludCAqeCwgaW50ICp5LCBpbnQgKncsIGludCAq aCApIGNvbnN0OwogICAgdm9pZCBjb29yZHMoIGludCAqeDEsIGludCAqeTEsIGludCAqeDIsIGlu dCAqeTIgKSBjb25zdDsKCiAgICB2b2lkIG1vdmVUb3BMZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsK ICAgIHZvaWQgbW92ZUJvdHRvbVJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92 ZVRvcFJpZ2h0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgbW92ZUJvdHRvbUxlZnQoIGNv bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQ2VudGVyKCBjb25zdCBRUG9pbnQgJnAgKTsK ICAgIHZvaWQgbW92ZUJ5KCBpbnQgZHgsIGludCBkeSApOwoKICAgIHZvaWQgc2V0UmVjdCggaW50 IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgc2V0Q29vcmRzKCBpbnQgeDEsIGlu dCB5MSwgaW50IHgyLCBpbnQgeTIgKTsKCiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQg d2lkdGgoKSBjb25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIHZvaWQgc2V0V2lkdGgo IGludCB3ICk7CiAgICB2b2lkIHNldEhlaWdodCggaW50IGggKTsKICAgIHZvaWQgc2V0U2l6ZSgg Y29uc3QgUVNpemUgJnMgKTsKCiAgICBRUmVjdCBvcGVyYXRvcnwoY29uc3QgUVJlY3QgJnIpIGNv bnN0OwogICAgUVJlY3Qgb3BlcmF0b3ImKGNvbnN0IFFSZWN0ICZyKSBjb25zdDsKICAgIFFSZWN0 JiBvcGVyYXRvcnw9KGNvbnN0IFFSZWN0ICZyKTsKICAgIFFSZWN0JiBvcGVyYXRvciY9KGNvbnN0 IFFSZWN0ICZyKTsKCiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgcHJv cGVyPUZBTFNFICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBpbnQgeCwgaW50IHksIGJvb2wg cHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciwg Ym9vbCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIFFSZWN0IHVuaXRlKCBjb25zdCBRUmVjdCAm ciApIGNvbnN0OwogICAgUVJlY3QgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNvbnN0Owog ICAgYm9vbCBpbnRlcnNlY3RzKCBjb25zdCBRUmVjdCAmciApIGNvbnN0OwoKICAgIGZyaWVuZCBi b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICAgIGZyaWVu ZCBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKCnByaXZh dGU6CgoKCgoKCiAgICBRQ09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBRQ09PUkQgeDI7CiAg ICBRQ09PUkQgeTI7Cgp9OwoKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAm LCBjb25zdCBRUmVjdCAmICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlY3Qg JiwgY29uc3QgUVJlY3QgJiApOwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8 PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlY3QgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAm b3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJlY3QgJiApOwoKCgoKCgppbmxpbmUgUVJlY3Q6 OlFSZWN0KCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkKewogICAg eDEgPSAoUUNPT1JEKWxlZnQ7CiAgICB5MSA9IChRQ09PUkQpdG9wOwogICAgeDIgPSAoUUNPT1JE KShsZWZ0K3dpZHRoLTEpOwogICAgeTIgPSAoUUNPT1JEKSh0b3AraGVpZ2h0LTEpOwp9Cgppbmxp bmUgYm9vbCBRUmVjdDo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4geDIgPT0geDEtMSAmJiB5MiA9 PSB5MS0xOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIHgx ID4geDIgfHwgeTEgPiB5MjsgfQoKaW5saW5lIGJvb2wgUVJlY3Q6OmlzVmFsaWQoKSBjb25zdAp7 IHJldHVybiB4MSA8PSB4MiAmJiB5MSA8PSB5MjsgfQoKaW5saW5lIGludCBRUmVjdDo6bGVmdCgp IGNvbnN0CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp0b3AoKSBjb25zdAp7IHJl dHVybiB5MTsgfQoKaW5saW5lIGludCBRUmVjdDo6cmlnaHQoKSBjb25zdAp7IHJldHVybiB4Mjsg fQoKaW5saW5lIGludCBRUmVjdDo6Ym90dG9tKCkgY29uc3QKeyByZXR1cm4geTI7IH0KCmlubGlu ZSBRQ09PUkQgJlFSZWN0OjpyTGVmdCgpCnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgUUNPT1JEICYg UVJlY3Q6OnJUb3AoKQp7IHJldHVybiB5MTsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyUmln aHQoKQp7IHJldHVybiB4MjsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyQm90dG9tKCkKeyBy ZXR1cm4geTI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OngoKSBjb25zdAp7IHJldHVybiB4MTsgfQoK aW5saW5lIGludCBRUmVjdDo6eSgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgdm9pZCBR UmVjdDo6c2V0TGVmdCggaW50IHBvcyApCnsgeDEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZv aWQgUVJlY3Q6OnNldFRvcCggaW50IHBvcyApCnsgeTEgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5l IHZvaWQgUVJlY3Q6OnNldFJpZ2h0KCBpbnQgcG9zICkKeyB4MiA9IChRQ09PUkQpcG9zOyB9Cgpp bmxpbmUgdm9pZCBRUmVjdDo6c2V0Qm90dG9tKCBpbnQgcG9zICkKeyB5MiA9IChRQ09PUkQpcG9z OyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0WCggaW50IHggKQp7IHgxID0gKFFDT09SRCl4OyB9 CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0WSggaW50IHkgKQp7IHkxID0gKFFDT09SRCl5OyB9Cgpp bmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BMZWZ0KCkgY29uc3QKeyByZXR1cm4gUVBvaW50KHgxLCB5 MSk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKeyByZXR1cm4g UVBvaW50KHgyLCB5Mik7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OnRvcFJpZ2h0KCkgY29uc3QK eyByZXR1cm4gUVBvaW50KHgyLCB5MSk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmJvdHRvbUxl ZnQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDEsIHkyKTsgfQoKaW5saW5lIFFQb2ludCBRUmVj dDo6Y2VudGVyKCkgY29uc3QKeyByZXR1cm4gUVBvaW50KCh4MSt4MikvMiwgKHkxK3kyKS8yKTsg fQoKaW5saW5lIGludCBRUmVjdDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiB4MiAtIHgxICsgMTsg fQoKaW5saW5lIGludCBRUmVjdDo6aGVpZ2h0KCkgY29uc3QKeyByZXR1cm4geTIgLSB5MSArIDE7 IH0KCmlubGluZSBRU2l6ZSBRUmVjdDo6c2l6ZSgpIGNvbnN0CnsgcmV0dXJuIFFTaXplKHgyLXgx KzEsIHkyLXkxKzEpOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFpbnMoIGludCB4LCBpbnQg eSwgYm9vbCBwcm9wZXIgKSBjb25zdAp7CiAgICBpZiAoIHByb3BlciApCiAgICAgICAgcmV0dXJu IHggPiB4MSAmJiB4IDwgeDIgJiYKICAgICAgICAgICAgICAgeSA+IHkxICYmIHkgPCB5MjsKICAg IGVsc2UKICAgICAgICByZXR1cm4geCA+PSB4MSAmJiB4IDw9IHgyICYmCiAgICAgICAgICAgICAg IHkgPj0geTEgJiYgeSA8PSB5MjsKfQojIDQ0ICJrZXJuZWwvcXJlZ2lvbi5oIiAyCiMgMSAiL3Vz ci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0NSAia2VybmVsL3FyZWdpb24uaCIgMgoK CgpjbGFzcyBRUmVnaW9uCnsKcHVibGljOgogICAgZW51bSBSZWdpb25UeXBlIHsgUmVjdGFuZ2xl LCBFbGxpcHNlIH07CgogICAgUVJlZ2lvbigpOwogICAgUVJlZ2lvbiggaW50IHgsIGludCB5LCBp bnQgdywgaW50IGgsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0 IFFSZWN0ICYsIFJlZ2lvblR5cGUgPSBSZWN0YW5nbGUgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFQ b2ludEFycmF5ICYsIGJvb2wgd2luZGluZz1GQUxTRSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJl Z2lvbiAmICk7CiAgICBRUmVnaW9uKCBjb25zdCBRQml0bWFwICYgKTsKICAgflFSZWdpb24oKTsK ICAgIFFSZWdpb24gJm9wZXJhdG9yPSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9vbCBpc051 bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoKICAgIGJvb2wgY29udGFpbnMo IGNvbnN0IFFQb2ludCAmcCApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3QgUVJlY3Qg JnIgKSBjb25zdDsKCiAgICB2b2lkIHRyYW5zbGF0ZSggaW50IGR4LCBpbnQgZHkgKTsKCiAgICBR UmVnaW9uIHVuaXRlKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24gaW50ZXJz ZWN0KCBjb25zdCBRUmVnaW9uICYpIGNvbnN0OwogICAgUVJlZ2lvbiBzdWJ0cmFjdCggY29uc3Qg UVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIGVvciggY29uc3QgUVJlZ2lvbiAmICkgY29u c3Q7CgogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAgICBRQXJyYXk8UVJlY3Q+IHJl Y3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBjb25zdCBRUmVjdCAqLCBpbnQgKTsKCiAg ICBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9u IG9wZXJhdG9yKyggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9y JiggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yLSggY29uc3Qg UVJlZ2lvbiAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAm ICkgY29uc3Q7CiAgICBRUmVnaW9uJiBvcGVyYXRvcnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAg IFFSZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3Bl cmF0b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25z dCBRUmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiAp OwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAgICBib29s IG9wZXJhdG9yIT0oIGNvbnN0IFFSZWdpb24gJnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAg ICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0ocikpOyB9CgoKCgogICAgUmVnaW9uIGhhbmRsZSgp IGNvbnN0IHsgcmV0dXJuIGRhdGEtPnJnbjsgfQojIDEwNiAia2VybmVsL3FyZWdpb24uaCIKICAg IGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJl Z2lvbiAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFt ICYsIFFSZWdpb24gJiApOwoKcHJpdmF0ZToKICAgIFFSZWdpb24oIGJvb2wgKTsKICAgIFFSZWdp b24gY29weSgpIGNvbnN0OwogICAgdm9pZCBkZXRhY2goKTsKCgoKICAgIHZvaWQgZXhlYyggY29u c3QgUUJ5dGVBcnJheSAmLCBpbnQgdmVyID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDog cHVibGljIFFTaGFyZWQgewoKCgogICAgICAgIFJlZ2lvbiByZ247CgoKCgoKICAgICAgICBib29s IGlzX251bGw7CiAgICB9ICpkYXRhOwp9OwojIDE0OSAia2VybmVsL3FyZWdpb24uaCIKICAgICAg ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWdpb24g JiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVJl Z2lvbiAmICk7CiMgNDQgImtlcm5lbC9xZXZlbnQuaCIgMgojIDEgImtlcm5lbC9xbmFtZXNwYWNl LmgiIDEKIyA0NSAia2VybmVsL3FldmVudC5oIiAyCiMgMSAia2VybmVsL3FtaW1lLmgiIDEKIyA0 MiAia2VybmVsL3FtaW1lLmgiCiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MyAia2Vy bmVsL3FtaW1lLmgiIDIKCgoKCmNsYXNzIFFNaW1lU291cmNlIHsKcHVibGljOgogICAgdmlydHVh bCB+UU1pbWVTb3VyY2UoKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogZm9ybWF0KCBpbnQgbiA9 IDAgKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIGJvb2wgcHJvdmlkZXMoIGNvbnN0IGNoYXIqICkg Y29uc3Q7CiAgICB2aXJ0dWFsIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNvbnN0IGNoYXIqICkg Y29uc3QgPSAwOwp9OwoKY2xhc3MgUU1pbWVTb3VyY2VGYWN0b3J5RGF0YTsKY2xhc3MgUVN0cmlu Z0xpc3Q7CgpjbGFzcyBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWltZVNvdXJj ZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAgIHN0YXRp YyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBz ZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiApOwoKICAgIHZpcnR1YWwgY29u c3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNvbnN0OwogICAg dmlydHVhbCBRU3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25h bWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1pbWVTb3VyY2Uq IGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3RyaW5nJiBjb250 ZXh0KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyYgYWJz X25hbWUsIGNvbnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZSgg Y29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAgIHZpcnR1YWwg dm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBRUGl4bWFwJiBw bSApOwogICAgdmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBR TWltZVNvdXJjZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRoKCBjb25zdCBR U3RyaW5nTGlzdCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBjb25zdDsK ICAgIHZvaWQgYWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0RXh0ZW5zaW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFyKiBtaW1ldHlw ZSApOwoKcHJpdmF0ZToKICAgIFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CiMgNDYgImtl cm5lbC9xZXZlbnQuaCIgMgoKCgpjbGFzcyBRRXZlbnQ6IHB1YmxpYyBRdAp7CnB1YmxpYzoKICAg IGVudW0gVHlwZSB7CgoKCgoKCiAgICAgICAgTm9uZSA9IDAsCgoKICAgICAgICBUaW1lciA9IDEs CiAgICAgICAgTW91c2VCdXR0b25QcmVzcyA9IDIsCiAgICAgICAgTW91c2VCdXR0b25SZWxlYXNl ID0gMywKICAgICAgICBNb3VzZUJ1dHRvbkRibENsaWNrPSA0LAogICAgICAgIE1vdXNlTW92ZSA9 IDUsCiAgICAgICAgS2V5UHJlc3MgPSA2LAogICAgICAgIEtleVJlbGVhc2UgPSA3LAogICAgICAg IEZvY3VzSW4gPSA4LAogICAgICAgIEZvY3VzT3V0ID0gOSwKICAgICAgICBFbnRlciA9IDEwLAog ICAgICAgIExlYXZlID0gMTEsCiAgICAgICAgUGFpbnQgPSAxMiwKICAgICAgICBNb3ZlID0gMTMs CiAgICAgICAgUmVzaXplID0gMTQsCiAgICAgICAgQ3JlYXRlID0gMTUsCiAgICAgICAgRGVzdHJv eSA9IDE2LAogICAgICAgIFNob3cgPSAxNywKICAgICAgICBIaWRlID0gMTgsCiAgICAgICAgQ2xv c2UgPSAxOSwKICAgICAgICBRdWl0ID0gMjAsCiAgICAgICAgUmVwYXJlbnQgPSAyMSwKICAgICAg ICBTaG93TWluaW1pemVkID0gMjIsCiAgICAgICAgU2hvd05vcm1hbCA9IDIzLAogICAgICAgIFdp bmRvd0FjdGl2YXRlID0gMjQsCiAgICAgICAgV2luZG93RGVhY3RpdmF0ZSA9IDI1LAogICAgICAg IFNob3dUb1BhcmVudCA9IDI2LAogICAgICAgIEhpZGVUb1BhcmVudCA9IDI3LAogICAgICAgIFNo b3dNYXhpbWl6ZWQgPSAyOCwKICAgICAgICBBY2NlbCA9IDMwLAogICAgICAgIFdoZWVsID0gMzEs CiAgICAgICAgQWNjZWxBdmFpbGFibGUgPSAzMiwKICAgICAgICBDYXB0aW9uQ2hhbmdlID0gMzMs CiAgICAgICAgSWNvbkNoYW5nZSA9IDM0LAogICAgICAgIFBhcmVudEZvbnRDaGFuZ2UgPSAzNSwK ICAgICAgICBBcHBsaWNhdGlvbkZvbnRDaGFuZ2UgPSAzNiwKICAgICAgICBQYXJlbnRQYWxldHRl Q2hhbmdlID0gMzcsCiAgICAgICAgQXBwbGljYXRpb25QYWxldHRlQ2hhbmdlID0gMzgsCiAgICAg ICAgQ2xpcGJvYXJkID0gNDAsCiAgICAgICAgU3BlZWNoID0gNDIsCiAgICAgICAgU29ja0FjdCA9 IDUwLAogICAgICAgIEFjY2VsT3ZlcnJpZGUgPSA1MSwKICAgICAgICBEcmFnRW50ZXIgPSA2MCwK ICAgICAgICBEcmFnTW92ZSA9IDYxLAogICAgICAgIERyYWdMZWF2ZSA9IDYyLAogICAgICAgIERy b3AgPSA2MywKICAgICAgICBEcmFnUmVzcG9uc2UgPSA2NCwKICAgICAgICBDaGlsZEluc2VydGVk ID0gNzAsCiAgICAgICAgQ2hpbGRSZW1vdmVkID0gNzEsCiAgICAgICAgTGF5b3V0SGludCA9IDcy LAogICAgICAgIFNob3dXaW5kb3dSZXF1ZXN0ID0gNzMsCiAgICAgICAgQWN0aXZhdGVDb250cm9s ID0gODAsCiAgICAgICAgRGVhY3RpdmF0ZUNvbnRyb2wgPSA4MSwKICAgICAgICBVc2VyID0gMTAw MAogICAgfTsKCiAgICBRRXZlbnQoIFR5cGUgdHlwZSApIDogdCh0eXBlKSwgcG9zdGVkKEZBTFNF KSB7fQogICAgdmlydHVhbCB+UUV2ZW50KCk7CiAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy biB0OyB9CnByb3RlY3RlZDoKICAgIFR5cGUgdDsKcHJpdmF0ZToKICAgIGJvb2wgcG9zdGVkOwoK CgoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VB cHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRVGltZXJFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs aWM6CiAgICBRVGltZXJFdmVudCggaW50IHRpbWVySWQgKQogICAgICAgIDogUUV2ZW50KFRpbWVy KSwgaWQodGltZXJJZCkge30KICAgIGludCB0aW1lcklkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0K cHJvdGVjdGVkOgogICAgaW50IGlkOwp9OwoKCmNsYXNzIFFNb3VzZUV2ZW50IDogcHVibGljIFFF dmVudAp7CnB1YmxpYzoKICAgIFFNb3VzZUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFQb2ludCAm cG9zLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUgKTsKCiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBl LCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50Jmdsb2JhbFBvcywKICAgICAgICAgICAg ICAgICBpbnQgYnV0dG9uLCBpbnQgc3RhdGUgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBwKHBv cyksIGcoZ2xvYmFsUG9zKSwgYihidXR0b24pLHMoKHVzaG9ydClzdGF0ZSkge307CgogICAgY29u c3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmds b2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4g cC54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9i YWxYKCkgY29uc3QgeyByZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZKCkgY29uc3QgeyBy ZXR1cm4gZy55KCk7IH0KICAgIEJ1dHRvblN0YXRlIGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIChC dXR0b25TdGF0ZSkgYjsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiAo QnV0dG9uU3RhdGUpIHM7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIoKSBjb25zdDsKcHJv dGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIGludCBiOwogICAgdXNob3J0 IHM7Cn07CgoKCmNsYXNzIFFXaGVlbEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAg IFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgaW50IGRlbHRhLCBpbnQgc3RhdGUgKTsK ICAgIFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50JiBnbG9iYWxQ b3MsIGludCBkZWx0YSwgaW50IHN0YXRlICkKICAgICAgICA6IFFFdmVudChXaGVlbCksIHAocG9z KSwgZyhnbG9iYWxQb3MpLCBkKGRlbHRhKSwgcygodXNob3J0KXN0YXRlKSwKICAgICAgICAgIGFj Y3B0KFRSVUUpIHt9CiAgICBpbnQgZGVsdGEoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICBjb25z dCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xv YmFsUG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBw LngoKTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2Jh bFgoKSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJl dHVybiBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBCdXR0 b25TdGF0ZShzKTsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQ7 IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkg eyBhY2NwdCA9IEZBTFNFOyB9CnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7 CiAgICBpbnQgZDsKICAgIHVzaG9ydCBzOwogICAgYm9vbCBhY2NwdDsKfTsKCgpjbGFzcyBRS2V5 RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUtleUV2ZW50KCBUeXBlIHR5cGUs IGludCBrZXksIGludCBhc2NpaSwgaW50IHN0YXRlLAogICAgICAgICAgICAgICAgY29uc3QgUVN0 cmluZyYgdGV4dD1RU3RyaW5nOjpudWxsLCBib29sIGF1dG9yZXA9RkFMU0UsIHVzaG9ydCBjb3Vu dD0xICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgdHh0KHRleHQpLCBrKCh1c2hvcnQpa2V5KSwg cygodXNob3J0KXN0YXRlKSwKICAgICAgICAgICAgYSgodWNoYXIpYXNjaWkpLCBhY2NwdChUUlVF KSwgYXV0b3IoYXV0b3JlcCksIGMoY291bnQpIHt9CiAgICBpbnQga2V5KCkgY29uc3QgeyByZXR1 cm4gazsgfQogICAgaW50IGFzY2lpKCkgY29uc3QgeyByZXR1cm4gYTsgfQogICAgQnV0dG9uU3Rh dGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBCdXR0b25TdGF0ZShzKTsgfQogICAgQnV0dG9uU3Rh dGUgc3RhdGVBZnRlcigpIGNvbnN0OwogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1 cm4gYWNjcHQ7IH0KICAgIFFTdHJpbmcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR4dDsgfQogICAg Ym9vbCBpc0F1dG9SZXBlYXQoKSBjb25zdCB7IHJldHVybiBhdXRvcjsgfQogICAgaW50IGNvdW50 KCkgY29uc3QgeyByZXR1cm4gaW50KGMpOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBU UlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQoKcHJvdGVjdGVkOgog ICAgUVN0cmluZyB0eHQ7CiAgICB1c2hvcnQgaywgczsKICAgIHVjaGFyIGE7CiAgICB1aW50IGFj Y3B0OjE7CiAgICB1aW50IGF1dG9yOjE7CiAgICB1c2hvcnQgYzsKfTsKCgpjbGFzcyBRRm9jdXNF dmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CgogICAgUUZvY3VzRXZlbnQoIFR5cGUgdHlw ZSApCiAgICAgICAgOiBRRXZlbnQodHlwZSkge30KCiAgICBib29sIGdvdEZvY3VzKCkgY29uc3Qg eyByZXR1cm4gdHlwZSgpID09IEZvY3VzSW47IH0KICAgIGJvb2wgbG9zdEZvY3VzKCkgY29uc3Qg eyByZXR1cm4gdHlwZSgpID09IEZvY3VzT3V0OyB9CgogICAgZW51bSBSZWFzb24geyBNb3VzZSwg VGFiLCBBY3RpdmVXaW5kb3csIFBvcHVwLCBTaG9ydGN1dCwgT3RoZXIgfTsKICAgIHN0YXRpYyBS ZWFzb24gcmVhc29uKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRSZWFzb24oIFJlYXNvbiByZWFzb24g KTsKICAgIHN0YXRpYyB2b2lkIHJlc2V0UmVhc29uKCk7Cgpwcml2YXRlOgogICAgc3RhdGljIFJl YXNvbiBtX3JlYXNvbjsKICAgIHN0YXRpYyBSZWFzb24gcHJldl9yZWFzb247Cn07CgoKY2xhc3Mg UVBhaW50RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVBhaW50RXZlbnQoIGNv bnN0IFFSZWdpb24mIHBhaW50UmVnaW9uLCBib29sIGVyYXNlZCA9IFRSVUUpCiAgICAgICAgOiBR RXZlbnQoUGFpbnQpLAogICAgICAgICAgcmVjKHBhaW50UmVnaW9uLmJvdW5kaW5nUmVjdCgpKSwK ICAgICAgICAgIHJlZyhwYWludFJlZ2lvbiksCiAgICAgICAgICBlcmFzZShlcmFzZWQpe30KICAg IFFQYWludEV2ZW50KCBjb25zdCBRUmVjdCAmcGFpbnRSZWN0LCBib29sIGVyYXNlZCA9IFRSVUUg KQogICAgICAgIDogUUV2ZW50KFBhaW50KSwKICAgICAgICAgIHJlYyhwYWludFJlY3QpLAogICAg ICAgICAgcmVnKHBhaW50UmVjdCksCiAgICAgICAgICBlcmFzZShlcmFzZWQpe30KICAgIGNvbnN0 IFFSZWN0ICZyZWN0KCkgY29uc3QgeyByZXR1cm4gcmVjOyB9CiAgICBjb25zdCBRUmVnaW9uICZy ZWdpb24oKSBjb25zdCB7IHJldHVybiByZWc7IH0KICAgIGJvb2wgZXJhc2VkKCkgY29uc3QgeyBy ZXR1cm4gZXJhc2U7IH0KcHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsK ICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwogICAgUVJlY3QgcmVjOwogICAgUVJl Z2lvbiByZWc7CiAgICBib29sIGVyYXNlOwp9OwoKCmNsYXNzIFFNb3ZlRXZlbnQgOiBwdWJsaWMg UUV2ZW50CnsKcHVibGljOgogICAgUU1vdmVFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0 IFFQb2ludCAmb2xkUG9zICkKICAgICAgICA6IFFFdmVudChNb3ZlKSwgcChwb3MpLCBvbGRwKG9s ZFBvcykge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAg Y29uc3QgUVBvaW50ICZvbGRQb3MoKWNvbnN0IHsgcmV0dXJuIG9sZHA7fQpwcm90ZWN0ZWQ6CiAg ICBRUG9pbnQgcCwgb2xkcDsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmll bmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRUmVzaXplRXZlbnQgOiBwdWJs aWMgUUV2ZW50CnsKcHVibGljOgogICAgUVJlc2l6ZUV2ZW50KCBjb25zdCBRU2l6ZSAmc2l6ZSwg Y29uc3QgUVNpemUgJm9sZFNpemUgKQogICAgICAgIDogUUV2ZW50KFJlc2l6ZSksIHMoc2l6ZSks IG9sZHMob2xkU2l6ZSkge30KICAgIGNvbnN0IFFTaXplICZzaXplKCkgY29uc3QgeyByZXR1cm4g czsgfQogICAgY29uc3QgUVNpemUgJm9sZFNpemUoKWNvbnN0IHsgcmV0dXJuIG9sZHM7fQpwcm90 ZWN0ZWQ6CiAgICBRU2l6ZSBzLCBvbGRzOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsK ICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzIFFDbG9zZUV2ZW50 IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDbG9zZUV2ZW50KCkKICAgICAgICA6IFFF dmVudChDbG9zZSksIGFjY3B0KEZBTFNFKSB7fQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3Qg eyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IH0KICAg IHZvaWQgaWdub3JlKCkgeyBhY2NwdCA9IEZBTFNFOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgYWNj cHQ7Cn07CgoKY2xhc3MgUVNob3dFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBR U2hvd0V2ZW50KGJvb2wgc3BvbnRhbmVvdXMpCiAgICAgICAgOiBRRXZlbnQoU2hvdyksIHNwb250 KHNwb250YW5lb3VzKSB7fQogICAgYm9vbCBzcG9udGFuZW91cygpIGNvbnN0IHsgcmV0dXJuIHNw b250OyB9CnByb3RlY3RlZDoKICAgIGJvb2wgc3BvbnQ7Cn07CgoKY2xhc3MgUUhpZGVFdmVudCA6 IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KGJvb2wgc3BvbnRhbmVvdXMp CiAgICAgICAgOiBRRXZlbnQoSGlkZSksIHNwb250KHNwb250YW5lb3VzKSB7fQogICAgYm9vbCBz cG9udGFuZW91cygpIGNvbnN0IHsgcmV0dXJuIHNwb250OyB9CnByb3RlY3RlZDoKICAgIGJvb2wg c3BvbnQ7Cn07CgoKCgoKCgpjbGFzcyBRRHJvcEV2ZW50IDogcHVibGljIFFFdmVudCwgcHVibGlj IFFNaW1lU291cmNlCnsKcHVibGljOgogICAgUURyb3BFdmVudCggY29uc3QgUVBvaW50JiBwb3Ms IFR5cGUgdHlwPURyb3AgKQogICAgICAgIDogUUV2ZW50KHR5cCksIHAocG9zKSwKICAgICAgICAg IGFjdCgwKSwgYWNjcHQoMCksIGFjY3B0YWN0KDApLCByZXN2KDApLAogICAgICAgICAgZCgwKQog ICAgICAgIHt9CiAgICBjb25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAg IGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0IHx8IGFjY3B0YWN0OyB9CiAg ICB2b2lkIGFjY2VwdChib29sIHk9VFJVRSkgeyBhY2NwdCA9IHk7IH0KICAgIHZvaWQgaWdub3Jl KCkgeyBhY2NwdCA9IEZBTFNFOyB9CgogICAgYm9vbCBpc0FjdGlvbkFjY2VwdGVkKCkgY29uc3Qg eyByZXR1cm4gYWNjcHRhY3Q7IH0KICAgIHZvaWQgYWNjZXB0QWN0aW9uKGJvb2wgeT1UUlVFKSB7 IGFjY3B0YWN0ID0geTsgfQogICAgZW51bSBBY3Rpb24geyBDb3B5LCBMaW5rLCBNb3ZlLCBQcml2 YXRlLCBVc2VyQWN0aW9uPTEwMCB9OwogICAgdm9pZCBzZXRBY3Rpb24oIEFjdGlvbiBhICkgeyBh Y3QgPSAodWludClhOyB9CiAgICBBY3Rpb24gYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gQWN0aW9u KGFjdCk7IH0KCiAgICBRV2lkZ2V0KiBzb3VyY2UoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIGZv cm1hdCggaW50IG4gPSAwICkgY29uc3Q7CiAgICBRQnl0ZUFycmF5IGVuY29kZWREYXRhKCBjb25z dCBjaGFyKiApIGNvbnN0OwogICAgYm9vbCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsK CiAgICBRQnl0ZUFycmF5IGRhdGEoY29uc3QgY2hhciogZikgY29uc3QgeyByZXR1cm4gZW5jb2Rl ZERhdGEoZik7IH0KCiAgICB2b2lkIHNldFBvaW50KCBjb25zdCBRUG9pbnQmIG5wICkgeyBwID0g bnA7IH0KCnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgdWludCBhY3Q6ODsKICAgIHVpbnQg YWNjcHQ6MTsKICAgIHVpbnQgYWNjcHRhY3Q6MTsKICAgIHVpbnQgcmVzdjo1OwogICAgdm9pZCAq IGQ7Cn07CgoKCmNsYXNzIFFEcmFnTW92ZUV2ZW50IDogcHVibGljIFFEcm9wRXZlbnQKewpwdWJs aWM6CiAgICBRRHJhZ01vdmVFdmVudCggY29uc3QgUVBvaW50JiBwb3MsIFR5cGUgdHlwPURyYWdN b3ZlICkKICAgICAgICA6IFFEcm9wRXZlbnQocG9zLHR5cCksCiAgICAgICAgICByZWN0KCBwb3Ms IFFTaXplKCAxLCAxICkgKSB7fQogICAgUVJlY3QgYW5zd2VyUmVjdCgpIGNvbnN0IHsgcmV0dXJu IHJlY3Q7IH0KICAgIHZvaWQgYWNjZXB0KCBib29sIHk9VFJVRSApIHsgUURyb3BFdmVudDo6YWNj ZXB0KHkpOyB9CiAgICB2b2lkIGFjY2VwdCggY29uc3QgUVJlY3QgJiByKSB7IGFjY3B0ID0gVFJV RTsgcmVjdCA9IHI7IH0KICAgIHZvaWQgaWdub3JlKCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQg PUZBTFNFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoKSB7IFFEcm9wRXZlbnQ6Omlnbm9y ZSgpOyB9Cgpwcm90ZWN0ZWQ6CiAgICBRUmVjdCByZWN0Owp9OwoKCmNsYXNzIFFEcmFnRW50ZXJF dmVudCA6IHB1YmxpYyBRRHJhZ01vdmVFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFnRW50ZXJFdmVu dCggY29uc3QgUVBvaW50JiBwb3MgKSA6CiAgICAgICAgUURyYWdNb3ZlRXZlbnQocG9zLCBEcmFn RW50ZXIpIHsgfQp9OwoKCgpjbGFzcyBRRHJhZ1Jlc3BvbnNlRXZlbnQgOiBwdWJsaWMgUUV2ZW50 CnsKcHVibGljOgogICAgUURyYWdSZXNwb25zZUV2ZW50KCBib29sIGFjY2VwdGVkICkKICAgICAg ICA6IFFFdmVudChEcmFnUmVzcG9uc2UpLCBhKGFjY2VwdGVkKSB7fQogICAgYm9vbCBkcmFnQWNj ZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgYTsKfTsKCgpj bGFzcyBRRHJhZ0xlYXZlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUURyYWdM ZWF2ZUV2ZW50KCkKICAgICAgICA6IFFFdmVudChEcmFnTGVhdmUpIHt9Cn07CgoKCmNsYXNzIFFD aGlsZEV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFDaGlsZEV2ZW50KCBUeXBl IHR5cGUsIFFPYmplY3QgKmNoaWxkICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgYyhjaGlsZCkg e30KICAgIFFPYmplY3QgKmNoaWxkKCkgY29uc3QgeyByZXR1cm4gYzsgfQogICAgYm9vbCBpbnNl cnRlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0gQ2hpbGRJbnNlcnRlZDsgfQogICAgYm9vbCByZW1v dmVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZFJlbW92ZWQ7IH0KcHJvdGVjdGVkOgogICAg UU9iamVjdCAqYzsKfTsKCgpjbGFzcyBRQ3VzdG9tRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVi bGljOgogICAgUUN1c3RvbUV2ZW50KCBpbnQgdHlwZSApOwogICAgUUN1c3RvbUV2ZW50KCBUeXBl IHR5cGUsIHZvaWQgKmRhdGEgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBkKGRhdGEpIHt9Owog ICAgdm9pZCAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGQ7IH0KICAgIHZvaWQgc2V0RGF0YSggdm9p ZCogZGF0YSApIHsgZCA9IGRhdGE7IH0KcHJpdmF0ZToKICAgIHZvaWQgKmQ7Cn07CiMgNDYgImtl cm5lbC9xb2JqZWN0LmgiIDIKIyAxICJrZXJuZWwvcW5hbWVzcGFjZS5oIiAxCiMgNDcgImtlcm5l bC9xb2JqZWN0LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDEK IyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIgojIDEgIi91c3IvbGliL3F0 L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAxCiMgNDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcXZhbHVl bGlzdC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXNoYXJlZC5oIiAxCiMgNDMgIi91c3Iv bGliL3F0L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9x ZGF0YXN0cmVhbS5oIiAxCiMgNDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIK IyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fpb2RldmljZS5oIiAxCiMgNDIgIi91c3IvbGliL3F0 L2luY2x1ZGUvcWlvZGV2aWNlLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2xvYmFsLmgi IDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xaW9kZXZpY2UuaCIgMgojIDEgIi91c3IvbGli L3F0L2luY2x1ZGUvcWNzdHJpbmcuaCIgMQojIDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fpb2Rl dmljZS5oIiAyCiMgODggIi91c3IvbGliL3F0L2luY2x1ZGUvcWlvZGV2aWNlLmgiCmNsYXNzIFFJ T0RldmljZQp7CnB1YmxpYzoKICAgIFFJT0RldmljZSgpOwogICAgdmlydHVhbCB+UUlPRGV2aWNl KCk7CgogICAgaW50IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlOyB9CiAgICBpbnQgbW9k ZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4MDBmZjsgfQogICAgaW50IHN0YXRlKCkgY29u c3QgeyByZXR1cm4gaW9Nb2RlICYgMHhmMDAwOyB9CgogICAgYm9vbCBpc0RpcmVjdEFjY2Vzcygp IGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMTAwKSA9PSAweDAxMDApOyB9CiAgICBib29s IGlzU2VxdWVudGlhbEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMjAwKSA9 PSAweDAyMDApOyB9CiAgICBib29sIGlzQ29tYmluZWRBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAo KGlvTW9kZSAmIDB4MDMwMCkgPT0gMHgwMzAwKTsgfQogICAgYm9vbCBpc0J1ZmZlcmVkKCkgY29u c3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwNDApICE9IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNS YXcoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkgPT0gMHgwMDQwKTsgfQogICAg Ym9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApICE9 IDB4MDA4MCk7IH0KICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdCB7IHJldHVybiAoKGlv TW9kZSAmIDB4MDA4MCkgPT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc1RyYW5zbGF0ZWQoKSBjb25z dCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAxMCkgPT0gMHgwMDEwKTsgfQogICAgYm9vbCBpc1Jl YWRhYmxlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMDEpID09IDB4MDAwMSk7IH0K ICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAyKSA9 PSAweDAwMDIpOyB9CiAgICBib29sIGlzUmVhZFdyaXRlKCkgY29uc3QgeyByZXR1cm4gKChpb01v ZGUgJiAweDAwMDMpID09IDB4MDAwMyk7IH0KICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0IHsg cmV0dXJuIHN0YXRlKCkgPT0gMDsgfQogICAgYm9vbCBpc09wZW4oKSBjb25zdCB7IHJldHVybiBz dGF0ZSgpID09IDB4MTAwMDsgfQoKICAgIGludCBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBpb1N0 OyB9CiAgICB2b2lkIHJlc2V0U3RhdHVzKCkgeyBpb1N0ID0gMDsgfQoKICAgIHZpcnR1YWwgYm9v bCBvcGVuKCBpbnQgbW9kZSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAg IHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKCiAgICB2aXJ0dWFsIHVpbnQgc2l6ZSgpIGNvbnN0 ID0gMDsKICAgIHZpcnR1YWwgaW50IGF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIGlu dCApOwogICAgdmlydHVhbCBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIHJlc2V0KCkgeyBy ZXR1cm4gYXQoMCk7IH0KCiAgICB2aXJ0dWFsIGludCByZWFkQmxvY2soIGNoYXIgKmRhdGEsIHVp bnQgbWF4bGVuICkgPSAwOwogICAgdmlydHVhbCBpbnQgd3JpdGVCbG9jayggY29uc3QgY2hhciAq ZGF0YSwgdWludCBsZW4gKSA9IDA7CiAgICB2aXJ0dWFsIGludCByZWFkTGluZSggY2hhciAqZGF0 YSwgdWludCBtYXhsZW4gKTsKICAgIGludCB3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFycmF5JiBk YXRhICk7CiAgICBRQnl0ZUFycmF5IHJlYWRBbGwoKTsKCiAgICB2aXJ0dWFsIGludCBnZXRjaCgp ID0gMDsKICAgIHZpcnR1YWwgaW50IHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFsIGludCB1 bmdldGNoKCBpbnQgKSA9IDA7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldEZsYWdzKCBpbnQgZiAp IHsgaW9Nb2RlID0gZjsgfQogICAgdm9pZCBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQgc2V0TW9k ZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXRlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdHVzKCBp bnQgKTsKICAgIGludCBpb0luZGV4OwoKcHJpdmF0ZToKICAgIGludCBpb01vZGU7CiAgICBpbnQg aW9TdDsKCnByaXZhdGU6CgogICAgUUlPRGV2aWNlKCBjb25zdCBRSU9EZXZpY2UgJiApOwogICAg UUlPRGV2aWNlICZvcGVyYXRvcj0oIGNvbnN0IFFJT0RldmljZSAmICk7Cgp9OwojIDQzICIvdXNy L2xpYi9xdC9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRl L3FzdHJpbmcuaCIgMQojIDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDIK CgoKY2xhc3MgUURhdGFTdHJlYW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURh dGFTdHJlYW0oIFFJT0RldmljZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50 IG1vZGUgKTsKICAgIHZpcnR1YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZp Y2UoKSBjb25zdDsKICAgIHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1 bnNldERldmljZSgpOwoKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29u c3Q7CgogICAgZW51bSBCeXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAg aW50IGJ5dGVPcmRlcigpIGNvbnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAg IGJvb2wgaXNQcmludGFibGVEYXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEo IGJvb2wgKTsKCiAgICBpbnQgdmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBp bnQgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh dG9yPj4oIFFfSU5UMTYgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQx NiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFE YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9w ZXJhdG9yPj4oIFFfSU5UNjQgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJ TlQ2NCAmaSApOwoKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAmZiApOwogICAg UURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmZiApOwogICAgUURhdGFTdHJlYW0gJm9w ZXJhdG9yPj4oIGNoYXIgKiZzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9J TlQ4IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQ4IGkgKTsKICAgIFFE YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX0lOVDE2IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy YXRvcjw8KCBRX1VJTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQz MiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMzIgaSApOwogICAgUURh dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UNjQgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh dG9yPDwoIFFfVUlOVDY0IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCBm ICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggZG91YmxlIGYgKTsKICAgIFFEYXRhU3Ry ZWFtICZvcGVyYXRvcjw8KCBjb25zdCBjaGFyICpzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmcmVh ZEJ5dGVzKCBjaGFyIComLCB1aW50ICZsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZyZWFkUmF3Qnl0 ZXMoIGNoYXIgKiwgdWludCBsZW4gKTsKCiAgICBRRGF0YVN0cmVhbSAmd3JpdGVCeXRlcyggY29u c3QgY2hhciAqLCB1aW50IGxlbiApOwogICAgUURhdGFTdHJlYW0gJndyaXRlUmF3Qnl0ZXMoIGNv bnN0IGNoYXIgKiwgdWludCBsZW4gKTsKCnByaXZhdGU6CiAgICBRSU9EZXZpY2UgKmRldjsKICAg IGJvb2wgb3duZGV2OwogICAgaW50IGJ5dGVvcmRlcjsKICAgIGJvb2wgcHJpbnRhYmxlOwogICAg Ym9vbCBub3N3YXA7CiAgICBpbnQgdmVyOwoKcHJpdmF0ZToKCiAgICBRRGF0YVN0cmVhbSggY29u c3QgUURhdGFTdHJlYW0gJiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPSggY29uc3QgUURh dGFTdHJlYW0gJiApOwoKfTsKCgoKCgoKaW5saW5lIFFJT0RldmljZSAqUURhdGFTdHJlYW06OmRl dmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmF0 RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2LT5hdEVuZCgpIDogVFJVRTsgfQoKaW5saW5l IGJvb2wgUURhdGFTdHJlYW06OmVvZigpIGNvbnN0CnsgcmV0dXJuIGF0RW5kKCk7IH0KCmlubGlu ZSBpbnQgUURhdGFTdHJlYW06OmJ5dGVPcmRlcigpIGNvbnN0CnsgcmV0dXJuIGJ5dGVvcmRlcjsg fQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0CnsgcmV0 dXJuIHByaW50YWJsZTsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFByaW50YWJsZURh dGEoIGJvb2wgcCApCnsgcHJpbnRhYmxlID0gcDsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6 dmVyc2lvbigpIGNvbnN0CnsgcmV0dXJuIHZlcjsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06 OnNldFZlcnNpb24oIGludCB2ICkKeyB2ZXIgPSB2OyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFE YXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQ4ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFf SU5UOCYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+Pigg UV9VSU5UMTYgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQxNiYpaTsgfQoKaW5saW5lIFFE YXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKQp7IHJldHVy biAqdGhpcyA+PiAoUV9JTlQzMiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVh bTo6b3BlcmF0b3I+PiggUV9VSU5UNjQgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ2NCYp aTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5U OCBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0g JlFEYXRhU3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwg KFFfSU5UMTYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8 PCggUV9VSU5UMzIgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBR RGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDY0IGkgKQp7IHJldHVy biAqdGhpcyA8PCAoUV9JTlQ2NClpOyB9CiMgNDQgIi91c3IvbGliL3F0L2luY2x1ZGUvcXZhbHVl bGlzdC5oIiAyCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0Tm9kZQp7 CnB1YmxpYzoKICAgIFFWYWx1ZUxpc3ROb2RlKCBjb25zdCBUJiB0ICkgOiBkYXRhKCB0ICkgeyB9 CiAgICBRVmFsdWVMaXN0Tm9kZSgpIHsgfQoKCgoKCiAgICBRVmFsdWVMaXN0Tm9kZTxUPiogbmV4 dDsKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBwcmV2OwogICAgVCBkYXRhOwp9OwoKdGVtcGxhdGU8 Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVk ZWYgUVZhbHVlTGlzdE5vZGU8VD4qIE5vZGVQdHI7CgoKCgogICAgTm9kZVB0ciBub2RlOwoKCgoK ICAgIFFWYWx1ZUxpc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAgICBRVmFsdWVMaXN0SXRl cmF0b3IoIE5vZGVQdHIgcCApIDogbm9kZSggcCApIHt9CiAgICBRVmFsdWVMaXN0SXRlcmF0b3Io IGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoK ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIGNv bnN0IHsgcmV0dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25z dCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSAhPSBpdC5u b2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRh OyB9CiAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiBub2RlLT5kYXRhOyB9CgoKCgogICAgUVZh bHVlTGlzdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAgIG5vZGUgPSBub2RlLT5u ZXh0OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8 VD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gdG1wID0g KnRoaXM7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuIHRtcDsKICAg IH0KCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgbm9k ZSA9IG5vZGUtPnByZXY7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxp c3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFWYWx1ZUxpc3RJdGVyYXRv cjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1 cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdENvbnN0 SXRlcmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9k ZVB0cjsKCgoKCiAgICBOb2RlUHRyIG5vZGU7CgoKCgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0 b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoIE5vZGVQdHIg cCApIDogbm9kZSggcCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggY29uc3QgUVZh bHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KICAgIFFW YWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkg OiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFWYWx1ZUxp c3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0gaXQubm9kZTsg fQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYg aXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJh dG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKCiAgICBRVmFsdWVMaXN0Q29u c3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsK ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8 VD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiB0 bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICByZXR1cm4gdG1w OwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBvcGVyYXRvci0tKCkgewog ICAgICAgIG5vZGUgPSBub2RlLT5wcmV2OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg ICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewogICAgICAgIFFW YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2Rl LT5wcmV2OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K Y2xhc3MgUVZhbHVlTGlzdFByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZAp7CnB1YmxpYzoKCgoKICAg IHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFs dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVM aXN0Tm9kZTxUPiBOb2RlOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsK CgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZSgpIHsgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0 ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVzID0gMDsgfQogICAgUVZhbHVlTGlzdFByaXZhdGUo IGNvbnN0IFFWYWx1ZUxpc3RQcml2YXRlPFQ+JiBfcCApIDogUVNoYXJlZCgpIHsKICAgICAgICBu b2RlID0gbmV3IE5vZGU7IG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9kZTsgbm9kZXMgPSAw OwogICAgICAgIEl0ZXJhdG9yIGIoIF9wLm5vZGUtPm5leHQgKTsKICAgICAgICBJdGVyYXRvciBl KCBfcC5ub2RlICk7CiAgICAgICAgSXRlcmF0b3IgaSggbm9kZSApOwogICAgICAgIHdoaWxlKCBi ICE9IGUgKQogICAgICAgICAgICBpbnNlcnQoIGksICpiKysgKTsKICAgIH0KCiAgICB2b2lkIGRl cmVmQW5kRGVsZXRlKCkKICAgIHsKICAgICAgICBpZiAoIGRlcmVmKCkgKQogICAgICAgICAgICBk ZWxldGUgdGhpczsKICAgIH0KCgoKCgogICAgflFWYWx1ZUxpc3RQcml2YXRlKCkgewogICAgICAg IE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICAgICAgd2hpbGUoIHAgIT0gbm9kZSApIHsKICAg ICAgICAgICAgTm9kZVB0ciB4ID0gcC0+bmV4dDsKICAgICAgICAgICAgZGVsZXRlIHA7CiAgICAg ICAgICAgIHAgPSB4OwogICAgICAgIH0KICAgICAgICBkZWxldGUgbm9kZTsKICAgIH0KCiAgICBJ dGVyYXRvciBpbnNlcnQoIEl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgewogICAgICAgIE5vZGVQ dHIgcCA9IG5ldyBOb2RlKCB4ICk7CiAgICAgICAgcC0+bmV4dCA9IGl0Lm5vZGU7CiAgICAgICAg cC0+cHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICAgICAgaXQubm9kZS0+cHJldi0+bmV4dCA9IHA7 CiAgICAgICAgaXQubm9kZS0+cHJldiA9IHA7CiAgICAgICAgbm9kZXMrKzsKICAgICAgICByZXR1 cm4gcDsKICAgIH0KCiAgICBJdGVyYXRvciByZW1vdmUoIEl0ZXJhdG9yIGl0ICkgewogICAgICAg IGlmICggIShpdC5ub2RlICE9IG5vZGUpICkgcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVz ICglZCkiLCJpdC5ub2RlICE9IG5vZGUiLCIvdXNyL2xpYi9xdC9pbmNsdWRlL3F2YWx1ZWxpc3Qu aCIsMjI2KTsKICAgICAgICBOb2RlUHRyIG5leHQgPSBpdC5ub2RlLT5uZXh0OwogICAgICAgIE5v ZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAg ICAgICAgbmV4dC0+cHJldiA9IHByZXY7CiAgICAgICAgZGVsZXRlIGl0Lm5vZGU7CiAgICAgICAg bm9kZXMtLTsKICAgICAgICByZXR1cm4gSXRlcmF0b3IoIG5leHQgKTsKICAgIH0KCiAgICBOb2Rl UHRyIGZpbmQoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAgICAgQ29u c3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxhc3QoIG5v ZGUgKTsKICAgICAgICB3aGlsZSggZmlyc3QgIT0gbGFzdCkgewogICAgICAgICAgICBpZiAoICpm aXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdC5ub2RlOwogICAgICAgICAg ICArK2ZpcnN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGFzdC5ub2RlOwogICAgfQoKICAg IGludCBmaW5kSW5kZXgoIE5vZGVQdHIgc3RhcnQsIGNvbnN0IFQmIHggKSBjb25zdCB7CiAgICAg ICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgICAgICBDb25zdEl0ZXJhdG9yIGxh c3QoIG5vZGUgKTsKICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICB3aGlsZSggZmlyc3QgIT0g bGFzdCkgewogICAgICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgICAgIHJl dHVybiBwb3M7CiAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgICAgICsrcG9zOwogICAgICAg IH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgdWludCBjb250YWlucyggY29uc3QgVCYg eCApIGNvbnN0IHsKICAgICAgICB1aW50IHJlc3VsdCA9IDA7CiAgICAgICAgSXRlcmF0b3IgZmly c3QgPSBJdGVyYXRvciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVy YXRvciggbm9kZSApOwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAg IGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgICAg ICsrZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdm9p ZCByZW1vdmUoIGNvbnN0IFQmIHggKSB7CiAgICAgICAgSXRlcmF0b3IgZmlyc3QgPSBJdGVyYXRv ciggbm9kZS0+bmV4dCApOwogICAgICAgIEl0ZXJhdG9yIGxhc3QgPSBJdGVyYXRvciggbm9kZSAp OwogICAgICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgICAgIGlmICggKmZpcnN0 ID09IHggKQogICAgICAgICAgICAgICAgZmlyc3QgPSByZW1vdmUoIGZpcnN0ICk7CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICsrZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICAgIE5v ZGVQdHIgYXQoIHVpbnQgaSApIGNvbnN0IHsKICAgICAgICBpZiAoICEoaSA8PSBub2RlcykgKSBx V2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIsImkgPD0gbm9kZXMiLCIvdXNyL2xp Yi9xdC9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIsMjg0KTsKICAgICAgICBOb2RlUHRyIHAgPSBub2Rl LT5uZXh0OwogICAgICAgIGZvciggdWludCB4ID0gMDsgeCA8IGk7ICsreCApCiAgICAgICAgICAg IHAgPSBwLT5uZXh0OwogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7 CiAgICAgICAgbm9kZXMgPSAwOwogICAgICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7CiAgICAg ICAgd2hpbGUoIHAgIT0gbm9kZSApIHsKICAgICAgICAgICAgTm9kZVB0ciBuZXh0ID0gcC0+bmV4 dDsKICAgICAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgICAgIHAgPSBuZXh0OwogICAgICAgIH0K ICAgICAgICBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7CiAgICB9CgogICAgTm9kZVB0 ciBub2RlOwogICAgdWludCBub2RlczsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFs dWVMaXN0CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRl cmF0b3I7CiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0 b3I7CiAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwoKCgoKICAgIFFWYWx1ZUxpc3QoKSB7IHNoID0g bmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAgICBRVmFsdWVMaXN0KCBjb25zdCBRVmFsdWVM aXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5yZWYoKTsgfQogICAgflFWYWx1ZUxpc3QoKSB7 IHNoLT5kZXJlZkFuZERlbGV0ZSgpOyB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3I9ICgg Y29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CiAgICAgICAgbC5zaC0+cmVmKCk7CiAgICAg ICAgc2gtPmRlcmVmQW5kRGVsZXRlKCk7CiAgICAgICAgc2ggPSBsLnNoOwogICAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVMaXN0PFQ+IG9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1 ZUxpc3Q8VD4mIGwgKSBjb25zdAogICAgewogICAgICAgIFFWYWx1ZUxpc3Q8VD4gbDIoICp0aGlz ICk7CiAgICAgICAgZm9yKCBDb25zdEl0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVu ZCgpOyArK2l0ICkKICAgICAgICAgICAgbDIuYXBwZW5kKCAqaXQgKTsKICAgICAgICByZXR1cm4g bDI7CiAgICB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3IrPSAoIGNvbnN0IFFWYWx1ZUxp c3Q8VD4mIGwgKQogICAgewogICAgICAgIGZvciggQ29uc3RJdGVyYXRvciBpdCA9IGwuYmVnaW4o KTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAgICAgICAgIGFwcGVuZCggKml0ICk7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSAoIGNvbnN0IFFWYWx1 ZUxpc3Q8VD4mIGwgKSBjb25zdAogICAgewogICAgICAgIGlmICggY291bnQoKSAhPSBsLmNvdW50 KCkgKQogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgQ29uc3RJdGVyYXRvciBpdDIg PSBiZWdpbigpOwogICAgICAgIENvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7CiAgICAgICAg Zm9yKCA7IGl0ICE9IGwuZW5kKCk7ICsraXQsICsraXQyICkKICAgICAgICAgICAgaWYgKCAhKCAq aXQgPT0gKml0MiApICkKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1 cm4gVFJVRTsKICAgIH0KCiAgICBib29sIG9wZXJhdG9yIT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+ JiBsICkgY29uc3QgeyByZXR1cm4gISggKnRoaXMgPT0gbCApOyB9CgogICAgSXRlcmF0b3IgYmVn aW4oKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAg IENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+ bm9kZS0+bmV4dCApOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IGRldGFjaCgpOyByZXR1cm4gSXRl cmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1 cm4gQ29uc3RJdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgSXRlcmF0b3IgZnJvbUxhc3QoKSB7 IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KICAgIENvbnN0 SXRlcmF0b3IgZnJvbUxhc3QoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBzaC0+bm9k ZS0+cHJldiApOyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gKCBzaC0+bm9k ZXMgPT0gMCApOyB9CgogICAgSXRlcmF0b3IgaW5zZXJ0KCBJdGVyYXRvciBpdCwgY29uc3QgVCYg eCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+aW5zZXJ0KCBpdCwgeCApOyB9CgogICAgSXRlcmF0 b3IgYXBwZW5kKCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGVu ZCgpLCB4ICk7IH0KICAgIEl0ZXJhdG9yIHByZXBlbmQoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp OyByZXR1cm4gc2gtPmluc2VydCggYmVnaW4oKSwgeCApOyB9CgogICAgSXRlcmF0b3IgcmVtb3Zl KCBJdGVyYXRvciBpdCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVtb3ZlKCBpdCApOyB9CiAg ICB2b2lkIHJlbW92ZSggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHNoLT5yZW1vdmUoIHggKTsg fQoKICAgIFQmIGZpcnN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5uZXh0LT5kYXRh OyB9CiAgICBjb25zdCBUJiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlLT5uZXh0LT5k YXRhOyB9CiAgICBUJiBsYXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5k YXRhOyB9CiAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGUtPnByZXYt PmRhdGE7IH0KCiAgICBUJiBvcGVyYXRvcltdICggdWludCBpICkgeyBkZXRhY2goKTsgcmV0dXJu IHNoLT5hdChpKS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXSAoIHVpbnQgaSApIGNv bnN0IHsgcmV0dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgSXRlcmF0b3IgYXQoIHVpbnQgaSAp IHsgZGV0YWNoKCk7IHJldHVybiBJdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIENvbnN0SXRl cmF0b3IgYXQoIHVpbnQgaSApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5hdChp KSApOyB9CiAgICBJdGVyYXRvciBmaW5kICggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVy biBJdGVyYXRvciggc2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBDb25zdEl0 ZXJhdG9yIGZpbmQgKCBjb25zdCBUJiB4ICkgY29uc3QgeyByZXR1cm4gQ29uc3RJdGVyYXRvcigg c2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9CiAgICBJdGVyYXRvciBmaW5kICggSXRl cmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gSXRlcmF0b3IoIHNoLT5m aW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgQ29uc3RJdGVyYXRvciBmaW5kICggQ29uc3RJdGVy YXRvciBpdCwgY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIHNoLT5m aW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgaW50IGZpbmRJbmRleCggY29uc3QgVCYgeCApIGNv bnN0IHsgcmV0dXJuIHNoLT5maW5kSW5kZXgoIHNoLT5ub2RlLT5uZXh0LCB4KSA7IH0KICAgIHVp bnQgY29udGFpbnMoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+Y29udGFpbnMoIHgg KTsgfQoKICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXM7IH0KCiAgICB2 b2lkIGNsZWFyKCkgeyBpZiAoIHNoLT5jb3VudCA9PSAxICkgc2gtPmNsZWFyKCk7IGVsc2UgeyBz aC0+ZGVyZWYoKTsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8VD47IH0gfQoKCiAgICBRVmFs dWVMaXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgVCYgeCApCiAgICB7CiAgICAgICAgYXBwZW5k KCB4ICk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgUVZhbHVlTGlzdDxUPiYgb3Bl cmF0b3I8PCAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVuZCggeCApOwogICAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCgpwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIGRldGFjaCgpIHsg aWYgKCBzaC0+Y291bnQgPiAxICkgeyBzaC0+ZGVyZWYoKTsgc2ggPSBuZXcgUVZhbHVlTGlzdFBy aXZhdGU8VD4oICpzaCApOyB9IH0KCgoKCiAgICBRVmFsdWVMaXN0UHJpdmF0ZTxUPiogc2g7Cn07 CgoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KCBRRGF0 YVN0cmVhbSYgcywgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGwuY2xlYXIoKTsKICAgIFFfVUlO VDMyIGM7CiAgICBzID4+IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkK ICAgIHsKICAgICAgICBUIHQ7CiAgICAgICAgcyA+PiB0OwogICAgICAgIGwuYXBwZW5kKCB0ICk7 CiAgICB9CiAgICByZXR1cm4gczsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIFFEYXRhU3Ry ZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhbHVlTGlzdDxUPiYgbCAp CnsKICAgIHMgPDwgKFFfVUlOVDMyKWwuY291bnQoKTsKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJh dG9yPFQ+IGl0ID0gbC5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQog ICAgICAgIHMgPDwgKml0OwogICAgcmV0dXJuIHM7Cn0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVk ZS9xc3RyaW5nbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEK IyA0NCAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCiMgMSAiL3Vzci9saWIv cXQvaW5jbHVkZS9xcmVnZXhwLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcmVnZXhw LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0MyAiL3Vzci9saWIv cXQvaW5jbHVkZS9xcmVnZXhwLmgiIDIKCgoKY2xhc3MgUVJlZ0V4cAp7CnB1YmxpYzoKICAgIFFS ZWdFeHAoKTsKICAgIFFSZWdFeHAoIGNvbnN0IFFTdHJpbmcgJiwgYm9vbCBjYXNlU2Vuc2l0aXZl PVRSVUUsIGJvb2wgd2lsZGNhcmQ9RkFMU0UgKTsKICAgIFFSZWdFeHAoIGNvbnN0IFFSZWdFeHAg JiApOwogICB+UVJlZ0V4cCgpOwogICAgUVJlZ0V4cCAmb3BlcmF0b3I9KCBjb25zdCBRUmVnRXhw ICYgKTsKICAgIFFSZWdFeHAgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmcGF0dGVybiApOwoK ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CiAgICBib29sIG9w ZXJhdG9yIT0oIGNvbnN0IFFSZWdFeHAgJnIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KHIpKTsgfQoKICAg IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHJ4ZGF0YSA9PSAwOyB9CiAgICBib29sIGlz VmFsaWQoKSBjb25zdCB7IHJldHVybiBlcnJvciA9PSAwOyB9CgogICAgYm9vbCBjYXNlU2Vuc2l0 aXZlKCkgY29uc3QgeyByZXR1cm4gY3M7IH0KICAgIHZvaWQgc2V0Q2FzZVNlbnNpdGl2ZSggYm9v bCApOwoKICAgIGJvb2wgd2lsZGNhcmQoKSBjb25zdCB7IHJldHVybiB3YzsgfQogICAgdm9pZCBz ZXRXaWxkY2FyZCggYm9vbCApOwoKICAgIFFTdHJpbmcgcGF0dGVybigpIGNvbnN0IHsgcmV0dXJu IHJ4c3RyaW5nOyB9CgogICAgdm9pZCBzZXRQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiBwYXR0ZXJu ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgb3BlcmF0b3I9KCBw YXR0ZXJuICk7IH0KCiAgICBpbnQgbWF0Y2goIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4 PTAsIGludCAqbGVuPTAsCiAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmRleElzU3RhcnQg PSBUUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgaW5k ZXggKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbWF0 Y2goIHN0ciwgaW5kZXggKTsgfQoKcHJvdGVjdGVkOgogICAgdm9pZCBjb21waWxlKCk7CiAgICBj b25zdCBRQ2hhciAqbWF0Y2hzdHIoIHVpbnQgKiwgY29uc3QgUUNoYXIgKiwgdWludCwgY29uc3Qg UUNoYXIgKiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcgcnhzdHJpbmc7CiAgICB1aW50 ICpyeGRhdGE7CiAgICBpbnQgZXJyb3I7CiAgICBib29sIGNzOwogICAgYm9vbCB3YzsKfTsKIyA0 NSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc3RyaW5nbGlzdC5oIiAyCgoKCgpjbGFzcyBRU3RyTGlz dDsKCmNsYXNzIFFTdHJpbmdMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8UVN0cmluZz4KewpwdWJs aWM6CiAgICBRU3RyaW5nTGlzdCgpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmdM aXN0JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNv bnN0IFFWYWx1ZUxpc3Q8UVN0cmluZz4mIGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkgeyB9 CiAgICBRU3RyaW5nTGlzdCggY29uc3QgUVN0cmluZyYgaSApIHsgYXBwZW5kKGkpOyB9CgogICAg UVN0cmluZ0xpc3QoIGNvbnN0IGNoYXIqIGkgKSB7IGFwcGVuZChpKTsgfQoKCiAgICBzdGF0aWMg UVN0cmluZ0xpc3QgZnJvbVN0ckxpc3QoY29uc3QgUVN0ckxpc3QmKTsKCiAgICB2b2lkIHNvcnQo KTsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFTdHJpbmcgJnNlcCwgY29u c3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIHN0 YXRpYyBRU3RyaW5nTGlzdCBzcGxpdCggY29uc3QgUUNoYXIgJnNlcCwgY29uc3QgUVN0cmluZyAm c3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIHN0YXRpYyBRU3RyaW5n TGlzdCBzcGxpdCggY29uc3QgUVJlZ0V4cCAmc2VwLCBjb25zdCBRU3RyaW5nICZzdHIsIGJvb2wg YWxsb3dFbXB0eUVudHJpZXMgPSBGQUxTRSApOwogICAgUVN0cmluZyBqb2luKCBjb25zdCBRU3Ry aW5nICZzZXAgKSBjb25zdDsKCiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBRU3RyaW5nICZz dHIsIGJvb2wgY3MgPSBUUlVFICkgY29uc3Q7CiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBR UmVnRXhwICZleHByICkgY29uc3Q7Cn07CgoKY2xhc3MgUURhdGFTdHJlYW07CmV4dGVybiBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVN0cmluZ0xpc3QmICk7CmV4dGVy biBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVN0cmluZ0xp c3QmICk7CiMgNDggImtlcm5lbC9xb2JqZWN0LmgiIDIKCgoKCgpjbGFzcyBRTWV0YU9iamVjdDsK Y2xhc3MgUVZhcmlhbnQ7CgoKCmNsYXNzIFFPYmplY3Q6IHB1YmxpYyBRdAp7CgoKcHVibGljOgog ICAgUU9iamVjdCggUU9iamVjdCAqcGFyZW50PTAsIGNvbnN0IGNoYXIgKm5hbWU9MCApOwogICAg dmlydHVhbCB+UU9iamVjdCgpOwoKICAgIHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICog KTsKICAgIHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoK ICAgIHZpcnR1YWwgYm9vbCBldmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgYm9vbCBldmVu dEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgUU1ldGFPYmplY3Qg Km1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0KICAgIHZp cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CgogICAgYm9vbCBpc0EoIGNvbnN0 IGNoYXIgKiApIGNvbnN0OwogICAgYm9vbCBpbmhlcml0cyggY29uc3QgY2hhciAqICkgY29uc3Q7 CgogICAgY29uc3QgY2hhciAqbmFtZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciAqbmFtZSggY29u c3QgY2hhciAqIGRlZmF1bHROYW1lICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldE5hbWUo IGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIGJvb2wgaXNXaWRnZXRUeXBlKCkgY29uc3QgeyByZXR1 cm4gaXNXaWRnZXQ7IH0KICAgIGJvb2wgaGlnaFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gRkFM U0U7IH0KCiAgICBib29sIHNpZ25hbHNCbG9ja2VkKCkgY29uc3QgeyByZXR1cm4gYmxvY2tTaWc7 IH0KICAgIHZvaWQgYmxvY2tTaWduYWxzKCBib29sIGIgKTsKCiAgICBpbnQgc3RhcnRUaW1lcigg aW50IGludGVydmFsICk7CiAgICB2b2lkIGtpbGxUaW1lciggaW50IGlkICk7CiAgICB2b2lkIGtp bGxUaW1lcnMoKTsKCiAgICBRT2JqZWN0ICpjaGlsZCggY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Y2hhciAqdHlwZSA9IDAgKTsKICAgIGNvbnN0IFFPYmplY3RMaXN0ICpjaGlsZHJlbigpIGNvbnN0 IHsgcmV0dXJuIGNoaWxkT2JqZWN0czsgfQoKICAgIHN0YXRpYyBjb25zdCBRT2JqZWN0TGlzdCAq b2JqZWN0VHJlZXMoKTsKCgogICAgUU9iamVjdExpc3QgKnF1ZXJ5TGlzdCggY29uc3QgY2hhciAq aW5oZXJpdHNDbGFzcyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpvYmpOYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgcmVnZXhwTWF0Y2ggPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCByZWN1cnNpdmVTZWFyY2ggPSBUUlVFICk7CgogICAgdmlydHVhbCB2b2lkIGluc2VydENo aWxkKCBRT2JqZWN0ICogKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZCggUU9iamVjdCAq ICk7CgogICAgdm9pZCBpbnN0YWxsRXZlbnRGaWx0ZXIoIGNvbnN0IFFPYmplY3QgKiApOwogICAg dm9pZCByZW1vdmVFdmVudEZpbHRlciggY29uc3QgUU9iamVjdCAqICk7CgogICAgc3RhdGljIGJv b2wgY29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNo YXIgKm1lbWJlciApOwogICAgYm9vbCBjb25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNv bnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt ZW1iZXIgKSBjb25zdDsKICAgIHN0YXRpYyBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3Qg KnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wg ZGlzY29ubmVjdCggY29uc3QgY2hhciAqc2lnbmFsPTAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXI9MCwgY29uc3QgY2hhciAqbWVtYmVyPTAgKTsK ICAgIGJvb2wgZGlzY29ubmVjdCggY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIg Km1lbWJlcj0wICk7CgogICAgdm9pZCBkdW1wT2JqZWN0VHJlZSgpOwogICAgdm9pZCBkdW1wT2Jq ZWN0SW5mbygpOwoKCiAgICBib29sIHNldFByb3BlcnR5KCBjb25zdCBjaGFyICpuYW1lLCBjb25z dCBRVmFyaWFudCYgdmFsdWUgKTsKICAgIFFWYXJpYW50IHByb3BlcnR5KCBjb25zdCBjaGFyICpu YW1lICkgY29uc3Q7CgoKcHJvdGVjdGVkOgogICAgdm9pZCBkZXN0cm95ZWQoKTsKCnB1YmxpYzoK ICAgIFFPYmplY3QgKnBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudE9iajsgfQoKcHJpdmF0 ZSA6CiAgICB2b2lkIGNsZWFudXBFdmVudEZpbHRlcigpOwoKcHJvdGVjdGVkOgogICAgYm9vbCBh Y3RpdmF0ZV9maWx0ZXJzKCBRRXZlbnQgKiApOwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZl cnMoIGNvbnN0IGNoYXIgKnNpZ25hbCApIGNvbnN0OwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwo IGNvbnN0IGNoYXIgKnNpZ25hbCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNo YXIgKnNpZ25hbCwgc2hvcnQgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBjb25zdCBjaGFy ICpzaWduYWwsIGludCApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNp Z25hbCwgbG9uZyApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGNvbnN0IGNoYXIgKnNpZ25h bCwgY29uc3QgY2hhciAqICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbF9ib29sKCBjb25zdCBj aGFyICpzaWduYWwsIGJvb2wgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX3N0cmluZyggY29u c3QgY2hhciAqc2lnbmFsLCBRU3RyaW5nICk7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbF9zdHJy ZWYoIGNvbnN0IGNoYXIgKnNpZ25hbCwgY29uc3QgUVN0cmluZyAmICk7CgogICAgY29uc3QgUU9i amVjdCAqc2VuZGVyKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBpbml0TWV0YU9iamVjdCgpOwogICAg c3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CgogICAgdmlydHVhbCB2b2lk IHRpbWVyRXZlbnQoIFFUaW1lckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjaGlsZEV2ZW50 KCBRQ2hpbGRFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3ROb3RpZnkoIGNvbnN0 IGNoYXIgKnNpZ25hbCApOwogICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3ROb3RpZnkoIGNvbnN0 IGNoYXIgKnNpZ25hbCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdEFyZ3MoIGNvbnN0 IGNoYXIgKnNpZ25hbCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBzdGF0aWMgUUNTdHJp bmcgbm9ybWFsaXplU2lnbmFsU2xvdCggY29uc3QgY2hhciAqc2lnbmFsU2xvdCApOwoKICAgIHN0 YXRpYyB2b2lkIGJhZFN1cGVyY2xhc3NXYXJuaW5nKCBjb25zdCBjaGFyICpjbGFzc05hbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN1cGVyY2xh c3NOYW1lICk7Cgpwcml2YXRlOgogICAgdWludCBpc1NpZ25hbCA6IDE7CiAgICB1aW50IGlzV2lk Z2V0IDogMTsKICAgIHVpbnQgcGVuZFRpbWVyIDogMTsKICAgIHVpbnQgcGVuZEV2ZW50IDogMTsK ICAgIHVpbnQgYmxvY2tTaWcgOiAxOwogICAgdWludCB3YXNEZWxldGVkIDogMTsKICAgIHVpbnQg aXNUcmVlIDogMTsKCiAgICBRTWV0YU9iamVjdCAqcXVlcnlNZXRhT2JqZWN0KCkgY29uc3Q7CiAg ICBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAgICBjb25zdCBjaGFyICpvYmpuYW1lOwog ICAgUU9iamVjdCAqcGFyZW50T2JqOwogICAgUU9iamVjdExpc3QgKmNoaWxkT2JqZWN0czsKICAg IFFTaWduYWxEaWN0ICpjb25uZWN0aW9uczsKICAgIFFPYmplY3RMaXN0ICpzZW5kZXJPYmplY3Rz OwogICAgUU9iamVjdExpc3QgKmV2ZW50RmlsdGVyczsKCgogICAgUU9iamVjdCAqc2lnU2VuZGVy OwoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VB cHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFT aWduYWw7CiAgICBmcmllbmQgY2xhc3MgUVNlbmRlck9iamVjdDsKCnByaXZhdGU6CgogICAgUU9i amVjdCggY29uc3QgUU9iamVjdCAmICk7CiAgICBRT2JqZWN0ICZvcGVyYXRvcj0oIGNvbnN0IFFP YmplY3QgJiApOwoKCnB1YmxpYzoKCgogICAgUVN0cmluZ0xpc3Qgc3VwZXJDbGFzc2VzKCBib29s IGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKCn07CgoKCmlubGluZSBib29sIFFPYmplY3Q6 OmNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZW1iZXIgKSBjb25zdAp7CiAg ICByZXR1cm4gY29ubmVjdCggc2VuZGVyLCBzaWduYWwsIHRoaXMsIG1lbWJlciApOwp9Cgppbmxp bmUgYm9vbCBRT2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBj aGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNl aXZlciwgbWVtYmVyICk7Cn0KCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nvbm5lY3QoIGNvbnN0 IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKQp7CiAgICByZXR1cm4gZGlz Y29ubmVjdCggdGhpcywgMCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgppbmxpbmUgY29uc3QgUU9i amVjdCAqUU9iamVjdDo6c2VuZGVyKCkKewogICAgcmV0dXJuIHNpZ1NlbmRlcjsKfQoKCmNsYXNz IFFTZW5kZXJPYmplY3QgOiBwdWJsaWMgUU9iamVjdAp7CnB1YmxpYzoKICAgIHZvaWQgc2V0U2Vu ZGVyKCBRT2JqZWN0ICpzICkgeyBzaWdTZW5kZXI9czsgfQp9OwojIDQzICJrZXJuZWwvcWFic3Ry YWN0bGF5b3V0LmgiIDIKIyAxICJrZXJuZWwvcXNpemVwb2xpY3kuaCIgMQojIDQyICJrZXJuZWwv cXNpemVwb2xpY3kuaCIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDQz ICJrZXJuZWwvcXNpemVwb2xpY3kuaCIgMgoKCmNsYXNzIFFTaXplUG9saWN5CnsKcHJpdmF0ZToK ICAgIGVudW0geyBIU2l6ZSA9IDYsIEhNYXNrID0gMHgzZiwgVk1hc2sgPSBITWFzayA8PCBIU2l6 ZSwKICAgICAgICAgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9IDQgfTsK cHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKICAgICAgICAgICAgICAgICAg ICBNaW5pbXVtID0gTWF5R3JvdywKICAgICAgICAgICAgICAgICAgICBNYXhpbXVtID0gTWF5U2hy aW5rLAogICAgICAgICAgICAgICAgICAgIFByZWZlcnJlZCA9IE1heUdyb3d8TWF5U2hyaW5rICwK ICAgICAgICAgICAgICAgICAgICBNaW5pbXVtRXhwYW5kaW5nID0gTWluaW11bXxFeHBNYXNrLAog ICAgICAgICAgICAgICAgICAgIEV4cGFuZGluZyA9IE1pbmltdW1FeHBhbmRpbmd8TWF5U2hyaW5r IH07CgogICAgZW51bSBFeHBhbmREYXRhIHsgTm9EaXJlY3Rpb24gPSAwLAogICAgICAgICAgICAg ICAgICAgICAgSG9yaXpvbnRhbCA9IDEsCiAgICAgICAgICAgICAgICAgICAgICBWZXJ0aWNhbCA9 IDIsCiAgICAgICAgICAgICAgICAgICAgICBCb3RoRGlyZWN0aW9ucyA9IEhvcml6b250YWwgfCBW ZXJ0aWNhbCB9OwoKICAgIFFTaXplUG9saWN5KCkgeyBkYXRhID0gMDsgfQoKICAgIFFTaXplUG9s aWN5KCBTaXplVHlwZSBob3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgPSBGQUxTRSApOwoKICAg IFNpemVUeXBlIGhvckRhdGEoKSBjb25zdCB7IHJldHVybiAoU2l6ZVR5cGUpKCBkYXRhICYgSE1h c2sgKTsgfQogICAgU2l6ZVR5cGUgdmVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIChTaXplVHlwZSko KCBkYXRhICYgVk1hc2sgKSA+PiBIU2l6ZSk7IH0KCiAgICBib29sIG1heVNocmlua0hvcml6b250 YWxseSgpIGNvbnN0IHsgcmV0dXJuIGhvckRhdGEoKSAmIE1heVNocmluazsgfQogICAgYm9vbCBt YXlTaHJpbmtWZXJ0aWNhbGx5KCkgY29uc3QgeyByZXR1cm4gdmVyRGF0YSgpICYgTWF5U2hyaW5r OyB9CiAgICBib29sIG1heUdyb3dIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVybiBob3JEYXRh KCkgJiBNYXlHcm93OyB9CiAgICBib29sIG1heUdyb3dWZXJ0aWNhbGx5KCkgY29uc3QgeyByZXR1 cm4gdmVyRGF0YSgpICYgTWF5R3JvdzsgfQoKICAgIEV4cGFuZERhdGEgZXhwYW5kaW5nKCkgY29u c3QKICAgIHsKICAgICAgICByZXR1cm4gKEV4cGFuZERhdGEpKCAoaW50KSh2ZXJEYXRhKCkmRXhw TWFzayA/IFZlcnRpY2FsIDogMCkrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCko aG9yRGF0YSgpJkV4cE1hc2sgPyBIb3Jpem9udGFsIDogMCkgKTsKICAgIH0KCiAgICB2b2lkIHNl dEhvckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoZGF0YSAmIH5ITWFzaykgfCBkOyB9CiAg ICB2b2lkIHNldFZlckRhdGEoIFNpemVUeXBlIGQgKSB7IGRhdGEgPSAoZGF0YSAmIH4oSE1hc2s8 PEhTaXplKSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQ8 PEhTaXplKTsgfQoKICAgIHZvaWQgc2V0SGVpZ2h0Rm9yV2lkdGgoIGJvb2wgYiApIHsgZGF0YSA9 IGIgPyAoIGRhdGEgfCAoIDEgPDwgMipIU2l6ZSApICkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogKCBkYXRhICYgfiggMSA8PCAyKkhTaXplICkgKTsgfQog ICAgYm9vbCBoYXNIZWlnaHRGb3JXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgJiAoIDEgPDwg MipIU2l6ZSApOyB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU2l6ZVBvbGljeSYgcyAp IGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gcy5kYXRhOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNv bnN0IFFTaXplUG9saWN5JiBzICkgY29uc3QgeyByZXR1cm4gZGF0YSAhPSBzLmRhdGE7IH0KCnBy aXZhdGU6CiAgICBRU2l6ZVBvbGljeSggaW50IGkgKTogZGF0YSggaSApIHt9CgogICAgUV9VSU5U MTYgZGF0YTsKfTsKCgppbmxpbmUgUVNpemVQb2xpY3k6OlFTaXplUG9saWN5KCBTaXplVHlwZSBo b3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncgKQogICAgICAgIDogZGF0YSggaG9yIHwgKHZlcjw8 SFNpemUpIHwgKGhmdyA/ICgxPDwyKkhTaXplKSA6IDApICkge30KIyA0NCAia2VybmVsL3FhYnN0 cmFjdGxheW91dC5oIiAyCiMgMSAia2VybmVsL3F3aWRnZXQuaCIgMQojIDQyICJrZXJuZWwvcXdp ZGdldC5oIgojIDEgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xd2lkZ2V0 LmgiIDIKIyAxICJrZXJuZWwvcW9iamVjdC5oIiAxCiMgNDQgImtlcm5lbC9xd2lkZ2V0LmgiIDIK IyAxICJrZXJuZWwvcXBhaW50ZGV2aWNlLmgiIDEKIyA0MiAia2VybmVsL3FwYWludGRldmljZS5o IgojIDEgImtlcm5lbC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xcGFpbnRkZXZpY2Uu aCIgMgojIDEgImtlcm5lbC9xcmVjdC5oIiAxCiMgNDQgImtlcm5lbC9xcGFpbnRkZXZpY2UuaCIg MgoKCgoKCgoKY2xhc3MgUUlPRGV2aWNlOwpjbGFzcyBRU3RyaW5nOwoKCgpzdHJ1Y3QgUVBhaW50 RGV2aWNlWDExRGF0YTsKCgp1bmlvbiBRUERldkNtZFBhcmFtIHsKICAgIGludCBpdmFsOwogICAg aW50ICppdmVjOwogICAgUVN0cmluZyAqc3RyOwogICAgY29uc3QgUVBvaW50ICpwb2ludDsKICAg IGNvbnN0IFFSZWN0ICpyZWN0OwogICAgY29uc3QgUVBvaW50QXJyYXkgKnB0YXJyOwogICAgY29u c3QgUVBpeG1hcCAqcGl4bWFwOwogICAgY29uc3QgUUltYWdlICppbWFnZTsKICAgIGNvbnN0IFFD b2xvciAqY29sb3I7CiAgICBjb25zdCBRRm9udCAqZm9udDsKICAgIGNvbnN0IFFQZW4gKnBlbjsK ICAgIGNvbnN0IFFCcnVzaCAqYnJ1c2g7CiAgICBjb25zdCBRUmVnaW9uICpyZ247CiAgICBjb25z dCBRV01hdHJpeCAqbWF0cml4OwogICAgUUlPRGV2aWNlICpkZXZpY2U7Cn07CgoKCmNsYXNzIFFQ YWludERldmljZQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgflFQYWludERldmljZSgpOwoKICAgIGlu dCBkZXZUeXBlKCkgY29uc3Q7CiAgICBib29sIGlzRXh0RGV2KCkgY29uc3Q7CiAgICBib29sIHBh aW50aW5nQWN0aXZlKCkgY29uc3Q7CgoKCgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoK CgoKCgogICAgRGlzcGxheSAqeDExRGlzcGxheSgpIGNvbnN0OwogICAgaW50IHgxMVNjcmVlbigp IGNvbnN0OwogICAgaW50IHgxMURlcHRoKCkgY29uc3Q7CiAgICBpbnQgeDExQ2VsbHMoKSBjb25z dDsKICAgIEhBTkRMRSB4MTFDb2xvcm1hcCgpIGNvbnN0OwogICAgYm9vbCB4MTFEZWZhdWx0Q29s b3JtYXAoKSBjb25zdDsKICAgIHZvaWQgKngxMVZpc3VhbCgpIGNvbnN0OwogICAgYm9vbCB4MTFE ZWZhdWx0VmlzdWFsKCkgY29uc3Q7CgogICAgc3RhdGljIERpc3BsYXkgKngxMUFwcERpc3BsYXko KTsKICAgIHN0YXRpYyBpbnQgeDExQXBwU2NyZWVuKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcERl cHRoKCk7CiAgICBzdGF0aWMgaW50IHgxMUFwcENlbGxzKCk7CiAgICBzdGF0aWMgaW50IHgxMUFw cERwaVgoKTsKICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSgpOwogICAgc3RhdGljIEhBTkRMRSB4 MTFBcHBDb2xvcm1hcCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdENvbG9ybWFwKCk7 CiAgICBzdGF0aWMgdm9pZCAqeDExQXBwVmlzdWFsKCk7CiAgICBzdGF0aWMgYm9vbCB4MTFBcHBE ZWZhdWx0VmlzdWFsKCk7CiAgICBzdGF0aWMgdm9pZCB4MTFTZXRBcHBEcGlYKGludCk7CiAgICBz dGF0aWMgdm9pZCB4MTFTZXRBcHBEcGlZKGludCk7CiMgMTMxICJrZXJuZWwvcXBhaW50ZGV2aWNl LmgiCiAgICBlbnVtIFBEZXZDbWQgewogICAgICAgIFBkY05PUCA9IDAsCiAgICAgICAgUGRjRHJh d1BvaW50ID0gMSwKICAgICAgICBQZGNEcmF3Rmlyc3QgPSBQZGNEcmF3UG9pbnQsCiAgICAgICAg UGRjTW92ZVRvID0gMiwKICAgICAgICBQZGNMaW5lVG8gPSAzLAogICAgICAgIFBkY0RyYXdMaW5l ID0gNCwKICAgICAgICBQZGNEcmF3UmVjdCA9IDUsCiAgICAgICAgUGRjRHJhd1JvdW5kUmVjdCA9 IDYsCiAgICAgICAgUGRjRHJhd0VsbGlwc2UgPSA3LAogICAgICAgIFBkY0RyYXdBcmMgPSA4LAog ICAgICAgIFBkY0RyYXdQaWUgPSA5LAogICAgICAgIFBkY0RyYXdDaG9yZCA9IDEwLAogICAgICAg IFBkY0RyYXdMaW5lU2VnbWVudHMgPSAxMSwKICAgICAgICBQZGNEcmF3UG9seWxpbmUgPSAxMiwK ICAgICAgICBQZGNEcmF3UG9seWdvbiA9IDEzLAogICAgICAgIFBkY0RyYXdRdWFkQmV6aWVyID0g MTQsCiAgICAgICAgUGRjRHJhd1RleHQgPSAxNSwKICAgICAgICBQZGNEcmF3VGV4dEZvcm1hdHRl ZCA9IDE2LAogICAgICAgIFBkY0RyYXdQaXhtYXAgPSAxNywKICAgICAgICBQZGNEcmF3SW1hZ2Ug PSAxOCwKICAgICAgICBQZGNEcmF3VGV4dDIgPSAxOSwKICAgICAgICBQZGNEcmF3VGV4dDJGb3Jt YXR0ZWQgPSAyMCwKICAgICAgICBQZGNEcmF3TGFzdCA9IFBkY0RyYXdUZXh0MkZvcm1hdHRlZCwK CgoKICAgICAgICBQZGNCZWdpbiA9IDMwLAogICAgICAgIFBkY0VuZCA9IDMxLAogICAgICAgIFBk Y1NhdmUgPSAzMiwKICAgICAgICBQZGNSZXN0b3JlID0gMzMsCiAgICAgICAgUGRjU2V0ZGV2ID0g MzQsCiAgICAgICAgUGRjU2V0QmtDb2xvciA9IDQwLAogICAgICAgIFBkY1NldEJrTW9kZSA9IDQx LAogICAgICAgIFBkY1NldFJPUCA9IDQyLAogICAgICAgIFBkY1NldEJydXNoT3JpZ2luID0gNDMs CiAgICAgICAgUGRjU2V0Rm9udCA9IDQ1LAogICAgICAgIFBkY1NldFBlbiA9IDQ2LAogICAgICAg IFBkY1NldEJydXNoID0gNDcsCiAgICAgICAgUGRjU2V0VGFiU3RvcHMgPSA0OCwKICAgICAgICBQ ZGNTZXRUYWJBcnJheSA9IDQ5LAogICAgICAgIFBkY1NldFVuaXQgPSA1MCwKICAgICAgICBQZGNT ZXRWWGZvcm0gPSA1MSwKICAgICAgICBQZGNTZXRXaW5kb3cgPSA1MiwKICAgICAgICBQZGNTZXRW aWV3cG9ydCA9IDUzLAogICAgICAgIFBkY1NldFdYZm9ybSA9IDU0LAogICAgICAgIFBkY1NldFdN YXRyaXggPSA1NSwKICAgICAgICBQZGNTYXZlV01hdHJpeCA9IDU2LAogICAgICAgIFBkY1Jlc3Rv cmVXTWF0cml4ID0gNTcsCiAgICAgICAgUGRjU2V0Q2xpcCA9IDYwLAogICAgICAgIFBkY1NldENs aXBSZWdpb24gPSA2MSwKCiAgICAgICAgUGRjUmVzZXJ2ZWRTdGFydCA9IDAsCiAgICAgICAgUGRj UmVzZXJ2ZWRTdG9wID0gMTk5CiAgICB9OwoKcHJvdGVjdGVkOgogICAgUVBhaW50RGV2aWNlKCB1 aW50IGRldmZsYWdzICk7CgoKCgogICAgSEFORExFIGhkOwogICAgdm9pZCBjb3B5WDExRGF0YSgg Y29uc3QgUVBhaW50RGV2aWNlICogKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRYMTFEYXRhKCBjb25z dCBRUGFpbnREZXZpY2VYMTFEYXRhKiApOwogICAgUVBhaW50RGV2aWNlWDExRGF0YSogZ2V0WDEx RGF0YSggYm9vbCBkZWY9RkFMU0UgKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgY21k KCBpbnQsIFFQYWludGVyICosIFFQRGV2Q21kUGFyYW0gKiApOwogICAgdmlydHVhbCBpbnQgbWV0 cmljKCBpbnQgKSBjb25zdDsKICAgIHZpcnR1YWwgaW50IGZvbnRNZXQoIFFGb250ICosIGludCwg Y29uc3QgY2hhciAqID0gMCwgaW50ID0gMCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQgZm9udElu ZiggUUZvbnQgKiwgaW50ICkgY29uc3Q7CgogICAgdXNob3J0IGRldkZsYWdzOwogICAgdXNob3J0 IHBhaW50ZXJzOwoKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKICAgIGZyaWVuZCBjbGFzcyBR UGFpbnREZXZpY2VNZXRyaWNzOwogICAgZnJpZW5kIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2Ug KiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQYWlu dERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50 LCBpbnQsIFF0OjpSYXN0ZXJPcCwgYm9vbCApOwoKICAgIGZyaWVuZCB2b2lkIHF0X2luaXRfaW50 ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNwbGF5ICogKTsKCgpwcml2YXRlOgoKICAgIHN0YXRp YyBEaXNwbGF5ICp4X2FwcGRpc3BsYXk7CiAgICBzdGF0aWMgaW50IHhfYXBwc2NyZWVuOwogICAg c3RhdGljIGludCB4X2FwcGRlcHRoOwogICAgc3RhdGljIGludCB4X2FwcGNlbGxzOwogICAgc3Rh dGljIEhBTkRMRSB4X2FwcGNvbG9ybWFwOwogICAgc3RhdGljIGJvb2wgeF9hcHBkZWZjb2xvcm1h cDsKICAgIHN0YXRpYyB2b2lkICp4X2FwcHZpc3VhbDsKICAgIHN0YXRpYyBib29sIHhfYXBwZGVm dmlzdWFsOwoKICAgIFFQYWludERldmljZVgxMURhdGEqIHgxMURhdGE7CgoKcHJpdmF0ZToKCiAg ICBRUGFpbnREZXZpY2UoIGNvbnN0IFFQYWludERldmljZSAmICk7CiAgICBRUGFpbnREZXZpY2Ug Jm9wZXJhdG9yPSggY29uc3QgUVBhaW50RGV2aWNlICYgKTsKCn07CgoKCnZvaWQgYml0Qmx0KCBR UGFpbnREZXZpY2UgKmRzdCwgaW50IGR4LCBpbnQgZHksCiAgICAgICAgICAgICBjb25zdCBRUGFp bnREZXZpY2UgKnNyYywgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSwK ICAgICAgICAgICAgIFF0OjpSYXN0ZXJPcCA9IFF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9 RkFMU0UgKTsKCgp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGludCBkeCwgaW50IGR5 LAogICAgICAgICAgICAgY29uc3QgUUltYWdlICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50 IHN3PS0xLCBpbnQgc2g9LTEsCiAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncz0wICk7 CgoKCgpzdHJ1Y3QgUVBhaW50RGV2aWNlWDExRGF0YSB7CiAgICBEaXNwbGF5KiB4X2Rpc3BsYXk7 CiAgICBpbnQgeF9zY3JlZW47CiAgICBpbnQgeF9kZXB0aDsKICAgIGludCB4X2NlbGxzOwogICAg SEFORExFIHhfY29sb3JtYXA7CiAgICBib29sIHhfZGVmY29sb3JtYXA7CiAgICB2b2lkKiB4X3Zp c3VhbDsKICAgIGJvb2wgeF9kZWZ2aXN1YWw7Cn07CgoKCgoKCgppbmxpbmUgaW50IFFQYWludERl dmljZTo6ZGV2VHlwZSgpIGNvbnN0CnsgcmV0dXJuIGRldkZsYWdzICYgUUludGVybmFsOjpEZXZp Y2VUeXBlTWFzazsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjppc0V4dERldigpIGNvbnN0 CnsgcmV0dXJuIChkZXZGbGFncyAmIFFJbnRlcm5hbDo6RXh0ZXJuYWxEZXZpY2UpICE9IDA7IH0K CmlubGluZSBib29sIFFQYWludERldmljZTo6cGFpbnRpbmdBY3RpdmUoKSBjb25zdAp7IHJldHVy biBwYWludGVycyAhPSAwOyB9CgoKCgppbmxpbmUgSEFORExFIFFQYWludERldmljZTo6aGFuZGxl KCkgY29uc3QgeyByZXR1cm4gaGQ7IH0KCgoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6 eDExRGlzcGxheSgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2Rpc3BsYXkg OiB4X2FwcGRpc3BsYXk7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFTY3JlZW4oKSBj b25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9zY3JlZW4gOiB4X2FwcHNjcmVlbjsg fQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMURlcHRoKCkgY29uc3QKeyByZXR1cm4geDEx RGF0YSA/IHgxMURhdGEtPnhfZGVwdGggOiB4X2FwcGRlcHRoOyB9CgppbmxpbmUgaW50IFFQYWlu dERldmljZTo6eDExQ2VsbHMoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9j ZWxscyA6IHhfYXBwY2VsbHM7IH0KCmlubGluZSBIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFDb2xv cm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2NvbG9ybWFwIDogeF9h cHBjb2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFEZWZhdWx0Q29sb3Jt YXAoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZjb2xvcm1hcCA6IHhf YXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMVZpc3VhbCgp IGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X3Zpc3VhbCA6IHhfYXBwdmlzdWFs OyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMURlZmF1bHRWaXN1YWwoKSBjb25zdAp7 IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9kZWZ2aXN1YWwgOiB4X2FwcGRlZnZpc3VhbDsg fQoKaW5saW5lIERpc3BsYXkgKlFQYWludERldmljZTo6eDExQXBwRGlzcGxheSgpCnsgcmV0dXJu IHhfYXBwZGlzcGxheTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcFNjcmVlbigp CnsgcmV0dXJuIHhfYXBwc2NyZWVuOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExQXBw RGVwdGgoKQp7IHJldHVybiB4X2FwcGRlcHRoOyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6 eDExQXBwQ2VsbHMoKQp7IHJldHVybiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgSEFORExFIFFQYWlu dERldmljZTo6eDExQXBwQ29sb3JtYXAoKQp7IHJldHVybiB4X2FwcGNvbG9ybWFwOyB9Cgppbmxp bmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRDb2xvcm1hcCgpCnsgcmV0dXJuIHhf YXBwZGVmY29sb3JtYXA7IH0KCmlubGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMUFwcFZpc3Vh bCgpCnsgcmV0dXJuIHhfYXBwdmlzdWFsOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6Ongx MUFwcERlZmF1bHRWaXN1YWwoKQp7IHJldHVybiB4X2FwcGRlZnZpc3VhbDsgfQoKCgoKaW5saW5l IHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKmRzdCwgY29uc3QgUVBvaW50ICZkcCwKICAgICAg ICAgICAgICAgICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgY29uc3QgUVJlY3QgJnNyID1R UmVjdCgwLDAsLTEsLTEpLAogICAgICAgICAgICAgICAgICAgIFF0OjpSYXN0ZXJPcCByb3A9UXQ6 OkNvcHlST1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApCnsKICAgIGJpdEJsdCggZHN0LCBkcC54 KCksIGRwLnkoKSwgc3JjLCBzci54KCksIHNyLnkoKSwgc3Iud2lkdGgoKSwgc3IuaGVpZ2h0KCks CiAgICAgICAgICAgIHJvcCwgaWdub3JlTWFzayApOwp9CiMgNDUgImtlcm5lbC9xd2lkZ2V0Lmgi IDIKIyAxICJrZXJuZWwvcXBhbGV0dGUuaCIgMQojIDQyICJrZXJuZWwvcXBhbGV0dGUuaCIKIyAx ICJrZXJuZWwvcXdpbmRvd2RlZnMuaCIgMQojIDQzICJrZXJuZWwvcXBhbGV0dGUuaCIgMgojIDEg Imtlcm5lbC9xY29sb3IuaCIgMQojIDQyICJrZXJuZWwvcWNvbG9yLmgiCiMgMSAia2VybmVsL3F3 aW5kb3dkZWZzLmgiIDEKIyA0MyAia2VybmVsL3Fjb2xvci5oIiAyCgoKY29uc3QgUVJnYiBSR0Jf RElSVFkgPSAweDgwMDAwMDAwOwpjb25zdCBRUmdiIFJHQl9JTlZBTElEID0gMHg0MDAwMDAwMDsK Y29uc3QgUVJnYiBSR0JfRElSRUNUID0gMHgyMDAwMDAwMDsKY29uc3QgUVJnYiBSR0JfTUFTSyA9 IDB4MDBmZmZmZmY7CgoKICAgICAgICAgaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0 dXJuIChpbnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiAgICAgICAgIGlubGluZSBpbnQgcUdy ZWVuKCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKChyZ2IgPj4gOCkgJiAweGZmKTsgfQoKICAg ICAgICAgaW5saW5lIGludCBxQmx1ZSggUVJnYiByZ2IgKQp7IHJldHVybiAoaW50KShyZ2IgJiAw eGZmKTsgfQoKICAgICAgICAgaW5saW5lIGludCBxQWxwaGEoIFFSZ2IgcmdiICkKeyByZXR1cm4g KGludCkoKHJnYiA+PiAyNCkgJiAweGZmKTsgfQoKICAgICAgICAgaW5saW5lIFFSZ2IgcVJnYigg aW50IHIsIGludCBnLCBpbnQgYiApCnsgcmV0dXJuICgweGZmIDw8IDI0KSB8ICgociAmIDB4ZmYp IDw8IDE2KSB8ICgoZyAmIDB4ZmYpIDw8IDgpIHwgKGIgJiAweGZmKTsgfQoKICAgICAgICAgaW5s aW5lIFFSZ2IgcVJnYmEoIGludCByLCBpbnQgZywgaW50IGIsIGludCBhICkKeyByZXR1cm4gKChh ICYgMHhmZikgPDwgMjQpIHwgKChyICYgMHhmZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkg fCAoYiAmIDB4ZmYpOyB9CgogICAgICAgICBpbmxpbmUgaW50IHFHcmF5KCBpbnQgciwgaW50IGcs IGludCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogICAgICAgICBpbmxpbmUg aW50IHFHcmF5KCBRUmdiIHJnYiApCnsgcmV0dXJuIHFHcmF5KCBxUmVkKHJnYiksIHFHcmVlbihy Z2IpLCBxQmx1ZShyZ2IpICk7IH0KCgpjbGFzcyBRQ29sb3IKewpwdWJsaWM6CiAgICBlbnVtIFNw ZWMgeyBSZ2IsIEhzdiB9OwoKICAgIFFDb2xvcigpOwogICAgUUNvbG9yKCBpbnQgciwgaW50IGcs IGludCBiICk7CiAgICBRQ29sb3IoIGludCB4LCBpbnQgeSwgaW50IHosIFNwZWMgKTsKICAgIFFD b2xvciggUVJnYiByZ2IsIHVpbnQgcGl4ZWw9MHhmZmZmZmZmZik7CiAgICBRQ29sb3IoIGNvbnN0 IFFTdHJpbmcmIG5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgY2hhciAqbmFtZSApOwogICAgUUNv bG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgUUNvbG9yICZvcGVyYXRvcj0oIGNvbnN0IFFDb2xv ciAmICk7CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBib29sIGlzRGlydHkoKSBjb25z dDsKCiAgICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TmFtZWRDb2xvciggY29u c3QgUVN0cmluZyYgbmFtZSApOwoKICAgIHZvaWQgcmdiKCBpbnQgKnIsIGludCAqZywgaW50ICpi ICkgY29uc3Q7CiAgICBRUmdiIHJnYigpIGNvbnN0OwogICAgdm9pZCBzZXRSZ2IoIGludCByLCBp bnQgZywgaW50IGIgKTsKICAgIHZvaWQgc2V0UmdiKCBRUmdiIHJnYiApOwoKICAgIGludCByZWQo KSBjb25zdDsKICAgIGludCBncmVlbigpIGNvbnN0OwogICAgaW50IGJsdWUoKSBjb25zdDsKCiAg ICB2b2lkIGhzdiggaW50ICpoLCBpbnQgKnMsIGludCAqdiApIGNvbnN0OwogICAgdm9pZCBnZXRI c3YoIGludCAmaCwgaW50ICZzLCBpbnQgJnYgKSBjb25zdDsKICAgIHZvaWQgc2V0SHN2KCBpbnQg aCwgaW50IHMsIGludCB2ICk7CgogICAgUUNvbG9yIGxpZ2h0KCBpbnQgZiA9IDE1MCApIGNvbnN0 OwogICAgUUNvbG9yIGRhcmsoIGludCBmID0gMjAwICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRv cj09KCBjb25zdCBRQ29sb3IgJmMgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg UUNvbG9yICZjICkgY29uc3Q7CgogICAgc3RhdGljIGJvb2wgbGF6eUFsbG9jKCk7CiAgICBzdGF0 aWMgdm9pZCBzZXRMYXp5QWxsb2MoIGJvb2wgKTsKICAgIHVpbnQgYWxsb2MoKTsKICAgIHVpbnQg cGl4ZWwoKSBjb25zdDsKCiAgICBzdGF0aWMgaW50IG1heENvbG9ycygpOwogICAgc3RhdGljIGlu dCBudW1CaXRQbGFuZXMoKTsKCiAgICBzdGF0aWMgaW50IGVudGVyQWxsb2NDb250ZXh0KCk7CiAg ICBzdGF0aWMgdm9pZCBsZWF2ZUFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIGludCBjdXJyZW50 QWxsb2NDb250ZXh0KCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95QWxsb2NDb250ZXh0KCBpbnQg KTsKCgoKCgoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2b2lkIGNs ZWFudXAoKTsKCnByaXZhdGU6CiAgICB2b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0IFFT dHJpbmcmIG5hbWUgKTsKICAgIHN0YXRpYyB2b2lkIGluaXRHbG9iYWxDb2xvcnMoKTsKICAgIHN0 YXRpYyBRQ29sb3IqIGdsb2JhbENvbG9ycygpOwogICAgc3RhdGljIGJvb2wgY29sb3JfaW5pdDsK ICAgIHN0YXRpYyBib29sIGdsb2JhbHNfaW5pdDsKICAgIHN0YXRpYyBib29sIGxhenlfYWxsb2M7 CgoKCiAgICB1aW50IHBpeDsKICAgIFFSZ2IgcmdiVmFsOwp9OwoKCmlubGluZSBRQ29sb3I6OlFD b2xvcigpCnsgcmdiVmFsID0gUkdCX0lOVkFMSUQ7IHBpeCA9IDA7IH0KCmlubGluZSBRQ29sb3I6 OlFDb2xvciggaW50IHIsIGludCBnLCBpbnQgYiApCnsgc2V0UmdiKCByLCBnLCBiICk7IH0KCmlu bGluZSBib29sIFFDb2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIChyZ2JWYWwgJiBSR0Jf SU5WQUxJRCkgPT0gMDsgfQoKaW5saW5lIGJvb2wgUUNvbG9yOjppc0RpcnR5KCkgY29uc3QKeyBy ZXR1cm4gKHJnYlZhbCAmIFJHQl9ESVJUWSkgIT0gMDsgfQoKaW5saW5lIFFSZ2IgUUNvbG9yOjpy Z2IoKSBjb25zdAp7IHJldHVybiByZ2JWYWwgfCB+UkdCX01BU0s7IH0KCmlubGluZSBpbnQgUUNv bG9yOjpyZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKHJnYlZhbCk7IH0KCmlubGluZSBpbnQgUUNv bG9yOjpncmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihyZ2JWYWwpOyB9CgppbmxpbmUgaW50 IFFDb2xvcjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKHJnYlZhbCk7IH0KCmlubGluZSB1 aW50IFFDb2xvcjo6cGl4ZWwoKSBjb25zdAp7IHJldHVybiAocmdiVmFsICYgUkdCX0RJUlRZKSA9 PSAwID8gcGl4IDogKChRQ29sb3IqKXRoaXMpLT5hbGxvYygpOyB9CgppbmxpbmUgYm9vbCBRQ29s b3I6OmxhenlBbGxvYygpCnsgcmV0dXJuIGxhenlfYWxsb2M7IH0KCgppbmxpbmUgYm9vbCBRQ29s b3I6Om9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0CnsKICAgIHJldHVybiBpc1Zh bGlkKCk9PWMuaXNWYWxpZCgpICYmCiAgICAgICAgKCgoKHJnYlZhbCB8IGMucmdiVmFsKSAmIFJH Ql9ESVJFQ1QpID09IDAgJiYKICAgICAgICAgICAgKHJnYlZhbCAmIFJHQl9NQVNLKSA9PSAoYy5y Z2JWYWwgJiBSR0JfTUFTSykpIHx8CiAgICAgICAgICAgKChyZ2JWYWwgJiBjLnJnYlZhbCAmIFJH Ql9ESVJFQ1QpICE9IDAgJiYKICAgICAgICAgICAgKHJnYlZhbCAmIFJHQl9NQVNLKSA9PSAoYy5y Z2JWYWwgJiBSR0JfTUFTSykgJiYgcGl4ID09IGMucGl4KSk7Cn0KCmlubGluZSBib29sIFFDb2xv cjo6b3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3QKewogICAgcmV0dXJuICFvcGVy YXRvcj09KGMpOwp9CgoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh dGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJh dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDb2xvciAmICk7CiMgNDQgImtlcm5lbC9xcGFsZXR0ZS5o IiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xc2hhcmVkLmgiIDEKIyA0NSAia2VybmVsL3Fw YWxldHRlLmgiIDIKIyAxICJrZXJuZWwvcWJydXNoLmgiIDEKIyA0MiAia2VybmVsL3FicnVzaC5o IgojIDEgImtlcm5lbC9xY29sb3IuaCIgMQojIDQzICJrZXJuZWwvcWJydXNoLmgiIDIKIyAxICIv dXNyL2xpYi9xdC9pbmNsdWRlL3FzaGFyZWQuaCIgMQojIDQ0ICJrZXJuZWwvcWJydXNoLmgiIDIK CgoKY2xhc3MgUUJydXNoOiBwdWJsaWMgUXQKewpmcmllbmQgY2xhc3MgUVBhaW50ZXI7CnB1Ymxp YzoKICAgIFFCcnVzaCgpOwogICAgUUJydXNoKCBCcnVzaFN0eWxlICk7CiAgICBRQnJ1c2goIGNv bnN0IFFDb2xvciAmLCBCcnVzaFN0eWxlPVNvbGlkUGF0dGVybiApOwogICAgUUJydXNoKCBjb25z dCBRQ29sb3IgJiwgY29uc3QgUVBpeG1hcCAmICk7CiAgICBRQnJ1c2goIGNvbnN0IFFCcnVzaCAm ICk7CiAgIH5RQnJ1c2goKTsKICAgIFFCcnVzaCAmb3BlcmF0b3I9KCBjb25zdCBRQnJ1c2ggJiAp OwoKICAgIEJydXNoU3R5bGUgc3R5bGUoKSBjb25zdCB7IHJldHVybiBkYXRhLT5zdHlsZTsgfQog ICAgdm9pZCBzZXRTdHlsZSggQnJ1c2hTdHlsZSApOwogICAgY29uc3QgUUNvbG9yICZjb2xvcigp Y29uc3QgeyByZXR1cm4gZGF0YS0+Y29sb3I7IH0KICAgIHZvaWQgc2V0Q29sb3IoIGNvbnN0IFFD b2xvciAmICk7CiAgICBRUGl4bWFwICpwaXhtYXAoKSBjb25zdCB7IHJldHVybiBkYXRhLT5waXht YXA7IH0KICAgIHZvaWQgc2V0UGl4bWFwKCBjb25zdCBRUGl4bWFwICYgKTsKCiAgICBib29sIG9w ZXJhdG9yPT0oIGNvbnN0IFFCcnVzaCAmcCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBj b25zdCBRQnJ1c2ggJmIgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gIShvcGVyYXRvcj09KGIpKTsgfQoKcHJpdmF0ZToKICAgIFFCcnVzaCBj b3B5KCkgY29uc3Q7CiAgICB2b2lkIGRldGFjaCgpOwogICAgdm9pZCBpbml0KCBjb25zdCBRQ29s b3IgJiwgQnJ1c2hTdHlsZSApOwogICAgc3RydWN0IFFCcnVzaERhdGEgOiBwdWJsaWMgUVNoYXJl ZCB7CiAgICAgICAgQnJ1c2hTdHlsZSBzdHlsZTsKICAgICAgICBRQ29sb3IgY29sb3I7CiAgICAg ICAgUVBpeG1hcCAqcGl4bWFwOwogICAgfSAqZGF0YTsKfTsKCgoKCgoKCiAgICAgICAgIFFEYXRh U3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnJ1c2ggJiApOwogICAg ICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUJydXNoICYgKTsK IyA0NiAia2VybmVsL3FwYWxldHRlLmgiIDIKCgoKY2xhc3MgUUNvbG9yR3JvdXBQcml2YXRlOwoK CmNsYXNzIFFDb2xvckdyb3VwCnsKcHVibGljOgogICAgUUNvbG9yR3JvdXAoKTsKICAgIFFDb2xv ckdyb3VwKCBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQsIGNvbnN0IFFDb2xvciAmYnV0dG9uLAog ICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvciAmbGlnaHQsIGNvbnN0IFFDb2xvciAmZGFyaywg Y29uc3QgUUNvbG9yICZtaWQsCiAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICZ0ZXh0LCBj b25zdCBRQ29sb3IgJmJhc2UgKTsKICAgIFFDb2xvckdyb3VwKCBjb25zdCBRQnJ1c2ggJmZvcmVn cm91bmQsIGNvbnN0IFFCcnVzaCAmYnV0dG9uLAogICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVz aCAmbGlnaHQsIGNvbnN0IFFCcnVzaCAmZGFyaywgY29uc3QgUUJydXNoICZtaWQsCiAgICAgICAg ICAgICAgICAgY29uc3QgUUJydXNoICZ0ZXh0LCBjb25zdCBRQnJ1c2ggJmJyaWdodF90ZXh0LAog ICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAmYmFzZSwgY29uc3QgUUJydXNoICZiYWNrZ3Jv dW5kKTsKICAgIFFDb2xvckdyb3VwKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICB+UUNvbG9y R3JvdXAoKTsKCiAgICBRQ29sb3JHcm91cCYgb3BlcmF0b3IgPShjb25zdCBRQ29sb3JHcm91cCYp OwoKCiAgICBlbnVtIENvbG9yUm9sZSB7IEZvcmVncm91bmQsIEJ1dHRvbiwgTGlnaHQsIE1pZGxp Z2h0LCBEYXJrLCBNaWQsCiAgICAgICAgICAgICAgICAgICAgIFRleHQsIEJyaWdodFRleHQsIEJ1 dHRvblRleHQsIEJhc2UsIEJhY2tncm91bmQsIFNoYWRvdywKICAgICAgICAgICAgICAgICAgICAg SGlnaGxpZ2h0LCBIaWdobGlnaHRlZFRleHQsCiAgICAgICAgICAgICAgICAgICAgIE5Db2xvclJv bGVzIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xvciggQ29sb3JSb2xlICkgY29uc3Q7CiAgICBj b25zdCBRQnJ1c2ggJmJydXNoKCBDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3Io IENvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yUm9s ZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQoKSBjb25z dCB7IHJldHVybiBicltGb3JlZ3JvdW5kXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1 dHRvbigpIGNvbnN0IHsgcmV0dXJuIGJyW0J1dHRvbl0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv bG9yICZsaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJyW0xpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25z dCBRQ29sb3IgJmRhcmsoKSBjb25zdCB7IHJldHVybiBicltEYXJrXS5jb2xvcigpOyB9CiAgICBj b25zdCBRQ29sb3IgJm1pZCgpIGNvbnN0IHsgcmV0dXJuIGJyW01pZF0uY29sb3IoKTsgfQogICAg Y29uc3QgUUNvbG9yICZ0ZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbVGV4dF0uY29sb3IoKTsgfQog ICAgY29uc3QgUUNvbG9yICZiYXNlKCkgY29uc3QgeyByZXR1cm4gYnJbQmFzZV0uY29sb3IoKTsg fQogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbQmFja2dy b3VuZF0uY29sb3IoKTsgfQoKICAgIGNvbnN0IFFDb2xvciAmbWlkbGlnaHQoKSBjb25zdCB7IHJl dHVybiBicltNaWRsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZicmlnaHRUZXh0 KCkgY29uc3QgeyByZXR1cm4gYnJbQnJpZ2h0VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNv bG9yICZidXR0b25UZXh0KCkgY29uc3QgeyByZXR1cm4gYnJbQnV0dG9uVGV4dF0uY29sb3IoKTsg fQogICAgY29uc3QgUUNvbG9yICZzaGFkb3coKSBjb25zdCB7IHJldHVybiBicltTaGFkb3ddLmNv bG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJb SGlnaGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodGVkVGV4dCgp IGNvbnN0e3JldHVybiBicltIaWdobGlnaHRlZFRleHRdLmNvbG9yKCk7IH0KCiAgICBib29sIG9w ZXJhdG9yPT0oIGNvbnN0IFFDb2xvckdyb3VwICZnICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9y IT0oIGNvbnN0IFFDb2xvckdyb3VwICZnICkgY29uc3QKICAgICAgICB7IHJldHVybiAhKG9wZXJh dG9yPT0oZykpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoICpicjsKICAgIFFDb2xvckdyb3VwUHJp dmF0ZSAqIGQ7CgogICAgZnJpZW5kIGNsYXNzIFFQYWxldHRlOwp9OwoKCmNsYXNzIFFQYWxldHRl CnsKcHVibGljOgogICAgUVBhbGV0dGUoKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3IgJmJ1 dHRvbiApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uLCBjb25zdCBRQ29sb3Ig JmJhY2tncm91bmQgKTsKICAgIFFQYWxldHRlKCBjb25zdCBRQ29sb3JHcm91cCAmYWN0aXZlLCBj b25zdCBRQ29sb3JHcm91cCAmZGlzYWJsZWQsCiAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3Jv dXAgJmluYWN0aXZlICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiApOwogICB+UVBh bGV0dGUoKTsKICAgIFFQYWxldHRlICZvcGVyYXRvcj0oIGNvbnN0IFFQYWxldHRlICYgKTsKCiAg ICBlbnVtIENvbG9yR3JvdXAgeyBOb3JtYWwsIERpc2FibGVkLCBBY3RpdmUsIEluYWN0aXZlLCBO Q29sb3JHcm91cHMgfTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvckdyb3VwLCBRQ29s b3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCBDb2xv ckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENvbG9y KCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiApOwog ICAgdm9pZCBzZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29u c3QgUUJydXNoICYgKTsKCiAgICB2b2lkIHNldENvbG9yKCBRQ29sb3JHcm91cDo6Q29sb3JSb2xl LCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBzZXRCcnVzaCggUUNvbG9yR3JvdXA6OkNvbG9y Um9sZSwgY29uc3QgUUJydXNoICYgKTsKCiAgICBRUGFsZXR0ZSBjb3B5KCkgY29uc3Q7CgogICAg Y29uc3QgUUNvbG9yR3JvdXAgJmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmFjdGl2ZTsg fQogICAgY29uc3QgUUNvbG9yR3JvdXAgJmRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+ ZGlzYWJsZWQ7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSgpIGNvbnN0IHsgcmV0 dXJuIGRhdGEtPmluYWN0aXZlOyB9CiAgICBjb25zdCBRQ29sb3JHcm91cCAmbm9ybWFsKCkgY29u c3QgeyByZXR1cm4gZGF0YS0+bm9ybWFsOyB9CgogICAgdm9pZCBzZXRBY3RpdmUoIGNvbnN0IFFD b2xvckdyb3VwICYgKTsKICAgIHZvaWQgc2V0RGlzYWJsZWQoIGNvbnN0IFFDb2xvckdyb3VwICYg KTsKICAgIHZvaWQgc2V0SW5hY3RpdmUoIGNvbnN0IFFDb2xvckdyb3VwICYgKTsKICAgIHZvaWQg c2V0Tm9ybWFsKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICAgYm9vbCBvcGVyYXRvcj09KCBj b25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUGFs ZXR0ZSAmcCApIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 IHJldHVybiAhKG9wZXJhdG9yPT0ocCkpOyB9CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRUGFs ZXR0ZSAmICk7CgogICAgaW50IHNlcmlhbE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnNl cl9ubzsgfQoKcHJpdmF0ZToKICAgIHZvaWQgZGV0YWNoKCk7CiAgICBRQnJ1c2ggJmRpcmVjdEJy dXNoKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CgogICAgc3Ry dWN0IFFQYWxEYXRhIDogcHVibGljIFFTaGFyZWQgewogICAgICAgIFFDb2xvckdyb3VwIG5vcm1h bDsKICAgICAgICBRQ29sb3JHcm91cCBkaXNhYmxlZDsKICAgICAgICBRQ29sb3JHcm91cCBhY3Rp dmU7CiAgICAgICAgaW50IHNlcl9ubzsKICAgICAgICBRQ29sb3JHcm91cCBpbmFjdGl2ZTsKICAg IH0gKmRhdGE7CiAgICBzdGF0aWMgUVBhbERhdGEgKmRlZlBhbERhdGE7CiAgICBzdGF0aWMgdm9p ZCBjbGVhbnVwRGVmUGFsKCk7Cn07CgoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0 b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgICAgICBRRGF0 YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKICAg ICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQYWxl dHRlICYgKTsKICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs IFFQYWxldHRlICYgKTsKIyA0NiAia2VybmVsL3F3aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xY3Vy c29yLmgiIDEKIyA0MiAia2VybmVsL3FjdXJzb3IuaCIKIyAxICJrZXJuZWwvcXBvaW50LmgiIDEK IyA0MyAia2VybmVsL3FjdXJzb3IuaCIgMgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXNoYXJl ZC5oIiAxCiMgNDQgImtlcm5lbC9xY3Vyc29yLmgiIDIKIyAxICJrZXJuZWwvcW5hbWVzcGFjZS5o IiAxCiMgNDUgImtlcm5lbC9xY3Vyc29yLmgiIDIKIyA2NiAia2VybmVsL3FjdXJzb3IuaCIKc3Ry dWN0IFFDdXJzb3JEYXRhOwoKCmNsYXNzIFFDdXJzb3IKewpwdWJsaWM6CiAgICBRQ3Vyc29yKCk7 CiAgICBRQ3Vyc29yKCBpbnQgc2hhcGUgKTsKICAgIFFDdXJzb3IoIGNvbnN0IFFCaXRtYXAgJmJp dG1hcCwgY29uc3QgUUJpdG1hcCAmbWFzaywKICAgICAgICAgICAgIGludCBob3RYPS0xLCBpbnQg aG90WT0tMSApOwogICAgUUN1cnNvciggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAgICAgICAg ICAgaW50IGhvdFg9LTEsIGludCBob3RZPS0xICk7CiAgICBRQ3Vyc29yKCBjb25zdCBRQ3Vyc29y ICYgKTsKICAgflFDdXJzb3IoKTsKICAgIFFDdXJzb3IgJm9wZXJhdG9yPSggY29uc3QgUUN1cnNv ciAmICk7CgogICAgaW50IHNoYXBlKCkgY29uc3Q7CiAgICB2b2lkIHNldFNoYXBlKCBpbnQgKTsK CiAgICBjb25zdCBRQml0bWFwICpiaXRtYXAoKSBjb25zdDsKICAgIGNvbnN0IFFCaXRtYXAgKm1h c2soKSBjb25zdDsKICAgIFFQb2ludCBob3RTcG90KCkgY29uc3Q7CgoKCgogICAgSEFORExFIGhh bmRsZSgpIGNvbnN0OwoKCgoKCgogICAgc3RhdGljIFFQb2ludCBwb3MoKTsKICAgIHN0YXRpYyB2 b2lkIHNldFBvcyggaW50IHgsIGludCB5ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRQb3MoIGNvbnN0 IFFQb2ludCAmICk7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZv aWQgY2xlYW51cCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0Qml0bWFwKCBjb25zdCBRQml0bWFw ICZiaXRtYXAsIGNvbnN0IFFCaXRtYXAgJm1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBob3RYLCBpbnQgaG90WSApOwogICAgdm9pZCB1cGRhdGUoKSBjb25zdDsKICAg IFFDdXJzb3JEYXRhICpkYXRhOwogICAgUUN1cnNvciAqZmluZF9jdXIoaW50KTsKfTsKIyAxMjEg Imtlcm5lbC9xY3Vyc29yLmgiCmVudW0gUUN1cnNvclNoYXBlIHsKICAgIEFycm93Q3Vyc29yLCBV cEFycm93Q3Vyc29yLCBDcm9zc0N1cnNvciwgV2FpdEN1cnNvciwgSWJlYW1DdXJzb3IsCiAgICBT aXplVmVyQ3Vyc29yLCBTaXplSG9yQ3Vyc29yLCBTaXplQkRpYWdDdXJzb3IsIFNpemVGRGlhZ0N1 cnNvciwKICAgIFNpemVBbGxDdXJzb3IsIEJsYW5rQ3Vyc29yLCBTcGxpdFZDdXJzb3IsIFNwbGl0 SEN1cnNvciwgUG9pbnRpbmdIYW5kQ3Vyc29yLAogICAgRm9yYmlkZGVuQ3Vyc29yLCBMYXN0Q3Vy c29yID0gRm9yYmlkZGVuQ3Vyc29yLCBCaXRtYXBDdXJzb3I9MjQgfTsKCgoKCgoKICAgICAgICAg UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDdXJzb3IgJiAp OwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUN1cnNv ciAmICk7CgoKCgppbmxpbmUgdm9pZCBRQ3Vyc29yOjpzZXRQb3MoIGNvbnN0IFFQb2ludCAmcCAp CnsKICAgIHNldFBvcyggcC54KCksIHAueSgpICk7Cn0KIyA0NyAia2VybmVsL3F3aWRnZXQuaCIg MgojIDEgImtlcm5lbC9xZm9udC5oIiAxCiMgNDIgImtlcm5lbC9xZm9udC5oIgojIDEgImtlcm5l bC9xd2luZG93ZGVmcy5oIiAxCiMgNDMgImtlcm5lbC9xZm9udC5oIiAyCiMgMSAiL3Vzci9saWIv cXQvaW5jbHVkZS9xc3RyaW5nLmgiIDEKIyA0NCAia2VybmVsL3Fmb250LmgiIDIKCgoKY2xhc3Mg UVN0cmluZ0xpc3Q7CnN0cnVjdCBRRm9udERlZjsKc3RydWN0IFFGb250RGF0YTsKY2xhc3MgUUZv bnRJbnRlcm5hbDsKY2xhc3MgUVJlbmRlcmVkRm9udDsKCmNsYXNzIFFGb250CnsKcHVibGljOgog ICAgZW51bSBDaGFyU2V0IHsgSVNPXzg4NTlfMSwgTGF0aW4xID0gSVNPXzg4NTlfMSwgQW55Q2hh clNldCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMiwgTGF0aW4yID0gSVNPXzg4NTlf MiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMywgTGF0aW4zID0gSVNPXzg4NTlfMywK ICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNCwgTGF0aW40ID0gSVNPXzg4NTlfNCwKICAg ICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4 NTlfNiwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfNywKICAgICAgICAgICAgICAgICAg ICAgSVNPXzg4NTlfOCwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfOSwgTGF0aW41ID0g SVNPXzg4NTlfOSwKICAgICAgICAgICAgICAgICAgICAgSVNPXzg4NTlfMTAsIExhdGluNiA9IElT T184ODU5XzEwLAogICAgICAgICAgICAgICAgICAgICBJU09fODg1OV8xMSwgVElTNjIwID0gSVNP Xzg4NTlfMTEsCiAgICAgICAgICAgICAgICAgICAgIElTT184ODU5XzEyLAogICAgICAgICAgICAg ICAgICAgICBJU09fODg1OV8xMywgTGF0aW43ID0gSVNPXzg4NTlfMTMsCiAgICAgICAgICAgICAg ICAgICAgIElTT184ODU5XzE0LCBMYXRpbjggPSBJU09fODg1OV8xNCwKICAgICAgICAgICAgICAg ICAgICAgSVNPXzg4NTlfMTUsIExhdGluOSA9IElTT184ODU5XzE1LAogICAgICAgICAgICAgICAg ICAgICBLT0k4UiwKICAgICAgICAgICAgICAgICAgICAgU2V0X0phLCBTZXRfMSA9IFNldF9KYSwK ICAgICAgICAgICAgICAgICAgICAgU2V0X0tvLAogICAgICAgICAgICAgICAgICAgICBTZXRfVGhf VEgsCiAgICAgICAgICAgICAgICAgICAgIFNldF9aaCwKICAgICAgICAgICAgICAgICAgICAgU2V0 X1poX1RXLAogICAgICAgICAgICAgICAgICAgICBTZXRfTiA9IFNldF9aaF9UVywKICAgICAgICAg ICAgICAgICAgICAgVW5pY29kZSwKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgU2V0X0dCSywK ICAgICAgICAgICAgICAgICAgICAgU2V0X0JpZzUsCgogICAgICAgICAgICAgICAgICAgICBUU0NJ SSwKICAgICAgICAgICAgICAgICAgICAgS09JOFUsCiAgICAgICAgICAgICAgICAgICAgIENQMTI1 MSwKICAgICAgICAgICAgICAgICAgICAgUFQxNTQsCgoKCgogICAgICAgICAgICAgICAgICAgICBK SVNfWF8wMjAxID0gMHhhMCwKCiAgICAgICAgICAgICAgICAgICAgIEpJU19YXzAyMDggPSAweGMw LCBFbmMxNiA9IEpJU19YXzAyMDgsCiAgICAgICAgICAgICAgICAgICAgIEtTQ181NjAxLAogICAg ICAgICAgICAgICAgICAgICBHQl8yMzEyLAogICAgICAgICAgICAgICAgICAgICBCaWc1CiAgICB9 OwogICAgZW51bSBTdHlsZUhpbnQgeyBIZWx2ZXRpY2EsIFRpbWVzLCBDb3VyaWVyLCBPbGRFbmds aXNoLCBTeXN0ZW0sIEFueVN0eWxlLAogICAgICAgICAgICAgICAgICAgICBTYW5zU2VyaWYgPSBI ZWx2ZXRpY2EsCiAgICAgICAgICAgICAgICAgICAgIFNlcmlmID0gVGltZXMsCiAgICAgICAgICAg ICAgICAgICAgIFR5cGVXcml0ZXIgPSBDb3VyaWVyLAogICAgICAgICAgICAgICAgICAgICBEZWNv cmF0aXZlID0gT2xkRW5nbGlzaH07CiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgeyBQcmVmZXJEZWZh dWx0ID0gMHgwMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlckJpdG1hcCA9IDB4 MDAwMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJEZXZpY2UgPSAweDAwMDQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVyT3V0bGluZSA9IDB4MDAwOCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBGb3JjZU91dGxpbmUgPSAweDAwMTAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgUHJlZmVyTWF0Y2ggPSAweDAwMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg UHJlZmVyUXVhbGl0eSA9IDB4MDA0MCB9OwogICAgZW51bSBXZWlnaHQgeyBMaWdodCA9IDI1LCBO b3JtYWwgPSA1MCwgRGVtaUJvbGQgPSA2MywKICAgICAgICAgICAgICAgICAgICAgQm9sZCA9IDc1 LCBCbGFjayA9IDg3IH07CiAgICBRRm9udCgpOwogICAgUUZvbnQoIGNvbnN0IFFTdHJpbmcgJmZh bWlseSwgaW50IHBvaW50U2l6ZSA9IDEyLAogICAgICAgICAgIGludCB3ZWlnaHQgPSBOb3JtYWws IGJvb2wgaXRhbGljID0gRkFMU0UgKTsKICAgIFFGb250KCBjb25zdCBRU3RyaW5nICZmYW1pbHks IGludCBwb2ludFNpemUsCiAgICAgICAgICAgaW50IHdlaWdodCwgYm9vbCBpdGFsaWMsIENoYXJT ZXQgY2hhclNldCApOwogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKICAgIH5RRm9udCgpOwog ICAgUUZvbnQgJm9wZXJhdG9yPSggY29uc3QgUUZvbnQgJiApOwoKICAgIFFTdHJpbmcgZmFtaWx5 KCkgY29uc3Q7CiAgICB2b2lkIHNldEZhbWlseSggY29uc3QgUVN0cmluZyAmKTsKICAgIGludCBw b2ludFNpemUoKSBjb25zdDsKICAgIGZsb2F0IHBvaW50U2l6ZUZsb2F0KCkgY29uc3Q7CiAgICB2 b2lkIHNldFBvaW50U2l6ZSggaW50ICk7CiAgICB2b2lkIHNldFBvaW50U2l6ZUZsb2F0KCBmbG9h dCApOwogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUoIGlu dCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKICAgIGludCB3ZWlnaHQo KSBjb25zdDsKICAgIHZvaWQgc2V0V2VpZ2h0KCBpbnQgKTsKICAgIGJvb2wgYm9sZCgpIGNvbnN0 OwogICAgdm9pZCBzZXRCb2xkKCBib29sICk7CiAgICBib29sIGl0YWxpYygpIGNvbnN0OwogICAg dm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICB2 b2lkIHNldFVuZGVybGluZSggYm9vbCApOwogICAgYm9vbCBzdHJpa2VPdXQoKSBjb25zdDsKICAg IHZvaWQgc2V0U3RyaWtlT3V0KCBib29sICk7CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsK ICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwogICAgU3R5bGVIaW50IHN0eWxlSGludCgp IGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCApOwogICAgU3R5bGVTdHJh dGVneSBzdHlsZVN0cmF0ZWd5KCkgY29uc3Q7CiAgICB2b2lkIHNldFN0eWxlSGludCggU3R5bGVI aW50LCBTdHlsZVN0cmF0ZWd5ICk7CiAgICBDaGFyU2V0IGNoYXJTZXQoKSBjb25zdDsKICAgIHZv aWQgc2V0Q2hhclNldCggQ2hhclNldCApOwoKICAgIHN0YXRpYyBDaGFyU2V0IGNoYXJTZXRGb3JM b2NhbGUoKTsKCiAgICBib29sIHJhd01vZGUoKSBjb25zdDsKICAgIHZvaWQgc2V0UmF3TW9kZSgg Ym9vbCApOwoKICAgIGJvb2wgZXhhY3RNYXRjaCgpIGNvbnN0OwoKICAgIGJvb2wgb3BlcmF0b3I9 PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRRm9u dCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9udCAmICkgY29uc3Q7CgoK CgoKCiAgICBIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAgdm9pZCBzZXRSYXdOYW1lKCBj b25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJp bmcga2V5KCkgY29uc3Q7CgogICAgc3RhdGljIFFTdHJpbmcgZW5jb2RpbmdOYW1lKCBDaGFyU2V0 ICk7CgogICAgc3RhdGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXRE ZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiApOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0aXR1 dGUoIGNvbnN0IFFTdHJpbmcgJmZhbWlseU5hbWUgKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1 YnN0aXR1dGlvbiggY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMg dm9pZCByZW1vdmVTdWJzdGl0dXRpb24oIGNvbnN0IFFTdHJpbmcgJik7CiAgICBzdGF0aWMgUVN0 cmluZ0xpc3Qgc3Vic3RpdHV0aW9ucygpOwoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsK ICAgIHN0YXRpYyB2b2lkIGxvY2FsZV9pbml0KCk7CiAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCk7 CiAgICBzdGF0aWMgdm9pZCBjYWNoZVN0YXRpc3RpY3MoKTsKCgoKCgpwcm90ZWN0ZWQ6CiAgICBi b29sIGRpcnR5KCkgY29uc3Q7CgogICAgUVN0cmluZyBkZWZhdWx0RmFtaWx5KCkgY29uc3Q7CiAg ICBRU3RyaW5nIGxhc3RSZXNvcnRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29y dEZvbnQoKSBjb25zdDsKICAgIGludCBkZWNpUG9pbnRTaXplKCkgY29uc3Q7Cgpwcml2YXRlOgog ICAgUUZvbnQoIFFGb250RGF0YSAqICk7CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgZGV0YWNo KCk7CiAgICB2b2lkIGluaXRGb250SW5mbygpIGNvbnN0OwogICAgdm9pZCBsb2FkKCkgY29uc3Q7 CiMgMjIxICJrZXJuZWwvcWZvbnQuaCIKICAgIGZyaWVuZCBjbGFzcyBRRm9udF9Qcml2YXRlOwog ICAgZnJpZW5kIGNsYXNzIFFGb250SW50ZXJuYWw7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRy aWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRl cjsKCiAgICBmcmllbmQgdm9pZCAqIHF0X2Z0X2ZvbnQgKGNvbnN0IFFGb250ICpmKTsKCgoKICAg IGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZv bnQgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAm LCBRRm9udCAmICk7CgogICAgUUZvbnREYXRhICpkOwogICAgc3RhdGljIENoYXJTZXQgZGVmYXVs dENoYXJTZXQ7Cn07CgppbmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdl aWdodCgpID4gTm9ybWFsOyB9CgppbmxpbmUgdm9pZCBRRm9udDo6c2V0Qm9sZCggYm9vbCBlbmFi bGUgKQp7IHNldFdlaWdodCggZW5hYmxlID8gQm9sZCA6IE5vcm1hbCApOyB9CgoKCgoKCgogICAg ICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQg JiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUZv bnQgJiApOwojIDQ4ICJrZXJuZWwvcXdpZGdldC5oIiAyCiMgMSAia2VybmVsL3Fmb250bWV0cmlj cy5oIiAxCiMgNDIgImtlcm5lbC9xZm9udG1ldHJpY3MuaCIKIyAxICJrZXJuZWwvcWZvbnQuaCIg MQojIDQzICJrZXJuZWwvcWZvbnRtZXRyaWNzLmgiIDIKIyAxICJrZXJuZWwvcXJlY3QuaCIgMQoj IDQ0ICJrZXJuZWwvcWZvbnRtZXRyaWNzLmgiIDIKCgpjbGFzcyBRVGV4dENvZGVjOwoKCmNsYXNz IFFGb250TWV0cmljcwp7CnB1YmxpYzoKICAgIFFGb250TWV0cmljcyggY29uc3QgUUZvbnQgJiAp OwogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9udE1ldHJpY3MgJiApOwogICB+UUZvbnRNZXRy aWNzKCk7CgogICAgUUZvbnRNZXRyaWNzICZvcGVyYXRvcj0oIGNvbnN0IFFGb250TWV0cmljcyAm ICk7CgogICAgaW50IGFzY2VudCgpIGNvbnN0OwogICAgaW50IGRlc2NlbnQoKSBjb25zdDsKICAg IGludCBoZWlnaHQoKSBjb25zdDsKICAgIGludCBsZWFkaW5nKCkgY29uc3Q7CiAgICBpbnQgbGlu ZVNwYWNpbmcoKSBjb25zdDsKICAgIGludCBtaW5MZWZ0QmVhcmluZygpIGNvbnN0OwogICAgaW50 IG1pblJpZ2h0QmVhcmluZygpIGNvbnN0OwogICAgaW50IG1heFdpZHRoKCkgY29uc3Q7CgogICAg Ym9vbCBpbkZvbnQoUUNoYXIpIGNvbnN0OwoKICAgIGludCBsZWZ0QmVhcmluZyhRQ2hhcikgY29u c3Q7CiAgICBpbnQgcmlnaHRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGludCB3aWR0aCggY29u c3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25zdDsKICAgIGludCB3aWR0aCggUUNoYXIg KSBjb25zdDsKICAgIGludCB3aWR0aCggY2hhciBjICkgY29uc3QgeyByZXR1cm4gd2lkdGgoIChR Q2hhcikgYyApOyB9CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwgaW50 IGxlbiA9IC0xICkgY29uc3Q7CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIFFDaGFyICkgY29uc3Q7 CiAgICBRUmVjdCBib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQg ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0ciwg aW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqdGFiYXJyYXk9MCwgY2hhciAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZSBzaXpl KCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBzdHIsIGlu dCBsZW49LTEsIGludCB0YWJzdG9wcz0wLAogICAgICAgICAgICAgICAgICAgICAgaW50ICp0YWJh cnJheT0wLCBjaGFyICoqaW50ZXJuPTAgKSBjb25zdDsKCiAgICBpbnQgdW5kZXJsaW5lUG9zKCkg Y29uc3Q7CiAgICBpbnQgc3RyaWtlT3V0UG9zKCkgY29uc3Q7CiAgICBpbnQgbGluZVdpZHRoKCkg Y29uc3Q7Cgpwcml2YXRlOgogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRUGFpbnRlciAqICk7CiAg ICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwogICAgY29uc3QgUUZvbnRE ZWYgKnNwZWMoKSBjb25zdDsKCgoKCgogICAgdm9pZCAqZm9udFN0cnVjdCgpIGNvbnN0OwogICAg dm9pZCAqZm9udFNldCgpIGNvbnN0OwogICAgY29uc3QgUVRleHRDb2RlYyAqbWFwcGVyKCkgY29u c3Q7CiAgICBpbnQgcHJpbnRlckFkanVzdGVkKGludCkgY29uc3Q7CgoKCgogICAgZnJpZW5kIGNs YXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CgogICAgUUZvbnRJbnRlcm5h bCAqZmluOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7CgogICAgYm9vbCB1 bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBi b29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9IDA7IH0K ICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9CiAgICB2b2lkIHNl dFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ5ICJrZXJuZWwvcXdpZGdl dC5oIiAyCiMgMSAia2VybmVsL3Fmb250aW5mby5oIiAxCiMgNDIgImtlcm5lbC9xZm9udGluZm8u aCIKIyAxICJrZXJuZWwvcWZvbnQuaCIgMQojIDQzICJrZXJuZWwvcWZvbnRpbmZvLmgiIDIKCgoK Y2xhc3MgUUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7 CiAgICBRRm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgIH5RRm9udEluZm8oKTsKCiAg ICBRRm9udEluZm8gJm9wZXJhdG9yPSggY29uc3QgUUZvbnRJbmZvICYgKTsKCiAgICBRU3RyaW5n IGZhbWlseSgpIGNvbnN0OwogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgYm9vbCBpdGFs aWMoKSBjb25zdDsKICAgIGludCB3ZWlnaHQoKSBjb25zdDsKICAgIGJvb2wgYm9sZCgpIGNvbnN0 OwogICAgYm9vbCB1bmRlcmxpbmUoKSBjb25zdDsKICAgIGJvb2wgc3RyaWtlT3V0KCkgY29uc3Q7 CiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIFFGb250OjpTdHlsZUhpbnQgc3R5bGVI aW50KCkgY29uc3Q7CiAgICBRRm9udDo6Q2hhclNldCBjaGFyU2V0KCkgY29uc3Q7CiAgICBib29s IHJhd01vZGUoKSBjb25zdDsKCiAgICBib29sIGV4YWN0TWF0Y2goKSBjb25zdDsKCgogICAgY29u c3QgUUZvbnQgJmZvbnQoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUUZvbnRJbmZvKCBjb25zdCBR UGFpbnRlciAqICk7CiAgICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwog ICAgY29uc3QgUUZvbnREZWYgKnNwZWMoKSBjb25zdDsKCiAgICBRRm9udEludGVybmFsICpmaW47 CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAgIGludCBmbGFnczsKCiAgICBib29sIHVuZGVybGlu ZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7IH0KICAgIGJvb2wgc3Ry aWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4MikgIT0gMDsgfQogICAgYm9v bCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4NCkgIT0gMDsgfQog ICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkgeyBmbGFncyB8PSAweDE7IH0KICAgIHZvaWQgc2V0 U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0gMHgyOyB9CiAgICB2b2lkIHNldEV4YWN0TWF0Y2hG bGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAgIGZy aWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRRm9udEluZm86OmJvbGQoKSBj b25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFGb250OjpOb3JtYWw7IH0KIyA1MCAia2VybmVsL3F3 aWRnZXQuaCIgMgojIDEgImtlcm5lbC9xc3R5bGUuaCIgMQojIDQxICJrZXJuZWwvcXN0eWxlLmgi CiMgMSAia2VybmVsL3F3aW5kb3dkZWZzLmgiIDEKIyA0MiAia2VybmVsL3FzdHlsZS5oIiAyCiMg MSAia2VybmVsL3FvYmplY3QuaCIgMQojIDQzICJrZXJuZWwvcXN0eWxlLmgiIDIKCgoKY2xhc3Mg UUJ1dHRvbjsKY2xhc3MgUVB1c2hCdXR0b247CmNsYXNzIFFTY3JvbGxCYXI7CmNsYXNzIFFUYWJC YXI7CmNsYXNzIFFUYWI7CmNsYXNzIFFQb3B1cE1lbnU7CmNsYXNzIFFNZW51SXRlbTsKY2xhc3Mg UVRvb2xCdXR0b247CgpjbGFzcyBRU3R5bGU6IHB1YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzog UU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0 KCk7IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCog c3RhdGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRp YyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IHByb3RlY3RlZDogdm9pZCBp bml0TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CiAg ICBHVUlTdHlsZSBnczsKCnByaXZhdGU6CiAgICBRU3R5bGUoR1VJU3R5bGUpOwogICAgUVN0eWxl KCk7CiAgICBmcmllbmQgY2xhc3MgUUNvbW1vblN0eWxlOwoKcHVibGljOgogICAgdmlydHVhbCB+ UVN0eWxlKCk7CgoKICAgIG9wZXJhdG9yIEdVSVN0eWxlKCkgY29uc3QgeyByZXR1cm4gZ3M7IH0K ICAgIGludCBvcGVyYXRvcj09KEdVSVN0eWxlIHMpIGNvbnN0IHsgcmV0dXJuIGdzPT1zOyB9CiAg ICBpbnQgb3BlcmF0b3IhPShHVUlTdHlsZSBzKSBjb25zdCB7IHJldHVybiBncyE9czsgfQoKCiAg ICBHVUlTdHlsZSBndWlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGdzOyB9CgoKCiAgICB2aXJ0dWFs IHZvaWQgcG9saXNoKCBRV2lkZ2V0KiApOwogICAgdmlydHVhbCB2b2lkIHVuUG9saXNoKCBRV2lk Z2V0KiApOwoKICAgIHZpcnR1YWwgdm9pZCBwb2xpc2goIFFBcHBsaWNhdGlvbiopOwogICAgdmly dHVhbCB2b2lkIHVuUG9saXNoKCBRQXBwbGljYXRpb24qKTsKCiAgICB2aXJ0dWFsIHZvaWQgcG9s aXNoKCBRUGFsZXR0ZSYpOwoKICAgIHZpcnR1YWwgUVJlY3QgaXRlbVJlY3QoIFFQYWludGVyICpw LCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBpbnQgZmxh Z3MsIGJvb2wgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFwICpwaXht YXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgdGV4dCwgaW50IGxlbj0tMSAp OwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3SXRlbSggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwg aW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgY29uc3QgUUNvbG9y R3JvdXAgJmcsIGJvb2wgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFw ICpwaXhtYXAsIGNvbnN0IFFTdHJpbmcmIHRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBsZW49LTEsIGNvbnN0IFFDb2xvciogcGVuQ29sb3IgPSAwICk7CgoKICAgIHZpcnR1YWwg dm9pZCBkcmF3U2VwYXJhdG9yKCBRUGFpbnRlciAqcCwgaW50IHgxLCBpbnQgeTEsIGludCB4Miwg aW50IHkyLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBz dW5rZW4gPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICBpbnQgbGluZVdpZHRoID0gMSwgaW50 IG1pZExpbmVXaWR0aCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoIFFQYWludGVy ICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICBjb25z dCBRQ29sb3IgJiwgaW50IGxpbmVXaWR0aCA9IDEsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUJydXNoICpmaWxsID0gMCApOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdFN0cm9uZyggUVBh aW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg ICBjb25zdCBRQ29sb3JHcm91cCAmLCBib29sIHN1bmtlbj1GQUxTRSwKICAgICAgICAgICAgICAg ICAgICAgaW50IGxpbmVXaWR0aCA9IDEsIGludCBtaWRMaW5lV2lkdGggPSAwLAogICAgICAgICAg ICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CgogICAgdmlydHVhbCB2b2lkIGRy YXdCdXR0b24oIFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAg ICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0gRkFMU0Us CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKSA9IDA7CgogICAg dmlydHVhbCBRUmVjdCBidXR0b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7Cgog ICAgdmlydHVhbCB2b2lkIGRyYXdCdXR0b25NYXNrKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5 LCBpbnQgdywgaW50IGgpOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3QmV2ZWxCdXR0b24oIFFQYWlu dGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAg Y29uc3QgUUNvbG9yR3JvdXAgJmcsIGJvb2wgc3Vua2VuID0gRkFMU0UsCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKSA9IDA7CgogICAgUVJlY3QgYmV2ZWxCdXR0 b25SZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7CgogICAgdmlydHVhbCB2b2lkIGRy YXdUb29sQnV0dG9uKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZB TFNFLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICk7CiAgICB2 b2lkIGRyYXdUb29sQnV0dG9uKCBRVG9vbEJ1dHRvbiogYnRuLCBRUGFpbnRlciAqcCk7CgogICAg UVJlY3QgdG9vbEJ1dHRvblJlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKCiAgICB2 aXJ0dWFsIHZvaWQgZHJhd1BhbmVsKCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgYm9vbCBzdW5r ZW49RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVXaWR0aCA9IDEsIGNvbnN0IFFC cnVzaCAqZmlsbCA9IDAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZHJhd1BvcHVwUGFuZWwoIFFQYWlu dGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAgJiwgaW50IGxpbmVXaWR0aCA9IDIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9IDAgKTsKCiAg ICB2aXJ0dWFsIHZvaWQgZHJhd0Fycm93KCBRUGFpbnRlciAqcCwgUXQ6OkFycm93VHlwZSB0eXBl LCBib29sIGRvd24sCiAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGlu dCBoLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywgYm9vbCBlbmFi bGVkLCBjb25zdCBRQnJ1c2ggKmZpbGwgPSAwICkgPSAwOwoKCiAgICB2aXJ0dWFsIFFTaXplIGV4 Y2x1c2l2ZUluZGljYXRvclNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0V4 Y2x1c2l2ZUluZGljYXRvciggUVBhaW50ZXIqIHAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBo LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIG9uLCBib29s IGRvd24gPSBGQUxTRSwgYm9vbCBlbmFibGVkID0gVFJVRSApID0gMDsKICAgIHZpcnR1YWwgdm9p ZCBkcmF3RXhjbHVzaXZlSW5kaWNhdG9yTWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwg aW50IHcsIGludCBoLCBib29sIG9uKTsKCgogICAgdmlydHVhbCBRU2l6ZSBpbmRpY2F0b3JTaXpl KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdJbmRpY2F0b3IoIFFQYWludGVyKiBw LCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUNvbG9yR3JvdXAgJmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlLCBib29sIGRvd24gPSBGQUxTRSwg Ym9vbCBlbmFibGVkID0gVFJVRSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3SW5kaWNhdG9y TWFzayggUVBhaW50ZXIgKnAsIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgc3RhdGUp OwoKCgogICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JlY3QoIFFQYWludGVyKiwgY29uc3QgUVJl Y3QgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAm LCBjb25zdCBRQ29sb3IqIGJnID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sID0gRkFMU0UgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29tYm9CdXR0b24o IFFQYWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLCBib29sIHN1bmtlbiA9IEZB TFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlZGl0YWJsZSA9IEZB TFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkID0gVFJV RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFCcnVzaCAqZmlsbCA9 IDAgKSA9IDA7CiAgICB2aXJ0dWFsIFFSZWN0IGNvbWJvQnV0dG9uUmVjdCggaW50IHgsIGludCB5 LAogICAgICAgICAgICAgICAgICAgIGludCB3LCBpbnQgaCkgPSAwOwogICAgdmlydHVhbCBRUmVj dCBjb21ib0J1dHRvbkZvY3VzUmVjdCggaW50IHgsIGludCB5LAogICAgICAgICAgICAgICAgICAg IGludCB3LCBpbnQgaCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29tYm9CdXR0b25NYXNr KCBRUGFpbnRlciAqcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpID0gMDsKCgogICAgdmly dHVhbCB2b2lkIGRyYXdQdXNoQnV0dG9uKCBRUHVzaEJ1dHRvbiogYnRuLCBRUGFpbnRlciAqcCkg PSAwOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3UHVzaEJ1dHRvbkxhYmVsKCBRUHVzaEJ1dHRvbiog YnRuLCBRUGFpbnRlciAqcCkgPSAwOwogICAgUVJlY3QgcHVzaEJ1dHRvbkNvbnRlbnRzUmVjdCgg UVB1c2hCdXR0b24qIGJ0biApOwogICAgaW50IG1lbnVCdXR0b25JbmRpY2F0b3JXaWR0aCggaW50 IGggKTsKICAgIHZpcnR1YWwgdm9pZCBnZXRCdXR0b25TaGlmdCggaW50ICZ4LCBpbnQgJnkpID0g MDsKCgogICAgdmlydHVhbCBpbnQgZGVmYXVsdEZyYW1lV2lkdGgoKSBjb25zdCA9IDA7CgoKICAg IHZpcnR1YWwgdm9pZCB0YWJiYXJNZXRyaWNzKCBjb25zdCBRVGFiQmFyKiwKICAgICAgICAgICAg ICAgICAgICBpbnQmLCBpbnQmLCBpbnQmICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdUYWIo IFFQYWludGVyKiwgY29uc3QgUVRhYkJhciosIFFUYWIqLCBib29sIHNlbGVjdGVkICkgPSAwOwog ICAgdmlydHVhbCB2b2lkIGRyYXdUYWJNYXNrKCBRUGFpbnRlciosIGNvbnN0IFFUYWJCYXIqLCBR VGFiKiwgYm9vbCBzZWxlY3RlZCApID0gMDsKCgogICAgZW51bSBTY3JvbGxDb250cm9sIHsgQWRk TGluZSA9IDB4MSAsIFN1YkxpbmUgPSAweDIgLCBBZGRQYWdlID0gMHg0LAogICAgICAgICAgICAg ICAgICAgICAgICAgU3ViUGFnZSA9IDB4OCAsIEZpcnN0ID0gMHgxMCwgTGFzdCA9IDB4MjAsCiAg ICAgICAgICAgICAgICAgICAgICAgICBTbGlkZXIgPSAweDQwLCBOb1Njcm9sbCA9IDB4ODAgfTsK CiAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQmFyTWV0cmljcyggY29uc3QgUVNjcm9sbEJhciosCiAg ICAgICAgICAgICAgICAgICAgaW50JiwgaW50JiwgaW50JiwgaW50JikgPSAwOwogICAgdmlydHVh bCB2b2lkIGRyYXdTY3JvbGxCYXJDb250cm9scyggUVBhaW50ZXIqLCBjb25zdCBRU2Nyb2xsQmFy KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbGlkZXJTdGFy dCwgdWludCBjb250cm9scywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQgYWN0aXZlQ29udHJvbCApID0gMDsKICAgIHZpcnR1YWwgU2Nyb2xsQ29udHJvbCBzY3Jv bGxCYXJQb2ludE92ZXIoIGNvbnN0IFFTY3JvbGxCYXIqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNsaWRlclN0YXJ0LCBjb25zdCBRUG9pbnQmICkgPSAwOwoK CiAgICB2aXJ0dWFsIGludCBzbGlkZXJMZW5ndGgoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZv aWQgZHJhd1NsaWRlciggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgUUNvbG9yR3JvdXAgJmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50 YXRpb24sIGJvb2wgdGlja0Fib3ZlLCBib29sIHRpY2tCZWxvdykgPSAwOwoKICAgIHZpcnR1YWwg dm9pZCBkcmF3U2xpZGVyTWFzayggUVBhaW50ZXIgKnAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPcmllbnRhdGlvbiwgYm9vbCB0aWNrQWJvdmUsIGJvb2wgdGlja0JlbG93 KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd1NsaWRlckdyb292ZSggUVBhaW50ZXIgKnAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50 IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yR3JvdXAm IGcsIFFDT09SRCBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWVudGF0 aW9uICkgPSAwOwogICAgdmlydHVhbCB2b2lkIGRyYXdTbGlkZXJHcm9vdmVNYXNrKCBRUGFpbnRl ciAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5 LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFD T09SRCBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmllbnRhdGlv biApID0gMDsKICAgIHZpcnR1YWwgaW50IG1heGltdW1TbGlkZXJEcmFnRGlzdGFuY2UoKSBjb25z dCA9IDA7CgogICAgdmlydHVhbCBpbnQgc3BsaXR0ZXJXaWR0aCgpIGNvbnN0ID0gMDsKICAgIHZp cnR1YWwgdm9pZCBkcmF3U3BsaXR0ZXIoIFFQYWludGVyICpwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZnLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9yaWVudGF0aW9uKSA9IDA7CgogICAgdmlydHVhbCB2b2lkIGRyYXdDaGVja01hcmsoIFFQ YWludGVyICpwLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBRQ29sb3JHcm91cCAmZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sIGFjdCwgYm9vbCBkaXMgKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcG9s aXNoUG9wdXBNZW51KCBRUG9wdXBNZW51KiApID0gMDsKCiAgICB2aXJ0dWFsIGludCBleHRyYVBv cHVwTWVudUl0ZW1XaWR0aCggYm9vbCBjaGVja2FibGUsIGludCBtYXhwbXcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUU1lbnVJdGVtKiBtaSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBRRm9udE1ldHJpY3MmIGZtICkgPSAwOwogICAgdmlydHVhbCBpbnQg cG9wdXBTdWJtZW51SW5kaWNhdG9yV2lkdGgoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUUZvbnRNZXRyaWNzJiBmbSApID0gMDsKICAgIHZpcnR1YWwgaW50IHBvcHVwTWVu dUl0ZW1IZWlnaHQoIGJvb2wgY2hlY2thYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFNZW51SXRlbSogbWksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg UUZvbnRNZXRyaWNzJiBmbSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkcmF3UG9wdXBNZW51SXRl bSggUVBhaW50ZXIqIHAsIGJvb2wgY2hlY2thYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbWF4cG13LCBpbnQgdGFiLCBRTWVudUl0ZW0qIG1pLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGFsZXR0ZSYgcGFsLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjdCwgYm9vbCBlbmFibGVkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkg PSAwOwogICAgdm9pZCBkcmF3TWVudUJhckl0ZW0oIFFQYWludGVyKiBwLCBpbnQgeCwgaW50IHks IGludCB3LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1lbnVJ dGVtKiBtaSwgUUNvbG9yR3JvdXAmIGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgZW5hYmxlZCwgYm9vbCBhY3RpdmUgKTsKCgogICAgUVNpemUgc2Nyb2xsQmFyRXh0 ZW50KCk7CiAgICBpbnQgYnV0dG9uRGVmYXVsdEluZGljYXRvcldpZHRoKCkgY29uc3Q7CiAgICBp bnQgYnV0dG9uTWFyZ2luKCkgY29uc3Q7CiAgICBpbnQgdG9vbEJhckhhbmRsZUV4dGVudCgpIGNv bnN0OwogICAgaW50IHRvb2xCYXJIYW5kbGVFeHRlbmQoKSBjb25zdDsKICAgIGludCBzbGlkZXJU aGlja25lc3MoKSBjb25zdCA7CiAgICB2b2lkIGRyYXdUb29sQmFySGFuZGxlKCBRUGFpbnRlciAq cCwgY29uc3QgUVJlY3QgJnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdDo6T3JpZW50 YXRpb24gb3JpZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhpZ2hs aWdodCwgY29uc3QgUUNvbG9yR3JvdXAgJmNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBkcmF3Qm9yZGVyID0gRkFMU0UgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgc2V0U2Nyb2xs QmFyRXh0ZW50KCBpbnQgdywgaW50IGg9LTEgKTsKICAgIHZvaWQgc2V0QnV0dG9uRGVmYXVsdElu ZGljYXRvcldpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRCdXR0b25NYXJnaW4oIGludCB3ICk7 CiAgICB2b2lkIHNldFNsaWRlclRoaWNrbmVzcyhpbnQgdCk7CgoKcHJpdmF0ZToKCiAgICBRU3R5 bGUoIGNvbnN0IFFTdHlsZSAmICk7CiAgICBRU3R5bGUmIG9wZXJhdG9yPSggY29uc3QgUVN0eWxl ICYgKTsKCn07CiMgNTEgImtlcm5lbC9xd2lkZ2V0LmgiIDIKIyAxICJrZXJuZWwvcXNpemVwb2xp Y3kuaCIgMQojIDUyICJrZXJuZWwvcXdpZGdldC5oIiAyCgoKY2xhc3MgUUxheW91dDsKc3RydWN0 IFFXRXh0cmE7CnN0cnVjdCBRVExXRXh0cmE7CmNsYXNzIFFGb2N1c0RhdGE7CmNsYXNzIFFTdHls ZTsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKCmNsYXNzIFFXaWRnZXQgOiBwdWJsaWMgUU9iamVj dCwgcHVibGljIFFQYWludERldmljZQp7CiAgICBwdWJsaWM6IFFNZXRhT2JqZWN0ICptZXRhT2Jq ZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9IGNvbnN0IGNoYXIgKmNs YXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsg c3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBj aGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1ldGFPYmplY3QoKTsgcHJp dmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwojIDEyNSAia2VybmVsL3F3aWRnZXQu aCIKcHVibGljOgogICAgUVdpZGdldCggUVdpZGdldCAqcGFyZW50PTAsIGNvbnN0IGNoYXIgKm5h bWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBXSWQgd2luSWQoKSBjb25z dDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoKCgogICAgUVN0eWxlICZz dHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICogKTsKCgoKICAgIGJvb2wg aXNUb3BMZXZlbCgpIGNvbnN0OwogICAgYm9vbCBpc01vZGFsKCkgY29uc3Q7CiAgICBib29sIGlz UG9wdXAoKSBjb25zdDsKICAgIGJvb2wgaXNEZXNrdG9wKCkgY29uc3Q7CgogICAgYm9vbCBpc0Vu YWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG8oUVdpZGdldCopIGNvbnN0OwogICAg Ym9vbCBpc0VuYWJsZWRUb1RMVygpIGNvbnN0OwoKcHVibGljIDoKICAgIHZpcnR1YWwgdm9pZCBz ZXRFbmFibGVkKCBib29sICk7CiAgICB2b2lkIHNldERpc2FibGVkKCBib29sICk7CgoKCnB1Ymxp YzoKICAgIFFSZWN0IGZyYW1lR2VvbWV0cnkoKSBjb25zdDsKICAgIGNvbnN0IFFSZWN0ICZnZW9t ZXRyeSgpIGNvbnN0OwogICAgaW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICBR UG9pbnQgcG9zKCkgY29uc3Q7CiAgICBRU2l6ZSBmcmFtZVNpemUoKSBjb25zdDsKICAgIFFTaXpl IHNpemUoKSBjb25zdDsKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNv bnN0OwogICAgUVJlY3QgcmVjdCgpIGNvbnN0OwogICAgUVJlY3QgY2hpbGRyZW5SZWN0KCkgY29u c3Q7CiAgICBRUmVnaW9uIGNoaWxkcmVuUmVnaW9uKCkgY29uc3Q7CgogICAgUVNpemUgbWluaW11 bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1heGltdW1TaXplKCkgY29uc3Q7CiAgICBpbnQgbWlu aW11bVdpZHRoKCkgY29uc3Q7CiAgICBpbnQgbWluaW11bUhlaWdodCgpIGNvbnN0OwogICAgaW50 IG1heGltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1heGltdW1IZWlnaHQoKSBjb25zdDsKICAg IHZvaWQgc2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBz ZXRNaW5pbXVtU2l6ZSggaW50IG1pbncsIGludCBtaW5oICk7CiAgICB2b2lkIHNldE1heGltdW1T aXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWF4aW11bVNpemUoIGlu dCBtYXh3LCBpbnQgbWF4aCApOwogICAgdm9pZCBzZXRNaW5pbXVtV2lkdGgoIGludCBtaW53ICk7 CiAgICB2b2lkIHNldE1pbmltdW1IZWlnaHQoIGludCBtaW5oICk7CiAgICB2b2lkIHNldE1heGlt dW1XaWR0aCggaW50IG1heHcgKTsKICAgIHZvaWQgc2V0TWF4aW11bUhlaWdodCggaW50IG1heGgg KTsKCiAgICBRU2l6ZSBzaXplSW5jcmVtZW50KCkgY29uc3Q7CiAgICB2b2lkIHNldFNpemVJbmNy ZW1lbnQoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplSW5jcmVtZW50 KCBpbnQgdywgaW50IGggKTsKICAgIFFTaXplIGJhc2VTaXplKCkgY29uc3Q7CiAgICB2b2lkIHNl dEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkIHNldEJhc2VTaXplKCBpbnQgYmFz ZXcsIGludCBiYXNlaCApOwoKICAgIHZvaWQgc2V0Rml4ZWRTaXplKCBjb25zdCBRU2l6ZSAmICk7 CiAgICB2b2lkIHNldEZpeGVkU2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHNldEZpeGVk V2lkdGgoIGludCB3ICk7CiAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KCBpbnQgaCApOwoKCgogICAg UVBvaW50IG1hcFRvR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1h cEZyb21HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwVG9QYXJl bnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQgbWFwRnJvbVBhcmVudCggY29u c3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBUbyggUVdpZGdldCAqLCBjb25zdCBR UG9pbnQgJiApIGNvbnN0OwogICAgUVBvaW50IG1hcEZyb20oIFFXaWRnZXQgKiwgY29uc3QgUVBv aW50ICYgKSBjb25zdDsKCiAgICBRV2lkZ2V0ICp0b3BMZXZlbFdpZGdldCgpIGNvbnN0OwoKCgog ICAgZW51bSBCYWNrZ3JvdW5kTW9kZSB7IEZpeGVkQ29sb3IsIEZpeGVkUGl4bWFwLCBOb0JhY2tn cm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUZvcmVncm91bmQsIFBhbGV0 dGVCdXR0b24sIFBhbGV0dGVMaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQYWxldHRl TWlkbGlnaHQsIFBhbGV0dGVEYXJrLCBQYWxldHRlTWlkLAogICAgICAgICAgICAgICAgICAgICAg ICAgIFBhbGV0dGVUZXh0LCBQYWxldHRlQnJpZ2h0VGV4dCwgUGFsZXR0ZUJhc2UsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgUGFsZXR0ZUJhY2tncm91bmQsIFBhbGV0dGVTaGFkb3csIFBhbGV0 dGVIaWdobGlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUGFsZXR0ZUhpZ2hsaWdodGVk VGV4dCwgUGFsZXR0ZUJ1dHRvblRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgWDExUGFy ZW50UmVsYXRpdmUgfTsKCiAgICBCYWNrZ3JvdW5kTW9kZSBiYWNrZ3JvdW5kTW9kZSgpIGNvbnN0 OwogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSApOwoK ICAgIGNvbnN0IFFDb2xvciAmIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgY29uc3QgUUNv bG9yICYgZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dy b3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNvbnN0IFFQaXhtYXAgKiBiYWNrZ3Jv dW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZFBpeG1hcCgg Y29uc3QgUVBpeG1hcCAmICk7CgoKICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JHcm91cCgp IGNvbnN0OwogICAgY29uc3QgUVBhbGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBib29sIG93 blBhbGV0dGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFs ZXR0ZSAmICk7CiAgICB2b2lkIHVuc2V0UGFsZXR0ZSgpOwoKICAgIFFGb250IGZvbnQoKSBjb25z dDsKICAgIGJvb2wgb3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvbnQoIGNv bnN0IFFGb250ICYgKTsKICAgIHZvaWQgdW5zZXRGb250KCk7CiAgICBRRm9udE1ldHJpY3MgZm9u dE1ldHJpY3MoKSBjb25zdDsKICAgIFFGb250SW5mbyBmb250SW5mbygpIGNvbnN0OwoKICAgIGVu dW0gUHJvcGFnYXRpb25Nb2RlIHsgTm9DaGlsZHJlbiwgQWxsQ2hpbGRyZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNhbWVGb250LCBTYW1lUGFsZXR0ZSA9IFNhbWVGb250IH07CgogICAg UHJvcGFnYXRpb25Nb2RlIGZvbnRQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk IHNldEZvbnRQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgUHJvcGFnYXRpb25N b2RlIHBhbGV0dGVQcm9wYWdhdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBhbGV0 dGVQcm9wYWdhdGlvbiggUHJvcGFnYXRpb25Nb2RlICk7CgogICAgY29uc3QgUUN1cnNvciAmY3Vy c29yKCkgY29uc3Q7CiAgICBib29sIG93bkN1cnNvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk IHNldEN1cnNvciggY29uc3QgUUN1cnNvciAmICk7CiAgICB2aXJ0dWFsIHZvaWQgdW5zZXRDdXJz b3IoKTsKCiAgICBRU3RyaW5nIGNhcHRpb24oKSBjb25zdDsKICAgIGNvbnN0IFFQaXhtYXAgKmlj b24oKSBjb25zdDsKICAgIFFTdHJpbmcgaWNvblRleHQoKSBjb25zdDsKICAgIGJvb2wgaGFzTW91 c2VUcmFja2luZygpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRQml0 bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrKCBjb25zdCBRUmVnaW9uICYgKTsKICAg IHZvaWQgY2xlYXJNYXNrKCk7CgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIHNldENhcHRpb24o IGNvbnN0IFFTdHJpbmcgJik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1h cCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcgJik7CiAg ICB2aXJ0dWFsIHZvaWQgc2V0TW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCgoKICAgIHZp cnR1YWwgdm9pZCBzZXRGb2N1cygpOwogICAgdm9pZCBjbGVhckZvY3VzKCk7CgpwdWJsaWM6CiAg ICBlbnVtIEZvY3VzUG9saWN5IHsKICAgICAgICBOb0ZvY3VzID0gMCwKICAgICAgICBUYWJGb2N1 cyA9IDB4MSwKICAgICAgICBDbGlja0ZvY3VzID0gMHgyLAogICAgICAgIFN0cm9uZ0ZvY3VzID0g MHgzLAogICAgICAgIFdoZWVsRm9jdXMgPSAweDcKICAgIH07CgogICAgYm9vbCBpc0FjdGl2ZVdp bmRvdygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZVdpbmRvdygpOwogICAgYm9v bCBpc0ZvY3VzRW5hYmxlZCgpIGNvbnN0OwoKICAgIEZvY3VzUG9saWN5IGZvY3VzUG9saWN5KCkg Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQb2xpY3koIEZvY3VzUG9saWN5ICk7CiAg ICBib29sIGhhc0ZvY3VzKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBzZXRUYWJPcmRlciggUVdp ZGdldCAqLCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1c1Byb3h5KCBRV2lk Z2V0ICogKTsKICAgIFFXaWRnZXQgKiBmb2N1c1Byb3h5KCkgY29uc3Q7CgoKCiAgICB2b2lkIGdy YWJNb3VzZSgpOwoKICAgIHZvaWQgZ3JhYk1vdXNlKCBjb25zdCBRQ3Vyc29yICYgKTsKCiAgICB2 b2lkIHJlbGVhc2VNb3VzZSgpOwogICAgdm9pZCBncmFiS2V5Ym9hcmQoKTsKICAgIHZvaWQgcmVs ZWFzZUtleWJvYXJkKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqIG1vdXNlR3JhYmJlcigpOwogICAg c3RhdGljIFFXaWRnZXQgKiBrZXlib2FyZEdyYWJiZXIoKTsKCgoKICAgIGJvb2wgaXNVcGRhdGVz RW5hYmxlZCgpIGNvbnN0OwoKCgoKcHVibGljIDoKICAgIHZpcnR1YWwgdm9pZCBzZXRVcGRhdGVz RW5hYmxlZCggYm9vbCBlbmFibGUgKTsKICAgIHZvaWQgdXBkYXRlKCk7CiAgICB2b2lkIHVwZGF0 ZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgdXBkYXRlKCBjb25zdCBR UmVjdCYgKTsKICAgIHZvaWQgcmVwYWludCgpOwogICAgdm9pZCByZXBhaW50KCBib29sIGVyYXNl ICk7CiAgICB2b2lkIHJlcGFpbnQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIGVy YXNlPVRSVUUgKTsKICAgIHZvaWQgcmVwYWludCggY29uc3QgUVJlY3QgJiwgYm9vbCBlcmFzZT1U UlVFICk7CiAgICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFzZT1UUlVF ICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwogICAgdmlydHVhbCB2b2lkIGhpZGUoKTsK CiAgICB2b2lkIGljb25pZnkoKSB7IHNob3dNaW5pbWl6ZWQoKTsgfQoKICAgIHZpcnR1YWwgdm9p ZCBzaG93TWluaW1pemVkKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2hvd01heGltaXplZCgpOwogICAg dm9pZCBzaG93RnVsbFNjcmVlbigpOwogICAgdmlydHVhbCB2b2lkIHNob3dOb3JtYWwoKTsKICAg IHZpcnR1YWwgdm9pZCBwb2xpc2goKTsKICAgIHZvaWQgY29uc3RQb2xpc2goKSBjb25zdDsKICAg IGJvb2wgY2xvc2UoKTsKCiAgICB2b2lkIHJhaXNlKCk7CiAgICB2b2lkIGxvd2VyKCk7CiAgICB2 b2lkIHN0YWNrVW5kZXIoIFFXaWRnZXQqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZSggaW50IHgs IGludCB5ICk7CiAgICB2b2lkIG1vdmUoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0dWFsIHZv aWQgcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgcmVzaXplKCBjb25zdCBRU2l6ZSAm ICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu dCBoICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICYgKTsKCnB1 YmxpYzoKICAgIHZpcnR1YWwgYm9vbCBjbG9zZSggYm9vbCBhbHNvRGVsZXRlICk7CiAgICBib29s IGlzVmlzaWJsZSgpIGNvbnN0OwogICAgYm9vbCBpc1Zpc2libGVUbyhRV2lkZ2V0KikgY29uc3Q7 CiAgICBib29sIGlzVmlzaWJsZVRvVExXKCkgY29uc3Q7CiAgICBRUmVjdCB2aXNpYmxlUmVjdCgp IGNvbnN0OwogICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0OwogICAgYm9vbCBpc01pbmltaXplZCgp IGNvbnN0OwogICAgYm9vbCBpc01heGltaXplZCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgUVNpemUg c2l6ZUhpbnQoKSBjb25zdDsKICAgIHZpcnR1YWwgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29u c3Q7CiAgICB2aXJ0dWFsIFFTaXplUG9saWN5IHNpemVQb2xpY3koKSBjb25zdDsKICAgIHZvaWQg c2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZpcnR1YWwgaW50IGhlaWdodEZvcldp ZHRoKGludCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNpemUoKTsKCiAgICBRTGF5 b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5X291dDsgfQoKICAgIHZvaWQgdXBkYXRl R2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBhcmVudCggUVdpZGdldCAqcGFyZW50LCBX RmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVwYXJlbnQoIFFXaWRnZXQgKnBhcmVudCwg Y29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNo b3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdz IGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIHNob3dJdD1GQUxTRSApCiAgICB7IHJlcGFyZW50KHBhcmVudCxmLHAsc2hvd0l0KTsgfQoK CiAgICB2b2lkIGVyYXNlKCk7CiAgICB2b2lkIGVyYXNlKCBpbnQgeCwgaW50IHksIGludCB3LCBp bnQgaCApOwogICAgdm9pZCBlcmFzZSggY29uc3QgUVJlY3QgJiApOwogICAgdm9pZCBlcmFzZSgg Y29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lkIHNjcm9sbCggaW50IGR4LCBpbnQgZHkgKTsKICAg IHZvaWQgc2Nyb2xsKCBpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmICk7CgogICAgdm9pZCBk cmF3VGV4dCggaW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYpOwogICAgdm9pZCBkcmF3VGV4 dCggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFTdHJpbmcgJik7CgoKCiAgICBRV2lkZ2V0ICogZm9j dXNXaWRnZXQoKSBjb25zdDsKICAgIFFSZWN0IG1pY3JvRm9jdXNIaW50KCkgY29uc3Q7CgoKCiAg ICBib29sIGFjY2VwdERyb3BzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZXB0RHJv cHMoIGJvb2wgb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvTWFzayhib29sKTsKICAg IGJvb2wgYXV0b01hc2soKSBjb25zdDsKCiAgICBlbnVtIEJhY2tncm91bmRPcmlnaW4geyBXaWRn ZXRPcmlnaW4sIFBhcmVudE9yaWdpbiB9OwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZE9yaWdpbigg QmFja2dyb3VuZE9yaWdpbiApOwogICAgQmFja2dyb3VuZE9yaWdpbiBiYWNrZ3JvdW5kT3JpZ2lu KCkgY29uc3Q7CgoKCiAgICB2aXJ0dWFsIGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkgY29uc3Q7Cgog ICAgUVdpZGdldCAqIHBhcmVudFdpZGdldCgpIGNvbnN0OwogICAgYm9vbCB0ZXN0V1N0YXRlKCB1 aW50IG4gKSBjb25zdDsKICAgIGJvb2wgdGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdDsKICAg IHN0YXRpYyBRV2lkZ2V0ICogZmluZCggV0lkICk7CiAgICBzdGF0aWMgUVdpZGdldE1hcHBlciAq d21hcHBlcigpOwoKCgoKCnByb3RlY3RlZDoKCiAgICBib29sIGV2ZW50KCBRRXZlbnQgKiApOwog ICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmly dHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFs IHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFs IHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB3 aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVu dCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoIFFLZXlF dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9jdXNFdmVudCAqICk7 CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdmly dHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbGVhdmVF dmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVu dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50ICogKTsKICAgIHZp cnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p ZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50 ZXJFdmVudCggUURyYWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2 ZW50KCBRRHJhZ01vdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQo IFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KCBRRHJvcEV2 ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAqICk7CiAg ICB2aXJ0dWFsIHZvaWQgaGlkZUV2ZW50KCBRSGlkZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p ZCBjdXN0b21FdmVudCggUUN1c3RvbUV2ZW50ICogKTsKIyA0NjQgImtlcm5lbC9xd2lkZ2V0Lmgi CiAgICB2aXJ0dWFsIGJvb2wgeDExRXZlbnQoIFhFdmVudCAqICk7CgoKCgoKCiAgICB2aXJ0dWFs IHZvaWQgdXBkYXRlTWFzaygpOwoKCgpwcm90ZWN0ZWQ6CgogICAgdmlydHVhbCB2b2lkIHN0eWxl Q2hhbmdlKCBRU3R5bGUmICk7CgogICAgdmlydHVhbCB2b2lkIGVuYWJsZWRDaGFuZ2UoIGJvb2wg KTsKICAgIHZpcnR1YWwgdm9pZCBiYWNrZ3JvdW5kQ29sb3JDaGFuZ2UoIGNvbnN0IFFDb2xvciAm ICk7CiAgICB2aXJ0dWFsIHZvaWQgYmFja2dyb3VuZFBpeG1hcENoYW5nZSggY29uc3QgUVBpeG1h cCAmICk7CgogICAgdmlydHVhbCB2b2lkIHBhbGV0dGVDaGFuZ2UoIGNvbnN0IFFQYWxldHRlICYg KTsKCiAgICB2aXJ0dWFsIHZvaWQgZm9udENoYW5nZSggY29uc3QgUUZvbnQgJiApOwoKICAgIGlu dCBtZXRyaWMoIGludCApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBjcmVhdGUoIFdJZCA9IDAs IGJvb2wgaW5pdGlhbGl6ZVdpbmRvdyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBi b29sIGRlc3Ryb3lPbGRXaW5kb3cgPSBUUlVFICk7CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgg Ym9vbCBkZXN0cm95V2luZG93ID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBib29s IGRlc3Ryb3lTdWJXaW5kb3dzID0gVFJVRSApOwogICAgdWludCBnZXRXU3RhdGUoKSBjb25zdDsK ICAgIHZpcnR1YWwgdm9pZCBzZXRXU3RhdGUoIHVpbnQgKTsKICAgIHZvaWQgY2xlYXJXU3RhdGUo IHVpbnQgbiApOwogICAgV0ZsYWdzIGdldFdGbGFncygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk IHNldFdGbGFncyggV0ZsYWdzICk7CiAgICB2b2lkIGNsZWFyV0ZsYWdzKCBXRmxhZ3MgbiApOwoK ICAgIHZpcnR1YWwgdm9pZCBzZXRGUmVjdCggY29uc3QgUVJlY3QgJiApOwogICAgdmlydHVhbCB2 b2lkIHNldENSZWN0KCBjb25zdCBRUmVjdCAmICk7CgogICAgdmlydHVhbCBib29sIGZvY3VzTmV4 dFByZXZDaGlsZCggYm9vbCBuZXh0ICk7CgogICAgUVdFeHRyYSAqZXh0cmFEYXRhKCk7CiAgICBR VExXRXh0cmEgKnRvcERhdGEoKTsKICAgIFFGb2N1c0RhdGEgKmZvY3VzRGF0YSgpOwoKICAgIHZp cnR1YWwgdm9pZCBzZXRLZXlDb21wcmVzc2lvbihib29sKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRN aWNyb0ZvY3VzSGludChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCB0ZXh0PVRSVUUp OwoKcHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJveHlEZXN0cm95ZWQoKTsKCnByaXZhdGU6CiAg ICB2b2lkIHNldEZvbnRTeXMoKTsKCiAgICB2b2lkIHNldExheW91dCggUUxheW91dCAqbCApOwoK ICAgIHZvaWQgc2V0V2luSWQoIFdJZCApOwogICAgdm9pZCBzaG93V2luZG93KCk7CiAgICB2b2lk IGhpZGVXaW5kb3coKTsKICAgIHZvaWQgc2VuZFNob3dFdmVudHNUb0NoaWxkcmVuKCBib29sIHNw b250YW5lb3VzICk7CiAgICB2b2lkIHNlbmRIaWRlRXZlbnRzVG9DaGlsZHJlbiggYm9vbCBzcG9u dGFuZW91cyApOwogICAgdm9pZCBjcmVhdGVUTEV4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZUV4dHJh KCk7CiAgICB2b2lkIGRlbGV0ZUV4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZVN5c0V4dHJhKCk7CiAg ICB2b2lkIGRlbGV0ZVN5c0V4dHJhKCk7CiAgICB2b2lkIGNyZWF0ZVRMU3lzRXh0cmEoKTsKICAg IHZvaWQgZGVsZXRlVExTeXNFeHRyYSgpOwogICAgdm9pZCBkZWFjdGl2YXRlV2lkZ2V0Q2xlYW51 cCgpOwogICAgdm9pZCBpbnRlcm5hbFNldEdlb21ldHJ5KCBpbnQsIGludCwgaW50LCBpbnQsIGJv b2wgKTsKICAgIHZvaWQgcmVwYXJlbnRGb2N1c1dpZGdldHMoIFFXaWRnZXQgKiApOwogICAgUUZv Y3VzRGF0YSAqZm9jdXNEYXRhKCBib29sIGNyZWF0ZSApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5k RnJvbU1vZGUoKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yRGlyZWN0KCBjb25zdCBRQ29s b3IgJiApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFwRGlyZWN0KCBjb25zdCBRUGl4bWFw ICYgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZE1vZGVEaXJlY3QoIEJhY2tncm91bmRNb2RlICk7 CiAgICB2b2lkIHNldEJhY2tncm91bmRFbXB0eSgpOwoKICAgIHZvaWQgc2V0QmFja2dyb3VuZFgx MVJlbGF0aXZlKCk7CgoKICAgIFdJZCB3aW5pZDsKICAgIHVpbnQgd2lkZ2V0X3N0YXRlOwogICAg dWludCB3aWRnZXRfZmxhZ3M7CiAgICB1aW50IHByb3BhZ2F0ZV9mb250IDogMjsKICAgIHVpbnQg cHJvcGFnYXRlX3BhbGV0dGUgOiAyOwogICAgdWludCBmb2N1c19wb2xpY3kgOiA0OwogICAgdWlu dCBvd25fZm9udCA6MTsKICAgIHVpbnQgb3duX3BhbGV0dGUgOjE7CiAgICB1aW50IHNpemVoaW50 X2ZvcmNlZCA6MTsKICAgIHVpbnQgaXNfY2xvc2luZyA6MTsKICAgIHVpbnQgaW5fc2hvdyA6IDE7 CiAgICBRUG9pbnQgZnBvczsKICAgIFFSZWN0IGNyZWN0OwogICAgUUNvbG9yIGJnX2NvbDsKCiAg ICBRUGFsZXR0ZSBwYWw7CgogICAgUUZvbnQgZm50OwoKICAgIFFMYXlvdXQgKmxheV9vdXQ7Cgog ICAgUVdFeHRyYSAqZXh0cmE7CiMgNTkxICJrZXJuZWwvcXdpZGdldC5oIgogICAgc3RhdGljIHZv aWQgY3JlYXRlTWFwcGVyKCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95TWFwcGVyKCk7CiAgICBz dGF0aWMgUVdpZGdldExpc3QgKndMaXN0KCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QgKnRsd0xp c3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TWFwcGVyICptYXBwZXI7CiAgICBmcmllbmQgY2xhc3Mg UUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmll bmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJp ZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CgogICAgZnJp ZW5kIGNsYXNzIFFMYXlvdXQ7CgoKCnByaXZhdGU6CgogICAgUVdpZGdldCggY29uc3QgUVdpZGdl dCAmICk7CiAgICBRV2lkZ2V0ICZvcGVyYXRvcj0oIGNvbnN0IFFXaWRnZXQgJiApOwoKCnB1Ymxp YzoKCiAgICB2b2lkIHNldFBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYsIGJvb2wgaVJlYWxseU1l YW5JdCApOwoKICAgIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiwgYm9vbCBpUmVhbGx5TWVh bkl0ICk7Cn07CgoKaW5saW5lIGJvb2wgUVdpZGdldDo6dGVzdFdTdGF0ZSggdWludCBmICkgY29u c3QKeyByZXR1cm4gKHdpZGdldF9zdGF0ZSAmIGYpICE9IDA7IH0KCmlubGluZSBib29sIFFXaWRn ZXQ6OnRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3QKeyByZXR1cm4gKHdpZGdldF9mbGFncyAm IGYpICE9IDA7IH0KCgppbmxpbmUgV0lkIFFXaWRnZXQ6OndpbklkKCkgY29uc3QKeyByZXR1cm4g d2luaWQ7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVG9wTGV2ZWwoKSBjb25zdAp7IHJldHVy biB0ZXN0V0ZsYWdzKFdUeXBlX1RvcExldmVsKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNN b2RhbCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfTW9kYWwpOyB9CgppbmxpbmUg Ym9vbCBRV2lkZ2V0Ojppc1BvcHVwKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9Q b3B1cCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRGVza3RvcCgpIGNvbnN0CnsgcmV0dXJu IHRlc3RXRmxhZ3MoV1R5cGVfRGVza3RvcCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRW5h YmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0V1N0YXRlKFdTdGF0ZV9EaXNhYmxlZCk7IH0KCmlu bGluZSBjb25zdCBRUmVjdCAmUVdpZGdldDo6Z2VvbWV0cnkoKSBjb25zdAp7IHJldHVybiBjcmVj dDsgfQoKaW5saW5lIGludCBRV2lkZ2V0Ojp4KCkgY29uc3QKeyByZXR1cm4gZnBvcy54KCk7IH0K CmlubGluZSBpbnQgUVdpZGdldDo6eSgpIGNvbnN0CnsgcmV0dXJuIGZwb3MueSgpOyB9Cgppbmxp bmUgUVBvaW50IFFXaWRnZXQ6OnBvcygpIGNvbnN0CnsgcmV0dXJuIGZwb3M7IH0KCmlubGluZSBR U2l6ZSBRV2lkZ2V0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gY3JlY3Quc2l6ZSgpOyB9Cgppbmxp bmUgaW50IFFXaWRnZXQ6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gY3JlY3Qud2lkdGgoKTsgfQoK aW5saW5lIGludCBRV2lkZ2V0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBjcmVjdC5oZWlnaHQo KTsgfQoKaW5saW5lIFFSZWN0IFFXaWRnZXQ6OnJlY3QoKSBjb25zdAp7IHJldHVybiBRUmVjdCgw LDAsY3JlY3Qud2lkdGgoKSxjcmVjdC5oZWlnaHQoKSk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6 bWluaW11bVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUoKS53aWR0aCgpOyB9Cgpp bmxpbmUgaW50IFFXaWRnZXQ6Om1pbmltdW1IZWlnaHQoKSBjb25zdAp7IHJldHVybiBtaW5pbXVt U2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1XaWR0aCgpIGNv bnN0CnsgcmV0dXJuIG1heGltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0 OjptYXhpbXVtSGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNpemUoKS5oZWlnaHQoKTsg fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICZzICkK eyBzZXRNaW5pbXVtU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFX aWRnZXQ6OnNldE1heGltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0TWF4aW11bVNpemUo cy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRTaXplSW5j cmVtZW50KCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0U2l6ZUluY3JlbWVudChzLndpZHRoKCkscy5o ZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEJhc2VTaXplKCBjb25zdCBRU2l6 ZSAmcyApCnsgc2V0QmFzZVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgY29u c3QgUUNvbG9yICZRV2lkZ2V0OjpiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAp7IHJldHVybiBiZ19j b2w7IH0KCgppbmxpbmUgY29uc3QgUVBhbGV0dGUgJlFXaWRnZXQ6OnBhbGV0dGUoKSBjb25zdAp7 IHJldHVybiBwYWw7IH0KCgppbmxpbmUgUUZvbnQgUVdpZGdldDo6Zm9udCgpIGNvbnN0CnsgcmV0 dXJuIGZudDsgfQoKaW5saW5lIFFGb250TWV0cmljcyBRV2lkZ2V0Ojpmb250TWV0cmljcygpIGNv bnN0CnsgcmV0dXJuIFFGb250TWV0cmljcyhmb250KCkpOyB9CgppbmxpbmUgUUZvbnRJbmZvIFFX aWRnZXQ6OmZvbnRJbmZvKCkgY29uc3QKeyByZXR1cm4gUUZvbnRJbmZvKGZvbnQoKSk7IH0KCmlu bGluZSBib29sIFFXaWRnZXQ6Omhhc01vdXNlVHJhY2tpbmcoKSBjb25zdAp7IHJldHVybiB0ZXN0 V1N0YXRlKFdTdGF0ZV9Nb3VzZVRyYWNraW5nKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNG b2N1c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5ICE9 IE5vRm9jdXM7IH0KCmlubGluZSBRV2lkZ2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpmb2N1c1Bv bGljeSgpIGNvbnN0CnsgcmV0dXJuIChGb2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0KCmlubGlu ZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRlc0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdT dGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVzKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6dXBkYXRl KCBjb25zdCBRUmVjdCAmciApCnsgdXBkYXRlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o ZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBhaW50KCAw LCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgVFJVRSApOyB9CgppbmxpbmUgdm9p ZCBRV2lkZ2V0OjpyZXBhaW50KCBib29sIGVyYXNlICkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53 aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6 cmVwYWludCggY29uc3QgUVJlY3QgJnIsIGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIHIueCgpLCBy LnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lk Z2V0OjplcmFzZSgpCnsgZXJhc2UoIDAsIDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgp ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmVyYXNlKCBjb25zdCBRUmVjdCAmciApCnsgZXJh c2UoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSBib29s IFFXaWRnZXQ6OmNsb3NlKCkKeyByZXR1cm4gY2xvc2UoIEZBTFNFICk7IH0KCmlubGluZSBib29s IFFXaWRnZXQ6OmlzVmlzaWJsZSgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX1Zp c2libGUpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc0hpZGRlbigpIGNvbnN0CnsgcmV0dXJu IHRlc3RXU3RhdGUoV1N0YXRlX0ZvcmNlSGlkZSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6Om1v dmUoIGNvbnN0IFFQb2ludCAmcCApCnsgbW92ZSggcC54KCksIHAueSgpICk7IH0KCmlubGluZSB2 b2lkIFFXaWRnZXQ6OnJlc2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHJlc2l6ZSggcy53aWR0aCgp LCBzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0R2VvbWV0cnkoIGNvbnN0 IFFSZWN0ICZyICkKeyBzZXRHZW9tZXRyeSggci5sZWZ0KCksIHIudG9wKCksIHIud2lkdGgoKSwg ci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpkcmF3VGV4dCggY29uc3QgUVBv aW50ICZwLCBjb25zdCBRU3RyaW5nICZzICkKeyBkcmF3VGV4dCggcC54KCksIHAueSgpLCBzICk7 IH0KCmlubGluZSBRV2lkZ2V0ICpRV2lkZ2V0OjpwYXJlbnRXaWRnZXQoKSBjb25zdAp7IHJldHVy biAoUVdpZGdldCAqKVFPYmplY3Q6OnBhcmVudCgpOyB9CgppbmxpbmUgUVdpZGdldE1hcHBlciAq UVdpZGdldDo6d21hcHBlcigpCnsgcmV0dXJuIG1hcHBlcjsgfQoKaW5saW5lIHVpbnQgUVdpZGdl dDo6Z2V0V1N0YXRlKCkgY29uc3QKeyByZXR1cm4gd2lkZ2V0X3N0YXRlOyB9CgppbmxpbmUgdm9p ZCBRV2lkZ2V0OjpzZXRXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0YXRlIHw9IGY7IH0KCmlu bGluZSB2b2lkIFFXaWRnZXQ6OmNsZWFyV1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSAm PSB+ZjsgfQoKaW5saW5lIFF0OjpXRmxhZ3MgUVdpZGdldDo6Z2V0V0ZsYWdzKCkgY29uc3QKeyBy ZXR1cm4gd2lkZ2V0X2ZsYWdzOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXRmxhZ3MoIFdG bGFncyBmICkKeyB3aWRnZXRfZmxhZ3MgfD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xl YXJXRmxhZ3MoIFdGbGFncyBmICkKeyB3aWRnZXRfZmxhZ3MgJj0gfmY7IH0KCmlubGluZSB2b2lk IFFXaWRnZXQ6OmNvbnN0UG9saXNoKCkgY29uc3QKewogICAgaWYgKCAhdGVzdFdTdGF0ZShXU3Rh dGVfUG9saXNoZWQpICkgewogICAgICAgIFFXaWRnZXQqIHRoYXQgPSAoUVdpZGdldCopIHRoaXM7 CiAgICAgICAgdGhhdC0+cG9saXNoKCk7CiAgICAgICAgdGhhdC0+c2V0V1N0YXRlKFdTdGF0ZV9Q b2xpc2hlZCk7CiAgICB9Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93bkN1cnNvcigpIGNvbnN0 CnsKICAgIHJldHVybiB0ZXN0V1N0YXRlKCBXU3RhdGVfT3duQ3Vyc29yICk7Cn0KCmlubGluZSBi b29sIFFXaWRnZXQ6Om93bkZvbnQoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX2ZvbnQ7Cn0KCmlu bGluZSBib29sIFFXaWRnZXQ6Om93blBhbGV0dGUoKSBjb25zdAp7CiAgICByZXR1cm4gb3duX3Bh bGV0dGU7Cn0KCgoKCgoKY2xhc3MgUUZvY3VzRGF0YTsKY2xhc3MgUVdTTWFuYWdlcjsKCgoKCnN0 cnVjdCBRVExXRXh0cmEgewogICAgUVN0cmluZyBjYXB0aW9uOwogICAgUVN0cmluZyBpY29uVGV4 dDsKICAgIFFQaXhtYXAgKmljb247CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGE7CiAgICBRU2l6 ZSBmc2l6ZTsKICAgIHNob3J0IGluY3csIGluY2g7CiAgICB1aW50IGljb25pYzogMTsKICAgIHVp bnQgZnVsbHNjcmVlbiA6IDE7CiAgICB1aW50IHNob3dNb2RlOiAyOwogICAgc2hvcnQgYmFzZXcs IGJhc2VoOwoKICAgIFdJZCBwYXJlbnRXaW5JZDsKICAgIHVpbnQgZW1iZWRkZWQgOiAxOwogICAg dWludCByZXNlcnZlZDogMjsKICAgIHVpbnQgZG5kIDogMTsKICAgIHVpbnQgdXNwb3MgOiAxOwog ICAgdWludCB1c3NpemUgOiAxOwogICAgdm9pZCAqeGljOwojIDg0OCAia2VybmVsL3F3aWRnZXQu aCIKICAgIFFSZWN0IG5vcm1hbEdlb21ldHJ5Owp9OwoKCgoKCgpzdHJ1Y3QgUVdFeHRyYSB7CiAg ICBRX0lOVDE2IG1pbncsIG1pbmg7CiAgICBRX0lOVDE2IG1heHcsIG1heGg7CiAgICBRUGl4bWFw ICpiZ19waXg7CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJzOwoK ICAgIFFUTFdFeHRyYSAqdG9wZXh0cmE7CgoKCgogICAgV0lkIHhEbmRQcm94eTsKCgoKCiAgICBj aGFyIGJnX21vZGU7CgogICAgUVN0eWxlKiBzdHlsZTsKCiAgICBRUmVjdCBtaWNyb19mb2N1c19o aW50OwogICAgUVNpemVQb2xpY3kgc2l6ZV9wb2xpY3k7CiAgICB2b2lkICogcG9zdGVkX2V2ZW50 czsKfTsKIyA0NSAia2VybmVsL3FhYnN0cmFjdGxheW91dC5oIiAyCgoKCgpjbGFzcyBRTWVudUJh cjsKY2xhc3MgUVdpZGdldDsKc3RydWN0IFFMYXlvdXREYXRhOwpjbGFzcyBRTGF5b3V0SXRlbTsK Y2xhc3MgUUxheW91dDsKY2xhc3MgUVNwYWNlckl0ZW07CmNsYXNzIFFEb21FbGVtZW50OwpjbGFz cyBRQ29uZmlndXJlTGF5b3V0RXZlbnQ7CgpjbGFzcyBRR0xheW91dEl0ZXJhdG9yIDogcHVibGlj IFFTaGFyZWQKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5RR0xheW91dEl0ZXJhdG9yKCk7CiAgICB2 aXJ0dWFsIFFMYXlvdXRJdGVtICpuZXh0KCkgPSAwOwogICAgdmlydHVhbCBRTGF5b3V0SXRlbSAq Y3VycmVudCgpID0gMDsKICAgIHZpcnR1YWwgUUxheW91dEl0ZW0gKnRha2VDdXJyZW50KCkgPSAw Owp9OwoKY2xhc3MgUUxheW91dEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUxheW91dEl0ZXJhdG9y KCBRR0xheW91dEl0ZXJhdG9yICppICkgOml0KGkpIHt9CiAgICBRTGF5b3V0SXRlcmF0b3IoIGNv bnN0IFFMYXlvdXRJdGVyYXRvciAmaSApIDppdCggaS5pdCApCiAgICB7IGlmICggaXQgKSBpdC0+ cmVmKCk7IH0KICAgIH5RTGF5b3V0SXRlcmF0b3IoKSB7IGlmICggaXQgJiYgaXQtPmRlcmVmKCkg KSBkZWxldGUgaXQ7IH0KICAgIFFMYXlvdXRJdGVyYXRvciAmb3BlcmF0b3I9KCBjb25zdCBRTGF5 b3V0SXRlcmF0b3IgJmkgKQogICAgewogICAgICAgIGlmICggaS5pdCApIGkuaXQtPnJlZigpOwog ICAgICAgIGlmICggaXQgJiYgaXQtPmRlcmVmKCkgKSBkZWxldGUgaXQ7CiAgICAgICAgaXQgPSBp Lml0OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFFMYXlvdXRJdGVtICpvcGVyYXRv cisrKCkgeyByZXR1cm4gaXQgPyBpdC0+bmV4dCgpIDogMDsgfQogICAgUUxheW91dEl0ZW0gKmN1 cnJlbnQoKSB7IHJldHVybiBpdCA/IGl0LT5jdXJyZW50KCkgOiAwOyB9CiAgICBRTGF5b3V0SXRl bSAqdGFrZUN1cnJlbnQoKSB7IHJldHVybiBpdCA/IGl0LT50YWtlQ3VycmVudCgpIDogMDsgfQog ICAgdm9pZCBkZWxldGVDdXJyZW50KCk7CnByaXZhdGU6CiAgICBRR0xheW91dEl0ZXJhdG9yICpp dDsKfTsKCgpjbGFzcyBRTGF5b3V0SXRlbQp7CnB1YmxpYzoKICAgIFFMYXlvdXRJdGVtKCBpbnQg YWxpZ25tZW50ID0gMCApIDphbGlnbihhbGlnbm1lbnQpIHt9CiAgICB2aXJ0dWFsIH5RTGF5b3V0 SXRlbSgpOwogICAgdmlydHVhbCBRU2l6ZSBzaXplSGludCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1 YWwgUVNpemUgbWluaW11bVNpemUoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIFFTaXplIG1heGlt dW1TaXplKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBRU2l6ZVBvbGljeTo6RXhwYW5kRGF0YSBl eHBhbmRpbmcoKSBjb25zdCA9MDsKICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeSggY29uc3Qg UVJlY3QmICkgPSAwOwogICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeSgpIGNvbnN0ID0gMDsKICAg IHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBib29sIGhhc0hl aWdodEZvcldpZHRoKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBoZWlnaHRGb3JXaWR0aCggaW50 ICkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwoKICAgIHZpcnR1YWwgUVdp ZGdldCAqd2lkZ2V0KCk7CiAgICB2aXJ0dWFsIFFMYXlvdXRJdGVyYXRvciBpdGVyYXRvcigpOwog ICAgdmlydHVhbCBRTGF5b3V0ICpsYXlvdXQoKTsKICAgIHZpcnR1YWwgUVNwYWNlckl0ZW0gKnNw YWNlckl0ZW0oKTsKCiAgICBpbnQgYWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gYWxpZ247IH0K ICAgIHZpcnR1YWwgdm9pZCBzZXRBbGlnbm1lbnQoIGludCBhICk7CnByb3RlY3RlZDoKICAgIGlu dCBhbGlnbjsKfTsKCgpjbGFzcyBRU3BhY2VySXRlbSA6IHB1YmxpYyBRTGF5b3V0SXRlbQp7CiBw dWJsaWM6CiAgICBRU3BhY2VySXRlbSggaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAgIFFT aXplUG9saWN5OjpTaXplVHlwZSBoRGF0YT1RU2l6ZVBvbGljeTo6TWluaW11bSwKICAgICAgICAg ICAgICAgICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgdkRhdGE9IFFTaXplUG9saWN5OjpNaW5pbXVt ICkKICAgICAgICA6d2lkdGgodyksIGhlaWdodChoKSwgc2l6ZVAoaERhdGEsIHZEYXRhICkKICAg ICAgICB7fQogICAgdm9pZCBjaGFuZ2VTaXplKCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAg ICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaERhdGE9UVNpemVQb2xpY3k6Ok1pbmltdW0sCiAgICAg ICAgICAgICAgICBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgdkRhdGE9UVNpemVQb2xpY3k6Ok1pbmlt dW0gKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3QgOwogICAgUVNpemUgbWluaW11bVNpemUo KSBjb25zdCA7CiAgICBRU2l6ZSBtYXhpbXVtU2l6ZSgpIGNvbnN0IDsKICAgIFFTaXplUG9saWN5 OjpFeHBhbmREYXRhIGV4cGFuZGluZygpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7 CiAgICB2b2lkIHNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCYgKTsKICAgIFFSZWN0IGdlb21ldHJ5 KCkgY29uc3Q7CiAgICBRU3BhY2VySXRlbSAqc3BhY2VySXRlbSgpOwpwcml2YXRlOgogICAgaW50 IHdpZHRoLCBoZWlnaHQ7CiAgICBRU2l6ZVBvbGljeSBzaXplUDsKICAgIFFSZWN0IHJlY3Q7Cn07 CgoKY2xhc3MgUVdpZGdldEl0ZW0gOiBwdWJsaWMgUUxheW91dEl0ZW0KewpwdWJsaWM6CiAgICBR V2lkZ2V0SXRlbSggUVdpZGdldCAqdyApIDogd2lkKHcpIHt9CiAgICBRU2l6ZSBzaXplSGludCgp IGNvbnN0IDsKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3QgOwogICAgUVNpemUgbWF4aW11 bVNpemUoKSBjb25zdCA7CiAgICBRU2l6ZVBvbGljeTo6RXhwYW5kRGF0YSBleHBhbmRpbmcoKSBj b25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdm9pZCBzZXRHZW9tZXRyeSggY29u c3QgUVJlY3QmICkgOwogICAgUVJlY3QgZ2VvbWV0cnkoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFX aWRnZXQgKndpZGdldCgpOwoKICAgIGJvb2wgaGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdDsKICAg IGludCBoZWlnaHRGb3JXaWR0aCggaW50ICkgY29uc3Q7CgogICAgY29uc3QgUVNpemUgJndpZGdl dFNpemVIaW50KCkgY29uc3Q7Cgpwcml2YXRlOgoKICAgIFFXaWRnZXQgKndpZDsKfTsKCgpjbGFz cyBRTGF5b3V0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRTGF5b3V0SXRlbQp7CiAgICBwdWJs aWM6IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9i amVjdCgpOyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmpl Y3QqIHN0YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBz dGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZv aWQgaW5pdE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2Jq OwoKCgoKCnB1YmxpYzoKICAgIFFMYXlvdXQoIFFXaWRnZXQgKnBhcmVudCwgaW50IG1hcmdpbj0w LCBpbnQgc3BhY2U9LTEsCiAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lPTAgKTsKICAgIFFM YXlvdXQoIFFMYXlvdXQgKnBhcmVudExheW91dCwgaW50IHNwYWNlPS0xLCBjb25zdCBjaGFyICpu YW1lPTAgKTsKICAgIFFMYXlvdXQoIGludCBzcGFjZT0tMSwgY29uc3QgY2hhciAqbmFtZT0wICk7 CgogICAgflFMYXlvdXQoKTsKCiAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gb3V0c2lk ZUJvcmRlcjsgfQogICAgaW50IHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBpbnNpZGVTcGFjaW5n OyB9CgogICAgdmlydHVhbCB2b2lkIHNldE1hcmdpbiggaW50ICk7CiAgICB2aXJ0dWFsIHZvaWQg c2V0U3BhY2luZyggaW50ICk7CgogICAgZW51bSB7IHVubGltaXRlZCA9IDMyNzY3IH07CgogICAg aW50IGRlZmF1bHRCb3JkZXIoKSBjb25zdCB7IHJldHVybiBpbnNpZGVTcGFjaW5nOyB9CiAgICB2 b2lkIGZyZWV6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIGZyZWV6ZSgpIHsgc2V0UmVzaXpl TW9kZSggRml4ZWQgKTsgfQoKCiAgICBlbnVtIFJlc2l6ZU1vZGUgeyBGcmVlUmVzaXplLCBNaW5p bXVtLCBGaXhlZCB9OwogICAgdm9pZCBzZXRSZXNpemVNb2RlKCBSZXNpemVNb2RlICk7CiAgICBS ZXNpemVNb2RlIHJlc2l6ZU1vZGUoKSBjb25zdDsKCgogICAgdmlydHVhbCB2b2lkIHNldE1lbnVC YXIoIFFNZW51QmFyICp3ICk7CiAgICBRTWVudUJhciAqbWVudUJhcigpIGNvbnN0IHsgcmV0dXJu IG1lbnViYXI7IH0KCgogICAgUVdpZGdldCAqbWFpbldpZGdldCgpOwogICAgYm9vbCBpc1RvcExl dmVsKCkgY29uc3QgeyByZXR1cm4gdG9wTGV2ZWw7IH0KCiAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0 b0FkZCggYm9vbCApOwogICAgYm9vbCBhdXRvQWRkKCkgY29uc3QgeyByZXR1cm4gYXV0b05ld0No aWxkOyB9CgogICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICBRUmVjdCBnZW9tZXRyeSgpIGNvbnN0 OwogICAgYm9vbCBhY3RpdmF0ZSgpOwoKICAgIHZvaWQgYWRkKCBRV2lkZ2V0ICp3ICkgeyBhZGRJ dGVtKCBuZXcgUVdpZGdldEl0ZW0oIHcgKSApOyB9CiAgICB2aXJ0dWFsIHZvaWQgYWRkSXRlbSAo IFFMYXlvdXRJdGVtICogKSA9IDA7CgogICAgUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgZXhwYW5k aW5nKCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZSgpIGNvbnN0OwogICAgUVNpemUgbWF4 aW11bVNpemUoKSBjb25zdDsKICAgIHZvaWQgc2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0JiApPTA7 CiAgICBRTGF5b3V0SXRlcmF0b3IgaXRlcmF0b3IoKT0wOwogICAgYm9vbCBpc0VtcHR5KCkgY29u c3Q7CgogICAgaW50IHRvdGFsSGVpZ2h0Rm9yV2lkdGgoIGludCB3ICkgY29uc3Q7CiAgICBRU2l6 ZSB0b3RhbE1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSB0b3RhbE1heGltdW1TaXplKCkg Y29uc3Q7CiAgICBRU2l6ZSB0b3RhbFNpemVIaW50KCkgY29uc3Q7CiAgICBRTGF5b3V0ICpsYXlv dXQoKTsKCiAgICBib29sIHN1cHBvcnRzTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luSW1w bDsgfQoKICAgIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAgYm9vbCBpc0VuYWJsZWQoKSBj b25zdDsKCnByb3RlY3RlZDoKICAgIGJvb2wgZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50 ICogKTsKICAgIHZvaWQgYWRkQ2hpbGRMYXlvdXQoIFFMYXlvdXQgKmwgKTsKICAgIHZvaWQgZGVs ZXRlQWxsSXRlbXMoKTsKCiAgICB2b2lkIHNldFN1cHBvcnRzTWFyZ2luKCBib29sICk7CiAgICBR UmVjdCBhbGlnbm1lbnRSZWN0KCBjb25zdCBRUmVjdCYgKSBjb25zdDsKcHJpdmF0ZToKICAgIHZv aWQgc2V0V2lkZ2V0TGF5b3V0KCBRV2lkZ2V0ICosIFFMYXlvdXQgKiApOwogICAgdm9pZCBpbml0 KCk7CiAgICBpbnQgaW5zaWRlU3BhY2luZzsKICAgIGludCBvdXRzaWRlQm9yZGVyOwogICAgdWlu dCB0b3BMZXZlbCA6IDE7CiAgICB1aW50IGF1dG9NaW5pbXVtIDogMTsKICAgIHVpbnQgYXV0b05l d0NoaWxkIDogMTsKICAgIHVpbnQgZnJvemVuIDogMTsKICAgIHVpbnQgYWN0aXZhdGVkIDogMTsK ICAgIHVpbnQgbWFyZ2luSW1wbCA6IDE7CiAgICB1aW50IGVuYWJsZWQgOiAxOwogICAgUVJlY3Qg cmVjdDsKICAgIFFMYXlvdXREYXRhICpleHRyYURhdGE7CgogICAgUU1lbnVCYXIgKm1lbnViYXI7 Cgpwcml2YXRlOgoKICAgIFFMYXlvdXQoIGNvbnN0IFFMYXlvdXQgJiApOwogICAgUUxheW91dCAm b3BlcmF0b3I9KCBjb25zdCBRTGF5b3V0ICYgKTsKCgp9OwoKaW5saW5lIHZvaWQgUUxheW91dEl0 ZXJhdG9yOjpkZWxldGVDdXJyZW50KCkKewogICAgZGVsZXRlIHRha2VDdXJyZW50KCk7Cn0KIyAz OSAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKCgojIDEgImtlcm5lbC9xd2lkZ2V0Lmgi IDEKIyA0MiAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyAxICIvdXNyL2xpYi9xdC9p bmNsdWRlL3FtZW51YmFyLmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xbWVudWJhci5o IgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcXBvcHVwbWVudS5oIiAxCiMgNDIgIi91c3IvbGli L3F0L2luY2x1ZGUvcXBvcHVwbWVudS5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWZyYW1l LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZnJhbWUuaCIKIyAxICIvdXNyL2xpYi9x dC9pbmNsdWRlL3F3aWRnZXQuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FmcmFtZS5o IiAyCgoKCgpjbGFzcyBRRnJhbWUgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IFFNZXRh T2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOyB9 IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRp Y01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMgUVN0 cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5pdE1l dGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwojIDYwICIv dXNyL2xpYi9xdC9pbmNsdWRlL3FmcmFtZS5oIgpwdWJsaWM6CiAgICBRRnJhbWUoIFFXaWRnZXQg KnBhcmVudD0wLCBjb25zdCBjaGFyICpuYW1lPTAsIFdGbGFncyBmPTAsCiAgICAgICAgICAgIGJv b2wgPSBUUlVFICk7CgogICAgaW50IGZyYW1lU3R5bGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p ZCBzZXRGcmFtZVN0eWxlKCBpbnQgKTsKCiAgICBpbnQgZnJhbWVXaWR0aCgpIGNvbnN0OwogICAg UVJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7CgoKICAgIGJvb2wgbGluZVNoYXBlc09rKCkgY29u c3QgeyByZXR1cm4gVFJVRTsgfQoKCiAgICBRU2l6ZSBzaXplSGludCgpIGNvbnN0OwogICAgUVNp emVQb2xpY3kgc2l6ZVBvbGljeSgpIGNvbnN0OwoKICAgIGVudW0gU2hhcGUgeyBOb0ZyYW1lID0g MCwKICAgICAgICAgICAgICAgICBCb3ggPSAweDAwMDEsCiAgICAgICAgICAgICAgICAgUGFuZWwg PSAweDAwMDIsCiAgICAgICAgICAgICAgICAgV2luUGFuZWwgPSAweDAwMDMsCiAgICAgICAgICAg ICAgICAgSExpbmUgPSAweDAwMDQsCiAgICAgICAgICAgICAgICAgVkxpbmUgPSAweDAwMDUsCiAg ICAgICAgICAgICAgICAgU3R5bGVkUGFuZWwgPSAweDAwMDYsCiAgICAgICAgICAgICAgICAgUG9w dXBQYW5lbCA9IDB4MDAwNywKICAgICAgICAgICAgICAgICBNU2hhcGUgPSAweDAwMGYKICAgIH07 CiAgICBlbnVtIFNoYWRvdyB7IFBsYWluID0gMHgwMDEwLAogICAgICAgICAgICAgICAgICBSYWlz ZWQgPSAweDAwMjAsCiAgICAgICAgICAgICAgICAgIFN1bmtlbiA9IDB4MDAzMCwKICAgICAgICAg ICAgICAgICAgTVNoYWRvdyA9IDB4MDBmMCB9OwoKICAgIFNoYXBlIGZyYW1lU2hhcGUoKSBjb25z dDsKICAgIHZvaWQgc2V0RnJhbWVTaGFwZSggU2hhcGUgKTsKICAgIFNoYWRvdyBmcmFtZVNoYWRv dygpIGNvbnN0OwogICAgdm9pZCBzZXRGcmFtZVNoYWRvdyggU2hhZG93ICk7CgogICAgaW50IGxp bmVXaWR0aCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldExpbmVXaWR0aCggaW50ICk7Cgog ICAgaW50IG1hcmdpbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1hcmdpbiggaW50ICk7 CgogICAgaW50IG1pZExpbmVXaWR0aCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1pZExp bmVXaWR0aCggaW50ICk7CgogICAgUVJlY3QgZnJhbWVSZWN0KCkgY29uc3Q7CiAgICB2aXJ0dWFs IHZvaWQgc2V0RnJhbWVSZWN0KCBjb25zdCBRUmVjdCAmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lk IHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZvaWQgcmVzaXplRXZlbnQoIFFSZXNp emVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKCBRUGFpbnRlciAqICk7CiAg ICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRlbnRzKCBRUGFpbnRlciAqICk7CiAgICB2aXJ0dWFsIHZv aWQgZnJhbWVDaGFuZ2VkKCk7CiAgICB2b2lkIHVwZGF0ZU1hc2soKTsKICAgIHZpcnR1YWwgdm9p ZCBkcmF3RnJhbWVNYXNrKCBRUGFpbnRlciAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRl bnRzTWFzayggUVBhaW50ZXIgKiApOwoKcHJpdmF0ZToKICAgIHZvaWQgdXBkYXRlRnJhbWVXaWR0 aCgpOwogICAgUVJlY3QgZnJlY3Q7CiAgICBpbnQgZnN0eWxlOwogICAgc2hvcnQgbHdpZHRoOwog ICAgc2hvcnQgbXdpZHRoOwogICAgc2hvcnQgbWx3aWR0aDsKICAgIHNob3J0IGZ3aWR0aDsKCiAg ICB2b2lkICogZDsKcHJpdmF0ZToKCiAgICBRRnJhbWUoIGNvbnN0IFFGcmFtZSAmICk7CiAgICBR RnJhbWUgJm9wZXJhdG9yPSggY29uc3QgUUZyYW1lICYgKTsKCn07CgoKaW5saW5lIGludCBRRnJh bWU6OmZyYW1lU3R5bGUoKSBjb25zdAp7IHJldHVybiBmc3R5bGU7IH0KCmlubGluZSBRRnJhbWU6 OlNoYXBlIFFGcmFtZTo6ZnJhbWVTaGFwZSgpIGNvbnN0CnsgcmV0dXJuIChTaGFwZSkgKCBmc3R5 bGUgJiBNU2hhcGUgKTsgfQoKaW5saW5lIFFGcmFtZTo6U2hhZG93IFFGcmFtZTo6ZnJhbWVTaGFk b3coKSBjb25zdAp7IHJldHVybiAoU2hhZG93KSAoIGZzdHlsZSAmIE1TaGFkb3cgKTsgfQoKaW5s aW5lIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYXBlKCBRRnJhbWU6OlNoYXBlIHMgKQp7IHNldEZy YW1lU3R5bGUoICggZnN0eWxlICYgTVNoYWRvdyApIHwgcyApOyB9CgppbmxpbmUgdm9pZCBRRnJh bWU6OnNldEZyYW1lU2hhZG93KCBRRnJhbWU6OlNoYWRvdyBzICkKeyBzZXRGcmFtZVN0eWxlKCAo IGZzdHlsZSAmIE1TaGFwZSApIHwgcyApOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bGluZVdpZHRo KCkgY29uc3QKeyByZXR1cm4gbHdpZHRoOyB9CgppbmxpbmUgaW50IFFGcmFtZTo6bWlkTGluZVdp ZHRoKCkgY29uc3QKeyByZXR1cm4gbWx3aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6Om1hcmdp bigpIGNvbnN0CnsgcmV0dXJuIG13aWR0aDsgfQoKaW5saW5lIGludCBRRnJhbWU6OmZyYW1lV2lk dGgoKSBjb25zdAp7IHJldHVybiBmd2lkdGg7IH0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x cG9wdXBtZW51LmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FtZW51ZGF0YS5oIiAxCiMg NDIgIi91c3IvbGliL3F0L2luY2x1ZGUvcW1lbnVkYXRhLmgiCiMgMSAiL3Vzci9saWIvcXQvaW5j bHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xbWVudWRhdGEuaCIg MgoKCgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWljb25zZXQuaCIgMQojIDQyICIvdXNyL2xp Yi9xdC9pbmNsdWRlL3FpY29uc2V0LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFw LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiCiMgMSAiL3Vzci9saWIv cXQvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIgMQojIDQzICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fw aXhtYXAuaCIgMgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNvbG9yLmgiIDEKIyA0NCAiL3Vz ci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiIDIKIyAxICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fz dHJpbmcuaCIgMQojIDQ1ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIgMgojIDEgIi91 c3IvbGliL3F0L2luY2x1ZGUvcW5hbWVzcGFjZS5oIiAxCiMgNDYgIi91c3IvbGliL3F0L2luY2x1 ZGUvcXBpeG1hcC5oIiAyCgoKY2xhc3MgUUdmeDsKCgoKCgoKCmNsYXNzIFFQaXhtYXAgOiBwdWJs aWMgUVBhaW50RGV2aWNlLCBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIENvbG9yTW9kZSB7 IEF1dG8sIENvbG9yLCBNb25vIH07CiAgICBlbnVtIE9wdGltaXphdGlvbiB7IERlZmF1bHRPcHRp bSwgTm9PcHRpbSwgTWVtb3J5T3B0aW09Tm9PcHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAg Tm9ybWFsT3B0aW0sIEJlc3RPcHRpbSB9OwoKICAgIFFQaXhtYXAoKTsKICAgIFFQaXhtYXAoIGlu dCB3LCBpbnQgaCwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlvbiA9IERlZmF1bHRPcHRpbSAp OwogICAgUVBpeG1hcCggY29uc3QgUVNpemUgJiwgaW50IGRlcHRoID0gLTEsIE9wdGltaXphdGlv biA9IERlZmF1bHRPcHRpbSApOwogICAgUVBpeG1hcCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUs IGNvbnN0IGNoYXIgKmZvcm1hdD0wLAogICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byAp OwogICAgUVBpeG1hcCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNoYXIgKmZvcm1h dCwKICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzICk7CiAgICBRUGl4bWFwKCBjb25z dCBjaGFyICp4cG1bXSApOwogICAgUVBpeG1hcCggY29uc3QgUUJ5dGVBcnJheSAmZGF0YSApOwog ICAgUVBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CiAgIH5RUGl4bWFwKCk7CgogICAgUVBpeG1h cCAmb3BlcmF0b3I9KCBjb25zdCBRUGl4bWFwICYgKTsKICAgIFFQaXhtYXAgJm9wZXJhdG9yPSgg Y29uc3QgUUltYWdlICYgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwoKICAgIGludCB3aWR0 aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnc7IH0KICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJl dHVybiBkYXRhLT5oOyB9CiAgICBRU2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gUVNpemUoZGF0 YS0+dyxkYXRhLT5oKTsgfQogICAgUVJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIFFSZWN0KDAs MCxkYXRhLT53LGRhdGEtPmgpOyB9CiAgICBpbnQgZGVwdGgoKSBjb25zdCB7IHJldHVybiBkYXRh LT5kOyB9CiAgICBzdGF0aWMgaW50IGRlZmF1bHREZXB0aCgpOwoKICAgIHZvaWQgZmlsbCggY29u c3QgUUNvbG9yICZmaWxsQ29sb3IgPSBRdDo6d2hpdGUgKTsKICAgIHZvaWQgZmlsbCggY29uc3Qg UVdpZGdldCAqLCBpbnQgeG9mcywgaW50IHlvZnMgKTsKICAgIHZvaWQgZmlsbCggY29uc3QgUVdp ZGdldCAqLCBjb25zdCBRUG9pbnQgJm9mcyApOwogICAgdm9pZCByZXNpemUoIGludCB3aWR0aCwg aW50IGhlaWdodCApOwogICAgdm9pZCByZXNpemUoIGNvbnN0IFFTaXplICYgKTsKCiAgICBjb25z dCBRQml0bWFwICptYXNrKCkgY29uc3Q7CiAgICB2b2lkIHNldE1hc2soIGNvbnN0IFFCaXRtYXAg JiApOwogICAgYm9vbCBzZWxmTWFzaygpIGNvbnN0OwogICAgUUJpdG1hcCBjcmVhdGVIZXVyaXN0 aWNNYXNrKCBib29sIGNsaXBUaWdodCA9IFRSVUUgKSBjb25zdDsKCiAgICBzdGF0aWMgUVBpeG1h cCBncmFiV2luZG93KCBXSWQsIGludCB4PTAsIGludCB5PTAsIGludCB3PS0xLCBpbnQgaD0tMSAp OwogICAgc3RhdGljIFFQaXhtYXAgZ3JhYldpZGdldCggUVdpZGdldCAqIHdpZGdldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeD0wLCBpbnQgeT0wLCBpbnQgdz0tMSwgaW50 IGg9LTEgKTsKCgogICAgUVBpeG1hcCB4Rm9ybSggY29uc3QgUVdNYXRyaXggJiApIGNvbnN0Owog ICAgc3RhdGljIFFXTWF0cml4IHRydWVNYXRyaXgoIGNvbnN0IFFXTWF0cml4ICYsIGludCB3LCBp bnQgaCApOwoKCiAgICBRSW1hZ2UgY29udmVydFRvSW1hZ2UoKSBjb25zdDsKICAgIGJvb2wgY29u dmVydEZyb21JbWFnZSggY29uc3QgUUltYWdlICYsIENvbG9yTW9kZSBtb2RlPUF1dG8gKTsKICAg IGJvb2wgY29udmVydEZyb21JbWFnZSggY29uc3QgUUltYWdlICYsIGludCBjb252ZXJzaW9uX2Zs YWdzICk7CgogICAgc3RhdGljIGNvbnN0IGNoYXIqIGltYWdlRm9ybWF0KCBjb25zdCBRU3RyaW5n ICZmaWxlTmFtZSApOwogICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29u c3QgY2hhciAqZm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICBDb2xvck1vZGUgbW9kZT1B dXRvICk7CiAgICBib29sIGxvYWQoIGNvbnN0IFFTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBjaGFy ICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncyApOwog ICAgYm9vbCBsb2FkRnJvbURhdGEoIGNvbnN0IHVjaGFyICpidWYsIHVpbnQgbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQ9MCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ29sb3JNb2RlIG1vZGU9QXV0byApOwogICAgYm9vbCBsb2FkRnJv bURhdGEoIGNvbnN0IHVjaGFyICpidWYsIHVpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKiBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjb252ZXJzaW9uX2ZsYWdzICk7CiAgICBib29sIGxvYWRGcm9tRGF0YSggY29uc3QgUUJ5 dGVBcnJheSAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog Zm9ybWF0PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2Zs YWdzPTAgKTsKICAgIGJvb2wgc2F2ZSggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNo YXIqIGZvcm1hdCApIGNvbnN0OwogICAgYm9vbCBzYXZlKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFt ZSwgY29uc3QgY2hhciogZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgaW50IHF1YWxpdHkg KSBjb25zdDsKCgoKCgogICAgaW50IHNlcmlhbE51bWJlcigpIGNvbnN0OwoKICAgIE9wdGltaXph dGlvbiBvcHRpbWl6YXRpb24oKSBjb25zdDsKICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uKCBPcHRp bWl6YXRpb24gKTsKICAgIHN0YXRpYyBPcHRpbWl6YXRpb24gZGVmYXVsdE9wdGltaXphdGlvbigp OwogICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdE9wdGltaXphdGlvbiggT3B0aW1pemF0aW9uICk7 CgogICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwoKICAgIGJvb2wgaXNRQml0bWFwKCkgY29uc3Q7 CiMgMTY2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKcHJvdGVjdGVkOgogICAgUVBp eG1hcCggaW50IHcsIGludCBoLCBjb25zdCB1Y2hhciAqZGF0YSwgYm9vbCBpc1hiaXRtYXAgKTsK ICAgIGludCBtZXRyaWMoIGludCApIGNvbnN0OwojIDE3NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9x cGl4bWFwLmgiCiAgICBzdHJ1Y3QgUVBpeG1hcERhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAg ICAgUUNPT1JEIHcsIGg7CiAgICAgICAgc2hvcnQgZDsKICAgICAgICB1aW50IHVuaW5pdCA6IDE7 CiAgICAgICAgdWludCBiaXRtYXAgOiAxOwogICAgICAgIHVpbnQgc2VsZm1hc2sgOiAxOwoKCgog ICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUJpdG1hcCAqbWFzazsKIyAxOTYgIi91c3IvbGli L3F0L2luY2x1ZGUvcXBpeG1hcC5oIgogICAgICAgIHZvaWQgKnhpbWFnZTsKICAgICAgICB2b2lk ICptYXNrZ2M7CiMgMjA2ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKICAgICAgICBP cHRpbWl6YXRpb24gb3B0aW07CiAgICB9ICpkYXRhOwoKcHJpdmF0ZToKICAgIFFQaXhtYXAoIGlu dCB3LCBpbnQgaCwgaW50IGRlcHRoLCBib29sLCBPcHRpbWl6YXRpb24gKTsKICAgIHZvaWQgaW5p dCggaW50LCBpbnQsIGludCwgYm9vbCwgT3B0aW1pemF0aW9uICk7CiAgICB2b2lkIGRlcmVmKCk7 CiAgICBRUGl4bWFwIGNvcHkoIGJvb2wgaWdub3JlTWFzayA9IEZBTFNFICkgY29uc3Q7CiAgICBz dGF0aWMgT3B0aW1pemF0aW9uIGRlZk9wdGltOwogICAgZnJpZW5kIHZvaWQgYml0Qmx0KCBRUGFp bnREZXZpY2UgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFFQYWludERldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs IGludCwgaW50LCBpbnQsIFJhc3Rlck9wLCBib29sICk7CiAgICBmcmllbmQgdm9pZCBiaXRCbHQo IFFQYWludERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUUltYWdlKiBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCwgaW50LCBpbnQsIGludCwgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKICAgIGZyaWVuZCBjbGFz cyBRQml0bWFwOwogICAgZnJpZW5kIGNsYXNzIFFQYWludERldmljZTsKICAgIGZyaWVuZCBjbGFz cyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRUGl4bWFwOjppc051bGwoKSBjb25zdAp7CiAg ICByZXR1cm4gZGF0YS0+dyA9PSAwOwp9CgppbmxpbmUgdm9pZCBRUGl4bWFwOjpmaWxsKCBjb25z dCBRV2lkZ2V0ICp3LCBjb25zdCBRUG9pbnQgJm9mcyApCnsKICAgIGZpbGwoIHcsIG9mcy54KCks IG9mcy55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBpeG1hcDo6cmVzaXplKCBjb25zdCBRU2l6ZSAm cyApCnsKICAgIHJlc2l6ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpICk7Cn0KCmlubGluZSBjb25z dCBRQml0bWFwICpRUGl4bWFwOjptYXNrKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPm1hc2s7 Cn0KCmlubGluZSBib29sIFFQaXhtYXA6OnNlbGZNYXNrKCkgY29uc3QKewogICAgcmV0dXJuIGRh dGEtPnNlbGZtYXNrOwp9CiMgMjU5ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FwaXhtYXAuaCIKaW5s aW5lIGludCBRUGl4bWFwOjpzZXJpYWxOdW1iZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+ c2VyX25vOwp9CgppbmxpbmUgUVBpeG1hcDo6T3B0aW1pemF0aW9uIFFQaXhtYXA6Om9wdGltaXph dGlvbigpIGNvbnN0CnsKICAgIHJldHVybiBkYXRhLT5vcHRpbTsKfQoKaW5saW5lIGJvb2wgUVBp eG1hcDo6aXNRQml0bWFwKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGEtPmJpdG1hcDsKfQojIDI4 NyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xcGl4bWFwLmgiCiAgICAgICAgIFFEYXRhU3RyZWFtICZv cGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGl4bWFwICYgKTsKICAgICAgICAgUURh dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFQaXhtYXAgJiApOwojIDQzICIv dXNyL2xpYi9xdC9pbmNsdWRlL3FpY29uc2V0LmgiIDIKCgoKc3RydWN0IFFJY29uU2V0UHJpdmF0 ZTsKCgpjbGFzcyBRSWNvblNldAp7CnB1YmxpYzoKICAgIGVudW0gU2l6ZSB7IEF1dG9tYXRpYywg U21hbGwsIExhcmdlIH07CgogICAgZW51bSBNb2RlIHsgTm9ybWFsLCBEaXNhYmxlZCwgQWN0aXZl IH07CgogICAgUUljb25TZXQoKTsKICAgIFFJY29uU2V0KCBjb25zdCBRUGl4bWFwICYsIFNpemUg PSBBdXRvbWF0aWMgKTsKICAgIFFJY29uU2V0KCBjb25zdCBRUGl4bWFwICZzbWFsbFBpeCwgY29u c3QgUVBpeG1hcCAmbGFyZ2VQaXggKTsKICAgIFFJY29uU2V0KCBjb25zdCBRSWNvblNldCAmICk7 CiAgICB2aXJ0dWFsIH5RSWNvblNldCgpOwoKICAgIHZvaWQgcmVzZXQoIGNvbnN0IFFQaXhtYXAg JiwgU2l6ZSApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiwg U2l6ZSwgTW9kZSA9IE5vcm1hbCApOwogICAgdmlydHVhbCB2b2lkIHNldFBpeG1hcCggY29uc3Qg UVN0cmluZyAmLCBTaXplLCBNb2RlID0gTm9ybWFsICk7CiAgICBRUGl4bWFwIHBpeG1hcCggU2l6 ZSwgTW9kZSApIGNvbnN0OwogICAgUVBpeG1hcCBwaXhtYXAoIFNpemUgcywgYm9vbCBlbmFibGVk ICkgY29uc3Q7CiAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0OwogICAgYm9vbCBpc0dlbmVyYXRl ZCggU2l6ZSwgTW9kZSApIGNvbnN0OwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAgdm9p ZCBkZXRhY2goKTsKCiAgICBRSWNvblNldCAmb3BlcmF0b3I9KCBjb25zdCBRSWNvblNldCAmICk7 Cgpwcml2YXRlOgogICAgUUljb25TZXRQcml2YXRlICogZDsKfTsKIyA0NyAiL3Vzci9saWIvcXQv aW5jbHVkZS9xbWVudWRhdGEuaCIgMgoKCgoKCmNsYXNzIFFQb3B1cE1lbnU7CmNsYXNzIFFNZW51 RGF0YURhdGE7CmNsYXNzIFFPYmplY3Q7CiMgMTIyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3FtZW51 ZGF0YS5oIgpjbGFzcyBRTWVudUl0ZW07CmNsYXNzIFFNZW51SXRlbUxpc3Q7CmNsYXNzIFFQaXht YXA7CgoKCgoKY2xhc3MgUUN1c3RvbU1lbnVJdGVtIDogcHVibGljIFF0CnsKcHVibGljOgogICAg UUN1c3RvbU1lbnVJdGVtKCk7CiAgICB2aXJ0dWFsIH5RQ3VzdG9tTWVudUl0ZW0oKTsKICAgIHZp cnR1YWwgYm9vbCBmdWxsU3BhbigpIGNvbnN0OwogICAgdmlydHVhbCBib29sIGlzU2VwYXJhdG9y KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQmIGZvbnQgKTsK ICAgIHZpcnR1YWwgdm9pZCBwYWludCggUVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvckdyb3VwJiBj ZywgYm9vbCBhY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlZCwgaW50IHgs IGludCB5LCBpbnQgdywgaW50IGggKSA9IDA7CiAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkg PSAwOwp9OwoKCmNsYXNzIFFNZW51RGF0YQp7CmZyaWVuZCBjbGFzcyBRTWVudUJhcjsKZnJpZW5k IGNsYXNzIFFQb3B1cE1lbnU7CnB1YmxpYzoKICAgIFFNZW51RGF0YSgpOwogICAgdmlydHVhbCB+ UU1lbnVEYXRhKCk7CgogICAgdWludCBjb3VudCgpIGNvbnN0OwoKCiAgICBpbnQgaW5zZXJ0SXRl bSggY29uc3QgUVN0cmluZyAmdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyKiBtZW1iZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgYWNjZWwgPSAwLCBpbnQgaWQgPSAtMSwgaW50IGluZGV4ID0gLTEgKTsK ICAgIGludCBpbnNlcnRJdGVtKCBjb25zdCBRSWNvblNldCYgaWNvbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciogbWVtYmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGFjY2VsID0gMCwgaW50IGlkID0gLTEsIGludCBpbmRl eCA9IC0xICk7CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNo YXIqIG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhY2NlbCA9IDAsIGlu dCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJ Y29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAm cGl4bWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2 ZXIsIGNvbnN0IGNoYXIqIG1lbWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBh Y2NlbCA9IDAsIGludCBpZCA9IC0xLCBpbnQgaW5kZXggPSAtMSApOwoKCgoKICAgIGludCBpbnNl cnRJdGVtKCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwog ICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmdGV4dCwgaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEg KTsKCiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVN0cmluZyAmdGV4dCwgUVBvcHVwTWVudSAq cG9wdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9LTEsIGludCBpbmRleD0t MSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmdGV4dCwgUVBvcHVwTWVudSAqcG9wdXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQ9LTEsIGludCBpbmRleD0tMSApOwoK CiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaWQ9LTEsIGlu dCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0JiBpY29uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAmcGl4bWFwLCBpbnQgaWQ9 LTEsIGludCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFQaXhtYXAgJnBp eG1hcCwgUVBvcHVwTWVudSAqcG9wdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg aWQ9LTEsIGludCBpbmRleD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIGNvbnN0IFFJY29uU2V0 JiBpY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVBpeG1hcCAmcGl4bWFw LCBRUG9wdXBNZW51ICpwb3B1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZD0t MSwgaW50IGluZGV4PS0xICk7CgogICAgaW50IGluc2VydEl0ZW0oIFFXaWRnZXQqIHdpZGdldCwg aW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICBpbnQgaW5zZXJ0SXRlbSggY29uc3QgUUlj b25TZXQmIGljb24sIFFDdXN0b21NZW51SXRlbSogY3VzdG9tLCBpbnQgaWQ9LTEsIGludCBpbmRl eD0tMSApOwogICAgaW50IGluc2VydEl0ZW0oIFFDdXN0b21NZW51SXRlbSogY3VzdG9tLCBpbnQg aWQ9LTEsIGludCBpbmRleD0tMSApOwoKCiAgICBpbnQgaW5zZXJ0U2VwYXJhdG9yKCBpbnQgaW5k ZXg9LTEgKTsKCiAgICB2b2lkIHJlbW92ZUl0ZW0oIGludCBpZCApIHsgcmVtb3ZlSXRlbUF0KGlu ZGV4T2YoaWQpKTsgfQogICAgdm9pZCByZW1vdmVJdGVtQXQoIGludCBpbmRleCApOwogICAgdm9p ZCBjbGVhcigpOwoKICAgIGludCBhY2NlbCggaW50IGlkICkgY29uc3Q7CiAgICB2b2lkIHNldEFj Y2VsKCBpbnQga2V5LCBpbnQgaWQgKTsKCiAgICBRSWNvblNldCAqaWNvblNldCggaW50IGlkICkg Y29uc3Q7CiAgICBRU3RyaW5nIHRleHQoIGludCBpZCApIGNvbnN0OwogICAgUVBpeG1hcCAqcGl4 bWFwKCBpbnQgaWQgKSBjb25zdDsKCiAgICB2b2lkIHNldFdoYXRzVGhpcyggaW50IGlkLCBjb25z dCBRU3RyaW5nJiApOwogICAgUVN0cmluZyB3aGF0c1RoaXMoIGludCBpZCApIGNvbnN0OwoKCiAg ICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUVN0cmluZyAmdGV4dCApOwogICAgdm9p ZCBjaGFuZ2VJdGVtKCBpbnQgaWQsIGNvbnN0IFFQaXhtYXAgJnBpeG1hcCApOwogICAgdm9pZCBj aGFuZ2VJdGVtKCBpbnQgaWQsIGNvbnN0IFFJY29uU2V0ICZpY29uLCBjb25zdCBRU3RyaW5nICZ0 ZXh0ICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGludCBpZCwgY29uc3QgUUljb25TZXQgJmljb24s IGNvbnN0IFFQaXhtYXAgJnBpeG1hcCApOwoKICAgIHZvaWQgY2hhbmdlSXRlbSggY29uc3QgUVN0 cmluZyAmdGV4dCwgaW50IGlkICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGNvbnN0IFFQaXhtYXAg JnBpeG1hcCwgaW50IGlkICk7CiAgICB2b2lkIGNoYW5nZUl0ZW0oIGNvbnN0IFFJY29uU2V0ICZp Y29uLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgaWQgKTsKCgogICAgYm9vbCBpc0l0ZW1FbmFi bGVkKCBpbnQgaWQgKSBjb25zdDsKICAgIHZvaWQgc2V0SXRlbUVuYWJsZWQoIGludCBpZCwgYm9v bCBlbmFibGUgKTsKCiAgICBib29sIGlzSXRlbUNoZWNrZWQoIGludCBpZCApIGNvbnN0OwogICAg dm9pZCBzZXRJdGVtQ2hlY2tlZCggaW50IGlkLCBib29sIGNoZWNrICk7CgogICAgdmlydHVhbCB2 b2lkIHVwZGF0ZUl0ZW0oIGludCBpZCApOwoKICAgIGludCBpbmRleE9mKCBpbnQgaWQgKSBjb25z dDsKICAgIGludCBpZEF0KCBpbnQgaW5kZXggKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRJ ZCggaW50IGluZGV4LCBpbnQgaWQgKTsKCiAgICBib29sIGNvbm5lY3RJdGVtKCBpbnQgaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0 IGNoYXIqIG1lbWJlciApOwogICAgYm9vbCBkaXNjb25uZWN0SXRlbSggaW50IGlkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBj aGFyKiBtZW1iZXIgKTsKCiAgICBib29sIHNldEl0ZW1QYXJhbWV0ZXIoIGludCBpZCwgaW50IHBh cmFtICk7CiAgICBpbnQgaXRlbVBhcmFtZXRlciggaW50IGlkICkgY29uc3Q7CgogICAgUU1lbnVJ dGVtICpmaW5kSXRlbSggaW50IGlkICkgY29uc3Q7CiAgICBRTWVudUl0ZW0gKmZpbmRJdGVtKCBp bnQgaWQsIFFNZW51RGF0YSAqKiBwYXJlbnQgKSBjb25zdDsKCiAgICB2b2lkIGFjdGl2YXRlSXRl bUF0KCBpbnQgaW5kZXggKTsKCnByb3RlY3RlZDoKICAgIGludCBhY3RJdGVtOwogICAgUU1lbnVJ dGVtTGlzdCAqbWl0ZW1zOwogICAgUU1lbnVEYXRhICpwYXJlbnRNZW51OwogICAgdWludCBpc1Bv cHVwTWVudSA6IDE7CiAgICB1aW50IGlzTWVudUJhciA6IDE7CiAgICB1aW50IGJhZFNpemUgOiAx OwogICAgdWludCBtb3VzZUJ0RG4gOiAxOwogICAgdWludCBhdm9pZF9jaXJjdWxhcml0eSA6IDE7 CiAgICB1aW50IGFjdEl0ZW1Eb3duIDogMTsKICAgIHZpcnR1YWwgdm9pZCBtZW51Q29udGVudHND aGFuZ2VkKCk7CiAgICB2aXJ0dWFsIHZvaWQgbWVudVN0YXRlQ2hhbmdlZCgpOwogICAgdmlydHVh bCB2b2lkIG1lbnVJbnNQb3B1cCggUVBvcHVwTWVudSAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbWVu dURlbFBvcHVwKCBRUG9wdXBNZW51ICogKTsKCiAgICBRTWVudUl0ZW0gKiBmaW5kUG9wdXAoIFFQ b3B1cE1lbnUgKiwgaW50ICppbmRleCA9IDAgKTsKCnByaXZhdGU6CiAgICBpbnQgaW5zZXJ0QW55 KCBjb25zdCBRU3RyaW5nICosIGNvbnN0IFFQaXhtYXAgKiwgUVBvcHVwTWVudSAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBRSWNvblNldCosIGludCwgaW50LCBRV2lkZ2V0KiA9 IDAsIFFDdXN0b21NZW51SXRlbSogPSAwKTsKICAgIHZvaWQgcmVtb3ZlUG9wdXAoIFFQb3B1cE1l bnUgKiApOwogICAgdmlydHVhbCB2b2lkIHNldEFsbERpcnR5KCBib29sICk7CiAgICB2b2lkIGNo YW5nZUl0ZW1JY29uU2V0KCBpbnQgaWQsIGNvbnN0IFFJY29uU2V0ICZpY29uICk7CgogICAgUU1l bnVEYXRhRGF0YSAqZDsKCnByaXZhdGU6CgogICAgUU1lbnVEYXRhKCBjb25zdCBRTWVudURhdGEg JiApOwogICAgUU1lbnVEYXRhICZvcGVyYXRvcj0oIGNvbnN0IFFNZW51RGF0YSAmICk7Cgp9Owoj IDQ0ICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fwb3B1cG1lbnUuaCIgMgoKCgoKCmNsYXNzIFFQb3B1 cE1lbnUgOiBwdWJsaWMgUUZyYW1lLCBwdWJsaWMgUU1lbnVEYXRhCnsKICAgIHB1YmxpYzogUU1l dGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7 IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0YXRpYyBRTWV0YU9iamVjdCogc3Rh dGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihjb25zdCBjaGFyKik7IHN0YXRpYyBR U3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7IHByb3RlY3RlZDogdm9pZCBpbml0 TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CgpwdWJs aWM6CiAgICBRUG9wdXBNZW51KCBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0w ICk7CiAgIH5RUG9wdXBNZW51KCk7CgogICAgdm9pZCBwb3B1cCggY29uc3QgUVBvaW50ICYgcG9z LCBpbnQgaW5kZXhBdFBvaW50ID0gMCApOwogICAgdm9pZCB1cGRhdGVJdGVtKCBpbnQgaWQgKTsK CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2thYmxlKCBib29sICk7CiAgICBib29sIGlzQ2hlY2th YmxlKCkgY29uc3Q7CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9udCAmICk7CiAgICB2b2lk IHNob3coKTsKICAgIHZvaWQgaGlkZSgpOwoKICAgIGludCBleGVjKCk7CiAgICBpbnQgZXhlYygg Y29uc3QgUVBvaW50ICYgcG9zLCBpbnQgaW5kZXhBdFBvaW50ID0gMCApOwoKICAgIHZpcnR1YWwg dm9pZCBzZXRBY3RpdmVJdGVtKCBpbnQgKTsKICAgIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Cgog ICAgaW50IGlkQXQoIGludCBpbmRleCApIGNvbnN0IHsgcmV0dXJuIFFNZW51RGF0YTo6aWRBdCgg aW5kZXggKTsgfQogICAgaW50IGlkQXQoIGNvbnN0IFFQb2ludCYgcG9zICkgY29uc3Q7CgogICAg Ym9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsKCiAgICBpbnQgaW5zZXJ0VGVhck9mZkhhbmRs ZSggaW50IGlkPS0xLCBpbnQgaW5kZXg9LTEgKTsKCiAgICB2b2lkIGFjdGl2YXRlSXRlbUF0KCBp bnQgaW5kZXggKTsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGFjdGl2YXRlZCggaW50IGl0ZW1JZCAp OwogICAgdm9pZCBoaWdobGlnaHRlZCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBhY3RpdmF0ZWRS ZWRpcmVjdCggaW50IGl0ZW1JZCApOwogICAgdm9pZCBoaWdobGlnaHRlZFJlZGlyZWN0KCBpbnQg aXRlbUlkICk7CiAgICB2b2lkIGFib3V0VG9TaG93KCk7CiAgICB2b2lkIGFib3V0VG9IaWRlKCk7 Cgpwcm90ZWN0ZWQ6CiAgICBpbnQgaXRlbUhlaWdodCggaW50ICkgY29uc3Q7CiAgICBpbnQgaXRl bUhlaWdodCggUU1lbnVJdGVtKiBtaSApIGNvbnN0OwogICAgdm9pZCBkcmF3SXRlbSggUVBhaW50 ZXIqIHAsIGludCB0YWIsIFFNZW51SXRlbSogbWksCiAgICAgICAgICAgICAgICAgICBib29sIGFj dCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAgIHZvaWQgZHJhd0NvbnRlbnRzKCBR UGFpbnRlciAqICk7CgogICAgdm9pZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqZSApOwogICAg dm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVu dCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZl bnQgKiApOwogICAgdm9pZCBtb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdm9p ZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdm9pZCBmb2N1c0luRXZlbnQoIFFG b2N1c0V2ZW50ICogKTsKICAgIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQgKiApOwog ICAgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2b2lkIHN0eWxlQ2hhbmdl KCBRU3R5bGUmICk7CiAgICBpbnQgY29sdW1ucygpIGNvbnN0OwoKICAgIGJvb2wgZm9jdXNOZXh0 UHJldkNoaWxkKCBib29sIG5leHQgKTsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQo IGludCBpdGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAg ICB2b2lkIGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJv eWVkKCk7CgogICAgdm9pZCBtb2RhbEFjdGl2YXRpb24oIGludCApOwoKICAgIHZvaWQgc3ViTWVu dVRpbWVyKCk7CiAgICB2b2lkIGFsbG93QW5pbWF0aW9uKCk7CiAgICB2b2lkIHRvZ2dsZVRlYXJP ZmYoKTsKCnByaXZhdGU6CiAgICB2b2lkIG1lbnVDb250ZW50c0NoYW5nZWQoKTsKICAgIHZvaWQg bWVudVN0YXRlQ2hhbmdlZCgpOwogICAgdm9pZCBtZW51SW5zUG9wdXAoIFFQb3B1cE1lbnUgKiAp OwogICAgdm9pZCBtZW51RGVsUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAgdm9pZCBmcmFtZUNo YW5nZWQoKTsKCiAgICB2b2lkIGFjdFNpZyggaW50LCBib29sID0gRkFMU0UgKTsKICAgIHZvaWQg aGlsaXRTaWcoIGludCApOwogICAgdmlydHVhbCB2b2lkIHNldEZpcnN0SXRlbUFjdGl2ZSgpOwog ICAgdm9pZCBoaWRlQWxsUG9wdXBzKCk7CiAgICB2b2lkIGhpZGVQb3B1cHMoKTsKICAgIGJvb2wg dHJ5TWVudUJhciggUU1vdXNlRXZlbnQgKiApOwogICAgdm9pZCBieWVNZW51QmFyKCk7CgogICAg aW50IGl0ZW1BdFBvcyggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFSZWN0IGl0ZW1HZW9t ZXRyeSggaW50IGluZGV4ICk7CiAgICB2b2lkIHVwZGF0ZVNpemUoKTsKICAgIHZvaWQgdXBkYXRl Um93KCBpbnQgcm93ICk7CgogICAgdm9pZCB1cGRhdGVBY2NlbCggUVdpZGdldCAqICk7CiAgICB2 b2lkIGVuYWJsZUFjY2VsKCBib29sICk7CgogICAgUU1lbnVJdGVtICpzZWxmSXRlbTsKCiAgICBR QWNjZWwgKmF1dG9hY2NlbDsKCiAgICBpbnQgcG9wdXBBY3RpdmU7CiAgICBpbnQgdGFiOwogICAg dWludCBhY2NlbERpc2FibGVkIDogMTsKICAgIHVpbnQgY2hlY2thYmxlIDogMTsKICAgIHVpbnQg Y29ubmVjdE1vZGFsUmVjdXJzaW9uU2FmZXR5IDogMTsKICAgIHVpbnQgdG9ybk9mZiA6IDE7CiAg ICBpbnQgbWF4UE1XaWR0aDsKICAgIGludCBuY29sczsKICAgIGJvb2wgc25hcFRvTW91c2U7CiAg ICBib29sIHRyeU1vdXNlRXZlbnQoIFFQb3B1cE1lbnUgKiwgUU1vdXNlRXZlbnQgKiApOwoKICAg IGZyaWVuZCBjbGFzcyBRTWVudURhdGE7CiAgICBmcmllbmQgY2xhc3MgUU1lbnVCYXI7CgogICAg dm9pZCBjb25uZWN0TW9kYWwoUVBvcHVwTWVudSogcmVjZWl2ZXIsIGJvb2wgZG9Db25uZWN0KTsK CnByaXZhdGU6CgogICAgUVBvcHVwTWVudSggY29uc3QgUVBvcHVwTWVudSAmICk7CiAgICBRUG9w dXBNZW51ICZvcGVyYXRvcj0oIGNvbnN0IFFQb3B1cE1lbnUgJiApOwoKfTsKIyA0MyAiL3Vzci9s aWIvcXQvaW5jbHVkZS9xbWVudWJhci5oIiAyCgoKCgpjbGFzcyBRTWVudUJhciA6IHB1YmxpYyBR RnJhbWUsIHB1YmxpYyBRTWVudURhdGEKewogICAgcHVibGljOiBRTWV0YU9iamVjdCAqbWV0YU9i amVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSBjb25zdCBjaGFyICpj bGFzc05hbWUoKSBjb25zdDsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7 IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3Qg Y2hhciosIGNvbnN0IGNoYXIqKTsgcHJvdGVjdGVkOiB2b2lkIGluaXRNZXRhT2JqZWN0KCk7IHBy aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKCgoKCnB1YmxpYzoKICAgIFFNZW51 QmFyKCBRV2lkZ2V0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0wICk7CiAgIH5RTWVudUJh cigpOwoKICAgIHZvaWQgdXBkYXRlSXRlbSggaW50IGlkICk7CgogICAgdm9pZCBzaG93KCk7CiAg ICB2b2lkIGhpZGUoKTsKCiAgICBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICosIFFFdmVudCAq ICk7CgogICAgaW50IGhlaWdodEZvcldpZHRoKGludCkgY29uc3Q7CgogICAgZW51bSBTZXBhcmF0 b3IgeyBOZXZlcj0wLCBJbldpbmRvd3NTdHlsZT0xIH07CiAgICBTZXBhcmF0b3Igc2VwYXJhdG9y KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2VwYXJhdG9yKCBTZXBhcmF0b3Igd2hlbiAp OwoKICAgIHZvaWQgc2V0RGVmYXVsdFVwKCBib29sICk7CiAgICBib29sIGlzRGVmYXVsdFVwKCkg Y29uc3Q7CgogICAgYm9vbCBjdXN0b21XaGF0c1RoaXMoKSBjb25zdDsKCiAgICBRU2l6ZSBzaXpl SGludCgpIGNvbnN0OwogICAgUVNpemUgbWluaW11bVNpemUoKSBjb25zdDsKICAgIFFTaXplIG1p bmltdW1TaXplSGludCgpIGNvbnN0OwoKICAgIHZvaWQgYWN0aXZhdGVJdGVtQXQoIGludCBpbmRl eCApOwoKcHJvdGVjdGVkOgogICAgdm9pZCBhY3RpdmF0ZWQoIGludCBpdGVtSWQgKTsKICAgIHZv aWQgaGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhd0Nv bnRlbnRzKCBRUGFpbnRlciAqICk7CiAgICB2b2lkIGZvbnRDaGFuZ2UoIGNvbnN0IFFGb250ICYg KTsKICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1v dXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50 KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkIGtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7 CiAgICB2b2lkIGZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKiApOwogICAgdm9pZCBmb2N1c091 dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZl bnQgKiApOwogICAgdm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdm9pZCBtZW51Q29u dGVudHNDaGFuZ2VkKCk7CiAgICB2b2lkIG1lbnVTdGF0ZUNoYW5nZWQoKTsKICAgIHZvaWQgc3R5 bGVDaGFuZ2UoIFFTdHlsZSYgKTsKCnByaXZhdGUgOgogICAgdm9pZCBzdWJBY3RpdmF0ZWQoIGlu dCBpdGVtSWQgKTsKICAgIHZvaWQgc3ViSGlnaGxpZ2h0ZWQoIGludCBpdGVtSWQgKTsKCiAgICB2 b2lkIGFjY2VsQWN0aXZhdGVkKCBpbnQgaXRlbUlkICk7CiAgICB2b2lkIGFjY2VsRGVzdHJveWVk KCk7Cgpwcml2YXRlOgogICAgdm9pZCBtZW51SW5zUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAg dm9pZCBtZW51RGVsUG9wdXAoIFFQb3B1cE1lbnUgKiApOwogICAgdm9pZCBmcmFtZUNoYW5nZWQo KTsKCiAgICBib29sIHRyeU1vdXNlRXZlbnQoIFFQb3B1cE1lbnUgKiwgUU1vdXNlRXZlbnQgKiAp OwogICAgdm9pZCB0cnlLZXlFdmVudCggUVBvcHVwTWVudSAqLCBRS2V5RXZlbnQgKiApOwogICAg dm9pZCBnb29kYnllKCBib29sIGNhbmNlbGxlZCA9IEZBTFNFICk7CiAgICB2b2lkIG9wZW5BY3RQ b3B1cCgpOwogICAgdm9pZCBoaWRlUG9wdXBzKCk7CgogICAgdmlydHVhbCB2b2lkIHNldEFjdEl0 ZW0oIGludCwgYm9vbCA9IEZBTFNFICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93c0FsdE1v ZGUoIGJvb2wsIGludCA9IDAgKTsKCiAgICB2b2lkIHNldEFjdGl2ZUl0ZW0oIGludCBpbmRleCwg Ym9vbCBzaG93ID0gVFJVRSwgYm9vbCBhY3RpdmF0ZV9maXJzdF9pdGVtID0gVFJVRSApOwogICAg dm9pZCBzZXRBbHRNb2RlKCBib29sICk7CgogICAgaW50IGNhbGN1bGF0ZVJlY3RzKCBpbnQgbWF4 X3dpZHRoID0gLTEgKTsKICAgIGludCBpdGVtQXRQb3MoIGNvbnN0IFFQb2ludCAmICk7CiAgICBR UmVjdCBpdGVtUmVjdCggaW50IGl0ZW0gKTsKCgogICAgdm9pZCBzZXR1cEFjY2VsZXJhdG9ycygp OwogICAgUUFjY2VsICphdXRvYWNjZWw7CgogICAgUVJlY3QgKmlyZWN0czsKICAgIGludCByaWdo dFNpZGU7CgogICAgdWludCBtc2VwYXJhdG9yIDogMTsKICAgIHVpbnQgd2FpdGZvcmFsdCA6IDE7 CiAgICB1aW50IHBvcHVwdmlzaWJsZSA6IDE7CiAgICB1aW50IGhhc21vdXNlIDogMTsKICAgIHVp bnQgZGVmYXVsdHVwIDogMTsKICAgIHVpbnQgdG9nZ2xlY2xvc2UgOiAxOwoKICAgIGZyaWVuZCBj bGFzcyBRUG9wdXBNZW51OwoKcHJpdmF0ZToKCiAgICBRTWVudUJhciggY29uc3QgUU1lbnVCYXIg JiApOwogICAgUU1lbnVCYXIgJm9wZXJhdG9yPSggY29uc3QgUU1lbnVCYXIgJiApOwoKfTsKIyA0 MyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyAxICJrZXJuZWwvcWFwcGxpY2F0aW9u LmgiIDEKIyA0MiAia2VybmVsL3FhcHBsaWNhdGlvbi5oIgojIDEgImtlcm5lbC9xd2lkZ2V0Lmgi IDEKIyA0MyAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVk ZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAiL3Vzci9saWIvcXQvaW5jbHVkZS9xYXNjaWlkaWN0Lmgi CiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9p bmNsdWRlL3FnZGljdC5oIgojIDEgIi91c3IvbGliL3F0L2luY2x1ZGUvcWNvbGxlY3Rpb24uaCIg MQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRlL3Fjb2xsZWN0aW9uLmgiCiMgMSAiL3Vzci9saWIv cXQvaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xY29sbGVj dGlvbi5oIiAyCgoKCmNsYXNzIFFHVmVjdG9yOwpjbGFzcyBRR0xpc3Q7CmNsYXNzIFFHRGljdDsK CgpjbGFzcyBRQ29sbGVjdGlvbgp7CnB1YmxpYzoKICAgIGJvb2wgYXV0b0RlbGV0ZSgpIGNvbnN0 IHsgcmV0dXJuIGRlbF9pdGVtOyB9CiAgICB2b2lkIHNldEF1dG9EZWxldGUoIGJvb2wgZW5hYmxl ICkgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1YWwgdWludCBjb3VudCgpIGNvbnN0 ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKCiAgICB0eXBlZGVmIHZvaWQgKkl0 ZW07Cgpwcm90ZWN0ZWQ6CiAgICBRQ29sbGVjdGlvbigpIHsgZGVsX2l0ZW0gPSBGQUxTRTsgfQog ICAgUUNvbGxlY3Rpb24oY29uc3QgUUNvbGxlY3Rpb24gJikgeyBkZWxfaXRlbSA9IEZBTFNFOyB9 CiAgICB2aXJ0dWFsIH5RQ29sbGVjdGlvbigpIHt9CgogICAgYm9vbCBkZWxfaXRlbTsKCiAgICB2 aXJ0dWFsIEl0ZW0gbmV3SXRlbSggSXRlbSApOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0o IEl0ZW0gKTsKfTsKIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMgojIDEgIi91 c3IvbGliL3F0L2luY2x1ZGUvcXN0cmluZy5oIiAxCiMgNDQgIi91c3IvbGliL3F0L2luY2x1ZGUv cWdkaWN0LmgiIDIKCgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xhc3MgUUdESXRMaXN0OwoKCmNs YXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0RGF0YSgp IHsgcmV0dXJuIGRhdGE7IH0KICAgIFFDb2xsZWN0aW9uOjpJdGVtIHNldERhdGEoIFFDb2xsZWN0 aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5l eHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7 IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVja2V0KCBRQ29sbGVjdGlvbjo6SXRl bSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4dChuKSB7fQogICAgUUNvbGxlY3Rp b246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1 Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNv bnN0IFFTdHJpbmcgJmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAg ICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0 S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsK CmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFB c2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUUNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNr ZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBj aGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNo YXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJs aWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVj a2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBn ZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoK Y2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJC dWNrZXQoIHZvaWQgKmssIFFDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAg ICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29u c3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdE aWN0IDogcHVibGljIFFDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0 IHsgcmV0dXJuIG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVu OyB9CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5 LCBRQ29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwg UUNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gbG9va19pbnQo IGxvbmcga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRl bSBsb29rX3B0ciggdm9pZCAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CgogICAgUURh dGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRhU3RyZWFtICZ3cml0ZSgg UURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51bSBLZXlUeXBlIHsgU3Ry aW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBRR0RpY3QoIHVpbnQgbGVu LCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0RpY3QoIGNvbnN0IFFHRGlj dCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0 ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUUNvbGxl Y3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9hc2NpaSggY29uc3QgY2hhciAq a2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wgcmVtb3ZlX2ludCggbG9u ZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9vbCByZW1vdmVfcHRyKCB2 b2lkICprZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgUUNvbGxlY3Rpb246Okl0 ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwogICAgUUNvbGxlY3Rpb246Okl0 ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0 YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lk ICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAg IGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNj aWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2 aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRQ29sbGVjdGlvbjo6SXRl bSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUUNv bGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsK ICAgIHVpbnQgdmxlbjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwog ICAgdWludCBjYXNlcyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRl cmF0b3JzOwogICAgdm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNl QnVja2V0ICogKTsKICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJp bmcgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDb2xsZWN0aW9uOjpJdGVt IGl0ZW0gPSAwICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAq LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2lu dCggbG9uZywgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVu bGlua19wdHIoIHZvaWQgKiwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQg aW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGlj dEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGlj dDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0Rp Y3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3Ig Jm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3Io KTsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUUNvbGxlY3Rpb246Okl0 ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0OwogICAgY29u c3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkgY29uc3Q7 CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVy YXRvcigpKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7CiAgICBRQ29sbGVj dGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgogICAgUUdEaWN0ICpkaWN0 OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAgdWludCBjdXJJbmRleDsK fTsKCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRvcjo6Z2V0KCkgY29uc3QK ewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRhKCkgOiAwOwp9CgppbmxpbmUg UVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkgY29uc3QKewogICAgcmV0dXJu IGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IFFTdHJpbmc6 Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWko KSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lpQnVja2V0KiljdXJOb2RlKS0+ Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5SW50KCkg Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNrZXQqKWN1ck5vZGUpLT5nZXRL ZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5UHRyKCkgY29u c3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXko KSA6IDA7Cn0KIyA0MyAiL3Vzci9saWIvcXQvaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDIKCgoKdGVt cGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUFzY2lpRGljdCA6IHB1YmxpYyBRR0RpY3QKewpwdWJs aWM6CiAgICBRQXNjaWlEaWN0KGludCBzaXplPTE3LCBib29sIGNhc2VTZW5zaXRpdmU9VFJVRSwg Ym9vbCBjb3B5S2V5cz1UUlVFICkKICAgICAgICA6IFFHRGljdChzaXplLEFzY2lpS2V5LGNhc2VT ZW5zaXRpdmUsY29weUtleXMpIHt9CiAgICBRQXNjaWlEaWN0KCBjb25zdCBRQXNjaWlEaWN0PHR5 cGU+ICZkICkgOiBRR0RpY3QoZCkge30KICAgflFBc2NpaURpY3QoKSB7IGNsZWFyKCk7IH0KICAg IFFBc2NpaURpY3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRQXNjaWlEaWN0PHR5cGU+ICZkKQog ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUUFzY2lpRGljdDx0eXBlPiYpUUdEaWN0 OjpvcGVyYXRvcj0oZCk7IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6 OmNvdW50KCk7IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6c2l6ZSgp OyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBRR0RpY3Q6OmNvdW50KCkgPT0g MDsgfQoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBjaGFyICprLCBjb25zdCB0eXBlICpkICkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2FzY2lp KGssKEl0ZW0pZCwxKTsgfQogICAgdm9pZCByZXBsYWNlKCBjb25zdCBjaGFyICprLCBjb25zdCB0 eXBlICpkICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0 Ojpsb29rX2FzY2lpKGssKEl0ZW0pZCwyKTsgfQogICAgYm9vbCByZW1vdmUoIGNvbnN0IGNoYXIg KmsgKSB7IHJldHVybiBRR0RpY3Q6OnJlbW92ZV9hc2NpaShrKTsgfQogICAgdHlwZSAqdGFrZSgg Y29uc3QgY2hhciAqayApIHsgcmV0dXJuICh0eXBlICopUUdEaWN0Ojp0YWtlX2FzY2lpKGspOyB9 CiAgICB0eXBlICpmaW5kKCBjb25zdCBjaGFyICprICkgY29uc3QKICAgICAgICAgICAgICAgIHsg cmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNjaWkoaywwLDAp OyB9CiAgICB0eXBlICpvcGVyYXRvcltdKCBjb25zdCBjaGFyICprICkgY29uc3QKICAgICAgICAg ICAgICAgIHsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfYXNj aWkoaywwLDApOyB9CgogICAgdm9pZCBjbGVhcigpIHsgUUdEaWN0OjpjbGVhcigpOyB9CiAgICB2 b2lkIHJlc2l6ZSggdWludCBuICkgeyBRR0RpY3Q6OnJlc2l6ZShuKTsgfQogICAgdm9pZCBzdGF0 aXN0aWNzKCkgY29uc3QgeyBRR0RpY3Q6OnN0YXRpc3RpY3MoKTsgfQpwcml2YXRlOgogICAgdm9p ZCBkZWxldGVJdGVtKCBJdGVtIGQgKSB7IGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilk OyB9Cn07CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUFzY2lpRGljdEl0ZXJhdG9yIDog cHVibGljIFFHRGljdEl0ZXJhdG9yCnsKcHVibGljOgogICAgUUFzY2lpRGljdEl0ZXJhdG9yKGNv bnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQpCiAgICAgICAgOiBRR0RpY3RJdGVyYXRvcigoUUdEaWN0 ICYpZCkge30KICAgflFBc2NpaURpY3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNvdW50KCkgY29u c3QgeyByZXR1cm4gZGljdC0+Y291bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy ZXR1cm4gZGljdC0+Y291bnQoKSA9PSAwOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4g KHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICBvcGVyYXRvciB0eXBlICoo KSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlw ZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OmdldCgp OyB9CiAgICBjb25zdCBjaGFyICpjdXJyZW50S2V5KCkgY29uc3QgeyByZXR1cm4gUUdEaWN0SXRl cmF0b3I6OmdldEtleUFzY2lpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKSB7IHJldHVybiAo dHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y KysoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAg IHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9y OjpvcGVyYXRvcis9KGopO30KfTsKIyA0NCAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAi a2VybmVsL3FwYWxldHRlLmgiIDEKIyA0NSAia2VybmVsL3FhcHBsaWNhdGlvbi5oIiAyCiMgMSAi a2VybmVsL3F0cmFuc2xhdG9yLmgiIDEKIyA0MyAia2VybmVsL3F0cmFuc2xhdG9yLmgiCiMgMSAi a2VybmVsL3FvYmplY3QuaCIgMQojIDQ0ICJrZXJuZWwvcXRyYW5zbGF0b3IuaCIgMgojIDEgIi91 c3IvbGliL3F0L2luY2x1ZGUvcWludGRpY3QuaCIgMQojIDQyICIvdXNyL2xpYi9xdC9pbmNsdWRl L3FpbnRkaWN0LmgiCiMgMSAiL3Vzci9saWIvcXQvaW5jbHVkZS9xZ2RpY3QuaCIgMQojIDQzICIv dXNyL2xpYi9xdC9pbmNsdWRlL3FpbnRkaWN0LmgiIDIKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4g Y2xhc3MgUUludERpY3QgOiBwdWJsaWMgUUdEaWN0CnsKcHVibGljOgogICAgUUludERpY3QoaW50 IHNpemU9MTcpIDogUUdEaWN0KHNpemUsSW50S2V5LDAsMCkge30KICAgIFFJbnREaWN0KCBjb25z dCBRSW50RGljdDx0eXBlPiAmZCApIDogUUdEaWN0KGQpIHt9CiAgIH5RSW50RGljdCgpIHsgY2xl YXIoKTsgfQogICAgUUludERpY3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRSW50RGljdDx0eXBl PiAmZCkKICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gKFFJbnREaWN0PHR5cGU+JilR R0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIFFH RGljdDo6Y291bnQoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gUUdEaWN0Ojpz aXplKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQo KSA9PSAwOyB9CiAgICB2b2lkIGluc2VydCggbG9uZyBrLCBjb25zdCB0eXBlICpkICkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2ludChrLChJ dGVtKWQsMSk7IH0KICAgIHZvaWQgcmVwbGFjZSggbG9uZyBrLCBjb25zdCB0eXBlICpkICkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUUdEaWN0Ojpsb29rX2ludChr LChJdGVtKWQsMik7IH0KICAgIGJvb2wgcmVtb3ZlKCBsb25nIGsgKSB7IHJldHVybiBRR0RpY3Q6 OnJlbW92ZV9pbnQoayk7IH0KICAgIHR5cGUgKnRha2UoIGxvbmcgayApIHsgcmV0dXJuICh0eXBl KilRR0RpY3Q6OnRha2VfaW50KGspOyB9CiAgICB0eXBlICpmaW5kKCBsb25nIGsgKSBjb25zdAog ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6 bG9va19pbnQoaywwLDApOyB9CiAgICB0eXBlICpvcGVyYXRvcltdKCBsb25nIGsgKSBjb25zdAog ICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFHRGljdDo6 bG9va19pbnQoaywwLDApOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBRR0RpY3Q6OmNsZWFyKCk7IH0K ICAgIHZvaWQgcmVzaXplKCB1aW50IG4gKSB7IFFHRGljdDo6cmVzaXplKG4pOyB9CiAgICB2b2lk IHN0YXRpc3RpY3MoKSBjb25zdCB7IFFHRGljdDo6c3RhdGlzdGljcygpOyB9CnByaXZhdGU6CiAg ICB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gZCApOwp9OwoKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgdHlw ZT4gaW5saW5lIHZvaWQgUUludERpY3Q8dHlwZT46OmRlbGV0ZUl0ZW0oIFFDb2xsZWN0aW9uOjpJ dGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlICopZDsKfQoKdGVtcGxh dGU8Y2xhc3MgdHlwZT4gY2xhc3MgUUludERpY3RJdGVyYXRvciA6IHB1YmxpYyBRR0RpY3RJdGVy YXRvcgp7CnB1YmxpYzoKICAgIFFJbnREaWN0SXRlcmF0b3IoY29uc3QgUUludERpY3Q8dHlwZT4g JmQpIDpRR0RpY3RJdGVyYXRvcigoUUdEaWN0ICYpZCkge30KICAgflFJbnREaWN0SXRlcmF0b3Io KSB7fQogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCk7IH0KICAg IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGRpY3QtPmNvdW50KCkgPT0gMDsgfQogICAg dHlwZSAqdG9GaXJzdCgpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3Qo KTsgfQogICAgb3BlcmF0b3IgdHlwZSAqKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJ dGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlw ZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgbG9uZyBjdXJyZW50S2V5KCkgY29uc3Qg eyByZXR1cm4gUUdEaWN0SXRlcmF0b3I6OmdldEtleUludCgpOyB9CiAgICB0eXBlICpvcGVyYXRv cigpKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpOyB9CiAg ICB0eXBlICpvcGVyYXRvcisrKCkgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3Bl cmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5cGUg KilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrPShqKTt9Cn07CiMgNDUgImtlcm5lbC9xdHJhbnNs YXRvci5oIiAyCgoKCgpjbGFzcyBRVHJhbnNsYXRvclByaXZhdGU7CgoKY2xhc3MgUVRyYW5zbGF0 b3JNZXNzYWdlCnsKcHVibGljOgogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCk7CiAgICBRVHJhbnNs YXRvck1lc3NhZ2UoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICogc291cmNlVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHRy YW5zbGF0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgUVRyYW5zbGF0b3JNZXNzYWdlKCBRRGF0 YVN0cmVhbSAmICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0IFFUcmFuc2xhdG9yTWVz c2FnZSAmIG0gKTsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgJiBvcGVyYXRvcj0oIGNvbnN0IFFU cmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICB1aW50IGhhc2goKSBjb25zdCB7IHJldHVybiBo OyB9CiAgICBjb25zdCBjaGFyICpjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY3g7IH0KICAgIGNv bnN0IGNoYXIgKnNvdXJjZVRleHQoKSBjb25zdCB7IHJldHVybiBzdDsgfQogICAgY29uc3QgY2hh ciAqY29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIGNtOyB9CgogICAgdm9pZCBzZXRUcmFuc2xhdGlv biggY29uc3QgUVN0cmluZyAmIHRyYW5zbGF0aW9uICkgeyB0biA9IHRyYW5zbGF0aW9uOyB9CiAg ICBRU3RyaW5nIHRyYW5zbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gdG47IH0KCiAgICBlbnVtIFBy ZWZpeCB7IE5vUHJlZml4LCBIYXNoLCBIYXNoQ29udGV4dCwgSGFzaENvbnRleHRTb3VyY2VUZXh0 LAogICAgICAgICAgICAgICAgICBIYXNoQ29udGV4dFNvdXJjZVRleHRDb21tZW50IH07CiAgICB2 b2lkIHdyaXRlKCBRRGF0YVN0cmVhbSAmIHMsIGJvb2wgc3RyaXAsCiAgICAgICAgICAgICAgICBQ cmVmaXggcHJlZml4ID0gSGFzaENvbnRleHRTb3VyY2VUZXh0Q29tbWVudCApIGNvbnN0OwogICAg UHJlZml4IGNvbW1vblByZWZpeCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApIGNvbnN0OwoK ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7 CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0 CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PSggbSApOyB9CiAgICBib29sIG9wZXJhdG9yPCggY29u c3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3Q7CiAgICBib29sIG9wZXJhdG9yPD0oIGNv bnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I+ KCBtICk7IH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0g KSBjb25zdAogICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8KCBtICk7IH0KICAgIGJvb2wgb3Bl cmF0b3I+PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJu ICFvcGVyYXRvcjwoIG0gKTsgfQoKcHJpdmF0ZToKICAgIHVpbnQgaDsKICAgIFFDU3RyaW5nIGN4 OwogICAgUUNTdHJpbmcgc3Q7CiAgICBRQ1N0cmluZyBjbTsKICAgIFFTdHJpbmcgdG47CgogICAg ZW51bSBUYWcgeyBUYWdfRW5kID0gMSwgVGFnX1NvdXJjZVRleHQxNiwgVGFnX1RyYW5zbGF0aW9u LCBUYWdfQ29udGV4dDE2LAogICAgICAgICAgICAgICBUYWdfSGFzaCwgVGFnX1NvdXJjZVRleHQs IFRhZ19Db250ZXh0LCBUYWdfQ29tbWVudCwKICAgICAgICAgICAgICAgVGFnX09ic29sZXRlMSB9 Owp9OwoKCmNsYXNzIFFUcmFuc2xhdG9yOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IFFN ZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgp OyB9IGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0OyBzdGF0aWMgUU1ldGFPYmplY3QqIHN0 YXRpY01ldGFPYmplY3QoKTsgc3RhdGljIFFTdHJpbmcgdHIoY29uc3QgY2hhciopOyBzdGF0aWMg UVN0cmluZyB0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOyBwcm90ZWN0ZWQ6IHZvaWQgaW5p dE1ldGFPYmplY3QoKTsgcHJpdmF0ZTogc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOwpwdWJs aWM6CiAgICBRVHJhbnNsYXRvciggUU9iamVjdCAqIHBhcmVudCwgY29uc3QgY2hhciAqIG5hbWUg PSAwICk7CiAgICB+UVRyYW5zbGF0b3IoKTsKCgogICAgUVN0cmluZyBmaW5kKCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgdmlydHVhbCBRU3Ry aW5nIGZpbmQoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgUVRyYW5z bGF0b3JNZXNzYWdlIGZpbmRNZXNzYWdlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqICkgY29uc3Q7Cgog ICAgYm9vbCBsb2FkKCBjb25zdCBRU3RyaW5nICYgZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGNv bnN0IFFTdHJpbmcgJiBkaXJlY3RvcnkgPSBRU3RyaW5nOjpudWxsLAogICAgICAgICAgICAgICBj b25zdCBRU3RyaW5nICYgc2VhcmNoX2RlbGltaXRlcnMgPSBRU3RyaW5nOjpudWxsLAogICAgICAg ICAgICAgICBjb25zdCBRU3RyaW5nICYgc3VmZml4ID0gUVN0cmluZzo6bnVsbCApOwoKICAgIGVu dW0gU2F2ZU1vZGUgeyBFdmVyeXRoaW5nLCBTdHJpcHBlZCB9OwoKICAgIGJvb2wgc2F2ZSggY29u c3QgUVN0cmluZyAmIGZpbGVuYW1lLCBTYXZlTW9kZSBtb2RlID0gRXZlcnl0aGluZyApOwoKICAg IHZvaWQgY2xlYXIoKTsKCiAgICB2b2lkIGluc2VydCggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdl JiApOwoKICAgIHZvaWQgaW5zZXJ0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg UVN0cmluZyAmICk7CiAgICB2b2lkIHJlbW92ZSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiAp OwoKICAgIHZvaWQgcmVtb3ZlKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwogICAgYm9v bCBjb250YWlucyggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApIGNv bnN0OwoKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICkgY29u c3Q7CgoKCiAgICB2b2lkIHNxdWVlemUoIFNhdmVNb2RlICk7CiAgICB2b2lkIHNxdWVlemUoKTsK ICAgIHZvaWQgdW5zcXVlZXplKCk7CgogICAgUVZhbHVlTGlzdDxRVHJhbnNsYXRvck1lc3NhZ2U+ IG1lc3NhZ2VzKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVRyYW5zbGF0b3JQcml2YXRlICogZDsK CnByaXZhdGU6CgogICAgUVRyYW5zbGF0b3IoIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKICAgIFFU cmFuc2xhdG9yICZvcGVyYXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yICYgKTsKCn07CiMgNDYgImtl cm5lbC9xYXBwbGljYXRpb24uaCIgMgoKCmNsYXNzIFFTZXNzaW9uTWFuYWdlcjsKY2xhc3MgUVN0 eWxlOwpjbGFzcyBRVHJhbnNsYXRvcjsKCgoKdGVtcGxhdGUgPGNsYXNzIHR5cGU+IGNsYXNzIFFM aXN0OwoKY2xhc3MgUUFwcGxpY2F0aW9uOwpleHRlcm4gUUFwcGxpY2F0aW9uICpxQXBwOwojIDY3 ICJrZXJuZWwvcWFwcGxpY2F0aW9uLmgiCmNsYXNzIFFBcHBsaWNhdGlvbiA6IHB1YmxpYyBRT2Jq ZWN0CnsKICAgIHB1YmxpYzogUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVy biBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7IHN0 YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBzdGF0aWMgUVN0cmluZyB0cihj b25zdCBjaGFyKik7IHN0YXRpYyBRU3RyaW5nIHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7 IHByb3RlY3RlZDogdm9pZCBpbml0TWV0YU9iamVjdCgpOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFP YmplY3QgKm1ldGFPYmo7CnB1YmxpYzoKICAgIFFBcHBsaWNhdGlvbiggaW50ICZhcmdjLCBjaGFy ICoqYXJndik7CiAgICBRQXBwbGljYXRpb24oIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wg R1VJZW5hYmxlZCApOwogICAgZW51bSBUeXBlIHsgVHR5LCBHdWlDbGllbnQsIEd1aVNlcnZlciB9 OwogICAgUUFwcGxpY2F0aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2LCBUeXBlICk7CgogICAg UUFwcGxpY2F0aW9uKCBEaXNwbGF5KiBkcHkgKTsKICAgIFFBcHBsaWNhdGlvbiggRGlzcGxheSAq ZHB5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwoKICAgIHZpcnR1YWwgflFBcHBsaWNhdGlvbigp OwoKICAgIGludCBhcmdjKCkgY29uc3Q7CiAgICBjaGFyICoqYXJndigpIGNvbnN0OwoKICAgIFR5 cGUgdHlwZSgpIGNvbnN0OwoKCiAgICBzdGF0aWMgUVN0eWxlICZzdHlsZSgpOwogICAgc3RhdGlj IHZvaWQgc2V0U3R5bGUoIFFTdHlsZSogKTsKCgogICAgZW51bSBDb2xvck1vZGUgeyBOb3JtYWxD b2xvcnMsIEN1c3RvbUNvbG9ycyB9OwogICAgc3RhdGljIENvbG9yTW9kZSBjb2xvck1vZGUoKTsK ICAgIHN0YXRpYyB2b2lkIHNldENvbG9yTW9kZSggUUFwcGxpY2F0aW9uOjpDb2xvck1vZGUgKTsK CgogICAgZW51bSBDb2xvclNwZWMgeyBOb3JtYWxDb2xvcj0wLCBDdXN0b21Db2xvcj0xLCBNYW55 Q29sb3I9MiB9OwogICAgc3RhdGljIGludCBjb2xvclNwZWMoKTsKICAgIHN0YXRpYyB2b2lkIHNl dENvbG9yU3BlYyggaW50ICk7CgogICAgc3RhdGljIFFDdXJzb3IgKm92ZXJyaWRlQ3Vyc29yKCk7 CiAgICBzdGF0aWMgdm9pZCBzZXRPdmVycmlkZUN1cnNvciggY29uc3QgUUN1cnNvciAmLCBib29s IHJlcGxhY2U9RkFMU0UgKTsKICAgIHN0YXRpYyB2b2lkIHJlc3RvcmVPdmVycmlkZUN1cnNvcigp OwoKICAgIHN0YXRpYyBib29sIGhhc0dsb2JhbE1vdXNlVHJhY2tpbmcoKTsKICAgIHN0YXRpYyB2 b2lkIHNldEdsb2JhbE1vdXNlVHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgogICAgc3RhdGljIFFQ YWxldHRlIHBhbGV0dGUoIGNvbnN0IFFXaWRnZXQqID0gMCApOwogICAgc3RhdGljIHZvaWQgc2V0 UGFsZXR0ZSggY29uc3QgUVBhbGV0dGUgJiwgYm9vbCBpbmZvcm1XaWRnZXRzPUZBTFNFLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAwICk7 CgogICAgc3RhdGljIFFGb250IGZvbnQoIGNvbnN0IFFXaWRnZXQqID0gMCApOwogICAgc3RhdGlj IHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiwgYm9vbCBpbmZvcm1XaWRnZXRzPUZBTFNFLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSAwICk7 CiAgICBzdGF0aWMgUUZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCk7CgogICAgUVdpZGdldCAqbWFp bldpZGdldCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1haW5XaWRnZXQoIFFXaWRnZXQg KiApOwogICAgdmlydHVhbCB2b2lkIHBvbGlzaCggUVdpZGdldCAqICk7CgogICAgc3RhdGljIFFX aWRnZXRMaXN0ICphbGxXaWRnZXRzKCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QgKnRvcExldmVs V2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXQgKmRlc2t0b3AoKTsKICAgIHN0YXRpYyBRV2lk Z2V0ICphY3RpdmVQb3B1cFdpZGdldCgpOwogICAgc3RhdGljIFFXaWRnZXQgKmFjdGl2ZU1vZGFs V2lkZ2V0KCk7CiAgICBzdGF0aWMgUUNsaXBib2FyZCAqY2xpcGJvYXJkKCk7CiAgICBRV2lkZ2V0 ICpmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVdpZGdldCAqYWN0aXZlV2luZG93KCkgY29uc3Q7 CgogICAgc3RhdGljIFFXaWRnZXQgKndpZGdldEF0KCBpbnQgeCwgaW50IHksIGJvb2wgY2hpbGQ9 RkFMU0UgKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRBdCggY29uc3QgUVBvaW50ICYsIGJv b2wgY2hpbGQ9RkFMU0UgKTsKCiAgICBpbnQgZXhlYygpOwogICAgdm9pZCBwcm9jZXNzRXZlbnRz KCk7CiAgICB2b2lkIHByb2Nlc3NFdmVudHMoIGludCBtYXh0aW1lICk7CiAgICB2b2lkIHByb2Nl c3NPbmVFdmVudCgpOwogICAgaW50IGVudGVyX2xvb3AoKTsKICAgIHZvaWQgZXhpdF9sb29wKCk7 CiAgICBpbnQgbG9vcExldmVsKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBleGl0KCBpbnQgcmV0 Y29kZT0wICk7CgogICAgc3RhdGljIGJvb2wgc2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwg UUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgcG9zdEV2ZW50KCBRT2JqZWN0ICpyZWNl aXZlciwgUUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgc2VuZFBvc3RlZEV2ZW50cygg UU9iamVjdCAqcmVjZWl2ZXIsIGludCBldmVudF90eXBlICk7CiAgICBzdGF0aWMgdm9pZCBzZW5k UG9zdGVkRXZlbnRzKCk7CgogICAgc3RhdGljIHZvaWQgcmVtb3ZlUG9zdGVkRXZlbnRzKCBRT2Jq ZWN0ICpyZWNlaXZlciApOwoKICAgIHZpcnR1YWwgYm9vbCBub3RpZnkoIFFPYmplY3QgKiwgUUV2 ZW50ICogKTsKCiAgICBzdGF0aWMgYm9vbCBzdGFydGluZ1VwKCk7CiAgICBzdGF0aWMgYm9vbCBj bG9zaW5nRG93bigpOwoKICAgIHN0YXRpYyB2b2lkIGZsdXNoWCgpOwogICAgc3RhdGljIHZvaWQg c3luY1goKTsKCiAgICBzdGF0aWMgdm9pZCBiZWVwKCk7CgoKICAgIHZvaWQgc2V0RGVmYXVsdENv ZGVjKCBRVGV4dENvZGVjKiApOwogICAgUVRleHRDb2RlYyogZGVmYXVsdENvZGVjKCkgY29uc3Q7 CiAgICB2b2lkIGluc3RhbGxUcmFuc2xhdG9yKCBRVHJhbnNsYXRvciAqICk7CiAgICB2b2lkIHJl bW92ZVRyYW5zbGF0b3IoIFFUcmFuc2xhdG9yICogKTsKCiAgICBRU3RyaW5nIHRyYW5zbGF0ZSgg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKSBjb25zdDsKICAgIFFTdHJpbmcgdHJhbnNsYXRl KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBzdGF0aWMgdm9pZCBzZXRXaW5TdHlsZUhp Z2hsaWdodENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAm d2luU3R5bGVIaWdobGlnaHRDb2xvcigpOwoKICAgIHN0YXRpYyB2b2lkIHNldERlc2t0b3BTZXR0 aW5nc0F3YXJlKCBib29sICk7CiAgICBzdGF0aWMgYm9vbCBkZXNrdG9wU2V0dGluZ3NBd2FyZSgp OwoKICAgIHN0YXRpYyB2b2lkIHNldEN1cnNvckZsYXNoVGltZSggaW50ICk7CiAgICBzdGF0aWMg aW50IGN1cnNvckZsYXNoVGltZSgpOwoKICAgIHN0YXRpYyB2b2lkIHNldERvdWJsZUNsaWNrSW50 ZXJ2YWwoIGludCApOwogICAgc3RhdGljIGludCBkb3VibGVDbGlja0ludGVydmFsKCk7CgogICAg c3RhdGljIHZvaWQgc2V0V2hlZWxTY3JvbGxMaW5lcyggaW50ICk7CiAgICBzdGF0aWMgaW50IHdo ZWVsU2Nyb2xsTGluZXMoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxTdHJ1dCggY29uc3Qg UVNpemUgJiApOwogICAgc3RhdGljIFFTaXplIGdsb2JhbFN0cnV0KCk7CgogICAgc3RhdGljIHZv aWQgc2V0U3RhcnREcmFnVGltZSggaW50IG1zICk7CiAgICBzdGF0aWMgaW50IHN0YXJ0RHJhZ1Rp bWUoKTsKICAgIHN0YXRpYyB2b2lkIHNldFN0YXJ0RHJhZ0Rpc3RhbmNlKCBpbnQgbCApOwogICAg c3RhdGljIGludCBzdGFydERyYWdEaXN0YW5jZSgpOwoKICAgIHN0YXRpYyBib29sIGlzRWZmZWN0 RW5hYmxlZCggUXQ6OlVJRWZmZWN0ICk7CiAgICBzdGF0aWMgdm9pZCBzZXRFZmZlY3RFbmFibGVk KCBRdDo6VUlFZmZlY3QsIGJvb2wgZW5hYmxlID0gVFJVRSApOwojIDIwMSAia2VybmVsL3FhcHBs aWNhdGlvbi5oIgogICAgdmlydHVhbCBib29sIHgxMUV2ZW50RmlsdGVyKCBYRXZlbnQgKiApOwog ICAgdmlydHVhbCBpbnQgeDExQ2xpZW50TWVzc2FnZSggUVdpZGdldCosIFhFdmVudCosIGJvb2wg cGFzc2l2ZV9vbmx5KTsKICAgIGludCB4MTFQcm9jZXNzRXZlbnQoIFhFdmVudCogKTsKIyAyMjIg Imtlcm5lbC9xYXBwbGljYXRpb24uaCIKICAgIGJvb2wgaXNTZXNzaW9uUmVzdG9yZWQoKSBjb25z dDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgY29tbWl0 RGF0YSggUVNlc3Npb25NYW5hZ2VyJiBzbSApOwogICAgdmlydHVhbCB2b2lkIHNhdmVTdGF0ZSgg UVNlc3Npb25NYW5hZ2VyJiBzbSApOwoKCiAgICBzdGF0aWMgdm9pZCBjcmVhdGVfeGltKCk7CiAg ICBzdGF0aWMgdm9pZCBjbG9zZV94aW0oKTsKCiAgICB2b2lkIHdha2VVcEd1aVRocmVhZCgpOwoK CgoKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGxhc3RXaW5kb3dDbG9zZWQoKTsKICAgIHZvaWQgYWJv dXRUb1F1aXQoKTsKICAgIHZvaWQgZ3VpVGhyZWFkQXdha2UoKTsKCnB1YmxpYyA6CiAgICB2b2lk IHF1aXQoKTsKICAgIHZvaWQgY2xvc2VBbGxXaW5kb3dzKCk7Cgpwcml2YXRlOgogICAgdm9pZCBj b25zdHJ1Y3QoIGludCAmYXJnYywgY2hhciAqKmFyZ3YsIFR5cGUgKTsKICAgIGJvb2wgcHJvY2Vz c05leHRFdmVudCggYm9vbCApOwogICAgdm9pZCBpbml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsK ICAgIHZvaWQgaW5pdF9wcmVjbWRsaW5lKCk7CiAgICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50 KiBhcmdjcHRyLCBjaGFyICoqIGFyZ3YgKTsKIyAyNjIgImtlcm5lbC9xYXBwbGljYXRpb24uaCIK ICAgIGludCBhcHBfYXJnYzsKICAgIGNoYXIgKiphcHBfYXJndjsKICAgIGJvb2wgcXVpdF9ub3c7 CiAgICBpbnQgcXVpdF9jb2RlOwogICAgc3RhdGljIFFTdHlsZSAqYXBwX3N0eWxlOwogICAgc3Rh dGljIGludCBhcHBfY3NwZWM7CgogICAgc3RhdGljIFFQYWxldHRlICphcHBfcGFsOwoKICAgIHN0 YXRpYyBRRm9udCAqYXBwX2ZvbnQ7CgogICAgc3RhdGljIFFDdXJzb3IgKmFwcF9jdXJzb3I7Cgog ICAgc3RhdGljIGludCBhcHBfdHJhY2tpbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfcnVubmlu ZzsKICAgIHN0YXRpYyBib29sIGlzX2FwcF9jbG9zaW5nOwogICAgc3RhdGljIGJvb2wgYXBwX2V4 aXRfbG9vcDsKICAgIHN0YXRpYyBpbnQgbG9vcF9sZXZlbDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpt YWluX3dpZGdldDsKICAgIHN0YXRpYyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7CiAgICBzdGF0aWMg UVdpZGdldCAqYWN0aXZlX3dpbmRvdzsKICAgIHN0YXRpYyBib29sIG9iZXlfZGVza3RvcF9zZXR0 aW5nczsKICAgIHN0YXRpYyBpbnQgY3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBzdGF0aWMgaW50IG1v dXNlX2RvdWJsZV9jbGlja190aW1lOwogICAgc3RhdGljIGludCB3aGVlbF9zY3JvbGxfbGluZXM7 CgogICAgc3RhdGljIGJvb2wgYW5pbWF0ZV91aTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfbWVu dTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfdG9vbHRpcDsKICAgIHN0YXRpYyBib29sIGFuaW1h dGVfY29tYm87CiAgICBzdGF0aWMgYm9vbCBmYWRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBmYWRl X3Rvb2x0aXA7CgogICAgUUxpc3Q8UVRyYW5zbGF0b3I+ICp0cmFuc2xhdG9yczsKCiAgICBRU2Vz c2lvbk1hbmFnZXIgKnNlc3Npb25fbWFuYWdlcjsKICAgIFFTdHJpbmcgc2Vzc2lvbl9pZDsKICAg IGJvb2wgaXNfc2Vzc2lvbl9yZXN0b3JlZDsKCgogICAgc3RhdGljIHZvaWQgeDExX2luaXRpYWxp emVfc3R5bGUoKTsKCgogICAgc3RhdGljIFFTaXplIGFwcF9zdHJ1dDsKCiAgICBzdGF0aWMgUUFz Y2lpRGljdDxRUGFsZXR0ZT4gKmFwcF9wYWxldHRlczsKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFG b250PiAqYXBwX2ZvbnRzOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqcG9wdXBXaWRnZXRzOwog ICAgYm9vbCBpblBvcHVwTW9kZSgpIGNvbnN0OwogICAgdm9pZCBjbG9zZVBvcHVwKCBRV2lkZ2V0 ICpwb3B1cCApOwogICAgdm9pZCBvcGVuUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lk IHNldEFjdGl2ZVdpbmRvdyggUVdpZGdldCogYWN0ICk7CgogICAgc3RhdGljIHZvaWQgcmVtb3Zl UG9zdGVkRXZlbnQoIFFFdmVudCAqICk7CgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBm cmllbmQgY2xhc3MgUUVUV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNzIFFFdmVudDsKCnByaXZhdGU6 CgogICAgUUFwcGxpY2F0aW9uKCBjb25zdCBRQXBwbGljYXRpb24gJiApOwogICAgUUFwcGxpY2F0 aW9uICZvcGVyYXRvcj0oIGNvbnN0IFFBcHBsaWNhdGlvbiAmICk7Cgp9OwoKCmlubGluZSBpbnQg UUFwcGxpY2F0aW9uOjphcmdjKCkgY29uc3QKewogICAgcmV0dXJuIGFwcF9hcmdjOwp9Cgppbmxp bmUgY2hhciAqKlFBcHBsaWNhdGlvbjo6YXJndigpIGNvbnN0CnsKICAgIHJldHVybiBhcHBfYXJn djsKfQoKaW5saW5lIFFTdHlsZSYgUUFwcGxpY2F0aW9uOjpzdHlsZSgpCnsKICAgIHJldHVybiAq YXBwX3N0eWxlOwp9CgoKaW5saW5lIFFDdXJzb3IgKlFBcHBsaWNhdGlvbjo6b3ZlcnJpZGVDdXJz b3IoKQp7CiAgICByZXR1cm4gYXBwX2N1cnNvcjsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9u OjpoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCkKewogICAgcmV0dXJuIGFwcF90cmFja2luZyA+IDA7 Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246Om1haW5XaWRnZXQoKSBjb25zdAp7CiAg ICByZXR1cm4gbWFpbl93aWRnZXQ7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OmZv Y3VzV2lkZ2V0KCkgY29uc3QKewogICAgcmV0dXJuIGZvY3VzX3dpZGdldDsKfQoKaW5saW5lIFFX aWRnZXQgKlFBcHBsaWNhdGlvbjo6YWN0aXZlV2luZG93KCkgY29uc3QKewogICAgcmV0dXJuIGFj dGl2ZV93aW5kb3c7Cn0KCmlubGluZSBRV2lkZ2V0ICpRQXBwbGljYXRpb246OndpZGdldEF0KCBj b25zdCBRUG9pbnQgJnAsIGJvb2wgY2hpbGQgKQp7CiAgICByZXR1cm4gd2lkZ2V0QXQoIHAueCgp LCBwLnkoKSwgY2hpbGQgKTsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0aW9uOjppblBvcHVwTW9k ZSgpIGNvbnN0CnsKICAgIHJldHVybiBwb3B1cFdpZGdldHMgIT0gMDsKfQoKaW5saW5lIGJvb2wg UUFwcGxpY2F0aW9uOjppc1Nlc3Npb25SZXN0b3JlZCgpIGNvbnN0CnsKICAgIHJldHVybiBpc19z ZXNzaW9uX3Jlc3RvcmVkOwp9CgppbmxpbmUgUVN0cmluZyBRQXBwbGljYXRpb246OnNlc3Npb25J ZCgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2lkOwp9CgppbmxpbmUgUVNpemUgUUFwcGxp Y2F0aW9uOjpnbG9iYWxTdHJ1dCgpCnsKICAgIHJldHVybiBhcHBfc3RydXQ7Cn0KCmlubGluZSBi b29sIFFBcHBsaWNhdGlvbjo6c2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpl dmVudCApCnsgcmV0dXJuIHFBcHAtPm5vdGlmeSggcmVjZWl2ZXIsIGV2ZW50ICk7IH0KIyA0NCAi a2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiIDIKIyA5MSAia2VybmVsL3FhYnN0cmFjdGxheW91 dC5jcHAiCnZvaWQgUUxheW91dEl0ZW06OnNldEFsaWdubWVudCggaW50IGEgKQp7CiAgICAgYWxp Z24gPSBhOwp9CiMgMTUwICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRU3BhY2Vy SXRlbTo6Y2hhbmdlU2l6ZSggaW50IHcsIGludCBoLCBRU2l6ZVBvbGljeTo6U2l6ZVR5cGUgaERh dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTaXplUG9saWN5OjpTaXplVHlwZSB2 RGF0YSApCnsKICAgIHdpZHRoID0gdzsKICAgIGhlaWdodCA9IGg7CiAgICBzaXplUCA9IFFTaXpl UG9saWN5KCBoRGF0YSwgdkRhdGEgKTsKfQojIDE2NyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5j cHAiClFMYXlvdXRJdGVtOjp+UUxheW91dEl0ZW0oKQp7Cn0KCgoKCgoKdm9pZCBRTGF5b3V0SXRl bTo6aW52YWxpZGF0ZSgpCnsKCn0KIyAxODkgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpR TGF5b3V0ICogUUxheW91dEl0ZW06OmxheW91dCgpCnsKICAgIHJldHVybiAwOwp9CiMgMjAzICJr ZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNwYWNlckl0ZW0gKiBRTGF5b3V0SXRlbTo6c3Bh Y2VySXRlbSgpCnsKICAgIHJldHVybiAwOwp9CiMgMjE1ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0 LmNwcCIKUUxheW91dCAqIFFMYXlvdXQ6OmxheW91dCgpCnsKICAgIHJldHVybiB0aGlzOwp9CgoK CgoKClFTcGFjZXJJdGVtICogUVNwYWNlckl0ZW06OnNwYWNlckl0ZW0oKQp7CiAgICByZXR1cm4g dGhpczsKfQojIDIzOCAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiClFXaWRnZXQgKiBRTGF5 b3V0SXRlbTo6d2lkZ2V0KCkKewogICAgcmV0dXJuIDA7Cn0KCgoKCgoKUVdpZGdldCAqIFFXaWRn ZXRJdGVtOjp3aWRnZXQoKQp7CiAgICByZXR1cm4gd2lkOwp9CiMgMjY0ICJrZXJuZWwvcWFic3Ry YWN0bGF5b3V0LmNwcCIKYm9vbCBRTGF5b3V0SXRlbTo6aGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25z dAp7CiAgICByZXR1cm4gRkFMU0U7Cn0KIyAyODEgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3Bw IgpRTGF5b3V0SXRlcmF0b3IgUUxheW91dEl0ZW06Oml0ZXJhdG9yKCkKewogICAgcmV0dXJuIFFM YXlvdXRJdGVyYXRvciggMCApOwp9CiMgMzE3ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIK aW50IFFMYXlvdXRJdGVtOjpoZWlnaHRGb3JXaWR0aCggaW50ICkgY29uc3QKewogICAgcmV0dXJu IC0xOwp9CgoKCnN0YXRpYyBjb25zdCBpbnQgSG9yQWxpZ24gPSBRdDo6QWxpZ25IQ2VudGVyIHwg UXQ6OkFsaWduUmlnaHQgfCBRdDo6QWxpZ25MZWZ0OwpzdGF0aWMgY29uc3QgaW50IFZlckFsaWdu ID0gUXQ6OkFsaWduVkNlbnRlciB8IFF0OjpBbGlnbkJvdHRvbSB8IFF0OjpBbGlnblRvcDsKCnN0 YXRpYyBRU2l6ZSBzbWFydE1pblNpemUoIGNvbnN0IFFXaWRnZXRJdGVtICppICkKewogICAgUVdp ZGdldCAqdyA9ICggKFFXaWRnZXRJdGVtKilpICktPndpZGdldCgpOwogICAgUVNpemUgcygwLDAp OwogICAgaWYgKCB3LT5sYXlvdXQoKSApIHsKICAgICAgICBzID0gdy0+bGF5b3V0KCktPnRvdGFs TWluaW11bVNpemUoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgUVNpemUgc2g7CiAgICAgICAgaWYg KCB3LT5zaXplUG9saWN5KCkubWF5U2hyaW5rSG9yaXpvbnRhbGx5KCkgKQogICAgICAgICAgICBz LnNldFdpZHRoKCB3LT5taW5pbXVtU2l6ZUhpbnQoKS53aWR0aCgpICk7CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICAgIHNoID0gdy0+c2l6ZUhpbnQoKTsKICAgICAgICAgICAgcy5zZXRXaWR0aCgg c2gud2lkdGgoKSApOwogICAgICAgIH0KICAgICAgICBpZiAoIHctPnNpemVQb2xpY3koKS5tYXlT aHJpbmtWZXJ0aWNhbGx5KCkgKQogICAgICAgICAgICBzLnNldEhlaWdodCggdy0+bWluaW11bVNp emVIaW50KCkuaGVpZ2h0KCkgKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHMuc2V0SGVpZ2h0 KCBzaC5pc1ZhbGlkKCkgPyBzaC5oZWlnaHQoKSA6IHctPnNpemVIaW50KCkuaGVpZ2h0KCkgKTsK ICAgIH0KICAgIHMgPSBzLmJvdW5kZWRUbyggdy0+bWF4aW11bVNpemUoKSApOwogICAgUVNpemUg bWluID0gdy0+bWluaW11bVNpemUoKTsKICAgIGlmICggbWluLndpZHRoKCkgPiAwICkKICAgICAg ICBzLnNldFdpZHRoKCBtaW4ud2lkdGgoKSApOwogICAgaWYgKCBtaW4uaGVpZ2h0KCkgPiAwICkK ICAgICAgICBzLnNldEhlaWdodCggbWluLmhlaWdodCgpICk7CgogICAgaWYgKCBpLT5oYXNIZWln aHRGb3JXaWR0aCgpICYmIG1pbi5oZWlnaHQoKSA9PSAwICYmIG1pbi53aWR0aCgpID4gMCApCiAg ICAgICAgcy5zZXRIZWlnaHQoIGktPmhlaWdodEZvcldpZHRoKCBzLndpZHRoKCkgKSApOwoKICAg IHMgPSBzLmV4cGFuZGVkVG8oIFFTaXplKDEsMSkgKTsKICAgIHJldHVybiBzOwp9CgoKc3RhdGlj IFFTaXplIHNtYXJ0TWF4U2l6ZSggUVdpZGdldCAqdywgaW50IGFsaWduID0gMCApCnsKICAgIGlm ICggYWxpZ24gJiBIb3JBbGlnbiAmJiBhbGlnbiAmIFZlckFsaWduICkKICAgICAgICByZXR1cm4g UVNpemUoIDMyNzY3LCAzMjc2NyApOwogICAgUVNpemUgcyA9IHctPm1heGltdW1TaXplKCk7CiAg ICBpZiAoIHMud2lkdGgoKSA9PSAzMjc2NyAmJiAhKGFsaWduJkhvckFsaWduKSApCiAgICAgICAg aWYgKCAhdy0+c2l6ZVBvbGljeSgpLm1heUdyb3dIb3Jpem9udGFsbHkoKSApCiAgICAgICAgICAg IHMuc2V0V2lkdGgoIHctPnNpemVIaW50KCkud2lkdGgoKSApOwoKICAgIGlmICggcy5oZWlnaHQo KSA9PSAzMjc2NyAmJiAhKGFsaWduJlZlckFsaWduKSApCiAgICAgICAgaWYgKCAhdy0+c2l6ZVBv bGljeSgpLm1heUdyb3dWZXJ0aWNhbGx5KCkgKQogICAgICAgICAgICBzLnNldEhlaWdodCggdy0+ c2l6ZUhpbnQoKS5oZWlnaHQoKSApOwoKICAgIHMgPSBzLmV4cGFuZGVkVG8oIHctPm1pbmltdW1T aXplKCkgKTsKCiAgICBpZiAoYWxpZ24gJiBIb3JBbGlnbiApCiAgICAgICAgcy5zZXRXaWR0aCgg MzI3NjcgKTsKICAgIGlmIChhbGlnbiAmIFZlckFsaWduICkKICAgICAgICBzLnNldEhlaWdodCgg MzI3NjcgKTsKICAgIHJldHVybiBzOwp9CgoKCgoKCgp2b2lkIFFTcGFjZXJJdGVtOjpzZXRHZW9t ZXRyeSggY29uc3QgUVJlY3QgJnIgKQp7CiAgICByZWN0ID0gcjsKfQoKCgoKCnZvaWQgUVdpZGdl dEl0ZW06OnNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmciApCnsKICAgIFFTaXplIHMgPSByLnNp emUoKS5ib3VuZGVkVG8oIHNtYXJ0TWF4U2l6ZSggd2lkICkgKTsKICAgIGludCB4ID0gci54KCk7 CiAgICBpbnQgeSA9IHIueSgpOwogICAgaWYgKCBhbGlnbiAmIChIb3JBbGlnbnxWZXJBbGlnbikg KSB7CiAgICAgICAgUVNpemUgcHJlZiA9IHdpZC0+c2l6ZUhpbnQoKS5leHBhbmRlZFRvKCB3aWQt Pm1pbmltdW1TaXplKCkgKTsKICAgICAgICBpZiAoIGFsaWduICYgSG9yQWxpZ24gKQogICAgICAg ICAgICBzLnNldFdpZHRoKCAoKHMud2lkdGgoKSkgPCAocHJlZi53aWR0aCgpKSA/IChzLndpZHRo KCkpIDogKHByZWYud2lkdGgoKSkpICk7CiAgICAgICAgaWYgKCBhbGlnbiAmIFZlckFsaWduICkg ewogICAgICAgICAgICBpZiAoIGhhc0hlaWdodEZvcldpZHRoKCkgKQogICAgICAgICAgICAgICAg cy5zZXRIZWlnaHQoICgocy5oZWlnaHQoKSkgPCAoaGVpZ2h0Rm9yV2lkdGgocy53aWR0aCgpKSkg PyAocy5oZWlnaHQoKSkgOiAoaGVpZ2h0Rm9yV2lkdGgocy53aWR0aCgpKSkpICk7CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIHMuc2V0SGVpZ2h0KCAoKHMuaGVpZ2h0KCkpIDwgKHBy ZWYuaGVpZ2h0KCkpID8gKHMuaGVpZ2h0KCkpIDogKHByZWYuaGVpZ2h0KCkpKSApOwogICAgICAg IH0KICAgIH0KICAgIGlmICggYWxpZ24gJiBRdDo6QWxpZ25SaWdodCApCiAgICAgICAgeCA9IHgg KyAoIHIud2lkdGgoKSAtIHMud2lkdGgoKSApOwogICAgZWxzZSBpZiAoICEoYWxpZ24gJiBRdDo6 QWxpZ25MZWZ0KSApCiAgICAgICAgeCA9IHggKyAoIHIud2lkdGgoKSAtIHMud2lkdGgoKSApIC8g MjsKCiAgICBpZiAoIGFsaWduICYgUXQ6OkFsaWduQm90dG9tICkKICAgICAgICB5ID0geSArICgg ci5oZWlnaHQoKSAtIHMuaGVpZ2h0KCkgKTsKICAgIGVsc2UgaWYgKCAhKGFsaWduICYgUXQ6OkFs aWduVG9wKSApCiAgICAgICAgeSA9IHkgKyAoIHIuaGVpZ2h0KCkgLSBzLmhlaWdodCgpICkgLyAy OwoKICAgIGlmICggIXdpZC0+aXNIaWRkZW4oKSAmJiAhd2lkLT5pc1RvcExldmVsKCkgKQogICAg ICAgIHdpZC0+c2V0R2VvbWV0cnkoIHgsIHksIHMud2lkdGgoKSwgcy5oZWlnaHQoKSApOwp9CgoK CgoKCgpRUmVjdCBRU3BhY2VySXRlbTo6Z2VvbWV0cnkoKSBjb25zdAp7CiAgICByZXR1cm4gcmVj dDsKfQoKCgoKCgpRUmVjdCBRV2lkZ2V0SXRlbTo6Z2VvbWV0cnkoKSBjb25zdAp7CiAgICByZXR1 cm4gd2lkLT5nZW9tZXRyeSgpOwp9CgoKCgoKClFSZWN0IFFMYXlvdXQ6Omdlb21ldHJ5KCkgY29u c3QKewogICAgcmV0dXJuIHJlY3Q7Cn0KCgoKCgoKCmJvb2wgUVdpZGdldEl0ZW06Omhhc0hlaWdo dEZvcldpZHRoKCkgY29uc3QKewogICAgaWYgKCBpc0VtcHR5KCkgKQogICAgICAgIHJldHVybiBG QUxTRTsKICAgIGlmICggd2lkLT5sYXlvdXQoKSApCiAgICAgICAgcmV0dXJuIHdpZC0+bGF5b3V0 KCktPmhhc0hlaWdodEZvcldpZHRoKCk7CiAgICByZXR1cm4gd2lkLT5zaXplUG9saWN5KCkuaGFz SGVpZ2h0Rm9yV2lkdGgoKTsKfQoKCgoKCmludCBRV2lkZ2V0SXRlbTo6aGVpZ2h0Rm9yV2lkdGgo IGludCB3ICkgY29uc3QKewogICAgaWYgKCBpc0VtcHR5KCkgKQogICAgICAgIHJldHVybiAwOwog ICAgaWYgKCB3aWQtPmxheW91dCgpICkKICAgICAgICByZXR1cm4gd2lkLT5sYXlvdXQoKS0+dG90 YWxIZWlnaHRGb3JXaWR0aCggdyApOwogICAgcmV0dXJuIHdpZC0+aGVpZ2h0Rm9yV2lkdGgoIHcg KTsKfQoKCgoKUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgUVNwYWNlckl0ZW06OmV4cGFuZGluZygp IGNvbnN0CnsKICAgIHJldHVybiBzaXplUC5leHBhbmRpbmcoKTsKfQoKCgoKClFTaXplUG9saWN5 OjpFeHBhbmREYXRhIFFXaWRnZXRJdGVtOjpleHBhbmRpbmcoKSBjb25zdAp7CiAgICBpZiAoIGlz RW1wdHkoKSB8fCBhbGlnbiZIb3JBbGlnbiAmJiBhbGlnbiZWZXJBbGlnbiApCiAgICAgICAgcmV0 dXJuIFFTaXplUG9saWN5OjpOb0RpcmVjdGlvbjsKICAgIGludCBlID0gd2lkLT5sYXlvdXQoKSA/ IHdpZC0+bGF5b3V0KCktPmV4cGFuZGluZygpCiAgICAgICAgICAgICA6IHdpZC0+c2l6ZVBvbGlj eSgpLmV4cGFuZGluZygpOwogICAgaWYgKCBhbGlnbiZIb3JBbGlnbiApCiAgICAgICAgZSA9IGUg JiB+UVNpemVQb2xpY3k6Okhvcml6b250YWw7CiAgICBlbHNlIGlmICggYWxpZ24mVmVyQWxpZ24g KQogICAgICAgIGUgPSBlICYgflFTaXplUG9saWN5OjpWZXJ0aWNhbDsKCiAgICByZXR1cm4gKFFT aXplUG9saWN5OjpFeHBhbmREYXRhKWU7Cn0KCgoKClFTaXplIFFTcGFjZXJJdGVtOjptaW5pbXVt U2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggc2l6ZVAubWF5U2hyaW5rSG9yaXpvbnRh bGx5KCkgPyAwIDogd2lkdGgsCiAgICAgICAgICAgICAgICAgIHNpemVQLm1heVNocmlua1ZlcnRp Y2FsbHkoKSA/IDAgOiBoZWlnaHQgKTsKfQoKCgoKClFTaXplIFFXaWRnZXRJdGVtOjptaW5pbXVt U2l6ZSgpIGNvbnN0CnsKICAgIGlmICggaXNFbXB0eSgpICkKICAgICAgICByZXR1cm4gUVNpemUo MCwwKTsKICAgIHJldHVybiBzbWFydE1pblNpemUoIHRoaXMgKTsKfQoKCgoKClFTaXplIFFTcGFj ZXJJdGVtOjptYXhpbXVtU2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggc2l6ZVAubWF5 R3Jvd0hvcml6b250YWxseSgpID8gMzI3NjcgOiB3aWR0aCwKICAgICAgICAgICAgICAgICAgc2l6 ZVAubWF5R3Jvd1ZlcnRpY2FsbHkoKSA/IDMyNzY3IDogaGVpZ2h0ICk7Cn0KCgoKClFTaXplIFFX aWRnZXRJdGVtOjptYXhpbXVtU2l6ZSgpIGNvbnN0CnsKICAgIGlmICggaXNFbXB0eSgpICkKICAg ICAgICByZXR1cm4gUVNpemUoMCwwKTsKICAgIHJldHVybiBzbWFydE1heFNpemUoIHdpZCwgYWxp Z24gKTsKfQoKCgoKUVNpemUgUVNwYWNlckl0ZW06OnNpemVIaW50KCkgY29uc3QKewogICAgcmV0 dXJuIFFTaXplKCB3aWR0aCwgaGVpZ2h0ICk7Cn0KIyA1NzIgImtlcm5lbC9xYWJzdHJhY3RsYXlv dXQuY3BwIgpRU2l6ZSBRV2lkZ2V0SXRlbTo6c2l6ZUhpbnQoKSBjb25zdAp7CgoKICAgIFFTaXpl IHM7CiAgICBpZiAoIGlzRW1wdHkoKSApCiAgICAgICAgcyA9IFFTaXplKDAsMCk7CiAgICBlbHNl CiAgICAgICAgcyA9IHdpZC0+c2l6ZUhpbnQoKS5ib3VuZGVkVG8oIHdpZC0+bWF4aW11bVNpemUo KSApCiAgICAgICAgICAgIC5leHBhbmRlZFRvKCB3aWQtPm1pbmltdW1TaXplKCkgKS5leHBhbmRl ZFRvKCBRU2l6ZSgxLDEpICk7CgoKICAgIHJldHVybiBzOwp9CgoKCgpib29sIFFTcGFjZXJJdGVt Ojppc0VtcHR5KCkgY29uc3QKewogICAgcmV0dXJuIFRSVUU7Cn0KCgoKCmJvb2wgUVdpZGdldEl0 ZW06OmlzRW1wdHkoKSBjb25zdAp7CiAgICByZXR1cm4gd2lkLT5pc0hpZGRlbigpIHx8IHdpZC0+ aXNUb3BMZXZlbCgpOwp9CiMgNjU2ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUUxheW91 dDo6UUxheW91dCggUVdpZGdldCAqcGFyZW50LCBpbnQgYm9yZGVyLCBpbnQgc3BhY2UsIGNvbnN0 IGNoYXIgKm5hbWUgKQogICAgOiBRT2JqZWN0KCBwYXJlbnQsIG5hbWUgKQp7CiAgICBpbml0KCk7 CiAgICBpZiAoIHBhcmVudCApIHsKICAgICAgICBpZiAoIHBhcmVudC0+bGF5b3V0KCkgKSB7CiAg ICAgICAgICAgIHFXYXJuaW5nKCAiUUxheW91dCBcIiVzXCIgYWRkZWQgdG8gJXMgXCIlc1wiLCIK ICAgICAgICAgICAgICAgICAgICAgIiB3aGljaCBhbHJlYWR5IGhhZCBhIGxheW91dC4iLCBRT2Jq ZWN0OjpuYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+Y2xhc3NOYW1lKCksIHBh cmVudC0+bmFtZSgpICk7CiAgICAgICAgICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQoIHRoaXMgKTsK ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3BMZXZlbCA9IFRSVUU7CiAgICAgICAgICAg IGlmICggcGFyZW50LT5pc1RvcExldmVsKCkgKQogICAgICAgICAgICAgICAgYXV0b01pbmltdW0g PSBUUlVFOwogICAgICAgICAgICBwYXJlbnQtPmluc3RhbGxFdmVudEZpbHRlciggdGhpcyApOwog ICAgICAgICAgICBzZXRXaWRnZXRMYXlvdXQoIHBhcmVudCwgdGhpcyApOwogICAgICAgIH0KICAg IH0KICAgIG91dHNpZGVCb3JkZXIgPSBib3JkZXI7CiAgICBpZiAoIHNwYWNlIDwgMCApCiAgICAg ICAgaW5zaWRlU3BhY2luZyA9IGJvcmRlcjsKICAgIGVsc2UKICAgICAgICBpbnNpZGVTcGFjaW5n ID0gc3BhY2U7CiAgICBpbnN0YWxsRXZlbnRGaWx0ZXIoIHRoaXMgKTsKfQoKdm9pZCBRTGF5b3V0 Ojppbml0KCkKewogICAgaW5zaWRlU3BhY2luZyA9IDA7CiAgICBvdXRzaWRlQm9yZGVyID0gMDsK ICAgIHRvcExldmVsID0gRkFMU0U7CiAgICBhdXRvTWluaW11bSA9IEZBTFNFOwogICAgYXV0b05l d0NoaWxkID0gRkFMU0U7CiAgICBmcm96ZW4gPSBGQUxTRTsKICAgIGFjdGl2YXRlZCA9IEZBTFNF OwogICAgbWFyZ2luSW1wbCA9IEZBTFNFOwogICAgZXh0cmFEYXRhID0gMDsKCiAgICBtZW51YmFy ID0gMDsKCiAgICBlbmFibGVkID0gVFJVRTsKfQojIDcwOSAia2VybmVsL3FhYnN0cmFjdGxheW91 dC5jcHAiClFMYXlvdXQ6OlFMYXlvdXQoIFFMYXlvdXQgKnBhcmVudExheW91dCwgaW50IHNwYWNl LCBjb25zdCBjaGFyICpuYW1lICkKICAgIDogUU9iamVjdCggcGFyZW50TGF5b3V0LCBuYW1lICkK CnsKICAgIGluaXQoKTsKICAgIGluc2lkZVNwYWNpbmcgPSBzcGFjZSA8IDAgPyBwYXJlbnRMYXlv dXQtPmluc2lkZVNwYWNpbmcgOiBzcGFjZTsKICAgIHBhcmVudExheW91dC0+YWRkSXRlbSggdGhp cyApOwogICAgaW5zdGFsbEV2ZW50RmlsdGVyKCB0aGlzICk7Cn0KIyA3MjkgImtlcm5lbC9xYWJz dHJhY3RsYXlvdXQuY3BwIgpRTGF5b3V0OjpRTGF5b3V0KCBpbnQgc3BhY2UsIGNvbnN0IGNoYXIg Km5hbWUgKQogICAgOiBRT2JqZWN0KCAwLCBuYW1lICkKewogICAgaW5pdCgpOwogICAgaW5zaWRl U3BhY2luZyA9IHNwYWNlOwogICAgaW5zdGFsbEV2ZW50RmlsdGVyKCB0aGlzICk7Cn0KIyA4Mjkg Imtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldE1hcmdpbiggaW50 IGJvcmRlciApCnsKICAgIG91dHNpZGVCb3JkZXIgPSBib3JkZXI7CiAgICBpbnZhbGlkYXRlKCk7 CiAgICBpZiAoIG1haW5XaWRnZXQoKSApIHsKICAgICAgICBRRXZlbnQgKmxoID0gbmV3IFFFdmVu dCggUUV2ZW50OjpMYXlvdXRIaW50ICk7CiAgICAgICAgUUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQo IG1haW5XaWRnZXQoKSwgbGggKTsKICAgIH0KfQojIDg0NiAia2VybmVsL3FhYnN0cmFjdGxheW91 dC5jcHAiCnZvaWQgUUxheW91dDo6c2V0U3BhY2luZyggaW50IHNwYWNlICkKewogICAgaW5zaWRl U3BhY2luZyA9IHNwYWNlOwogICAgaW52YWxpZGF0ZSgpOwogICAgaWYgKCBtYWluV2lkZ2V0KCkg KSB7CiAgICAgICAgUUV2ZW50ICpsaCA9IG5ldyBRRXZlbnQoIFFFdmVudDo6TGF5b3V0SGludCAp OwogICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KCBtYWluV2lkZ2V0KCksIGxoICk7CiAg ICB9Cn0KIyA4NjQgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRV2lkZ2V0ICogUUxheW91 dDo6bWFpbldpZGdldCgpCnsKICAgIGlmICggIXRvcExldmVsICkgewogICAgICAgIGlmICggcGFy ZW50KCkgKSB7CiAgICAgICAgICAgIGlmICggIShwYXJlbnQoKS0+aW5oZXJpdHMoICJRTGF5b3V0 IiApKSApIHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwicGFyZW50KCktPmlu aGVyaXRzKCBcIlFMYXlvdXRcIiApIiwia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiLDg2OCk7 CiAgICAgICAgICAgIHJldHVybiAoKFFMYXlvdXQqKXBhcmVudCgpKS0+bWFpbldpZGdldCgpOwog ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0gZWxz ZSB7CiAgICAgICAgaWYgKCAhKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1dpZGdldFR5cGUoKSkg KSBxV2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMgKCVkKSIsInBhcmVudCgpICYmIHBhcmVu dCgpLT5pc1dpZGdldFR5cGUoKSIsImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIiw4NzQpOwog ICAgICAgIHJldHVybiAoUVdpZGdldCopcGFyZW50KCk7CiAgICB9Cn0KCgoKCgoKYm9vbCBRTGF5 b3V0Ojppc0VtcHR5KCkgY29uc3QKewogICAgcmV0dXJuIEZBTFNFOwp9CgoKCgoKdm9pZCBRTGF5 b3V0OjpzZXRXaWRnZXRMYXlvdXQoIFFXaWRnZXQgKncsIFFMYXlvdXQgKmwgKQp7CiAgICB3LT5z ZXRMYXlvdXQoIGwgKTsKfQojIDkwNyAia2VybmVsL3FhYnN0cmFjdGxheW91dC5jcHAiCnZvaWQg UUxheW91dDo6c2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICZyICkKewogICAgcmVjdCA9IHI7Cn0K IyA5MTkgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OmludmFsaWRh dGUoKQp7CiAgICByZWN0ID0gUVJlY3QoKTsKfQojIDkzNSAia2VybmVsL3FhYnN0cmFjdGxheW91 dC5jcHAiCnN0YXRpYyBib29sIHJlbW92ZVdpZGdldCggUUxheW91dEl0ZW0gKmxheSwgUVdpZGdl dCAqdyApCnsKICAgIGJvb2wgZm9vID0gRkFMU0U7CiAgICBRTGF5b3V0SXRlcmF0b3IgaXQgPSBs YXktPml0ZXJhdG9yKCk7CiAgICBRTGF5b3V0SXRlbSAqY2hpbGQ7CiAgICB3aGlsZSAoIChjaGls ZCA9IGl0LmN1cnJlbnQoKSApICkgewogICAgICAgIGlmICggY2hpbGQtPndpZGdldCgpID09IHcg KSB7CiAgICAgICAgICAgIGl0LmRlbGV0ZUN1cnJlbnQoKTsKICAgICAgICAgICAgbGF5LT5pbnZh bGlkYXRlKCk7CiAgICAgICAgICAgIGZvbyA9IFRSVUU7CiAgICAgICAgfSBlbHNlIGlmICggcmVt b3ZlV2lkZ2V0KCBjaGlsZCwgdyApICkgewogICAgICAgICAgICBsYXktPmludmFsaWRhdGUoKTsK ICAgICAgICAgICAgZm9vID0gVFJVRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICArK2l0 OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmb287Cn0KCgoKCgoKYm9vbCBRTGF5b3V0Ojpl dmVudEZpbHRlciggUU9iamVjdCAqbywgUUV2ZW50ICplICkKewogICAgaWYgKCAhZW5hYmxlZCAp CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGlmICggbyA9PSB0aGlzICYmIGUtPnR5cGUoKSA9 PSBRRXZlbnQ6OkNoaWxkUmVtb3ZlZCApIHsKCgogICAgICAgIFFDaGlsZEV2ZW50ICpjID0gKFFD aGlsZEV2ZW50KillOwogICAgICAgIFFMYXlvdXRJdGVyYXRvciBpdCA9IGl0ZXJhdG9yKCk7CiAg ICAgICAgUUxheW91dEl0ZW0gKml0ZW07CiAgICAgICAgd2hpbGUgKCAoaXRlbSA9IGl0LmN1cnJl bnQoKSApICkgewogICAgICAgICAgICBpZiAoIGl0ZW0gPT0gKFFMYXlvdXQqKWMtPmNoaWxkKCkg KSB7CiAgICAgICAgICAgICAgICBpdC50YWtlQ3VycmVudCgpOwogICAgICAgICAgICAgICAgaW52 YWxpZGF0ZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICB9CiAg ICAgICAgICAgICsraXQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAg ICBpZiAoICFvLT5pc1dpZGdldFR5cGUoKSApCiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIHN3 aXRjaCAoIGUtPnR5cGUoKSApIHsKICAgIGNhc2UgUUV2ZW50OjpSZXNpemU6CiAgICAgICAgaWYg KCBhY3RpdmF0ZWQgKSB7CiAgICAgICAgICAgIFFSZXNpemVFdmVudCAqciA9IChRUmVzaXplRXZl bnQqKWU7CiAgICAgICAgICAgIGludCBtYmggPSAwOwoKICAgICAgICAgICAgaWYgKCBtZW51YmFy ICYmICFtZW51YmFyLT5pc0hpZGRlbigpICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAg ICAgICAgICAgICAgbWJoID0gbWVudWJhci0+aGVpZ2h0Rm9yV2lkdGgoIHItPnNpemUoKS53aWR0 aCgpICk7CgogICAgICAgICAgICBpbnQgYiA9IG1hcmdpbkltcGwgPyAwIDogb3V0c2lkZUJvcmRl cjsKICAgICAgICAgICAgc2V0R2VvbWV0cnkoIFFSZWN0KCBiLCBtYmggKyBiLCByLT5zaXplKCku d2lkdGgoKSAtIDIqYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5zaXplKCku aGVpZ2h0KCkgLSBtYmggLSAyKmIgKSApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFj dGl2YXRlKCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgY2FzZSBRRXZlbnQ6OkNoaWxk UmVtb3ZlZDogewogICAgICAgIFFDaGlsZEV2ZW50ICpjID0gKFFDaGlsZEV2ZW50KillOwogICAg ICAgIGlmICggYy0+Y2hpbGQoKS0+aXNXaWRnZXRUeXBlKCkgKSB7CiAgICAgICAgICAgIFFXaWRn ZXQgKncgPSAoUVdpZGdldCopYy0+Y2hpbGQoKTsKCiAgICAgICAgICAgIGlmICggdyA9PSBtZW51 YmFyICkKICAgICAgICAgICAgICAgIG1lbnViYXIgPSAwOwoKICAgICAgICAgICAgaWYgKCByZW1v dmVXaWRnZXQoIHRoaXMsIHcgKSApIHsKICAgICAgICAgICAgICAgIFFFdmVudCAqbGggPSBuZXcg UUV2ZW50KCBRRXZlbnQ6OkxheW91dEhpbnQgKTsKICAgICAgICAgICAgICAgIFFBcHBsaWNhdGlv bjo6cG9zdEV2ZW50KCBvLCBsaCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJy ZWFrOwogICAgfQogICAgY2FzZSBRRXZlbnQ6OkNoaWxkSW5zZXJ0ZWQ6CiAgICAgICAgaWYgKCB0 b3BMZXZlbCAmJiBhdXRvTmV3Q2hpbGQgKSB7CiAgICAgICAgICAgIFFDaGlsZEV2ZW50ICpjID0g KFFDaGlsZEV2ZW50KillOwogICAgICAgICAgICBpZiAoIGMtPmNoaWxkKCktPmlzV2lkZ2V0VHlw ZSgpICkgewogICAgICAgICAgICAgICAgUVdpZGdldCAqdyA9IChRV2lkZ2V0KiljLT5jaGlsZCgp OwogICAgICAgICAgICAgICAgaWYgKCAhdy0+aXNUb3BMZXZlbCgpICkgewoKICAgICAgICAgICAg ICAgICAgICBpZiAoIHctPmluaGVyaXRzKCAiUU1lbnVCYXIiICkgJiYgKCAhdy0+cGFyZW50KCkg fHwgIXctPnBhcmVudCgpLT5pbmhlcml0cyggIlFUb29sQmFyIiApICkgKQogICAgICAgICAgICAg ICAgICAgICAgICBtZW51YmFyID0gKFFNZW51QmFyKil3OwogICAgICAgICAgICAgICAgICAgIGVs c2UKCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW0oIG5ldyBRV2lkZ2V0SXRlbSggdyAp ICk7CiAgICAgICAgICAgICAgICAgICAgUUV2ZW50ICpsaCA9IG5ldyBRRXZlbnQoIFFFdmVudDo6 TGF5b3V0SGludCApOwogICAgICAgICAgICAgICAgICAgIFFBcHBsaWNhdGlvbjo6cG9zdEV2ZW50 KCBvLCBsaCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICAgIGJyZWFrOwogICAgY2FzZSBRRXZlbnQ6OkxheW91dEhpbnQ6CiAgICAgICAgYWN0aXZhdGUo KTsKICAgICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBy ZXR1cm4gUU9iamVjdDo6ZXZlbnRGaWx0ZXIoIG8sIGUgKTsKCn0KCgoKCgoKCmludCBRTGF5b3V0 Ojp0b3RhbEhlaWdodEZvcldpZHRoKCBpbnQgdyApIGNvbnN0CnsKICAgIGlmICggdG9wTGV2ZWwg KSB7CiAgICAgICAgUVdpZGdldCAqbXcgPSAoUVdpZGdldCopcGFyZW50KCk7CiAgICAgICAgaWYg KCBtdyAmJiAhbXctPnRlc3RXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKSApIHsKICAgICAgICAgICAg bXctPnBvbGlzaCgpOwogICAgICAgIH0KICAgIH0KICAgIGludCBiID0gKHRvcExldmVsICYmICFt YXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJvcmRlciA6IDA7CiAgICBpbnQgaCA9IGhlaWdodEZvcldp ZHRoKCB3IC0gYiApICsgYjsKCiAgICBpZiAoIG1lbnViYXIgJiYgIW1lbnViYXItPmlzVG9wTGV2 ZWwoKSApCiAgICAgICAgaCArPSBtZW51YmFyLT5oZWlnaHRGb3JXaWR0aCggdyApOwoKICAgIHJl dHVybiBoOwp9CgoKCgoKClFTaXplIFFMYXlvdXQ6OnRvdGFsTWluaW11bVNpemUoKSBjb25zdAp7 CiAgICBpZiAoIHRvcExldmVsICkgewogICAgICAgIFFXaWRnZXQgKm13ID0gKFFXaWRnZXQqKXBh cmVudCgpOwogICAgICAgIGlmICggbXcgJiYgIW13LT50ZXN0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hl ZCkgKSB7CiAgICAgICAgICAgIG13LT5wb2xpc2goKTsKICAgICAgICB9CiAgICB9CiAgICBpbnQg YiA9ICh0b3BMZXZlbCAmJiAhbWFyZ2luSW1wbCkgPyAyKm91dHNpZGVCb3JkZXIgOiAwOwoKICAg IFFTaXplIHMgPSBtaW5pbXVtU2l6ZSgpOwogICAgaW50IGggPSBiOwoKICAgIGlmICggbWVudWJh ciAmJiAhbWVudWJhci0+aXNUb3BMZXZlbCgpICkKICAgICAgICBoICs9IG1lbnViYXItPmhlaWdo dEZvcldpZHRoKCBzLndpZHRoKCkgKTsKCiAgICByZXR1cm4gcyArIFFTaXplKGIsaCk7Cn0KIyAx MDk4ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemUgUUxheW91dDo6dG90YWxTaXpl SGludCgpIGNvbnN0CnsKICAgIGlmICggdG9wTGV2ZWwgKSB7CiAgICAgICAgUVdpZGdldCAqbXcg PSAoUVdpZGdldCopcGFyZW50KCk7CiAgICAgICAgaWYgKCBtdyAmJiAhbXctPnRlc3RXU3RhdGUo V1N0YXRlX1BvbGlzaGVkKSApIHsKICAgICAgICAgICAgbXctPnBvbGlzaCgpOwogICAgICAgIH0K ICAgIH0KICAgIGludCBiID0gKHRvcExldmVsICYmICFtYXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJv cmRlciA6IDA7CgogICAgUVNpemUgcyA9IHNpemVIaW50KCk7CiAgICBpbnQgaCA9IGI7CgogICAg aWYgKCBtZW51YmFyICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAgICAgIGggKz0gbWVu dWJhci0+aGVpZ2h0Rm9yV2lkdGgoIHMud2lkdGgoKSApOwoKICAgIHJldHVybiBzICsgUVNpemUo YixoKTsKfQoKCgoKCgoKUVNpemUgUUxheW91dDo6dG90YWxNYXhpbXVtU2l6ZSgpIGNvbnN0CnsK ICAgIGlmICggdG9wTGV2ZWwgKSB7CiAgICAgICAgUVdpZGdldCAqbXcgPSAoUVdpZGdldCopcGFy ZW50KCk7CiAgICAgICAgaWYgKCBtdyAmJiAhbXctPnRlc3RXU3RhdGUoV1N0YXRlX1BvbGlzaGVk KSApIHsKICAgICAgICAgICAgbXctPnBvbGlzaCgpOwogICAgICAgIH0KICAgIH0KICAgIGludCBi ID0gKHRvcExldmVsICYmICFtYXJnaW5JbXBsKSA/IDIqb3V0c2lkZUJvcmRlciA6IDA7CgogICAg UVNpemUgcyA9IG1heGltdW1TaXplKCk7CiAgICBpbnQgaCA9IGI7CgogICAgaWYgKCBtZW51YmFy ICYmICFtZW51YmFyLT5pc1RvcExldmVsKCkgKQogICAgICAgIGggKz0gbWVudWJhci0+aGVpZ2h0 Rm9yV2lkdGgoIHMud2lkdGgoKSApOwoKCiAgICBpZiAoIGlzVG9wTGV2ZWwoKSApCiAgICAgICAg cyA9IFFTaXplKCAoKHMud2lkdGgoKSArIGIpIDwgKDMyNzY3KSA/IChzLndpZHRoKCkgKyBiKSA6 ICgzMjc2NykpLAogICAgICAgICAgICAgICAgICAgKChzLmhlaWdodCgpICsgaCkgPCAoMzI3Njcp ID8gKHMuaGVpZ2h0KCkgKyBoKSA6ICgzMjc2NykpICk7CiAgICByZXR1cm4gczsKfQojIDExNTcg Imtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRTGF5b3V0Ojp+UUxheW91dCgpCnsKCgogICAg aWYgKCBpc1RvcExldmVsKCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzV2lkZ2V0VHlwZSgp ICYmCiAgICAgICAgICgoUVdpZGdldCopcGFyZW50KCkpLT5sYXlvdXQoKSA9PSB0aGlzICkKICAg ICAgICBzZXRXaWRnZXRMYXlvdXQoIChRV2lkZ2V0KilwYXJlbnQoKSwgMCApOwp9CgoKCgp2b2lk IFFMYXlvdXQ6OmRlbGV0ZUFsbEl0ZW1zKCkKewogICAgUUxheW91dEl0ZXJhdG9yIGl0ID0gaXRl cmF0b3IoKTsKICAgIFFMYXlvdXRJdGVtICpsOwogICAgd2hpbGUgKCAobD1pdC50YWtlQ3VycmVu dCgpKSApCiAgICAgICAgZGVsZXRlIGw7Cn0KCgoKCgp2b2lkIFFMYXlvdXQ6OmFkZENoaWxkTGF5 b3V0KCBRTGF5b3V0ICpsICkKewogICAgaWYgKCBsLT5wYXJlbnQoKSApIHsKCiAgICAgICAgcVdh cm5pbmcoICJRTGF5b3V0OjphZGRDaGlsZExheW91dCgpLCBsYXlvdXQgYWxyZWFkeSBoYXMgYSBw YXJlbnQuIiApOwoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnNlcnRDaGlsZCggbCApOwog ICAgaWYgKCBsLT5pbnNpZGVTcGFjaW5nIDwgMCApCiAgICAgICAgbC0+aW5zaWRlU3BhY2luZyA9 IGluc2lkZVNwYWNpbmc7Cn0KIyAxMjE1ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKdm9p ZCBRTGF5b3V0OjpmcmVlemUoIGludCB3LCBpbnQgaCApCnsKICAgIGlmICggdyA8PSAwIHx8IGgg PD0gMCApIHsKICAgICAgICBzZXRSZXNpemVNb2RlKCBGaXhlZCApOwogICAgfSBlbHNlIHsKICAg ICAgICBzZXRSZXNpemVNb2RlKCBGcmVlUmVzaXplICk7CiAgICAgICAgbWFpbldpZGdldCgpLT5z ZXRGaXhlZFNpemUoIHcsIGggKTsKICAgIH0KfQojIDEyMzUgImtlcm5lbC9xYWJzdHJhY3RsYXlv dXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldE1lbnVCYXIoIFFNZW51QmFyICp3ICkKewogICAgbWVu dWJhciA9IHc7Cn0KIyAxMjUwICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemUgUUxh eW91dDo6bWluaW11bVNpemUoKSBjb25zdAp7CiAgICByZXR1cm4gUVNpemUoIDAsIDAgKTsKfQoj IDEyNjQgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgpRU2l6ZSBRTGF5b3V0OjptYXhpbXVt U2l6ZSgpIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggMzI3NjcsIDMyNzY3ICk7Cn0KIyAxMjc5 ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUVNpemVQb2xpY3k6OkV4cGFuZERhdGEgUUxh eW91dDo6ZXhwYW5kaW5nKCkgY29uc3QKewogICAgcmV0dXJuIFFTaXplUG9saWN5OjpCb3RoRGly ZWN0aW9uczsKfQoKCgoKc3RhdGljIHZvaWQgaW52YWxpZGF0ZVJlY3Vyc2l2ZSggUUxheW91dEl0 ZW0gKmxheSApCnsKICAgIGxheS0+aW52YWxpZGF0ZSgpOwogICAgUUxheW91dEl0ZXJhdG9yIGl0 ID0gbGF5LT5pdGVyYXRvcigpOwogICAgUUxheW91dEl0ZW0gKmNoaWxkOwogICAgd2hpbGUgKCAo Y2hpbGQgPSBpdC5jdXJyZW50KCkgKSApIHsKICAgICAgICBpbnZhbGlkYXRlUmVjdXJzaXZlKCBj aGlsZCApOwogICAgICAgICsraXQ7CiAgICB9Cn0KIyAxMzEyICJrZXJuZWwvcWFic3RyYWN0bGF5 b3V0LmNwcCIKYm9vbCBRTGF5b3V0OjphY3RpdmF0ZSgpCnsKCgoKICAgIGludmFsaWRhdGVSZWN1 cnNpdmUoIHRoaXMgKTsKICAgIGlmICggIXRvcExldmVsICkKICAgICAgICByZXR1cm4gRkFMU0U7 CgogICAgUVdpZGdldCAqbWFpblcgPSBtYWluV2lkZ2V0KCk7CiAgICBpZiAoICFtYWluVyApIHsK CiAgICAgICAgICAgIHFXYXJuaW5nKCAiUUxheW91dDo6YWN0aXZhdGUoKTogJXMgXCIlc1wiIGRv ZXMgbm90IGhhdmUgYSAiCiAgICAgICAgICAgICAgICAgICAgICAibWFpbiB3aWRnZXQuIiwKICAg ICAgICAgICAgICAgICAgICAgUU9iamVjdDo6Y2xhc3NOYW1lKCksIFFPYmplY3Q6Om5hbWUoKSAp OwoKCiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgYWN0aXZhdGVkID0gVFJVRTsKICAg IFFTaXplIHMgPSBtYWluV2lkZ2V0KCktPnNpemUoKTsKICAgIGludCBtYmggPSAwOwoKICAgIG1i aCA9IG1lbnViYXIgJiYgIW1lbnViYXItPmlzVG9wTGV2ZWwoKSA/IG1lbnViYXItPmhlaWdodEZv cldpZHRoKCBzLndpZHRoKCkgKSA6IDA7CgogICAgaW50IGIgPSBtYXJnaW5JbXBsID8gMCA6IG91 dHNpZGVCb3JkZXI7CiAgICBzZXRHZW9tZXRyeSggUVJlY3QoIGIsIG1iaCArIGIsCiAgICAgICAg ICAgICAgICAgICAgICAgIHMud2lkdGgoKSAtIDIqYiwKICAgICAgICAgICAgICAgICAgICAgICAg cy5oZWlnaHQoKSAtIG1iaCAtIDIqYiApICk7CiAgICBpZiAoIGZyb3plbiApCiAgICAgICAgbWFp bldpZGdldCgpLT5zZXRGaXhlZFNpemUoIHRvdGFsU2l6ZUhpbnQoKSApOwogICAgZWxzZSBpZiAo IGF1dG9NaW5pbXVtICkKICAgICAgICBtYWluV2lkZ2V0KCktPnNldE1pbmltdW1TaXplKCB0b3Rh bE1pbmltdW1TaXplKCkgKTsKCgogICAgbWFpbldpZGdldCgpLT51cGRhdGVHZW9tZXRyeSgpOwog ICAgcmV0dXJuIFRSVUU7Cn0KIyAxNTYyICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0LmNwcCIKUUdM YXlvdXRJdGVyYXRvcjo6flFHTGF5b3V0SXRlcmF0b3IoKQp7Cn0KIyAxNjg3ICJrZXJuZWwvcWFi c3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRSZXNpemVNb2RlKCBSZXNpemVNb2Rl IG1vZGUgKQp7CiAgICBpZiAoIG1vZGUgPT0gcmVzaXplTW9kZSgpICkKICAgICAgICByZXR1cm47 CiAgICBzd2l0Y2ggKG1vZGUpIHsKICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgZnJvemVuID0gVFJV RTsKICAgICAgICBicmVhazsKICAgIGNhc2UgRnJlZVJlc2l6ZToKICAgICAgICBmcm96ZW4gPSBG QUxTRTsKICAgICAgICBhdXRvTWluaW11bSA9IEZBTFNFOwogICAgICAgIGJyZWFrOwogICAgY2Fz ZSBNaW5pbXVtOgogICAgICAgIGZyb3plbiA9IEZBTFNFOwogICAgICAgIGF1dG9NaW5pbXVtID0g VFJVRTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGFjdGl2YXRlKCk7Cn0KCgoKCgoKUUxheW91 dDo6UmVzaXplTW9kZSBRTGF5b3V0OjpyZXNpemVNb2RlKCkgY29uc3QKewogICAgcmV0dXJuIGZy b3plbiA/IEZpeGVkIDogKGF1dG9NaW5pbXVtID8gTWluaW11bSA6IEZyZWVSZXNpemUgKTsKfQoj IDE3MzUgImtlcm5lbC9xYWJzdHJhY3RsYXlvdXQuY3BwIgp2b2lkIFFMYXlvdXQ6OnNldEF1dG9B ZGQoIGJvb2wgYiApCnsKICAgIGF1dG9OZXdDaGlsZCA9IGI7Cn0KIyAxNzY0ICJrZXJuZWwvcWFi c3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRTdXBwb3J0c01hcmdpbiggYm9vbCBi ICkKewogICAgbWFyZ2luSW1wbCA9IGI7Cn0KIyAxNzc4ICJrZXJuZWwvcWFic3RyYWN0bGF5b3V0 LmNwcCIKUVJlY3QgUUxheW91dDo6YWxpZ25tZW50UmVjdCggY29uc3QgUVJlY3QgJnIgKSBjb25z dAp7CiAgICBRU2l6ZSBzID0gc2l6ZUhpbnQoKTsKICAgIGludCBhID0gYWxpZ25tZW50KCk7CiAg ICBpZiAoIGV4cGFuZGluZygpICYgUVNpemVQb2xpY3k6Okhvcml6b250YWwgfHwgIShhICYgSG9y QWxpZ24gKSApIHsKICAgICAgICBzLnNldFdpZHRoKCByLndpZHRoKCkgKTsKICAgIH0KICAgIGlm ICggZXhwYW5kaW5nKCkgJiBRU2l6ZVBvbGljeTo6VmVydGljYWwgfHwgIShhICYgVmVyQWxpZ24g KSkgewogICAgICAgIHMuc2V0SGVpZ2h0KCByLmhlaWdodCgpICk7CiAgICB9IGVsc2UgaWYgKCBo YXNIZWlnaHRGb3JXaWR0aCgpICkgewogICAgICAgIHMuc2V0SGVpZ2h0KCAoKHMuaGVpZ2h0KCkp IDwgKGhlaWdodEZvcldpZHRoKHMud2lkdGgoKSkpID8gKHMuaGVpZ2h0KCkpIDogKGhlaWdodEZv cldpZHRoKHMud2lkdGgoKSkpKSApOwogICAgfQoKICAgIGludCB4ID0gci54KCk7CiAgICBpbnQg eSA9IHIueSgpOwoKICAgIGlmICggYSAmIFF0OjpBbGlnblJpZ2h0ICkKICAgICAgICB4ID0geCAr ICggci53aWR0aCgpIC0gcy53aWR0aCgpICk7CiAgICBlbHNlIGlmICggIShhICYgUXQ6OkFsaWdu TGVmdCkgKQogICAgICAgIHggPSB4ICsgKCByLndpZHRoKCkgLSBzLndpZHRoKCkgKSAvIDI7Cgog ICAgaWYgKCBhICYgUXQ6OkFsaWduQm90dG9tICkKICAgICAgICB5ID0geSArICggci5oZWlnaHQo KSAtIHMuaGVpZ2h0KCkgKTsKICAgIGVsc2UgaWYgKCAhKGEgJiBRdDo6QWxpZ25Ub3ApICkKICAg ICAgICB5ID0geSArICggci5oZWlnaHQoKSAtIHMuaGVpZ2h0KCkgKSAvIDI7CgogICAgcmV0dXJu IFFSZWN0KCB4LCB5LCBzLndpZHRoKCksIHMuaGVpZ2h0KCkgKTsKCn0KIyAxODIwICJrZXJuZWwv cWFic3RyYWN0bGF5b3V0LmNwcCIKdm9pZCBRTGF5b3V0OjpzZXRFbmFibGVkKCBib29sIGVuYWJs ZSkKewogICAgZW5hYmxlZCA9IGVuYWJsZTsKfQoKCgoKCgoKYm9vbCBRTGF5b3V0Ojppc0VuYWJs ZWQoKSBjb25zdAp7CiAgICByZXR1cm4gZW5hYmxlZDsKfQo=