From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29155 invoked by alias); 4 Dec 2002 01:46:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 29135 invoked by uid 71); 4 Dec 2002 01:46:02 -0000 Resent-Date: 4 Dec 2002 01:46:02 -0000 Resent-Message-ID: <20021204014602.29134.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, ronny@mit.edu Received: (qmail 28077 invoked by uid 61); 4 Dec 2002 01:39:51 -0000 Message-Id: <20021204013951.28076.qmail@sources.redhat.com> Date: Tue, 03 Dec 2002 17:46:00 -0000 From: ronny@mit.edu Reply-To: ronny@mit.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/8805: very long (non-linear) compile times for an object with many vector members, possibly due to template instantiation X-SW-Source: 2002-12/txt/msg00184.txt.bz2 List-Id: >Number: 8805 >Category: c++ >Synopsis: very long (non-linear) compile times for an object with many vector members, possibly due to template instantiation >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Dec 03 17:46:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Ronny Krashinsky >Release: gcc version 3.1.1 >Organization: >Environment: x86, linux >Description: C is a class which contains a "vector". A is a class which contains N C's. The time for compiling A's constructor (with -O0) scales as approximately N^2.5. For example, when N=1000 compilation takes 7 secons, when N=2000 compilation takes 39 seconds, when N=4000 compilation takes 270 seconds. I believe that the compile time should be scaling linearly. Note that when N=4000, compilation takes only 12 seconds using gcc 2.95.3, so this is a new problem with gcc 3. Also, the problem does not occur if C contains a plain "int" or a simple templated object instead of a "vector". >How-To-Repeat: compile with "-O0 -c" >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="test.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.ii" IyAxICJ0ZXN0LmNjIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi dGVzdC5jYyIKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEv dmVjdG9yIiAxIDMKIyA2NSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu MS4xL3ZlY3RvciIgMwoKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysv My4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMu MS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb25fZGVmaW5lcy5oIiAx IDMKIyAzNSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDY3ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvdmVjdG9yIiAy IDMKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln LmgiIDEgMwojIDM0ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvdW5zL2VuY2Fw L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2Rl ZmluZXMuaCIgMSAzCiMgMzkgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAy IDMKIyA0MCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYt cGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u ZmlnLmgiIDIgMwojIDY1ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4x LjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4x L2luY2x1ZGUvYysrLzMuMS4xL2NzdHJpbmciIDEgMwojIDQ4ICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3N0cmluZyIgMwoKIyAxICIvdXNyL3Vucy9lbmNhcC9n Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvdW5zL2Vu Y2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkZGVmIiAzCgojIDEgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYg aW50IHB0cmRpZmZfdDsKIyAyMDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5z aWduZWQgaW50IHNpemVfdDsKIyA0OSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUv YysrLzMuMS4xL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZm X3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA1MCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2lu Y2x1ZGUvYysrLzMuMS4xL2NzdHJpbmciIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAy IDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25z dCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9p ZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0 cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQg Kl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQg Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u KQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBj aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJj YXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEg MwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxl X3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0 IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xv d2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3Ry eGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBj aGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFy ICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl cm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9f Y29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0 IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIg Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAq X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgp OwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93 ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1t ZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxl bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZv aWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBz dHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJy b3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChp bnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9f Y29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hh ciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50 IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25f XyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3Ry aW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs aW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoK CmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNw eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIg KnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9i ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFz ZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2lu Y2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvY3N0cmluZyIgMiAzCiMgNzcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9p bmNsdWRlL2MrKy8zLjEuMS9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVt Y3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5j cHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21w OwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7 CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsK ICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwog IHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVt Y2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29u c3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hy OwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVy biBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9 CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3Mx LCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nh c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlu bGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1 aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1 c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0 IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0 IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDY2ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEv aW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNy L3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY2xpbWl0cyIgMwoKIyAxICIv dXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4x LjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMg MSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvdW5zL2VuY2Fw L2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xp bWl0cy5oIiAxIDMKIyAxMzIgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0 cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAz CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi IDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgy X2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94 b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAz NSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAx IDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3Iv aW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMg OCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMS4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9saW1pdHMu aCIgMiAzCiMgNTAgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9j bGltaXRzIiAyIDMKIyA2NyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEu MS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkbGliIiAxIDMKIyA0OCAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRsaWIiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci91 bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0 ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwoj IDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dh aXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNs dWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAy IDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoK ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQg X193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAg ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAg IHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAg ICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsK CgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK CgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1 b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lk KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9f Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGlu dCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAo KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g dW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDIxNSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv bmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcg aW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYg c2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5 cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg aW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcg bG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9f dV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQg X19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19v ZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlw ZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9f dV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3Ry dWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19k YWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGlu dCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190 aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRf dDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f ZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9f dV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsK Cgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2Fs YXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYg aW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5o IiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9w YXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog IGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hl ZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5o ZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19z dGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsK fSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFk X2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29u ZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0 aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg MwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFy IHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50 Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVk ZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBl ZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBl ZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlw ZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBl ZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5 cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoK CnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBl ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5 cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEz MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MSAzCiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tf dDsKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsK IyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRf dDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90 OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNv bmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoK CgoKCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Owoj IDE5MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1 X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwoj IDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlw ZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2ln bmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50 KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv dGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVj CiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1 ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1l dmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwog IH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6 ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21h c2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMi IHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0 ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywK ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9f cmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj dCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4 Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz dHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9f cmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMg MjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVf dCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRl ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxj bnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250 NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlw ZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRo cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93 ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAg IGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAg ICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwog IH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3Qg X19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0 cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVf ciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4 ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBk cmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWdu ZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19h OwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFu ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVk dmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVy biBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK IyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXpl X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJu IHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxv YyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoK CmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAi L3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIg MwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkg dGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4 dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19t ZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0 ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25f ZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpf X2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lk IF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu X18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25h bWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2Nv bnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsK CgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMg NjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIg Kl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg dGhyb3cgKCk7CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJl YWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVk ZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7 CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9p ZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21w YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNp emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJf Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAo aW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGlu dCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9t KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBp bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAg ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVm KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChs b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpl eHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh ciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAg ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJu IGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAg ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3Np Z24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9f bGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs IGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxl biAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg bWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3 Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2gg KF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0 aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190 b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3Ig KGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZn IChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTMg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jc3RkbGliIiAyIDMK IyA4NCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRsaWIi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAg dXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6 OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7 CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5n IDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2 OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsK ICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2lu ZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6 OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3 Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kp IHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBs b25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251 X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25n IGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194 OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBf X3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25n IF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9f ZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAog IGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19x LnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAg dXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNp bmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5n IF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVf Y3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0 b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9s bDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9s ZDsKfQojIDY4ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNs dWRlL2MrKy8zLjEuMS9uZXciIDEgMwojIDQyICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5j bHVkZS9jKysvMy4xLjEvbmV3IiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1 ZGUvYysrLzMuMS4xL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEu MS9pbmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFj ZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRp b24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAg dmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNz IGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9l eGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhy b3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0 eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRs ZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVy bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9o YW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2V4Y2VwdGlvbiIgMwogIGJv b2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9fZ251X2N4eAp7 CiMgMTExICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0 aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAi L3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL25ldyIgMiAzCgpleHRl cm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMg ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAg IHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7 IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgq bmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxl cikgdGhyb3coKTsKfQojIDc5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysv My4xLjEvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6 YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6 OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpz aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3 W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy YXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBv cGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoK CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3co KSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90 LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9Cgp9CiMgNzAgIi91c3IvdW5zL2Vu Y2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK IyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaW9zZndkIiAx IDMKIyA0MyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2lvc2Z3 ZCIgMwoKCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w bGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4g c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0 czx3Y2hhcl90PjsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9j YXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5n PGNoYXI+IHN0cmluZzsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9 CiMgNDYgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pb3Nmd2Qi IDIgMwojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L2Zwb3MuaCIgMSAzCiMgNDMgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysraW8uaCIgMwojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2Mr Ky8zLjEuMS9jc3RkaW8iIDEgMwojIDQ4ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvY3N0ZGlvIiAzCgoKCgojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDEgMwoj IDM5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTQgIi91 c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAi L3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MS4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMg NzQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAz CiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDMyMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoj IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMg NjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3Vu dDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0g X192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3Rh dGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9f bWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIv dXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMK CgojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252 LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog IF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAog IF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZf SU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09O Vl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEs CiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj dDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2Zj dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0 eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4 dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0 YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7 CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7 CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90 IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0 IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwog IHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2dj b252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBl ZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy IDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRhcmcu aCIgMSAzCiMgNDMgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3Zh X2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAx NjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lP X0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xv Y2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0 OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkzICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0 X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRf bm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVz dHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j b2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNo aWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVu dW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2 dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0 ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19j b2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29k ZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9f Y29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2Nv ZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9 OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2No YXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAq X0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9f d3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2Vu ZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7 CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9f bWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsK CiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFi bGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9f cmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAg Y2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9f d3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAg Y2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lP X3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9f RklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBf b2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpf bG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7 CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBfSU9fd2lkZV9kYXRh ICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXpl b2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxF X3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lP X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg Mwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3Jp dGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9f c2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5 cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19p b19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBj b29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtf ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90 OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9m biAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9 IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4 dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmls ZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpf X2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMi IHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93 IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAo X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICop IHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3Qp IHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9f Z2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQg X19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19G SUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19m cCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2Zw KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0 aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0 NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19G SUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cg KCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90 KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwg c2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxF ICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19z ZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9p ZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKZXh0ZXJuIHdp bnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf SU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g aW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwojIDUw NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9JT19G SUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3aW50 X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBfYXJl YSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMu MS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4x L2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVm IF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzOCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvdW5zL2VuY2Fw L2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4 dGVybiBGSUxFICpzdGRlcnI7CiMgMTUzICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGlu dCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OSAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4x L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAo KTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OSAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19j b25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg ZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJl b3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMyAiL3Vzci91 bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS4xL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRv cGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lv X2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ TEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgp OwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBp bnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAq Kl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2Fz cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmlu dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoK CmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7 CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0 Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJf dW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50 IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh ciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM3ICIvdXNy L3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9f cmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3Nz aXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBf X2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRl cm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0 cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh ZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZv aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CiMgNTAwICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChG SUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4 dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmlj dCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJl YW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTM0ICIvdXNyL3Vucy9lbmNh cC9nY2MtMy4xLjEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3Qg X19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93 ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0 X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg ZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9p ZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lz X25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRl cm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxp c3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25z dCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoK CgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9i c3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBp bnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ss CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3Mp IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKIyA2NDQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDUzICIvdXNyL3Vucy9lbmNhcC9n Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGlvIiAyIDMKIyA5NyAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsK ICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAg dXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5n IDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6 ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0 YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwog IHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVz aW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6 Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmlu dGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAg dXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNp bmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcg OjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6 OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6 dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3N0ZGlvIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewog IHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6dnNjYW5mOwog IHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNwYWNlIHN0ZAp7 CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZmc2NhbmY7 CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c25wcmludGY7 CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzYgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIg MwoKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMu MS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMg MSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvZ3Roci1zaW5nbGUuaCIgMSAzCiMgMzQgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItc2luZ2xl LmgiIDMKdHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMgMjExICIvdXNyL3Vucy9lbmNh cC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhy LXNpbmdsZS5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkK ewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAo X19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQK X19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVh ZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KIyAxMDMgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAz CiMgMzggIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYg bG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRl ZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7 CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0eXBlZGVmIEZJTEUg X19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9f aW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw MDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQg PSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg PSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAg fCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAw MDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9h dGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g MHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0NSAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL3Vu cy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAxIDMKIyA0OCAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMwoKCgojIDEg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jdGltZSIgMSAzCiMg NDggIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jdGltZSIgMwoK CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Rp bWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDExOCAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBp bnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwog IGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50 IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0 aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3Qg dGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYzICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpl eHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv dWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAo c3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVj dCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUg KF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq bG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4g c3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90 ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGlt ZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGlt ZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAq YXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4g Y2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25n IGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZv aWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4g bG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3Qg Kl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0 aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3Qg dGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXpl IChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoK ZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3Rl ZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmlu ZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9j a19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9j a19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl cSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNs b2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0 ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l cl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9k ZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3Nl dHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19v dmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3Rp bWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVy biBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0 MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4 dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgp OwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyA1MiAiL3Vzci91 bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N0aW1lIiAyIDMKIyA2NCAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N0aW1lIiAzCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRt OwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7 CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVz aW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0K IyA1MiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMS4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjEuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg Mwp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5 ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90 ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdj c25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFy X3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3dj c25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19z MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4 ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0 IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAg KF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3 Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBf X3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJu IHdjaGFyX3QgKndjc2Nocm51bCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX193YykK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXpl X3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3Jl amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g c2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpf X2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFy X3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2Nv bnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5 c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2NvbnN0IHdj aGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy biBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hh cl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBf X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu dCB3bWVtY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2NoYXJfdCAq d21lbWNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAq d21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z Miwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChp bnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2Mg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAgICAgICAgICAgICAgIG1i c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fbWJy bGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CmV4dGVy biBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93 ICgpOwojIDI5NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHNpemVfdCBtYnNydG93 Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f cHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAqX19y ZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAogICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u ZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy b3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0 b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAo KTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3Vs bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7 CiMgNDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xf bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl cm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lv bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18K ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7Cgpl eHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9f d2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJu IGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xs X2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTI4 ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90 ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2No YXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxF ICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19G SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g aW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog ICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2Zndw cmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRm IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZz d3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4 dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg IHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoK ZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g aW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRl cm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoK CmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu IHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRf dCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hh cl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdj ICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50 X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAq ZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAg ICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoK CmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2No YXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3 Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg KmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUg KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93 ICgpOwojIDY4MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU1ICIvdXNyL3Vucy9lbmNh cC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4x L2luY2x1ZGUvYysrLzMuMS4xL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Ondp bnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3 czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwog IHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAg dXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAg dXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAg dXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsK ICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2Fu ZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndw cmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondj c2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3Nj cHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3Ns ZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25j cHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0 b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7 CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwog IHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsK ICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoK ICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9f cCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf dCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJy ayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3 Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJf dCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3Ap LCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIo d2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2Fz dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAg aW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXpl X3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19w KSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6 d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6 d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDYgIi91c3IvdW5zL2Vu Y2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAg ICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01f c3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7 IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19z dCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkp LCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwg X19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYp LCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0 dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19v ZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAg IG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0 aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAg IHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAg IHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9m ZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0g X19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVy YXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0g X19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYg X19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAg ICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsg fQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2Zm ID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7 CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pb3Nmd2QiIDIgMwojIDEgIi91c3Iv dW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDEgMwojIDM0ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUv YysrLzMuMS4xL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL3Vucy9lbmNhcC9n Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf c3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0Fs bG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFz cyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJh c2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNo YXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu Z2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+ IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJp bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNf aWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBv ZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlwZWRl ZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hh cl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBi YXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdi dWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2No YXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFy X3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+ IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVm OwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVh bTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDcxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5j bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9wYWly LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpz dHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNv bmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0 KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19i KSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBj bGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5m aXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3ku Zmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U MSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBf X3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vj b25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUg PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kg PCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m IF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K IyAxNDAgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0 bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWly PF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWly PF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4x L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDEg MwojIDUzICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy90 eXBlX3RyYWl0cy5oIiAzCiMgOTAgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2Mr Ky8zLjEuMS9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1 Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90 cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVf Zmlyc3Q7CiMgMTEzICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEv Yml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8 dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8 dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l ZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9U cCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0 cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl Z2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9y dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0 ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2Ug X19nbnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250 YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBf X2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91 c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ug c3RkCnsKIyA4MCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90 YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2Fy ZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcg e307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNl ID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5h bWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3IgewoKICAgICAgdHlwZWRl ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlw ZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j ZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVj dCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRl cmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBl ZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVm ZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJh dG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7 CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBj b25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAg ICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRv cl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi91c3IvdW5zL2Vu Y2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK IyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxf aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4x L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2NvbmNlcHRf Y2hlY2suaCIgMSAzCiMgMzkgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4x LjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMK CgoKCm5hbWVzcGFjZSBzdGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAg fQogICAgcmV0dXJuIF9fbjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19m aXJzdDsKICB9CiMgMTExICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4x LjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoKICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAg X19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3Jf dGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5l IHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2Ug X19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAg ICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgIGVsc2UKICAgICAg d2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShf UmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAx NjQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9p dGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3Is IHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0 b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMu MS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv dW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvci5o IiAxIDMKIyA2OCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvdW5zL2VuY2Fw L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAg OiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0 ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50 ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgY3Vy cmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl cjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAgICAg IGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3Vy cmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0 ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFzZSgp KSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJu IGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0 CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJldHVy biAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsKICAg ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190 bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg ICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAg ICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoK CgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAg cmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAg ICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikg Y29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsgfQoK CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2Vf dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1cm4g KnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlm ZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07 CiMgMjY5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9f eC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQog ICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAg ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4g IShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog ICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyBy ZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yPgogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0 b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl IF9fbiwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0g X19uKTsgfQojIDMyNyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgog ICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1 dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0 ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFj a19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0K IyAzNTMgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0 bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv cj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsK ICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq KCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0 b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NCAi L3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJhY2tf aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXIm IF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7 IH0KIyAzOTcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs YXNzIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0 ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoK ICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91 c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVu YW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAg Y29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAg ICAgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyBy ZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNy L3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBf X3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsg fQojIDQ3MCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMv c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xh c3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3Jf dGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBf Q29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y IGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90 eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIo X19pKSB7fQojIDUxMiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy YXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUp CiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7 CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGlu c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAg ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoK CiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0 aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp bmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7 CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh dG9yKF9faSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcg c3RkOjppdGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1h bF9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlm ZmVyZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3Rl Y3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBf X25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBl eHBsaWNpdAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBf TV9jdXJyZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAg IGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwg X0NvbnRhaW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoK ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJy ZW50OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBf TV9jdXJyZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp IHsgKytfTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y CiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy ZW50KyspOyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7 IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgog ICAgICBvcGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu dC0tKTsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2Vf dHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5 cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu dCArIF9fbik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNv bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1 cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25z dCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRl cmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBv cGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3ImIF9faSkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3Im CiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0OSAi L3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0 b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv b2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l IGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9f cmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y PChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs CiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu ZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19y aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4o Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMu YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+ JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19y aHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49 KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp bmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0g X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUg X0NvbnRhaW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPgogIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D b250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9 CiMgNzYgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg aW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVy MiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsK CgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19h OwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChf VHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwog ICAgICBfX2EgPSBfX2I7CiAgICAgIF9fYiA9IF9fdG1wOwogICAgfQojIDE0NiAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNv bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19i IDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0 IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwg X19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9U cCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29t cCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4g X19hOwogICAgfQojIDIwNCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMu MS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9f YSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2Nv bXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAiL3Vzci91 bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy CiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg X0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBf X24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsr X19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9f Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog X19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihf VHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz dCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIo X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBf X2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsg cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25z dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBf X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25p MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw ZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwog ICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90 eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg ICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1h bCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFz dC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0 ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6 X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9P dXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9y bWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUgX0JpZGlyZWN0 aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAg ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX2NvcHlfYmFj a3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl IF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikK ICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9Cb29sVHlwZT4K ICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAgIHsKICAgICAgc3RhdGljIF9C aWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmly c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2Nv cHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAg IHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f bGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt ID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19m aXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVt OwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19j b3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAg ewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5 X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICAgICAgOjpj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29w eV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAg IDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsKICAgICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAg ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBf X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf X3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9h dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFj a3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwg X19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUg X0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19O b3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRv cihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0K CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ MgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3Qs IF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVu YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2Fy ZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAK ICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y PF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lu cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAg IH0KIyA1MDkgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192 YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmls bF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQog ICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAg ICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgog IGlubGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFy KiBfX2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFy IF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0 KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVk IGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hh ciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxs KGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNo YXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9TaXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hh ciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAg ICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmly c3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNp Z25lZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2ln bmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBf X2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6 ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0 ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi91 c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgewog ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1 cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAg ICB9CiMgNjQwICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lu cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg CiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVk KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBi b29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAK CgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmly c3QyKQogICAgICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0 dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi91c3IvdW5zL2VuY2Fw L2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsCiAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7Cgog ICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx LCArK19fZmlyc3QyKQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2Zp cnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoj IDczMiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19f Zmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJl dHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEu MS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAg ICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz dDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQog ICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwog ICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2ln bmVkIGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xh c3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmly c3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0 IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIq IF9fbGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qg c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgog IH0KCn0KIyA2OCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL3Zl Y3RvciIgMiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5j bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi91c3IvdW5zL2VuY2FwL2dj Yy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2Fzc2VydC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAi QyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRp b24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3Bl cnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fz c2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9f bGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQoj IDQ5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvY2Fzc2VydCIg MiAzCiMgODUgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9j KysvMy4xLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3Iv dW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9leGNlcHRpb25fZGVmaW5lcy5o IiAxIDMKIyAzNSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3df YmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRf dHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50 aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsK fQojIDg2ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBf UkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRf bXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24p IDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1w ID0gMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZv aWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVm X2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4 X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNy KCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK ICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhy ZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7 CiAgICB9CiAgfTsKIyAxMDkgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0 cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nf c3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRl eF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9sb2NrID0gMDsKCgoK ICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19w LCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBf bG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0 ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dh cF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9 CiMgMTUxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9z dGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfbXV0ZXhfbG9jawogIHsKCgoKCgogICAgX19n dGhyZWFkX211dGV4X3QgX01fbG9jazsKCiAgICB2b2lkCiAgICBfTV9pbml0aWFsaXplKCkKICAg IHsKIyAxODQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRz L3N0bF90aHJlYWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQog ICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAg dm9pZAogICAgX01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4 X3VubG9jaygmX01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NU TF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAgX1NUTF9h dXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7 IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2soKSB7IF9N X2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9 KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1 dG9fbG9jayYpOwogIH07Cgp9CiMgODcgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRl L2MrKy8zLjEuMS9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDk4ICIv dXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2Mu aCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgog ICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7 IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAg IHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL3Vucy9lbmNhcC9n Y2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRl IDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGUKICAgIHsKICAg IHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgICAg IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICAgICAgc3RhdGlj IHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAg ICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAg IHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQp IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp emVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVh bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICAgICAgewogICAg ICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgICAgICBpZiAo MCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsK ICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkICgqIF9f c2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAgIHsKICAgICAgICB2b2lk ICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgX19tYWxs b2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJuKF9fb2xkKTsKICAgICAg fQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7 CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9p ZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAg IGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFs bG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFu ZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpf X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsK ICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg ICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6 ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg ICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19t eV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAg aWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2Jh ZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAg X19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAg ICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgoKCgoKCiAgdHlwZWRl ZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMjE5ICIvdXNyL3Vucy9lbmNhcC9nY2Mt My4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fc2ltcGxlX2FsbG9jCiAgewogIHB1Ymxp YzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiAwID09 IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9 CgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoKQogICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1Rw KiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRl KF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo X1RwKiBfX3ApCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0K ICB9OwojIDI1MSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVi dWdfYWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJs aWM6CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNo YXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0 cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3Vs dCArIChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9p ZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilf X3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3Qq KV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFs X3AgPT0gX19uIiwgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9i aXRzL3N0bF9hbGxvYy5oIiwgMjcwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAg X0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICB9 CgogICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3os IHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19w IC0gKGludCkgX1NfZXh0cmE7CiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90Kilf X3JlYWxfcCA9PSBfX29sZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19y ZWFsX3AgPT0gX19vbGRfc3oiLCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp OwogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgICBfQWxsb2M6OnJlYWxsb2Nh dGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihz aXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQp IF9TX2V4dHJhOwogICAgfQogIH07CiMgMzI0ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5j bHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFk cywgaW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJp dmF0ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07 CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9u IF9PYmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNo YXIgX01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBf U19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJl ZTsKICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVh cF9zaXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9j azsKCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAg IHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBf QUxJR04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChz aXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04t MSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZp bGwoc2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNp emVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAg cHVibGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3Jf bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMp IF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRy aWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGlj OgoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAg dm9pZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAg ICAgICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19m cmVlX2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAg ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9f cmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAg ICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAg ZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1 bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAg c3RhdGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewog ICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZh Y2U6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg X09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilf X3A7CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4g X01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVl X2xpc3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoK CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAg ICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m KQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9f bm9ianMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9i eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90 YWxfYnl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAg ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3Vs dCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAg ICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAg ICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0 ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRl czsKICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9f dG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAg aWYgKF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2 b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilf U19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAg ICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAg ICAgICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNl OjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9m cmVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAg ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19w OwoKCgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19p IDw9IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0 ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlf ZnJlZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9N X2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj aGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy ZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19z aXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2Zy ZWUgPSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoK ICAgICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0Owog ICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAg ICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAg fQogICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2 b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf cmVmaWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNo YXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2 b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2Jq KiBfX2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoK ICAgICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVf bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19y ZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29i aiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykg ewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmog PSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAt IDEgPT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5r ID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJl bnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAg IH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFk cywgaW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bmV3X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9z ejsKCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3og PiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25l d19zeikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91 bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShf X25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6 IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAg ICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAg fQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xv Y2sKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2Rl X2FsbG9jYXRvcl9sb2NrCiAgPSB7IDAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogIGNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z dD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46 Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46 Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVt cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yCnsKICB0eXBlZGVmIF9fYWxsb2MgX0Fs bG9jOwpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxv Y2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCiAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogIGFsbG9j YXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+ IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpIHt9CiAgfmFsbG9jYXRv cigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsg cmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9f eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9f biwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAgPyBzdGF0aWNfY2FzdDxf VHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICAgICAgICAg ICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUg X19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0K CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90 KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25z dCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9p bnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlPD4KY2xhc3MgYWxsb2NhdG9y PHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVk ZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsK CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxv Y2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBh bGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+Jiwg Y29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CiMgNjk1ICIvdXNyL3Vu cy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvcgp7CiAg X0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl cjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog ICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxs b2NhdG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2Ep IHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2Mp IHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0 b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAg cG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBj b25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4g Jl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDAp IHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRl cmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAg fQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBf X3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoK ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3Qo LTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0 IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2lu dGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xh c3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBv aW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9p ZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAg ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191 bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19h bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJs eWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCgoKCgoKdGVtcGxhdGUg PGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2lu c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAg cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CiMgODQw ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfYWxs b2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0Fs bG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3Ro ZXIgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh dG9yPgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFu Y2VsZXNzOwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu c3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+ IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07 CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0 IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxs b2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5j ZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwog IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVn X2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g dHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAg ICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro ciwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAg ICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1Rw MSwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19h bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f ZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxs b2NhdG9yPHdjaGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8dHJ1ZSwgMD47Cgp9CiMgNjkgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9p bmNsdWRlL2MrKy8zLjEuMS92ZWN0b3IiIDIgMwojIDEgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEu MS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjcgIi91c3Iv dW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3Qu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBf X3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7 IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29u c3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEo KTsgfQojIDk4ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0 cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K ICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEy ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfY29u c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu ZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0 b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAg IGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAgIHsgX19wb2ludGVy LT5+X1RwKCk7IH0KIyAxMzQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg ICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl X3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAg ICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgo X19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDcw ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvdmVjdG9yIiAyIDMK IyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxf dW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1 ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7 CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAg ICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg fQogICAgfQojIDEwNiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVu aW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNf UE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlh bGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIq IF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9f Zmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAg aW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmly c3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCog X19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFy X3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3Qg LSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2Zp cnN0LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0Zvcndh cmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3Vy ICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsK ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19m aXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL3Vz ci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5 cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgo X19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2Zp cnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlu aXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUp CiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAg ICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1 Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0 Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAg ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvdW5zL2VuY2FwL2djYy0z LjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlw ZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmls bF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KIyAyMjcgIi91c3Iv dW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF91bmluaXRpYWxp emVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAg IF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0 cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIs IF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rl c3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkK ICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAg ICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg fQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29w eV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAg ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVk X2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAg ICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgIH0KCn0KIyA3MSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2lu Y2x1ZGUvYysrLzMuMS4xL3ZlY3RvciIgMiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4x L2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2NSAiL3Vzci91bnMv ZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMg MSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8z LjEuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEv aW5jbHVkZS9jKysvMy4xLjEvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvdW5z L2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7 CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZh bGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBf X3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NiAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCgpu YW1lc3BhY2Ugc3RkCnsKIyA3OCAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFs bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1Zl Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFf YWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9y YWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRv cjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0 b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2Rh dGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBf X3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2Nh dGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0 b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVi bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojph bGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1Zl Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCks IF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9U cCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsK CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxv Y190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsg cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3As IF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1Zl Y3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf aW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46 Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jh c2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVf dCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9z dGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkg eyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsg fQp9OwojIDE2NSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2Jp dHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFs bG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAs IF9BbGxvYz4KewoKIAoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv Yz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJs aWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50 ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3JfdHlwZT4gaXRlcmF0 b3I7CiAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIs IHZlY3Rvcl90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJl bmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6 Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8 aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9N X2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpf TV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRf b2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19w b3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVy YXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg ICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBpdGVyYXRvciBl bmQoKSB7IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0 b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KCgoK CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0 b3IoZW5kKCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0 CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogIHJl dmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu KCkpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBz aXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoK ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAv IHNpemVvZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyBy ZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAtIGJlZ2lu KCkpOyB9CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBl bmQoKTsgfQojIDI4OSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f bikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQojIDMwMCAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3RfcmVm ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigp ICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsK ICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi dmVjdG9yIik7CiAgfQojIDMxNiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24p CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KIyAzMjgg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF92ZWN0 b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBf TV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgoKICBleHBsaWNpdCB2 ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6 IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1 ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp CiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90 eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9maW5p c2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfVHAoKSk7IH0KCiAgdmVj dG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICAgIDogX0Jhc2UoX194LnNpemUo KSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQoKCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICA6IF9CYXNlKF9fYSkKICAgICAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg X0ludGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl Z3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9p bml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBl KQogICAgICAgIHsKICAgICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgICBfTV9maW5pc2ggPSB1bmluaXRp YWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAgX01faW5pdGlhbGl6ZV9hdXgo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5 cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAg ICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7 CiAgICAgICAgfQoKICB+dmVjdG9yKCkKICB7IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gp OyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3gpOwojIDM5MyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24p IHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29s ZF9zaXplID0gc2l6ZSgpOwogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv cHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9N X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBf X3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf X247CiAgICB9CiAgfQojIDQyMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysr LzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwg Y29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQg X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7 CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICAgX01fYXNzaWdu X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg IHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVt cGxhdGU8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3Qs IF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAog ICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCgoK ICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfcmVm ZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJlZmVyZW5j ZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2Ug YmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQojIDQ4OCAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9p ZAogIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKICB7CiAgICBpZiAoX01fZmluaXNoICE9IF9N X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAg ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwg X194KTsKICB9CiMgNTE5ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4x LjEvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkCiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3gpCiAgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3Rk Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29m X3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQojIDUzOCAiL3Vzci91bnMvZW5j YXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRl cmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCiAgewog ICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zpbmlz aCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9D b25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVs c2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJl dHVybiBiZWdpbigpICsgX19uOwogIH0KIyA1NjIgIi91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9p bmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yCiAgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g LSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bv c2l0aW9uID09IGVuZCgpKSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytf TV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19w b3NpdGlvbikpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKCiAgdGVtcGxhdGU8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z LCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu dGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0 LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2Vy PgogICAgdm9pZAogICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lu dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5z ZXJ0KF9fcG9zLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIHN0YXRpY19jYXN0PF9UcD4o X192YWwpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQKICAg ICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2Nh dGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJz dCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgfQojIDYxMiAiL3Vzci91bnMvZW5jYXAv Z2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBp bnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAg IHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5z ZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwojIDYy NiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX3Zl Y3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmluaXNoOwogICAgX0Rlc3Ry b3koX01fZmluaXNoKTsKICB9CiMgNjQ1ICIvdXNyL3Vucy9lbmNhcC9nY2MtMy4xLjEvaW5jbHVk ZS9jKysvMy4xLjEvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvciBlcmFzZShpdGVyYXRv ciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNv cHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwog ICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KIyA2Njgg Ii91c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF92ZWN0 b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz dCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAg X0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0 IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CiMgNjg1ICIvdXNyL3Vucy9lbmNh cC9nY2MtMy4xLjEvaW5jbHVkZS9jKysvMy4xLjEvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lk IHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChf X25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k KCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9f eCk7CiAgfQojIDcwMSAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUp IHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKCgoKCgoKICB2b2lkIGNsZWFyKCkgeyBl cmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUg X19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9p bnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRp YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jl c3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX2RlYWxsb2NhdGUo X19yZXN1bHQsIF9fbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5 cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIF9NX3N0YXJ0ID0gX01fYWxs b2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBf TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p bnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJu IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9U cCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9w ZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9y PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICBy ZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25z dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0o Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+ JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVy YXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhp cykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194 bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5k X2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgX0Rlc3Ryb3koX01f c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6 ZSgpID49IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194 LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAg ZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9z dGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194 LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hs ZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24s IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAg IHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsK ICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAg IGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAg IGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lk IHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz dCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVy YXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xh c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBf X2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5 KCkpIHsKICAgIHBvaW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmly c3QsIF9fbGFzdCkpOwogICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9N X3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0 YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0 b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAgX0Rl c3Ryb3koX19uZXdfZmluaXNoLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2gu YmFzZSgpOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAg ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3Rh cnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9N X2ZpbmlzaCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQK dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBj b25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsK ICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmlu aXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9u LCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAq X19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBf X29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6 ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01f YWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7 CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0 b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBfQ29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNl KCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBj YXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5p c2gpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAg ICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01f ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBf TV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zpbmlz aC5iYXNlKCk7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9f bGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3Rv cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlm IChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIF9Db25zdHJ1Y3QoX01fZmlu aXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAg aXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAg ZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0 IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsK ICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVy IF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNo ID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAg X0NvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19u ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp bmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5p c2gpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdf c3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9f bGVuKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgX0Rlc3Ryb3koYmVnaW4oKSwgZW5kKCkp OwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy dCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmlu aXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxv Yz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK ICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBf TV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNvbnN0 IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVy YXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBf X24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5p c2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2Jh Y2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAg ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9f biAtIF9fZWxlbXNfYWZ0ZXIsIF9feF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0g X19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19v bGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVy OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAg IH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29s ZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xl bikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkg ewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBfX3Bv c2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl ZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAg ICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdfZmlu aXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ry b3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19u ZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAg X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3 X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0K ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2Vy dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19f cG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5n ZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g X19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bv c2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYg KF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9f bjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwg X19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9f Zmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5p bml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f cG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0g X19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsK ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4 KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRl KF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg IHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y KF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19w b3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmlu aXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihf TV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAg ICB7CiAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAg ICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksIF9fbGVuKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAg IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwog ICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19u ZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5i YXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyA3MiAiL3Vzci91bnMvZW5jYXAvZ2NjLTMu MS4xL2luY2x1ZGUvYysrLzMuMS4xL3ZlY3RvciIgMiAzCiMgMSAiL3Vzci91bnMvZW5jYXAvZ2Nj LTMuMS4xL2luY2x1ZGUvYysrLzMuMS4xL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi91 c3IvdW5zL2VuY2FwL2djYy0zLjEuMS9pbmNsdWRlL2MrKy8zLjEuMS9iaXRzL3N0bF9idmVjdG9y LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9CaXRfdHlwZTsK ICBlbnVtIHsgX01fd29yZF9iaXQgPSBpbnQoOCAqIHNpemVvZihfQml0X3R5cGUpKSB9OwoKc3Ry dWN0IF9CaXRfcmVmZXJlbmNlIHsKCiAgX0JpdF90eXBlICogX01fcDsKICBfQml0X3R5cGUgX01f bWFzazsKICBfQml0X3JlZmVyZW5jZShfQml0X3R5cGUgKiBfX3gsIF9CaXRfdHlwZSBfX3kpCiAg ICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2Uo KSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1 cm4gISEoKl9NX3AgJiBfTV9tYXNrKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9v bCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3Ag Jj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVy YXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9v bChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNv bnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJh dG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gIWJvb2wo KnRoaXMpICYmIGJvb2woX194KTsgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsg fQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNl IF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9feSA9IF9fdG1wOwp9 CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIGl0ZXJhdG9yPHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnLCBib29sPgp7CiAgX0JpdF90eXBlICogX01fcDsKICB1bnNpZ25lZCBp bnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UoX0JpdF90eXBlICogX194LCB1bnNp Z25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQg X01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfTV93b3JkX2JpdCAtIDEpIHsK ICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIF9NX2J1 bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9 IF9NX3dvcmRfYml0IC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNy KHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZz ZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9NX3dvcmRfYml0OwogICAgX19uID0gX19uICUgX01fd29y ZF9iaXQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50 KSBfX24gKyBfTV93b3JkX2JpdDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29m ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf Qml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9N X3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f aS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQp OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNv bnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRo aXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg Y29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlz IDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0 ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1 cm4gX01fd29yZF9iaXQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0g X195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRl cmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRl ZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0 b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9C aXRfaXRlcmF0b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfQml0 X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z dCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRv ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7 CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVy YXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0 ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg X01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRv cis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAq dGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewog ICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0 b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlm ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJl bmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRf aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9f eCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBw dWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5 cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVy OwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9j b25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25z dF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRf aXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9C aXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3gu X01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAg cmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVTCA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25z dF9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAq dGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0 ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7 CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7 CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAg ICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVu Y2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRo aXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0 b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1w ID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBjb25zdF9pdGVyYXRvciBv cGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3Ig X190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQogIGNvbnN0X3JlZmVy ZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIHJldHVybiAqKCp0aGlz ICsgX19pKTsKICB9Cn07CgppbmxpbmUgX0JpdF9jb25zdF9pdGVyYXRvcgpvcGVyYXRvcisocHRy ZGlmZl90IF9fbiwgY29uc3QgX0JpdF9jb25zdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3gg KyBfX247IH0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19pc19zdGF0 aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAg ICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0 IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01f c3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6 CiAgX0JpdF90eXBlICogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9k YXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2Jp dCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAg ICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01f cCk7CiAgfQoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9CaXRfdHlwZSwgX0FsbG9jYXRvcj46 OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0ZXJh dG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIF9CaXRfdHlwZSAqIF9N X2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBf QnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io KSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwg X01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9B bGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAg IF9BbGxvY190eXBlOwoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAg IHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX01fd29yZF9iaXQgLSAxKS9f TV93b3JkX2JpdCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQu X01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9w KTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5p c2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFz ZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJv b2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2Nf YmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8 Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoK ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK CiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkg e30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoK CgpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVj dG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1 YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6 ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRl ZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJl bmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29u c3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0 b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAg dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0 ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0 b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxv Y2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxs b2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2Rl YWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAg dXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rv cl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lk IF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBf TV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsg X01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihf X3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24p OwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wg X194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewog ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAx KTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAg ICAgICAgICAgICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9N X3dvcmRfYml0KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4p OwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0 b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNv cHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAg ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9f TV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0K ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu aXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog ICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7 CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf cmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAg ICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01faW5p dGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAg fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0 X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7 CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlv biwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXpl X3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoY2FwYWNp dHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlv biwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNv cHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBk aWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBz aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgX0Jp dF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9f aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAg ICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9 IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7 CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0 IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7 CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkg eyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsg fQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9Cgog ICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVu ZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAg IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2Vf aXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAg IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBj b25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBl IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBl IGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9y KF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgp IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0 b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNl X3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24p KTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAg ICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi dmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg ICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29u c3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hl Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rv cl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9f dmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAg X01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6 ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9N X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9y JiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAg ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194 LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+ CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChf TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf ZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9p bml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog ICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0 b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlm IChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJl Z2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBk aWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoK CgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAg aWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXpl KCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9f biwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19u LCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fz c2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50 ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fz c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4 KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJl Z2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7 ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVs c2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19s ZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19sZW4gPCBzaXplKCkp CiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAg ICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAg ICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwg YmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgICAgfQog ICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlmIChjYXBhY2l0 eSgpIDwgX19uKSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbik7 CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAw KSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3Io X19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfTV93b3Jk X2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVmZXJlbmNlIGZyb250 KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0 IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5k KCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVu ZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9m aW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmluaXNoKysgPSBf X3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAgfQog ICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAgc3RkOjpzd2Fw KF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3gu X01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5k X29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bv c2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9z dG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194 OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAg ICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50 ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdl ciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90 eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2Zp cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRj aChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2 b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJv b2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAoY2FwYWNpdHko KSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVu ZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgZmlsbChfX3Bv c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgICAg X01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAg ICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRv ciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAg ICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9z aXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgX01fZGVh bGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01f d29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f cSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvc2l0 aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7 IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgICAgaWYgKF9f cG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgp LCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJuIF9fcG9zaXRp b247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsK ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19u ZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3NpemUgPCBzaXpl KCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSwg ZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6 ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKF9CaXRfdHlwZSAq IF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAg ICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2lu KCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgX19hbGxvYz4gYml0X3Zl Y3RvcjsKCn0KIyA3MyAiL3Vzci91bnMvZW5jYXAvZ2NjLTMuMS4xL2luY2x1ZGUvYysrLzMuMS4x L3ZlY3RvciIgMiAzCiMgMiAidGVzdC5jYyIgMgoKY2xhc3MgQyB7CnB1YmxpYzoKICBDKCk7CiAg c3RkOjp2ZWN0b3I8aW50PiB4Owp9OwoKY2xhc3MgQSB7CnB1YmxpYzoKICBBKCk7CgogIHR5cGVk ZWYgQyBUOwoKICBUIGEwMDAwOyBUIGEwMDAxOyBUIGEwMDAyOyBUIGEwMDAzOyBUIGEwMDA0OyBU IGEwMDA1OyBUIGEwMDA2OyBUIGEwMDA3OyBUIGEwMDA4OyBUIGEwMDA5OwogIFQgYTAwMTA7IFQg YTAwMTE7IFQgYTAwMTI7IFQgYTAwMTM7IFQgYTAwMTQ7IFQgYTAwMTU7IFQgYTAwMTY7IFQgYTAw MTc7IFQgYTAwMTg7IFQgYTAwMTk7CiAgVCBhMDAyMDsgVCBhMDAyMTsgVCBhMDAyMjsgVCBhMDAy MzsgVCBhMDAyNDsgVCBhMDAyNTsgVCBhMDAyNjsgVCBhMDAyNzsgVCBhMDAyODsgVCBhMDAyOTsK ICBUIGEwMDMwOyBUIGEwMDMxOyBUIGEwMDMyOyBUIGEwMDMzOyBUIGEwMDM0OyBUIGEwMDM1OyBU IGEwMDM2OyBUIGEwMDM3OyBUIGEwMDM4OyBUIGEwMDM5OwogIFQgYTAwNDA7IFQgYTAwNDE7IFQg YTAwNDI7IFQgYTAwNDM7IFQgYTAwNDQ7IFQgYTAwNDU7IFQgYTAwNDY7IFQgYTAwNDc7IFQgYTAw NDg7IFQgYTAwNDk7CiAgVCBhMDA1MDsgVCBhMDA1MTsgVCBhMDA1MjsgVCBhMDA1MzsgVCBhMDA1 NDsgVCBhMDA1NTsgVCBhMDA1NjsgVCBhMDA1NzsgVCBhMDA1ODsgVCBhMDA1OTsKICBUIGEwMDYw OyBUIGEwMDYxOyBUIGEwMDYyOyBUIGEwMDYzOyBUIGEwMDY0OyBUIGEwMDY1OyBUIGEwMDY2OyBU IGEwMDY3OyBUIGEwMDY4OyBUIGEwMDY5OwogIFQgYTAwNzA7IFQgYTAwNzE7IFQgYTAwNzI7IFQg YTAwNzM7IFQgYTAwNzQ7IFQgYTAwNzU7IFQgYTAwNzY7IFQgYTAwNzc7IFQgYTAwNzg7IFQgYTAw Nzk7CiAgVCBhMDA4MDsgVCBhMDA4MTsgVCBhMDA4MjsgVCBhMDA4MzsgVCBhMDA4NDsgVCBhMDA4 NTsgVCBhMDA4NjsgVCBhMDA4NzsgVCBhMDA4ODsgVCBhMDA4OTsKICBUIGEwMDkwOyBUIGEwMDkx OyBUIGEwMDkyOyBUIGEwMDkzOyBUIGEwMDk0OyBUIGEwMDk1OyBUIGEwMDk2OyBUIGEwMDk3OyBU IGEwMDk4OyBUIGEwMDk5OwogIFQgYTAxMDA7IFQgYTAxMDE7IFQgYTAxMDI7IFQgYTAxMDM7IFQg YTAxMDQ7IFQgYTAxMDU7IFQgYTAxMDY7IFQgYTAxMDc7IFQgYTAxMDg7IFQgYTAxMDk7CiAgVCBh MDExMDsgVCBhMDExMTsgVCBhMDExMjsgVCBhMDExMzsgVCBhMDExNDsgVCBhMDExNTsgVCBhMDEx NjsgVCBhMDExNzsgVCBhMDExODsgVCBhMDExOTsKICBUIGEwMTIwOyBUIGEwMTIxOyBUIGEwMTIy OyBUIGEwMTIzOyBUIGEwMTI0OyBUIGEwMTI1OyBUIGEwMTI2OyBUIGEwMTI3OyBUIGEwMTI4OyBU IGEwMTI5OwogIFQgYTAxMzA7IFQgYTAxMzE7IFQgYTAxMzI7IFQgYTAxMzM7IFQgYTAxMzQ7IFQg YTAxMzU7IFQgYTAxMzY7IFQgYTAxMzc7IFQgYTAxMzg7IFQgYTAxMzk7CiAgVCBhMDE0MDsgVCBh MDE0MTsgVCBhMDE0MjsgVCBhMDE0MzsgVCBhMDE0NDsgVCBhMDE0NTsgVCBhMDE0NjsgVCBhMDE0 NzsgVCBhMDE0ODsgVCBhMDE0OTsKICBUIGEwMTUwOyBUIGEwMTUxOyBUIGEwMTUyOyBUIGEwMTUz OyBUIGEwMTU0OyBUIGEwMTU1OyBUIGEwMTU2OyBUIGEwMTU3OyBUIGEwMTU4OyBUIGEwMTU5Owog IFQgYTAxNjA7IFQgYTAxNjE7IFQgYTAxNjI7IFQgYTAxNjM7IFQgYTAxNjQ7IFQgYTAxNjU7IFQg YTAxNjY7IFQgYTAxNjc7IFQgYTAxNjg7IFQgYTAxNjk7CiAgVCBhMDE3MDsgVCBhMDE3MTsgVCBh MDE3MjsgVCBhMDE3MzsgVCBhMDE3NDsgVCBhMDE3NTsgVCBhMDE3NjsgVCBhMDE3NzsgVCBhMDE3 ODsgVCBhMDE3OTsKICBUIGEwMTgwOyBUIGEwMTgxOyBUIGEwMTgyOyBUIGEwMTgzOyBUIGEwMTg0 OyBUIGEwMTg1OyBUIGEwMTg2OyBUIGEwMTg3OyBUIGEwMTg4OyBUIGEwMTg5OwogIFQgYTAxOTA7 IFQgYTAxOTE7IFQgYTAxOTI7IFQgYTAxOTM7IFQgYTAxOTQ7IFQgYTAxOTU7IFQgYTAxOTY7IFQg YTAxOTc7IFQgYTAxOTg7IFQgYTAxOTk7CiAgVCBhMDIwMDsgVCBhMDIwMTsgVCBhMDIwMjsgVCBh MDIwMzsgVCBhMDIwNDsgVCBhMDIwNTsgVCBhMDIwNjsgVCBhMDIwNzsgVCBhMDIwODsgVCBhMDIw OTsKICBUIGEwMjEwOyBUIGEwMjExOyBUIGEwMjEyOyBUIGEwMjEzOyBUIGEwMjE0OyBUIGEwMjE1 OyBUIGEwMjE2OyBUIGEwMjE3OyBUIGEwMjE4OyBUIGEwMjE5OwogIFQgYTAyMjA7IFQgYTAyMjE7 IFQgYTAyMjI7IFQgYTAyMjM7IFQgYTAyMjQ7IFQgYTAyMjU7IFQgYTAyMjY7IFQgYTAyMjc7IFQg YTAyMjg7IFQgYTAyMjk7CiAgVCBhMDIzMDsgVCBhMDIzMTsgVCBhMDIzMjsgVCBhMDIzMzsgVCBh MDIzNDsgVCBhMDIzNTsgVCBhMDIzNjsgVCBhMDIzNzsgVCBhMDIzODsgVCBhMDIzOTsKICBUIGEw MjQwOyBUIGEwMjQxOyBUIGEwMjQyOyBUIGEwMjQzOyBUIGEwMjQ0OyBUIGEwMjQ1OyBUIGEwMjQ2 OyBUIGEwMjQ3OyBUIGEwMjQ4OyBUIGEwMjQ5OwogIFQgYTAyNTA7IFQgYTAyNTE7IFQgYTAyNTI7 IFQgYTAyNTM7IFQgYTAyNTQ7IFQgYTAyNTU7IFQgYTAyNTY7IFQgYTAyNTc7IFQgYTAyNTg7IFQg YTAyNTk7CiAgVCBhMDI2MDsgVCBhMDI2MTsgVCBhMDI2MjsgVCBhMDI2MzsgVCBhMDI2NDsgVCBh MDI2NTsgVCBhMDI2NjsgVCBhMDI2NzsgVCBhMDI2ODsgVCBhMDI2OTsKICBUIGEwMjcwOyBUIGEw MjcxOyBUIGEwMjcyOyBUIGEwMjczOyBUIGEwMjc0OyBUIGEwMjc1OyBUIGEwMjc2OyBUIGEwMjc3 OyBUIGEwMjc4OyBUIGEwMjc5OwogIFQgYTAyODA7IFQgYTAyODE7IFQgYTAyODI7IFQgYTAyODM7 IFQgYTAyODQ7IFQgYTAyODU7IFQgYTAyODY7IFQgYTAyODc7IFQgYTAyODg7IFQgYTAyODk7CiAg VCBhMDI5MDsgVCBhMDI5MTsgVCBhMDI5MjsgVCBhMDI5MzsgVCBhMDI5NDsgVCBhMDI5NTsgVCBh MDI5NjsgVCBhMDI5NzsgVCBhMDI5ODsgVCBhMDI5OTsKICBUIGEwMzAwOyBUIGEwMzAxOyBUIGEw MzAyOyBUIGEwMzAzOyBUIGEwMzA0OyBUIGEwMzA1OyBUIGEwMzA2OyBUIGEwMzA3OyBUIGEwMzA4 OyBUIGEwMzA5OwogIFQgYTAzMTA7IFQgYTAzMTE7IFQgYTAzMTI7IFQgYTAzMTM7IFQgYTAzMTQ7 IFQgYTAzMTU7IFQgYTAzMTY7IFQgYTAzMTc7IFQgYTAzMTg7IFQgYTAzMTk7CiAgVCBhMDMyMDsg VCBhMDMyMTsgVCBhMDMyMjsgVCBhMDMyMzsgVCBhMDMyNDsgVCBhMDMyNTsgVCBhMDMyNjsgVCBh MDMyNzsgVCBhMDMyODsgVCBhMDMyOTsKICBUIGEwMzMwOyBUIGEwMzMxOyBUIGEwMzMyOyBUIGEw MzMzOyBUIGEwMzM0OyBUIGEwMzM1OyBUIGEwMzM2OyBUIGEwMzM3OyBUIGEwMzM4OyBUIGEwMzM5 OwogIFQgYTAzNDA7IFQgYTAzNDE7IFQgYTAzNDI7IFQgYTAzNDM7IFQgYTAzNDQ7IFQgYTAzNDU7 IFQgYTAzNDY7IFQgYTAzNDc7IFQgYTAzNDg7IFQgYTAzNDk7CiAgVCBhMDM1MDsgVCBhMDM1MTsg VCBhMDM1MjsgVCBhMDM1MzsgVCBhMDM1NDsgVCBhMDM1NTsgVCBhMDM1NjsgVCBhMDM1NzsgVCBh MDM1ODsgVCBhMDM1OTsKICBUIGEwMzYwOyBUIGEwMzYxOyBUIGEwMzYyOyBUIGEwMzYzOyBUIGEw MzY0OyBUIGEwMzY1OyBUIGEwMzY2OyBUIGEwMzY3OyBUIGEwMzY4OyBUIGEwMzY5OwogIFQgYTAz NzA7IFQgYTAzNzE7IFQgYTAzNzI7IFQgYTAzNzM7IFQgYTAzNzQ7IFQgYTAzNzU7IFQgYTAzNzY7 IFQgYTAzNzc7IFQgYTAzNzg7IFQgYTAzNzk7CiAgVCBhMDM4MDsgVCBhMDM4MTsgVCBhMDM4Mjsg VCBhMDM4MzsgVCBhMDM4NDsgVCBhMDM4NTsgVCBhMDM4NjsgVCBhMDM4NzsgVCBhMDM4ODsgVCBh MDM4OTsKICBUIGEwMzkwOyBUIGEwMzkxOyBUIGEwMzkyOyBUIGEwMzkzOyBUIGEwMzk0OyBUIGEw Mzk1OyBUIGEwMzk2OyBUIGEwMzk3OyBUIGEwMzk4OyBUIGEwMzk5OwogIFQgYTA0MDA7IFQgYTA0 MDE7IFQgYTA0MDI7IFQgYTA0MDM7IFQgYTA0MDQ7IFQgYTA0MDU7IFQgYTA0MDY7IFQgYTA0MDc7 IFQgYTA0MDg7IFQgYTA0MDk7CiAgVCBhMDQxMDsgVCBhMDQxMTsgVCBhMDQxMjsgVCBhMDQxMzsg VCBhMDQxNDsgVCBhMDQxNTsgVCBhMDQxNjsgVCBhMDQxNzsgVCBhMDQxODsgVCBhMDQxOTsKICBU IGEwNDIwOyBUIGEwNDIxOyBUIGEwNDIyOyBUIGEwNDIzOyBUIGEwNDI0OyBUIGEwNDI1OyBUIGEw NDI2OyBUIGEwNDI3OyBUIGEwNDI4OyBUIGEwNDI5OwogIFQgYTA0MzA7IFQgYTA0MzE7IFQgYTA0 MzI7IFQgYTA0MzM7IFQgYTA0MzQ7IFQgYTA0MzU7IFQgYTA0MzY7IFQgYTA0Mzc7IFQgYTA0Mzg7 IFQgYTA0Mzk7CiAgVCBhMDQ0MDsgVCBhMDQ0MTsgVCBhMDQ0MjsgVCBhMDQ0MzsgVCBhMDQ0NDsg VCBhMDQ0NTsgVCBhMDQ0NjsgVCBhMDQ0NzsgVCBhMDQ0ODsgVCBhMDQ0OTsKICBUIGEwNDUwOyBU IGEwNDUxOyBUIGEwNDUyOyBUIGEwNDUzOyBUIGEwNDU0OyBUIGEwNDU1OyBUIGEwNDU2OyBUIGEw NDU3OyBUIGEwNDU4OyBUIGEwNDU5OwogIFQgYTA0NjA7IFQgYTA0NjE7IFQgYTA0NjI7IFQgYTA0 NjM7IFQgYTA0NjQ7IFQgYTA0NjU7IFQgYTA0NjY7IFQgYTA0Njc7IFQgYTA0Njg7IFQgYTA0Njk7 CiAgVCBhMDQ3MDsgVCBhMDQ3MTsgVCBhMDQ3MjsgVCBhMDQ3MzsgVCBhMDQ3NDsgVCBhMDQ3NTsg VCBhMDQ3NjsgVCBhMDQ3NzsgVCBhMDQ3ODsgVCBhMDQ3OTsKICBUIGEwNDgwOyBUIGEwNDgxOyBU IGEwNDgyOyBUIGEwNDgzOyBUIGEwNDg0OyBUIGEwNDg1OyBUIGEwNDg2OyBUIGEwNDg3OyBUIGEw NDg4OyBUIGEwNDg5OwogIFQgYTA0OTA7IFQgYTA0OTE7IFQgYTA0OTI7IFQgYTA0OTM7IFQgYTA0 OTQ7IFQgYTA0OTU7IFQgYTA0OTY7IFQgYTA0OTc7IFQgYTA0OTg7IFQgYTA0OTk7CiAgVCBhMDUw MDsgVCBhMDUwMTsgVCBhMDUwMjsgVCBhMDUwMzsgVCBhMDUwNDsgVCBhMDUwNTsgVCBhMDUwNjsg VCBhMDUwNzsgVCBhMDUwODsgVCBhMDUwOTsKICBUIGEwNTEwOyBUIGEwNTExOyBUIGEwNTEyOyBU IGEwNTEzOyBUIGEwNTE0OyBUIGEwNTE1OyBUIGEwNTE2OyBUIGEwNTE3OyBUIGEwNTE4OyBUIGEw NTE5OwogIFQgYTA1MjA7IFQgYTA1MjE7IFQgYTA1MjI7IFQgYTA1MjM7IFQgYTA1MjQ7IFQgYTA1 MjU7IFQgYTA1MjY7IFQgYTA1Mjc7IFQgYTA1Mjg7IFQgYTA1Mjk7CiAgVCBhMDUzMDsgVCBhMDUz MTsgVCBhMDUzMjsgVCBhMDUzMzsgVCBhMDUzNDsgVCBhMDUzNTsgVCBhMDUzNjsgVCBhMDUzNzsg VCBhMDUzODsgVCBhMDUzOTsKICBUIGEwNTQwOyBUIGEwNTQxOyBUIGEwNTQyOyBUIGEwNTQzOyBU IGEwNTQ0OyBUIGEwNTQ1OyBUIGEwNTQ2OyBUIGEwNTQ3OyBUIGEwNTQ4OyBUIGEwNTQ5OwogIFQg YTA1NTA7IFQgYTA1NTE7IFQgYTA1NTI7IFQgYTA1NTM7IFQgYTA1NTQ7IFQgYTA1NTU7IFQgYTA1 NTY7IFQgYTA1NTc7IFQgYTA1NTg7IFQgYTA1NTk7CiAgVCBhMDU2MDsgVCBhMDU2MTsgVCBhMDU2 MjsgVCBhMDU2MzsgVCBhMDU2NDsgVCBhMDU2NTsgVCBhMDU2NjsgVCBhMDU2NzsgVCBhMDU2ODsg VCBhMDU2OTsKICBUIGEwNTcwOyBUIGEwNTcxOyBUIGEwNTcyOyBUIGEwNTczOyBUIGEwNTc0OyBU IGEwNTc1OyBUIGEwNTc2OyBUIGEwNTc3OyBUIGEwNTc4OyBUIGEwNTc5OwogIFQgYTA1ODA7IFQg YTA1ODE7IFQgYTA1ODI7IFQgYTA1ODM7IFQgYTA1ODQ7IFQgYTA1ODU7IFQgYTA1ODY7IFQgYTA1 ODc7IFQgYTA1ODg7IFQgYTA1ODk7CiAgVCBhMDU5MDsgVCBhMDU5MTsgVCBhMDU5MjsgVCBhMDU5 MzsgVCBhMDU5NDsgVCBhMDU5NTsgVCBhMDU5NjsgVCBhMDU5NzsgVCBhMDU5ODsgVCBhMDU5OTsK ICBUIGEwNjAwOyBUIGEwNjAxOyBUIGEwNjAyOyBUIGEwNjAzOyBUIGEwNjA0OyBUIGEwNjA1OyBU IGEwNjA2OyBUIGEwNjA3OyBUIGEwNjA4OyBUIGEwNjA5OwogIFQgYTA2MTA7IFQgYTA2MTE7IFQg YTA2MTI7IFQgYTA2MTM7IFQgYTA2MTQ7IFQgYTA2MTU7IFQgYTA2MTY7IFQgYTA2MTc7IFQgYTA2 MTg7IFQgYTA2MTk7CiAgVCBhMDYyMDsgVCBhMDYyMTsgVCBhMDYyMjsgVCBhMDYyMzsgVCBhMDYy NDsgVCBhMDYyNTsgVCBhMDYyNjsgVCBhMDYyNzsgVCBhMDYyODsgVCBhMDYyOTsKICBUIGEwNjMw OyBUIGEwNjMxOyBUIGEwNjMyOyBUIGEwNjMzOyBUIGEwNjM0OyBUIGEwNjM1OyBUIGEwNjM2OyBU IGEwNjM3OyBUIGEwNjM4OyBUIGEwNjM5OwogIFQgYTA2NDA7IFQgYTA2NDE7IFQgYTA2NDI7IFQg YTA2NDM7IFQgYTA2NDQ7IFQgYTA2NDU7IFQgYTA2NDY7IFQgYTA2NDc7IFQgYTA2NDg7IFQgYTA2 NDk7CiAgVCBhMDY1MDsgVCBhMDY1MTsgVCBhMDY1MjsgVCBhMDY1MzsgVCBhMDY1NDsgVCBhMDY1 NTsgVCBhMDY1NjsgVCBhMDY1NzsgVCBhMDY1ODsgVCBhMDY1OTsKICBUIGEwNjYwOyBUIGEwNjYx OyBUIGEwNjYyOyBUIGEwNjYzOyBUIGEwNjY0OyBUIGEwNjY1OyBUIGEwNjY2OyBUIGEwNjY3OyBU IGEwNjY4OyBUIGEwNjY5OwogIFQgYTA2NzA7IFQgYTA2NzE7IFQgYTA2NzI7IFQgYTA2NzM7IFQg YTA2NzQ7IFQgYTA2NzU7IFQgYTA2NzY7IFQgYTA2Nzc7IFQgYTA2Nzg7IFQgYTA2Nzk7CiAgVCBh MDY4MDsgVCBhMDY4MTsgVCBhMDY4MjsgVCBhMDY4MzsgVCBhMDY4NDsgVCBhMDY4NTsgVCBhMDY4 NjsgVCBhMDY4NzsgVCBhMDY4ODsgVCBhMDY4OTsKICBUIGEwNjkwOyBUIGEwNjkxOyBUIGEwNjky OyBUIGEwNjkzOyBUIGEwNjk0OyBUIGEwNjk1OyBUIGEwNjk2OyBUIGEwNjk3OyBUIGEwNjk4OyBU IGEwNjk5OwogIFQgYTA3MDA7IFQgYTA3MDE7IFQgYTA3MDI7IFQgYTA3MDM7IFQgYTA3MDQ7IFQg YTA3MDU7IFQgYTA3MDY7IFQgYTA3MDc7IFQgYTA3MDg7IFQgYTA3MDk7CiAgVCBhMDcxMDsgVCBh MDcxMTsgVCBhMDcxMjsgVCBhMDcxMzsgVCBhMDcxNDsgVCBhMDcxNTsgVCBhMDcxNjsgVCBhMDcx NzsgVCBhMDcxODsgVCBhMDcxOTsKICBUIGEwNzIwOyBUIGEwNzIxOyBUIGEwNzIyOyBUIGEwNzIz OyBUIGEwNzI0OyBUIGEwNzI1OyBUIGEwNzI2OyBUIGEwNzI3OyBUIGEwNzI4OyBUIGEwNzI5Owog IFQgYTA3MzA7IFQgYTA3MzE7IFQgYTA3MzI7IFQgYTA3MzM7IFQgYTA3MzQ7IFQgYTA3MzU7IFQg YTA3MzY7IFQgYTA3Mzc7IFQgYTA3Mzg7IFQgYTA3Mzk7CiAgVCBhMDc0MDsgVCBhMDc0MTsgVCBh MDc0MjsgVCBhMDc0MzsgVCBhMDc0NDsgVCBhMDc0NTsgVCBhMDc0NjsgVCBhMDc0NzsgVCBhMDc0 ODsgVCBhMDc0OTsKICBUIGEwNzUwOyBUIGEwNzUxOyBUIGEwNzUyOyBUIGEwNzUzOyBUIGEwNzU0 OyBUIGEwNzU1OyBUIGEwNzU2OyBUIGEwNzU3OyBUIGEwNzU4OyBUIGEwNzU5OwogIFQgYTA3NjA7 IFQgYTA3NjE7IFQgYTA3NjI7IFQgYTA3NjM7IFQgYTA3NjQ7IFQgYTA3NjU7IFQgYTA3NjY7IFQg YTA3Njc7IFQgYTA3Njg7IFQgYTA3Njk7CiAgVCBhMDc3MDsgVCBhMDc3MTsgVCBhMDc3MjsgVCBh MDc3MzsgVCBhMDc3NDsgVCBhMDc3NTsgVCBhMDc3NjsgVCBhMDc3NzsgVCBhMDc3ODsgVCBhMDc3 OTsKICBUIGEwNzgwOyBUIGEwNzgxOyBUIGEwNzgyOyBUIGEwNzgzOyBUIGEwNzg0OyBUIGEwNzg1 OyBUIGEwNzg2OyBUIGEwNzg3OyBUIGEwNzg4OyBUIGEwNzg5OwogIFQgYTA3OTA7IFQgYTA3OTE7 IFQgYTA3OTI7IFQgYTA3OTM7IFQgYTA3OTQ7IFQgYTA3OTU7IFQgYTA3OTY7IFQgYTA3OTc7IFQg YTA3OTg7IFQgYTA3OTk7CiAgVCBhMDgwMDsgVCBhMDgwMTsgVCBhMDgwMjsgVCBhMDgwMzsgVCBh MDgwNDsgVCBhMDgwNTsgVCBhMDgwNjsgVCBhMDgwNzsgVCBhMDgwODsgVCBhMDgwOTsKICBUIGEw ODEwOyBUIGEwODExOyBUIGEwODEyOyBUIGEwODEzOyBUIGEwODE0OyBUIGEwODE1OyBUIGEwODE2 OyBUIGEwODE3OyBUIGEwODE4OyBUIGEwODE5OwogIFQgYTA4MjA7IFQgYTA4MjE7IFQgYTA4MjI7 IFQgYTA4MjM7IFQgYTA4MjQ7IFQgYTA4MjU7IFQgYTA4MjY7IFQgYTA4Mjc7IFQgYTA4Mjg7IFQg YTA4Mjk7CiAgVCBhMDgzMDsgVCBhMDgzMTsgVCBhMDgzMjsgVCBhMDgzMzsgVCBhMDgzNDsgVCBh MDgzNTsgVCBhMDgzNjsgVCBhMDgzNzsgVCBhMDgzODsgVCBhMDgzOTsKICBUIGEwODQwOyBUIGEw ODQxOyBUIGEwODQyOyBUIGEwODQzOyBUIGEwODQ0OyBUIGEwODQ1OyBUIGEwODQ2OyBUIGEwODQ3 OyBUIGEwODQ4OyBUIGEwODQ5OwogIFQgYTA4NTA7IFQgYTA4NTE7IFQgYTA4NTI7IFQgYTA4NTM7 IFQgYTA4NTQ7IFQgYTA4NTU7IFQgYTA4NTY7IFQgYTA4NTc7IFQgYTA4NTg7IFQgYTA4NTk7CiAg VCBhMDg2MDsgVCBhMDg2MTsgVCBhMDg2MjsgVCBhMDg2MzsgVCBhMDg2NDsgVCBhMDg2NTsgVCBh MDg2NjsgVCBhMDg2NzsgVCBhMDg2ODsgVCBhMDg2OTsKICBUIGEwODcwOyBUIGEwODcxOyBUIGEw ODcyOyBUIGEwODczOyBUIGEwODc0OyBUIGEwODc1OyBUIGEwODc2OyBUIGEwODc3OyBUIGEwODc4 OyBUIGEwODc5OwogIFQgYTA4ODA7IFQgYTA4ODE7IFQgYTA4ODI7IFQgYTA4ODM7IFQgYTA4ODQ7 IFQgYTA4ODU7IFQgYTA4ODY7IFQgYTA4ODc7IFQgYTA4ODg7IFQgYTA4ODk7CiAgVCBhMDg5MDsg VCBhMDg5MTsgVCBhMDg5MjsgVCBhMDg5MzsgVCBhMDg5NDsgVCBhMDg5NTsgVCBhMDg5NjsgVCBh MDg5NzsgVCBhMDg5ODsgVCBhMDg5OTsKICBUIGEwOTAwOyBUIGEwOTAxOyBUIGEwOTAyOyBUIGEw OTAzOyBUIGEwOTA0OyBUIGEwOTA1OyBUIGEwOTA2OyBUIGEwOTA3OyBUIGEwOTA4OyBUIGEwOTA5 OwogIFQgYTA5MTA7IFQgYTA5MTE7IFQgYTA5MTI7IFQgYTA5MTM7IFQgYTA5MTQ7IFQgYTA5MTU7 IFQgYTA5MTY7IFQgYTA5MTc7IFQgYTA5MTg7IFQgYTA5MTk7CiAgVCBhMDkyMDsgVCBhMDkyMTsg VCBhMDkyMjsgVCBhMDkyMzsgVCBhMDkyNDsgVCBhMDkyNTsgVCBhMDkyNjsgVCBhMDkyNzsgVCBh MDkyODsgVCBhMDkyOTsKICBUIGEwOTMwOyBUIGEwOTMxOyBUIGEwOTMyOyBUIGEwOTMzOyBUIGEw OTM0OyBUIGEwOTM1OyBUIGEwOTM2OyBUIGEwOTM3OyBUIGEwOTM4OyBUIGEwOTM5OwogIFQgYTA5 NDA7IFQgYTA5NDE7IFQgYTA5NDI7IFQgYTA5NDM7IFQgYTA5NDQ7IFQgYTA5NDU7IFQgYTA5NDY7 IFQgYTA5NDc7IFQgYTA5NDg7IFQgYTA5NDk7CiAgVCBhMDk1MDsgVCBhMDk1MTsgVCBhMDk1Mjsg VCBhMDk1MzsgVCBhMDk1NDsgVCBhMDk1NTsgVCBhMDk1NjsgVCBhMDk1NzsgVCBhMDk1ODsgVCBh MDk1OTsKICBUIGEwOTYwOyBUIGEwOTYxOyBUIGEwOTYyOyBUIGEwOTYzOyBUIGEwOTY0OyBUIGEw OTY1OyBUIGEwOTY2OyBUIGEwOTY3OyBUIGEwOTY4OyBUIGEwOTY5OwogIFQgYTA5NzA7IFQgYTA5 NzE7IFQgYTA5NzI7IFQgYTA5NzM7IFQgYTA5NzQ7IFQgYTA5NzU7IFQgYTA5NzY7IFQgYTA5Nzc7 IFQgYTA5Nzg7IFQgYTA5Nzk7CiAgVCBhMDk4MDsgVCBhMDk4MTsgVCBhMDk4MjsgVCBhMDk4Mzsg VCBhMDk4NDsgVCBhMDk4NTsgVCBhMDk4NjsgVCBhMDk4NzsgVCBhMDk4ODsgVCBhMDk4OTsKICBU IGEwOTkwOyBUIGEwOTkxOyBUIGEwOTkyOyBUIGEwOTkzOyBUIGEwOTk0OyBUIGEwOTk1OyBUIGEw OTk2OyBUIGEwOTk3OyBUIGEwOTk4OyBUIGEwOTk5OwoKICBUIGExMDAwOyBUIGExMDAxOyBUIGEx MDAyOyBUIGExMDAzOyBUIGExMDA0OyBUIGExMDA1OyBUIGExMDA2OyBUIGExMDA3OyBUIGExMDA4 OyBUIGExMDA5OwogIFQgYTEwMTA7IFQgYTEwMTE7IFQgYTEwMTI7IFQgYTEwMTM7IFQgYTEwMTQ7 IFQgYTEwMTU7IFQgYTEwMTY7IFQgYTEwMTc7IFQgYTEwMTg7IFQgYTEwMTk7CiAgVCBhMTAyMDsg VCBhMTAyMTsgVCBhMTAyMjsgVCBhMTAyMzsgVCBhMTAyNDsgVCBhMTAyNTsgVCBhMTAyNjsgVCBh MTAyNzsgVCBhMTAyODsgVCBhMTAyOTsKICBUIGExMDMwOyBUIGExMDMxOyBUIGExMDMyOyBUIGEx MDMzOyBUIGExMDM0OyBUIGExMDM1OyBUIGExMDM2OyBUIGExMDM3OyBUIGExMDM4OyBUIGExMDM5 OwogIFQgYTEwNDA7IFQgYTEwNDE7IFQgYTEwNDI7IFQgYTEwNDM7IFQgYTEwNDQ7IFQgYTEwNDU7 IFQgYTEwNDY7IFQgYTEwNDc7IFQgYTEwNDg7IFQgYTEwNDk7CiAgVCBhMTA1MDsgVCBhMTA1MTsg VCBhMTA1MjsgVCBhMTA1MzsgVCBhMTA1NDsgVCBhMTA1NTsgVCBhMTA1NjsgVCBhMTA1NzsgVCBh MTA1ODsgVCBhMTA1OTsKICBUIGExMDYwOyBUIGExMDYxOyBUIGExMDYyOyBUIGExMDYzOyBUIGEx MDY0OyBUIGExMDY1OyBUIGExMDY2OyBUIGExMDY3OyBUIGExMDY4OyBUIGExMDY5OwogIFQgYTEw NzA7IFQgYTEwNzE7IFQgYTEwNzI7IFQgYTEwNzM7IFQgYTEwNzQ7IFQgYTEwNzU7IFQgYTEwNzY7 IFQgYTEwNzc7IFQgYTEwNzg7IFQgYTEwNzk7CiAgVCBhMTA4MDsgVCBhMTA4MTsgVCBhMTA4Mjsg VCBhMTA4MzsgVCBhMTA4NDsgVCBhMTA4NTsgVCBhMTA4NjsgVCBhMTA4NzsgVCBhMTA4ODsgVCBh MTA4OTsKICBUIGExMDkwOyBUIGExMDkxOyBUIGExMDkyOyBUIGExMDkzOyBUIGExMDk0OyBUIGEx MDk1OyBUIGExMDk2OyBUIGExMDk3OyBUIGExMDk4OyBUIGExMDk5OwogIFQgYTExMDA7IFQgYTEx MDE7IFQgYTExMDI7IFQgYTExMDM7IFQgYTExMDQ7IFQgYTExMDU7IFQgYTExMDY7IFQgYTExMDc7 IFQgYTExMDg7IFQgYTExMDk7CiAgVCBhMTExMDsgVCBhMTExMTsgVCBhMTExMjsgVCBhMTExMzsg VCBhMTExNDsgVCBhMTExNTsgVCBhMTExNjsgVCBhMTExNzsgVCBhMTExODsgVCBhMTExOTsKICBU IGExMTIwOyBUIGExMTIxOyBUIGExMTIyOyBUIGExMTIzOyBUIGExMTI0OyBUIGExMTI1OyBUIGEx MTI2OyBUIGExMTI3OyBUIGExMTI4OyBUIGExMTI5OwogIFQgYTExMzA7IFQgYTExMzE7IFQgYTEx MzI7IFQgYTExMzM7IFQgYTExMzQ7IFQgYTExMzU7IFQgYTExMzY7IFQgYTExMzc7IFQgYTExMzg7 IFQgYTExMzk7CiAgVCBhMTE0MDsgVCBhMTE0MTsgVCBhMTE0MjsgVCBhMTE0MzsgVCBhMTE0NDsg VCBhMTE0NTsgVCBhMTE0NjsgVCBhMTE0NzsgVCBhMTE0ODsgVCBhMTE0OTsKICBUIGExMTUwOyBU IGExMTUxOyBUIGExMTUyOyBUIGExMTUzOyBUIGExMTU0OyBUIGExMTU1OyBUIGExMTU2OyBUIGEx MTU3OyBUIGExMTU4OyBUIGExMTU5OwogIFQgYTExNjA7IFQgYTExNjE7IFQgYTExNjI7IFQgYTEx NjM7IFQgYTExNjQ7IFQgYTExNjU7IFQgYTExNjY7IFQgYTExNjc7IFQgYTExNjg7IFQgYTExNjk7 CiAgVCBhMTE3MDsgVCBhMTE3MTsgVCBhMTE3MjsgVCBhMTE3MzsgVCBhMTE3NDsgVCBhMTE3NTsg VCBhMTE3NjsgVCBhMTE3NzsgVCBhMTE3ODsgVCBhMTE3OTsKICBUIGExMTgwOyBUIGExMTgxOyBU IGExMTgyOyBUIGExMTgzOyBUIGExMTg0OyBUIGExMTg1OyBUIGExMTg2OyBUIGExMTg3OyBUIGEx MTg4OyBUIGExMTg5OwogIFQgYTExOTA7IFQgYTExOTE7IFQgYTExOTI7IFQgYTExOTM7IFQgYTEx OTQ7IFQgYTExOTU7IFQgYTExOTY7IFQgYTExOTc7IFQgYTExOTg7IFQgYTExOTk7CiAgVCBhMTIw MDsgVCBhMTIwMTsgVCBhMTIwMjsgVCBhMTIwMzsgVCBhMTIwNDsgVCBhMTIwNTsgVCBhMTIwNjsg VCBhMTIwNzsgVCBhMTIwODsgVCBhMTIwOTsKICBUIGExMjEwOyBUIGExMjExOyBUIGExMjEyOyBU IGExMjEzOyBUIGExMjE0OyBUIGExMjE1OyBUIGExMjE2OyBUIGExMjE3OyBUIGExMjE4OyBUIGEx MjE5OwogIFQgYTEyMjA7IFQgYTEyMjE7IFQgYTEyMjI7IFQgYTEyMjM7IFQgYTEyMjQ7IFQgYTEy MjU7IFQgYTEyMjY7IFQgYTEyMjc7IFQgYTEyMjg7IFQgYTEyMjk7CiAgVCBhMTIzMDsgVCBhMTIz MTsgVCBhMTIzMjsgVCBhMTIzMzsgVCBhMTIzNDsgVCBhMTIzNTsgVCBhMTIzNjsgVCBhMTIzNzsg VCBhMTIzODsgVCBhMTIzOTsKICBUIGExMjQwOyBUIGExMjQxOyBUIGExMjQyOyBUIGExMjQzOyBU IGExMjQ0OyBUIGExMjQ1OyBUIGExMjQ2OyBUIGExMjQ3OyBUIGExMjQ4OyBUIGExMjQ5OwogIFQg YTEyNTA7IFQgYTEyNTE7IFQgYTEyNTI7IFQgYTEyNTM7IFQgYTEyNTQ7IFQgYTEyNTU7IFQgYTEy NTY7IFQgYTEyNTc7IFQgYTEyNTg7IFQgYTEyNTk7CiAgVCBhMTI2MDsgVCBhMTI2MTsgVCBhMTI2 MjsgVCBhMTI2MzsgVCBhMTI2NDsgVCBhMTI2NTsgVCBhMTI2NjsgVCBhMTI2NzsgVCBhMTI2ODsg VCBhMTI2OTsKICBUIGExMjcwOyBUIGExMjcxOyBUIGExMjcyOyBUIGExMjczOyBUIGExMjc0OyBU IGExMjc1OyBUIGExMjc2OyBUIGExMjc3OyBUIGExMjc4OyBUIGExMjc5OwogIFQgYTEyODA7IFQg YTEyODE7IFQgYTEyODI7IFQgYTEyODM7IFQgYTEyODQ7IFQgYTEyODU7IFQgYTEyODY7IFQgYTEy ODc7IFQgYTEyODg7IFQgYTEyODk7CiAgVCBhMTI5MDsgVCBhMTI5MTsgVCBhMTI5MjsgVCBhMTI5 MzsgVCBhMTI5NDsgVCBhMTI5NTsgVCBhMTI5NjsgVCBhMTI5NzsgVCBhMTI5ODsgVCBhMTI5OTsK ICBUIGExMzAwOyBUIGExMzAxOyBUIGExMzAyOyBUIGExMzAzOyBUIGExMzA0OyBUIGExMzA1OyBU IGExMzA2OyBUIGExMzA3OyBUIGExMzA4OyBUIGExMzA5OwogIFQgYTEzMTA7IFQgYTEzMTE7IFQg YTEzMTI7IFQgYTEzMTM7IFQgYTEzMTQ7IFQgYTEzMTU7IFQgYTEzMTY7IFQgYTEzMTc7IFQgYTEz MTg7IFQgYTEzMTk7CiAgVCBhMTMyMDsgVCBhMTMyMTsgVCBhMTMyMjsgVCBhMTMyMzsgVCBhMTMy NDsgVCBhMTMyNTsgVCBhMTMyNjsgVCBhMTMyNzsgVCBhMTMyODsgVCBhMTMyOTsKICBUIGExMzMw OyBUIGExMzMxOyBUIGExMzMyOyBUIGExMzMzOyBUIGExMzM0OyBUIGExMzM1OyBUIGExMzM2OyBU IGExMzM3OyBUIGExMzM4OyBUIGExMzM5OwogIFQgYTEzNDA7IFQgYTEzNDE7IFQgYTEzNDI7IFQg YTEzNDM7IFQgYTEzNDQ7IFQgYTEzNDU7IFQgYTEzNDY7IFQgYTEzNDc7IFQgYTEzNDg7IFQgYTEz NDk7CiAgVCBhMTM1MDsgVCBhMTM1MTsgVCBhMTM1MjsgVCBhMTM1MzsgVCBhMTM1NDsgVCBhMTM1 NTsgVCBhMTM1NjsgVCBhMTM1NzsgVCBhMTM1ODsgVCBhMTM1OTsKICBUIGExMzYwOyBUIGExMzYx OyBUIGExMzYyOyBUIGExMzYzOyBUIGExMzY0OyBUIGExMzY1OyBUIGExMzY2OyBUIGExMzY3OyBU IGExMzY4OyBUIGExMzY5OwogIFQgYTEzNzA7IFQgYTEzNzE7IFQgYTEzNzI7IFQgYTEzNzM7IFQg YTEzNzQ7IFQgYTEzNzU7IFQgYTEzNzY7IFQgYTEzNzc7IFQgYTEzNzg7IFQgYTEzNzk7CiAgVCBh MTM4MDsgVCBhMTM4MTsgVCBhMTM4MjsgVCBhMTM4MzsgVCBhMTM4NDsgVCBhMTM4NTsgVCBhMTM4 NjsgVCBhMTM4NzsgVCBhMTM4ODsgVCBhMTM4OTsKICBUIGExMzkwOyBUIGExMzkxOyBUIGExMzky OyBUIGExMzkzOyBUIGExMzk0OyBUIGExMzk1OyBUIGExMzk2OyBUIGExMzk3OyBUIGExMzk4OyBU IGExMzk5OwogIFQgYTE0MDA7IFQgYTE0MDE7IFQgYTE0MDI7IFQgYTE0MDM7IFQgYTE0MDQ7IFQg YTE0MDU7IFQgYTE0MDY7IFQgYTE0MDc7IFQgYTE0MDg7IFQgYTE0MDk7CiAgVCBhMTQxMDsgVCBh MTQxMTsgVCBhMTQxMjsgVCBhMTQxMzsgVCBhMTQxNDsgVCBhMTQxNTsgVCBhMTQxNjsgVCBhMTQx NzsgVCBhMTQxODsgVCBhMTQxOTsKICBUIGExNDIwOyBUIGExNDIxOyBUIGExNDIyOyBUIGExNDIz OyBUIGExNDI0OyBUIGExNDI1OyBUIGExNDI2OyBUIGExNDI3OyBUIGExNDI4OyBUIGExNDI5Owog IFQgYTE0MzA7IFQgYTE0MzE7IFQgYTE0MzI7IFQgYTE0MzM7IFQgYTE0MzQ7IFQgYTE0MzU7IFQg YTE0MzY7IFQgYTE0Mzc7IFQgYTE0Mzg7IFQgYTE0Mzk7CiAgVCBhMTQ0MDsgVCBhMTQ0MTsgVCBh MTQ0MjsgVCBhMTQ0MzsgVCBhMTQ0NDsgVCBhMTQ0NTsgVCBhMTQ0NjsgVCBhMTQ0NzsgVCBhMTQ0 ODsgVCBhMTQ0OTsKICBUIGExNDUwOyBUIGExNDUxOyBUIGExNDUyOyBUIGExNDUzOyBUIGExNDU0 OyBUIGExNDU1OyBUIGExNDU2OyBUIGExNDU3OyBUIGExNDU4OyBUIGExNDU5OwogIFQgYTE0NjA7 IFQgYTE0NjE7IFQgYTE0NjI7IFQgYTE0NjM7IFQgYTE0NjQ7IFQgYTE0NjU7IFQgYTE0NjY7IFQg YTE0Njc7IFQgYTE0Njg7IFQgYTE0Njk7CiAgVCBhMTQ3MDsgVCBhMTQ3MTsgVCBhMTQ3MjsgVCBh MTQ3MzsgVCBhMTQ3NDsgVCBhMTQ3NTsgVCBhMTQ3NjsgVCBhMTQ3NzsgVCBhMTQ3ODsgVCBhMTQ3 OTsKICBUIGExNDgwOyBUIGExNDgxOyBUIGExNDgyOyBUIGExNDgzOyBUIGExNDg0OyBUIGExNDg1 OyBUIGExNDg2OyBUIGExNDg3OyBUIGExNDg4OyBUIGExNDg5OwogIFQgYTE0OTA7IFQgYTE0OTE7 IFQgYTE0OTI7IFQgYTE0OTM7IFQgYTE0OTQ7IFQgYTE0OTU7IFQgYTE0OTY7IFQgYTE0OTc7IFQg YTE0OTg7IFQgYTE0OTk7CiAgVCBhMTUwMDsgVCBhMTUwMTsgVCBhMTUwMjsgVCBhMTUwMzsgVCBh MTUwNDsgVCBhMTUwNTsgVCBhMTUwNjsgVCBhMTUwNzsgVCBhMTUwODsgVCBhMTUwOTsKICBUIGEx NTEwOyBUIGExNTExOyBUIGExNTEyOyBUIGExNTEzOyBUIGExNTE0OyBUIGExNTE1OyBUIGExNTE2 OyBUIGExNTE3OyBUIGExNTE4OyBUIGExNTE5OwogIFQgYTE1MjA7IFQgYTE1MjE7IFQgYTE1MjI7 IFQgYTE1MjM7IFQgYTE1MjQ7IFQgYTE1MjU7IFQgYTE1MjY7IFQgYTE1Mjc7IFQgYTE1Mjg7IFQg YTE1Mjk7CiAgVCBhMTUzMDsgVCBhMTUzMTsgVCBhMTUzMjsgVCBhMTUzMzsgVCBhMTUzNDsgVCBh MTUzNTsgVCBhMTUzNjsgVCBhMTUzNzsgVCBhMTUzODsgVCBhMTUzOTsKICBUIGExNTQwOyBUIGEx NTQxOyBUIGExNTQyOyBUIGExNTQzOyBUIGExNTQ0OyBUIGExNTQ1OyBUIGExNTQ2OyBUIGExNTQ3 OyBUIGExNTQ4OyBUIGExNTQ5OwogIFQgYTE1NTA7IFQgYTE1NTE7IFQgYTE1NTI7IFQgYTE1NTM7 IFQgYTE1NTQ7IFQgYTE1NTU7IFQgYTE1NTY7IFQgYTE1NTc7IFQgYTE1NTg7IFQgYTE1NTk7CiAg VCBhMTU2MDsgVCBhMTU2MTsgVCBhMTU2MjsgVCBhMTU2MzsgVCBhMTU2NDsgVCBhMTU2NTsgVCBh MTU2NjsgVCBhMTU2NzsgVCBhMTU2ODsgVCBhMTU2OTsKICBUIGExNTcwOyBUIGExNTcxOyBUIGEx NTcyOyBUIGExNTczOyBUIGExNTc0OyBUIGExNTc1OyBUIGExNTc2OyBUIGExNTc3OyBUIGExNTc4 OyBUIGExNTc5OwogIFQgYTE1ODA7IFQgYTE1ODE7IFQgYTE1ODI7IFQgYTE1ODM7IFQgYTE1ODQ7 IFQgYTE1ODU7IFQgYTE1ODY7IFQgYTE1ODc7IFQgYTE1ODg7IFQgYTE1ODk7CiAgVCBhMTU5MDsg VCBhMTU5MTsgVCBhMTU5MjsgVCBhMTU5MzsgVCBhMTU5NDsgVCBhMTU5NTsgVCBhMTU5NjsgVCBh MTU5NzsgVCBhMTU5ODsgVCBhMTU5OTsKICBUIGExNjAwOyBUIGExNjAxOyBUIGExNjAyOyBUIGEx NjAzOyBUIGExNjA0OyBUIGExNjA1OyBUIGExNjA2OyBUIGExNjA3OyBUIGExNjA4OyBUIGExNjA5 OwogIFQgYTE2MTA7IFQgYTE2MTE7IFQgYTE2MTI7IFQgYTE2MTM7IFQgYTE2MTQ7IFQgYTE2MTU7 IFQgYTE2MTY7IFQgYTE2MTc7IFQgYTE2MTg7IFQgYTE2MTk7CiAgVCBhMTYyMDsgVCBhMTYyMTsg VCBhMTYyMjsgVCBhMTYyMzsgVCBhMTYyNDsgVCBhMTYyNTsgVCBhMTYyNjsgVCBhMTYyNzsgVCBh MTYyODsgVCBhMTYyOTsKICBUIGExNjMwOyBUIGExNjMxOyBUIGExNjMyOyBUIGExNjMzOyBUIGEx NjM0OyBUIGExNjM1OyBUIGExNjM2OyBUIGExNjM3OyBUIGExNjM4OyBUIGExNjM5OwogIFQgYTE2 NDA7IFQgYTE2NDE7IFQgYTE2NDI7IFQgYTE2NDM7IFQgYTE2NDQ7IFQgYTE2NDU7IFQgYTE2NDY7 IFQgYTE2NDc7IFQgYTE2NDg7IFQgYTE2NDk7CiAgVCBhMTY1MDsgVCBhMTY1MTsgVCBhMTY1Mjsg VCBhMTY1MzsgVCBhMTY1NDsgVCBhMTY1NTsgVCBhMTY1NjsgVCBhMTY1NzsgVCBhMTY1ODsgVCBh MTY1OTsKICBUIGExNjYwOyBUIGExNjYxOyBUIGExNjYyOyBUIGExNjYzOyBUIGExNjY0OyBUIGEx NjY1OyBUIGExNjY2OyBUIGExNjY3OyBUIGExNjY4OyBUIGExNjY5OwogIFQgYTE2NzA7IFQgYTE2 NzE7IFQgYTE2NzI7IFQgYTE2NzM7IFQgYTE2NzQ7IFQgYTE2NzU7IFQgYTE2NzY7IFQgYTE2Nzc7 IFQgYTE2Nzg7IFQgYTE2Nzk7CiAgVCBhMTY4MDsgVCBhMTY4MTsgVCBhMTY4MjsgVCBhMTY4Mzsg VCBhMTY4NDsgVCBhMTY4NTsgVCBhMTY4NjsgVCBhMTY4NzsgVCBhMTY4ODsgVCBhMTY4OTsKICBU IGExNjkwOyBUIGExNjkxOyBUIGExNjkyOyBUIGExNjkzOyBUIGExNjk0OyBUIGExNjk1OyBUIGEx Njk2OyBUIGExNjk3OyBUIGExNjk4OyBUIGExNjk5OwogIFQgYTE3MDA7IFQgYTE3MDE7IFQgYTE3 MDI7IFQgYTE3MDM7IFQgYTE3MDQ7IFQgYTE3MDU7IFQgYTE3MDY7IFQgYTE3MDc7IFQgYTE3MDg7 IFQgYTE3MDk7CiAgVCBhMTcxMDsgVCBhMTcxMTsgVCBhMTcxMjsgVCBhMTcxMzsgVCBhMTcxNDsg VCBhMTcxNTsgVCBhMTcxNjsgVCBhMTcxNzsgVCBhMTcxODsgVCBhMTcxOTsKICBUIGExNzIwOyBU IGExNzIxOyBUIGExNzIyOyBUIGExNzIzOyBUIGExNzI0OyBUIGExNzI1OyBUIGExNzI2OyBUIGEx NzI3OyBUIGExNzI4OyBUIGExNzI5OwogIFQgYTE3MzA7IFQgYTE3MzE7IFQgYTE3MzI7IFQgYTE3 MzM7IFQgYTE3MzQ7IFQgYTE3MzU7IFQgYTE3MzY7IFQgYTE3Mzc7IFQgYTE3Mzg7IFQgYTE3Mzk7 CiAgVCBhMTc0MDsgVCBhMTc0MTsgVCBhMTc0MjsgVCBhMTc0MzsgVCBhMTc0NDsgVCBhMTc0NTsg VCBhMTc0NjsgVCBhMTc0NzsgVCBhMTc0ODsgVCBhMTc0OTsKICBUIGExNzUwOyBUIGExNzUxOyBU IGExNzUyOyBUIGExNzUzOyBUIGExNzU0OyBUIGExNzU1OyBUIGExNzU2OyBUIGExNzU3OyBUIGEx NzU4OyBUIGExNzU5OwogIFQgYTE3NjA7IFQgYTE3NjE7IFQgYTE3NjI7IFQgYTE3NjM7IFQgYTE3 NjQ7IFQgYTE3NjU7IFQgYTE3NjY7IFQgYTE3Njc7IFQgYTE3Njg7IFQgYTE3Njk7CiAgVCBhMTc3 MDsgVCBhMTc3MTsgVCBhMTc3MjsgVCBhMTc3MzsgVCBhMTc3NDsgVCBhMTc3NTsgVCBhMTc3Njsg VCBhMTc3NzsgVCBhMTc3ODsgVCBhMTc3OTsKICBUIGExNzgwOyBUIGExNzgxOyBUIGExNzgyOyBU IGExNzgzOyBUIGExNzg0OyBUIGExNzg1OyBUIGExNzg2OyBUIGExNzg3OyBUIGExNzg4OyBUIGEx Nzg5OwogIFQgYTE3OTA7IFQgYTE3OTE7IFQgYTE3OTI7IFQgYTE3OTM7IFQgYTE3OTQ7IFQgYTE3 OTU7IFQgYTE3OTY7IFQgYTE3OTc7IFQgYTE3OTg7IFQgYTE3OTk7CiAgVCBhMTgwMDsgVCBhMTgw MTsgVCBhMTgwMjsgVCBhMTgwMzsgVCBhMTgwNDsgVCBhMTgwNTsgVCBhMTgwNjsgVCBhMTgwNzsg VCBhMTgwODsgVCBhMTgwOTsKICBUIGExODEwOyBUIGExODExOyBUIGExODEyOyBUIGExODEzOyBU IGExODE0OyBUIGExODE1OyBUIGExODE2OyBUIGExODE3OyBUIGExODE4OyBUIGExODE5OwogIFQg YTE4MjA7IFQgYTE4MjE7IFQgYTE4MjI7IFQgYTE4MjM7IFQgYTE4MjQ7IFQgYTE4MjU7IFQgYTE4 MjY7IFQgYTE4Mjc7IFQgYTE4Mjg7IFQgYTE4Mjk7CiAgVCBhMTgzMDsgVCBhMTgzMTsgVCBhMTgz MjsgVCBhMTgzMzsgVCBhMTgzNDsgVCBhMTgzNTsgVCBhMTgzNjsgVCBhMTgzNzsgVCBhMTgzODsg VCBhMTgzOTsKICBUIGExODQwOyBUIGExODQxOyBUIGExODQyOyBUIGExODQzOyBUIGExODQ0OyBU IGExODQ1OyBUIGExODQ2OyBUIGExODQ3OyBUIGExODQ4OyBUIGExODQ5OwogIFQgYTE4NTA7IFQg YTE4NTE7IFQgYTE4NTI7IFQgYTE4NTM7IFQgYTE4NTQ7IFQgYTE4NTU7IFQgYTE4NTY7IFQgYTE4 NTc7IFQgYTE4NTg7IFQgYTE4NTk7CiAgVCBhMTg2MDsgVCBhMTg2MTsgVCBhMTg2MjsgVCBhMTg2 MzsgVCBhMTg2NDsgVCBhMTg2NTsgVCBhMTg2NjsgVCBhMTg2NzsgVCBhMTg2ODsgVCBhMTg2OTsK ICBUIGExODcwOyBUIGExODcxOyBUIGExODcyOyBUIGExODczOyBUIGExODc0OyBUIGExODc1OyBU IGExODc2OyBUIGExODc3OyBUIGExODc4OyBUIGExODc5OwogIFQgYTE4ODA7IFQgYTE4ODE7IFQg YTE4ODI7IFQgYTE4ODM7IFQgYTE4ODQ7IFQgYTE4ODU7IFQgYTE4ODY7IFQgYTE4ODc7IFQgYTE4 ODg7IFQgYTE4ODk7CiAgVCBhMTg5MDsgVCBhMTg5MTsgVCBhMTg5MjsgVCBhMTg5MzsgVCBhMTg5 NDsgVCBhMTg5NTsgVCBhMTg5NjsgVCBhMTg5NzsgVCBhMTg5ODsgVCBhMTg5OTsKICBUIGExOTAw OyBUIGExOTAxOyBUIGExOTAyOyBUIGExOTAzOyBUIGExOTA0OyBUIGExOTA1OyBUIGExOTA2OyBU IGExOTA3OyBUIGExOTA4OyBUIGExOTA5OwogIFQgYTE5MTA7IFQgYTE5MTE7IFQgYTE5MTI7IFQg YTE5MTM7IFQgYTE5MTQ7IFQgYTE5MTU7IFQgYTE5MTY7IFQgYTE5MTc7IFQgYTE5MTg7IFQgYTE5 MTk7CiAgVCBhMTkyMDsgVCBhMTkyMTsgVCBhMTkyMjsgVCBhMTkyMzsgVCBhMTkyNDsgVCBhMTky NTsgVCBhMTkyNjsgVCBhMTkyNzsgVCBhMTkyODsgVCBhMTkyOTsKICBUIGExOTMwOyBUIGExOTMx OyBUIGExOTMyOyBUIGExOTMzOyBUIGExOTM0OyBUIGExOTM1OyBUIGExOTM2OyBUIGExOTM3OyBU IGExOTM4OyBUIGExOTM5OwogIFQgYTE5NDA7IFQgYTE5NDE7IFQgYTE5NDI7IFQgYTE5NDM7IFQg YTE5NDQ7IFQgYTE5NDU7IFQgYTE5NDY7IFQgYTE5NDc7IFQgYTE5NDg7IFQgYTE5NDk7CiAgVCBh MTk1MDsgVCBhMTk1MTsgVCBhMTk1MjsgVCBhMTk1MzsgVCBhMTk1NDsgVCBhMTk1NTsgVCBhMTk1 NjsgVCBhMTk1NzsgVCBhMTk1ODsgVCBhMTk1OTsKICBUIGExOTYwOyBUIGExOTYxOyBUIGExOTYy OyBUIGExOTYzOyBUIGExOTY0OyBUIGExOTY1OyBUIGExOTY2OyBUIGExOTY3OyBUIGExOTY4OyBU IGExOTY5OwogIFQgYTE5NzA7IFQgYTE5NzE7IFQgYTE5NzI7IFQgYTE5NzM7IFQgYTE5NzQ7IFQg YTE5NzU7IFQgYTE5NzY7IFQgYTE5Nzc7IFQgYTE5Nzg7IFQgYTE5Nzk7CiAgVCBhMTk4MDsgVCBh MTk4MTsgVCBhMTk4MjsgVCBhMTk4MzsgVCBhMTk4NDsgVCBhMTk4NTsgVCBhMTk4NjsgVCBhMTk4 NzsgVCBhMTk4ODsgVCBhMTk4OTsKICBUIGExOTkwOyBUIGExOTkxOyBUIGExOTkyOyBUIGExOTkz OyBUIGExOTk0OyBUIGExOTk1OyBUIGExOTk2OyBUIGExOTk3OyBUIGExOTk4OyBUIGExOTk5OwoK CiAgVCBhMjAwMDsgVCBhMjAwMTsgVCBhMjAwMjsgVCBhMjAwMzsgVCBhMjAwNDsgVCBhMjAwNTsg VCBhMjAwNjsgVCBhMjAwNzsgVCBhMjAwODsgVCBhMjAwOTsKICBUIGEyMDEwOyBUIGEyMDExOyBU IGEyMDEyOyBUIGEyMDEzOyBUIGEyMDE0OyBUIGEyMDE1OyBUIGEyMDE2OyBUIGEyMDE3OyBUIGEy MDE4OyBUIGEyMDE5OwogIFQgYTIwMjA7IFQgYTIwMjE7IFQgYTIwMjI7IFQgYTIwMjM7IFQgYTIw MjQ7IFQgYTIwMjU7IFQgYTIwMjY7IFQgYTIwMjc7IFQgYTIwMjg7IFQgYTIwMjk7CiAgVCBhMjAz MDsgVCBhMjAzMTsgVCBhMjAzMjsgVCBhMjAzMzsgVCBhMjAzNDsgVCBhMjAzNTsgVCBhMjAzNjsg VCBhMjAzNzsgVCBhMjAzODsgVCBhMjAzOTsKICBUIGEyMDQwOyBUIGEyMDQxOyBUIGEyMDQyOyBU IGEyMDQzOyBUIGEyMDQ0OyBUIGEyMDQ1OyBUIGEyMDQ2OyBUIGEyMDQ3OyBUIGEyMDQ4OyBUIGEy MDQ5OwogIFQgYTIwNTA7IFQgYTIwNTE7IFQgYTIwNTI7IFQgYTIwNTM7IFQgYTIwNTQ7IFQgYTIw NTU7IFQgYTIwNTY7IFQgYTIwNTc7IFQgYTIwNTg7IFQgYTIwNTk7CiAgVCBhMjA2MDsgVCBhMjA2 MTsgVCBhMjA2MjsgVCBhMjA2MzsgVCBhMjA2NDsgVCBhMjA2NTsgVCBhMjA2NjsgVCBhMjA2Nzsg VCBhMjA2ODsgVCBhMjA2OTsKICBUIGEyMDcwOyBUIGEyMDcxOyBUIGEyMDcyOyBUIGEyMDczOyBU IGEyMDc0OyBUIGEyMDc1OyBUIGEyMDc2OyBUIGEyMDc3OyBUIGEyMDc4OyBUIGEyMDc5OwogIFQg YTIwODA7IFQgYTIwODE7IFQgYTIwODI7IFQgYTIwODM7IFQgYTIwODQ7IFQgYTIwODU7IFQgYTIw ODY7IFQgYTIwODc7IFQgYTIwODg7IFQgYTIwODk7CiAgVCBhMjA5MDsgVCBhMjA5MTsgVCBhMjA5 MjsgVCBhMjA5MzsgVCBhMjA5NDsgVCBhMjA5NTsgVCBhMjA5NjsgVCBhMjA5NzsgVCBhMjA5ODsg VCBhMjA5OTsKICBUIGEyMTAwOyBUIGEyMTAxOyBUIGEyMTAyOyBUIGEyMTAzOyBUIGEyMTA0OyBU IGEyMTA1OyBUIGEyMTA2OyBUIGEyMTA3OyBUIGEyMTA4OyBUIGEyMTA5OwogIFQgYTIxMTA7IFQg YTIxMTE7IFQgYTIxMTI7IFQgYTIxMTM7IFQgYTIxMTQ7IFQgYTIxMTU7IFQgYTIxMTY7IFQgYTIx MTc7IFQgYTIxMTg7IFQgYTIxMTk7CiAgVCBhMjEyMDsgVCBhMjEyMTsgVCBhMjEyMjsgVCBhMjEy MzsgVCBhMjEyNDsgVCBhMjEyNTsgVCBhMjEyNjsgVCBhMjEyNzsgVCBhMjEyODsgVCBhMjEyOTsK ICBUIGEyMTMwOyBUIGEyMTMxOyBUIGEyMTMyOyBUIGEyMTMzOyBUIGEyMTM0OyBUIGEyMTM1OyBU IGEyMTM2OyBUIGEyMTM3OyBUIGEyMTM4OyBUIGEyMTM5OwogIFQgYTIxNDA7IFQgYTIxNDE7IFQg YTIxNDI7IFQgYTIxNDM7IFQgYTIxNDQ7IFQgYTIxNDU7IFQgYTIxNDY7IFQgYTIxNDc7IFQgYTIx NDg7IFQgYTIxNDk7CiAgVCBhMjE1MDsgVCBhMjE1MTsgVCBhMjE1MjsgVCBhMjE1MzsgVCBhMjE1 NDsgVCBhMjE1NTsgVCBhMjE1NjsgVCBhMjE1NzsgVCBhMjE1ODsgVCBhMjE1OTsKICBUIGEyMTYw OyBUIGEyMTYxOyBUIGEyMTYyOyBUIGEyMTYzOyBUIGEyMTY0OyBUIGEyMTY1OyBUIGEyMTY2OyBU IGEyMTY3OyBUIGEyMTY4OyBUIGEyMTY5OwogIFQgYTIxNzA7IFQgYTIxNzE7IFQgYTIxNzI7IFQg YTIxNzM7IFQgYTIxNzQ7IFQgYTIxNzU7IFQgYTIxNzY7IFQgYTIxNzc7IFQgYTIxNzg7IFQgYTIx Nzk7CiAgVCBhMjE4MDsgVCBhMjE4MTsgVCBhMjE4MjsgVCBhMjE4MzsgVCBhMjE4NDsgVCBhMjE4 NTsgVCBhMjE4NjsgVCBhMjE4NzsgVCBhMjE4ODsgVCBhMjE4OTsKICBUIGEyMTkwOyBUIGEyMTkx OyBUIGEyMTkyOyBUIGEyMTkzOyBUIGEyMTk0OyBUIGEyMTk1OyBUIGEyMTk2OyBUIGEyMTk3OyBU IGEyMTk4OyBUIGEyMTk5OwogIFQgYTIyMDA7IFQgYTIyMDE7IFQgYTIyMDI7IFQgYTIyMDM7IFQg YTIyMDQ7IFQgYTIyMDU7IFQgYTIyMDY7IFQgYTIyMDc7IFQgYTIyMDg7IFQgYTIyMDk7CiAgVCBh MjIxMDsgVCBhMjIxMTsgVCBhMjIxMjsgVCBhMjIxMzsgVCBhMjIxNDsgVCBhMjIxNTsgVCBhMjIx NjsgVCBhMjIxNzsgVCBhMjIxODsgVCBhMjIxOTsKICBUIGEyMjIwOyBUIGEyMjIxOyBUIGEyMjIy OyBUIGEyMjIzOyBUIGEyMjI0OyBUIGEyMjI1OyBUIGEyMjI2OyBUIGEyMjI3OyBUIGEyMjI4OyBU IGEyMjI5OwogIFQgYTIyMzA7IFQgYTIyMzE7IFQgYTIyMzI7IFQgYTIyMzM7IFQgYTIyMzQ7IFQg YTIyMzU7IFQgYTIyMzY7IFQgYTIyMzc7IFQgYTIyMzg7IFQgYTIyMzk7CiAgVCBhMjI0MDsgVCBh MjI0MTsgVCBhMjI0MjsgVCBhMjI0MzsgVCBhMjI0NDsgVCBhMjI0NTsgVCBhMjI0NjsgVCBhMjI0 NzsgVCBhMjI0ODsgVCBhMjI0OTsKICBUIGEyMjUwOyBUIGEyMjUxOyBUIGEyMjUyOyBUIGEyMjUz OyBUIGEyMjU0OyBUIGEyMjU1OyBUIGEyMjU2OyBUIGEyMjU3OyBUIGEyMjU4OyBUIGEyMjU5Owog IFQgYTIyNjA7IFQgYTIyNjE7IFQgYTIyNjI7IFQgYTIyNjM7IFQgYTIyNjQ7IFQgYTIyNjU7IFQg YTIyNjY7IFQgYTIyNjc7IFQgYTIyNjg7IFQgYTIyNjk7CiAgVCBhMjI3MDsgVCBhMjI3MTsgVCBh MjI3MjsgVCBhMjI3MzsgVCBhMjI3NDsgVCBhMjI3NTsgVCBhMjI3NjsgVCBhMjI3NzsgVCBhMjI3 ODsgVCBhMjI3OTsKICBUIGEyMjgwOyBUIGEyMjgxOyBUIGEyMjgyOyBUIGEyMjgzOyBUIGEyMjg0 OyBUIGEyMjg1OyBUIGEyMjg2OyBUIGEyMjg3OyBUIGEyMjg4OyBUIGEyMjg5OwogIFQgYTIyOTA7 IFQgYTIyOTE7IFQgYTIyOTI7IFQgYTIyOTM7IFQgYTIyOTQ7IFQgYTIyOTU7IFQgYTIyOTY7IFQg YTIyOTc7IFQgYTIyOTg7IFQgYTIyOTk7CiAgVCBhMjMwMDsgVCBhMjMwMTsgVCBhMjMwMjsgVCBh MjMwMzsgVCBhMjMwNDsgVCBhMjMwNTsgVCBhMjMwNjsgVCBhMjMwNzsgVCBhMjMwODsgVCBhMjMw OTsKICBUIGEyMzEwOyBUIGEyMzExOyBUIGEyMzEyOyBUIGEyMzEzOyBUIGEyMzE0OyBUIGEyMzE1 OyBUIGEyMzE2OyBUIGEyMzE3OyBUIGEyMzE4OyBUIGEyMzE5OwogIFQgYTIzMjA7IFQgYTIzMjE7 IFQgYTIzMjI7IFQgYTIzMjM7IFQgYTIzMjQ7IFQgYTIzMjU7IFQgYTIzMjY7IFQgYTIzMjc7IFQg YTIzMjg7IFQgYTIzMjk7CiAgVCBhMjMzMDsgVCBhMjMzMTsgVCBhMjMzMjsgVCBhMjMzMzsgVCBh MjMzNDsgVCBhMjMzNTsgVCBhMjMzNjsgVCBhMjMzNzsgVCBhMjMzODsgVCBhMjMzOTsKICBUIGEy MzQwOyBUIGEyMzQxOyBUIGEyMzQyOyBUIGEyMzQzOyBUIGEyMzQ0OyBUIGEyMzQ1OyBUIGEyMzQ2 OyBUIGEyMzQ3OyBUIGEyMzQ4OyBUIGEyMzQ5OwogIFQgYTIzNTA7IFQgYTIzNTE7IFQgYTIzNTI7 IFQgYTIzNTM7IFQgYTIzNTQ7IFQgYTIzNTU7IFQgYTIzNTY7IFQgYTIzNTc7IFQgYTIzNTg7IFQg YTIzNTk7CiAgVCBhMjM2MDsgVCBhMjM2MTsgVCBhMjM2MjsgVCBhMjM2MzsgVCBhMjM2NDsgVCBh MjM2NTsgVCBhMjM2NjsgVCBhMjM2NzsgVCBhMjM2ODsgVCBhMjM2OTsKICBUIGEyMzcwOyBUIGEy MzcxOyBUIGEyMzcyOyBUIGEyMzczOyBUIGEyMzc0OyBUIGEyMzc1OyBUIGEyMzc2OyBUIGEyMzc3 OyBUIGEyMzc4OyBUIGEyMzc5OwogIFQgYTIzODA7IFQgYTIzODE7IFQgYTIzODI7IFQgYTIzODM7 IFQgYTIzODQ7IFQgYTIzODU7IFQgYTIzODY7IFQgYTIzODc7IFQgYTIzODg7IFQgYTIzODk7CiAg VCBhMjM5MDsgVCBhMjM5MTsgVCBhMjM5MjsgVCBhMjM5MzsgVCBhMjM5NDsgVCBhMjM5NTsgVCBh MjM5NjsgVCBhMjM5NzsgVCBhMjM5ODsgVCBhMjM5OTsKICBUIGEyNDAwOyBUIGEyNDAxOyBUIGEy NDAyOyBUIGEyNDAzOyBUIGEyNDA0OyBUIGEyNDA1OyBUIGEyNDA2OyBUIGEyNDA3OyBUIGEyNDA4 OyBUIGEyNDA5OwogIFQgYTI0MTA7IFQgYTI0MTE7IFQgYTI0MTI7IFQgYTI0MTM7IFQgYTI0MTQ7 IFQgYTI0MTU7IFQgYTI0MTY7IFQgYTI0MTc7IFQgYTI0MTg7IFQgYTI0MTk7CiAgVCBhMjQyMDsg VCBhMjQyMTsgVCBhMjQyMjsgVCBhMjQyMzsgVCBhMjQyNDsgVCBhMjQyNTsgVCBhMjQyNjsgVCBh MjQyNzsgVCBhMjQyODsgVCBhMjQyOTsKICBUIGEyNDMwOyBUIGEyNDMxOyBUIGEyNDMyOyBUIGEy NDMzOyBUIGEyNDM0OyBUIGEyNDM1OyBUIGEyNDM2OyBUIGEyNDM3OyBUIGEyNDM4OyBUIGEyNDM5 OwogIFQgYTI0NDA7IFQgYTI0NDE7IFQgYTI0NDI7IFQgYTI0NDM7IFQgYTI0NDQ7IFQgYTI0NDU7 IFQgYTI0NDY7IFQgYTI0NDc7IFQgYTI0NDg7IFQgYTI0NDk7CiAgVCBhMjQ1MDsgVCBhMjQ1MTsg VCBhMjQ1MjsgVCBhMjQ1MzsgVCBhMjQ1NDsgVCBhMjQ1NTsgVCBhMjQ1NjsgVCBhMjQ1NzsgVCBh MjQ1ODsgVCBhMjQ1OTsKICBUIGEyNDYwOyBUIGEyNDYxOyBUIGEyNDYyOyBUIGEyNDYzOyBUIGEy NDY0OyBUIGEyNDY1OyBUIGEyNDY2OyBUIGEyNDY3OyBUIGEyNDY4OyBUIGEyNDY5OwogIFQgYTI0 NzA7IFQgYTI0NzE7IFQgYTI0NzI7IFQgYTI0NzM7IFQgYTI0NzQ7IFQgYTI0NzU7IFQgYTI0NzY7 IFQgYTI0Nzc7IFQgYTI0Nzg7IFQgYTI0Nzk7CiAgVCBhMjQ4MDsgVCBhMjQ4MTsgVCBhMjQ4Mjsg VCBhMjQ4MzsgVCBhMjQ4NDsgVCBhMjQ4NTsgVCBhMjQ4NjsgVCBhMjQ4NzsgVCBhMjQ4ODsgVCBh MjQ4OTsKICBUIGEyNDkwOyBUIGEyNDkxOyBUIGEyNDkyOyBUIGEyNDkzOyBUIGEyNDk0OyBUIGEy NDk1OyBUIGEyNDk2OyBUIGEyNDk3OyBUIGEyNDk4OyBUIGEyNDk5OwogIFQgYTI1MDA7IFQgYTI1 MDE7IFQgYTI1MDI7IFQgYTI1MDM7IFQgYTI1MDQ7IFQgYTI1MDU7IFQgYTI1MDY7IFQgYTI1MDc7 IFQgYTI1MDg7IFQgYTI1MDk7CiAgVCBhMjUxMDsgVCBhMjUxMTsgVCBhMjUxMjsgVCBhMjUxMzsg VCBhMjUxNDsgVCBhMjUxNTsgVCBhMjUxNjsgVCBhMjUxNzsgVCBhMjUxODsgVCBhMjUxOTsKICBU IGEyNTIwOyBUIGEyNTIxOyBUIGEyNTIyOyBUIGEyNTIzOyBUIGEyNTI0OyBUIGEyNTI1OyBUIGEy NTI2OyBUIGEyNTI3OyBUIGEyNTI4OyBUIGEyNTI5OwogIFQgYTI1MzA7IFQgYTI1MzE7IFQgYTI1 MzI7IFQgYTI1MzM7IFQgYTI1MzQ7IFQgYTI1MzU7IFQgYTI1MzY7IFQgYTI1Mzc7IFQgYTI1Mzg7 IFQgYTI1Mzk7CiAgVCBhMjU0MDsgVCBhMjU0MTsgVCBhMjU0MjsgVCBhMjU0MzsgVCBhMjU0NDsg VCBhMjU0NTsgVCBhMjU0NjsgVCBhMjU0NzsgVCBhMjU0ODsgVCBhMjU0OTsKICBUIGEyNTUwOyBU IGEyNTUxOyBUIGEyNTUyOyBUIGEyNTUzOyBUIGEyNTU0OyBUIGEyNTU1OyBUIGEyNTU2OyBUIGEy NTU3OyBUIGEyNTU4OyBUIGEyNTU5OwogIFQgYTI1NjA7IFQgYTI1NjE7IFQgYTI1NjI7IFQgYTI1 NjM7IFQgYTI1NjQ7IFQgYTI1NjU7IFQgYTI1NjY7IFQgYTI1Njc7IFQgYTI1Njg7IFQgYTI1Njk7 CiAgVCBhMjU3MDsgVCBhMjU3MTsgVCBhMjU3MjsgVCBhMjU3MzsgVCBhMjU3NDsgVCBhMjU3NTsg VCBhMjU3NjsgVCBhMjU3NzsgVCBhMjU3ODsgVCBhMjU3OTsKICBUIGEyNTgwOyBUIGEyNTgxOyBU IGEyNTgyOyBUIGEyNTgzOyBUIGEyNTg0OyBUIGEyNTg1OyBUIGEyNTg2OyBUIGEyNTg3OyBUIGEy NTg4OyBUIGEyNTg5OwogIFQgYTI1OTA7IFQgYTI1OTE7IFQgYTI1OTI7IFQgYTI1OTM7IFQgYTI1 OTQ7IFQgYTI1OTU7IFQgYTI1OTY7IFQgYTI1OTc7IFQgYTI1OTg7IFQgYTI1OTk7CiAgVCBhMjYw MDsgVCBhMjYwMTsgVCBhMjYwMjsgVCBhMjYwMzsgVCBhMjYwNDsgVCBhMjYwNTsgVCBhMjYwNjsg VCBhMjYwNzsgVCBhMjYwODsgVCBhMjYwOTsKICBUIGEyNjEwOyBUIGEyNjExOyBUIGEyNjEyOyBU IGEyNjEzOyBUIGEyNjE0OyBUIGEyNjE1OyBUIGEyNjE2OyBUIGEyNjE3OyBUIGEyNjE4OyBUIGEy NjE5OwogIFQgYTI2MjA7IFQgYTI2MjE7IFQgYTI2MjI7IFQgYTI2MjM7IFQgYTI2MjQ7IFQgYTI2 MjU7IFQgYTI2MjY7IFQgYTI2Mjc7IFQgYTI2Mjg7IFQgYTI2Mjk7CiAgVCBhMjYzMDsgVCBhMjYz MTsgVCBhMjYzMjsgVCBhMjYzMzsgVCBhMjYzNDsgVCBhMjYzNTsgVCBhMjYzNjsgVCBhMjYzNzsg VCBhMjYzODsgVCBhMjYzOTsKICBUIGEyNjQwOyBUIGEyNjQxOyBUIGEyNjQyOyBUIGEyNjQzOyBU IGEyNjQ0OyBUIGEyNjQ1OyBUIGEyNjQ2OyBUIGEyNjQ3OyBUIGEyNjQ4OyBUIGEyNjQ5OwogIFQg YTI2NTA7IFQgYTI2NTE7IFQgYTI2NTI7IFQgYTI2NTM7IFQgYTI2NTQ7IFQgYTI2NTU7IFQgYTI2 NTY7IFQgYTI2NTc7IFQgYTI2NTg7IFQgYTI2NTk7CiAgVCBhMjY2MDsgVCBhMjY2MTsgVCBhMjY2 MjsgVCBhMjY2MzsgVCBhMjY2NDsgVCBhMjY2NTsgVCBhMjY2NjsgVCBhMjY2NzsgVCBhMjY2ODsg VCBhMjY2OTsKICBUIGEyNjcwOyBUIGEyNjcxOyBUIGEyNjcyOyBUIGEyNjczOyBUIGEyNjc0OyBU IGEyNjc1OyBUIGEyNjc2OyBUIGEyNjc3OyBUIGEyNjc4OyBUIGEyNjc5OwogIFQgYTI2ODA7IFQg YTI2ODE7IFQgYTI2ODI7IFQgYTI2ODM7IFQgYTI2ODQ7IFQgYTI2ODU7IFQgYTI2ODY7IFQgYTI2 ODc7IFQgYTI2ODg7IFQgYTI2ODk7CiAgVCBhMjY5MDsgVCBhMjY5MTsgVCBhMjY5MjsgVCBhMjY5 MzsgVCBhMjY5NDsgVCBhMjY5NTsgVCBhMjY5NjsgVCBhMjY5NzsgVCBhMjY5ODsgVCBhMjY5OTsK ICBUIGEyNzAwOyBUIGEyNzAxOyBUIGEyNzAyOyBUIGEyNzAzOyBUIGEyNzA0OyBUIGEyNzA1OyBU IGEyNzA2OyBUIGEyNzA3OyBUIGEyNzA4OyBUIGEyNzA5OwogIFQgYTI3MTA7IFQgYTI3MTE7IFQg YTI3MTI7IFQgYTI3MTM7IFQgYTI3MTQ7IFQgYTI3MTU7IFQgYTI3MTY7IFQgYTI3MTc7IFQgYTI3 MTg7IFQgYTI3MTk7CiAgVCBhMjcyMDsgVCBhMjcyMTsgVCBhMjcyMjsgVCBhMjcyMzsgVCBhMjcy NDsgVCBhMjcyNTsgVCBhMjcyNjsgVCBhMjcyNzsgVCBhMjcyODsgVCBhMjcyOTsKICBUIGEyNzMw OyBUIGEyNzMxOyBUIGEyNzMyOyBUIGEyNzMzOyBUIGEyNzM0OyBUIGEyNzM1OyBUIGEyNzM2OyBU IGEyNzM3OyBUIGEyNzM4OyBUIGEyNzM5OwogIFQgYTI3NDA7IFQgYTI3NDE7IFQgYTI3NDI7IFQg YTI3NDM7IFQgYTI3NDQ7IFQgYTI3NDU7IFQgYTI3NDY7IFQgYTI3NDc7IFQgYTI3NDg7IFQgYTI3 NDk7CiAgVCBhMjc1MDsgVCBhMjc1MTsgVCBhMjc1MjsgVCBhMjc1MzsgVCBhMjc1NDsgVCBhMjc1 NTsgVCBhMjc1NjsgVCBhMjc1NzsgVCBhMjc1ODsgVCBhMjc1OTsKICBUIGEyNzYwOyBUIGEyNzYx OyBUIGEyNzYyOyBUIGEyNzYzOyBUIGEyNzY0OyBUIGEyNzY1OyBUIGEyNzY2OyBUIGEyNzY3OyBU IGEyNzY4OyBUIGEyNzY5OwogIFQgYTI3NzA7IFQgYTI3NzE7IFQgYTI3NzI7IFQgYTI3NzM7IFQg YTI3NzQ7IFQgYTI3NzU7IFQgYTI3NzY7IFQgYTI3Nzc7IFQgYTI3Nzg7IFQgYTI3Nzk7CiAgVCBh Mjc4MDsgVCBhMjc4MTsgVCBhMjc4MjsgVCBhMjc4MzsgVCBhMjc4NDsgVCBhMjc4NTsgVCBhMjc4 NjsgVCBhMjc4NzsgVCBhMjc4ODsgVCBhMjc4OTsKICBUIGEyNzkwOyBUIGEyNzkxOyBUIGEyNzky OyBUIGEyNzkzOyBUIGEyNzk0OyBUIGEyNzk1OyBUIGEyNzk2OyBUIGEyNzk3OyBUIGEyNzk4OyBU IGEyNzk5OwogIFQgYTI4MDA7IFQgYTI4MDE7IFQgYTI4MDI7IFQgYTI4MDM7IFQgYTI4MDQ7IFQg YTI4MDU7IFQgYTI4MDY7IFQgYTI4MDc7IFQgYTI4MDg7IFQgYTI4MDk7CiAgVCBhMjgxMDsgVCBh MjgxMTsgVCBhMjgxMjsgVCBhMjgxMzsgVCBhMjgxNDsgVCBhMjgxNTsgVCBhMjgxNjsgVCBhMjgx NzsgVCBhMjgxODsgVCBhMjgxOTsKICBUIGEyODIwOyBUIGEyODIxOyBUIGEyODIyOyBUIGEyODIz OyBUIGEyODI0OyBUIGEyODI1OyBUIGEyODI2OyBUIGEyODI3OyBUIGEyODI4OyBUIGEyODI5Owog IFQgYTI4MzA7IFQgYTI4MzE7IFQgYTI4MzI7IFQgYTI4MzM7IFQgYTI4MzQ7IFQgYTI4MzU7IFQg YTI4MzY7IFQgYTI4Mzc7IFQgYTI4Mzg7IFQgYTI4Mzk7CiAgVCBhMjg0MDsgVCBhMjg0MTsgVCBh Mjg0MjsgVCBhMjg0MzsgVCBhMjg0NDsgVCBhMjg0NTsgVCBhMjg0NjsgVCBhMjg0NzsgVCBhMjg0 ODsgVCBhMjg0OTsKICBUIGEyODUwOyBUIGEyODUxOyBUIGEyODUyOyBUIGEyODUzOyBUIGEyODU0 OyBUIGEyODU1OyBUIGEyODU2OyBUIGEyODU3OyBUIGEyODU4OyBUIGEyODU5OwogIFQgYTI4NjA7 IFQgYTI4NjE7IFQgYTI4NjI7IFQgYTI4NjM7IFQgYTI4NjQ7IFQgYTI4NjU7IFQgYTI4NjY7IFQg YTI4Njc7IFQgYTI4Njg7IFQgYTI4Njk7CiAgVCBhMjg3MDsgVCBhMjg3MTsgVCBhMjg3MjsgVCBh Mjg3MzsgVCBhMjg3NDsgVCBhMjg3NTsgVCBhMjg3NjsgVCBhMjg3NzsgVCBhMjg3ODsgVCBhMjg3 OTsKICBUIGEyODgwOyBUIGEyODgxOyBUIGEyODgyOyBUIGEyODgzOyBUIGEyODg0OyBUIGEyODg1 OyBUIGEyODg2OyBUIGEyODg3OyBUIGEyODg4OyBUIGEyODg5OwogIFQgYTI4OTA7IFQgYTI4OTE7 IFQgYTI4OTI7IFQgYTI4OTM7IFQgYTI4OTQ7IFQgYTI4OTU7IFQgYTI4OTY7IFQgYTI4OTc7IFQg YTI4OTg7IFQgYTI4OTk7CiAgVCBhMjkwMDsgVCBhMjkwMTsgVCBhMjkwMjsgVCBhMjkwMzsgVCBh MjkwNDsgVCBhMjkwNTsgVCBhMjkwNjsgVCBhMjkwNzsgVCBhMjkwODsgVCBhMjkwOTsKICBUIGEy OTEwOyBUIGEyOTExOyBUIGEyOTEyOyBUIGEyOTEzOyBUIGEyOTE0OyBUIGEyOTE1OyBUIGEyOTE2 OyBUIGEyOTE3OyBUIGEyOTE4OyBUIGEyOTE5OwogIFQgYTI5MjA7IFQgYTI5MjE7IFQgYTI5MjI7 IFQgYTI5MjM7IFQgYTI5MjQ7IFQgYTI5MjU7IFQgYTI5MjY7IFQgYTI5Mjc7IFQgYTI5Mjg7IFQg YTI5Mjk7CiAgVCBhMjkzMDsgVCBhMjkzMTsgVCBhMjkzMjsgVCBhMjkzMzsgVCBhMjkzNDsgVCBh MjkzNTsgVCBhMjkzNjsgVCBhMjkzNzsgVCBhMjkzODsgVCBhMjkzOTsKICBUIGEyOTQwOyBUIGEy OTQxOyBUIGEyOTQyOyBUIGEyOTQzOyBUIGEyOTQ0OyBUIGEyOTQ1OyBUIGEyOTQ2OyBUIGEyOTQ3 OyBUIGEyOTQ4OyBUIGEyOTQ5OwogIFQgYTI5NTA7IFQgYTI5NTE7IFQgYTI5NTI7IFQgYTI5NTM7 IFQgYTI5NTQ7IFQgYTI5NTU7IFQgYTI5NTY7IFQgYTI5NTc7IFQgYTI5NTg7IFQgYTI5NTk7CiAg VCBhMjk2MDsgVCBhMjk2MTsgVCBhMjk2MjsgVCBhMjk2MzsgVCBhMjk2NDsgVCBhMjk2NTsgVCBh Mjk2NjsgVCBhMjk2NzsgVCBhMjk2ODsgVCBhMjk2OTsKICBUIGEyOTcwOyBUIGEyOTcxOyBUIGEy OTcyOyBUIGEyOTczOyBUIGEyOTc0OyBUIGEyOTc1OyBUIGEyOTc2OyBUIGEyOTc3OyBUIGEyOTc4 OyBUIGEyOTc5OwogIFQgYTI5ODA7IFQgYTI5ODE7IFQgYTI5ODI7IFQgYTI5ODM7IFQgYTI5ODQ7 IFQgYTI5ODU7IFQgYTI5ODY7IFQgYTI5ODc7IFQgYTI5ODg7IFQgYTI5ODk7CiAgVCBhMjk5MDsg VCBhMjk5MTsgVCBhMjk5MjsgVCBhMjk5MzsgVCBhMjk5NDsgVCBhMjk5NTsgVCBhMjk5NjsgVCBh Mjk5NzsgVCBhMjk5ODsgVCBhMjk5OTsKCgogIFQgYTMwMDA7IFQgYTMwMDE7IFQgYTMwMDI7IFQg YTMwMDM7IFQgYTMwMDQ7IFQgYTMwMDU7IFQgYTMwMDY7IFQgYTMwMDc7IFQgYTMwMDg7IFQgYTMw MDk7CiAgVCBhMzAxMDsgVCBhMzAxMTsgVCBhMzAxMjsgVCBhMzAxMzsgVCBhMzAxNDsgVCBhMzAx NTsgVCBhMzAxNjsgVCBhMzAxNzsgVCBhMzAxODsgVCBhMzAxOTsKICBUIGEzMDIwOyBUIGEzMDIx OyBUIGEzMDIyOyBUIGEzMDIzOyBUIGEzMDI0OyBUIGEzMDI1OyBUIGEzMDI2OyBUIGEzMDI3OyBU IGEzMDI4OyBUIGEzMDI5OwogIFQgYTMwMzA7IFQgYTMwMzE7IFQgYTMwMzI7IFQgYTMwMzM7IFQg YTMwMzQ7IFQgYTMwMzU7IFQgYTMwMzY7IFQgYTMwMzc7IFQgYTMwMzg7IFQgYTMwMzk7CiAgVCBh MzA0MDsgVCBhMzA0MTsgVCBhMzA0MjsgVCBhMzA0MzsgVCBhMzA0NDsgVCBhMzA0NTsgVCBhMzA0 NjsgVCBhMzA0NzsgVCBhMzA0ODsgVCBhMzA0OTsKICBUIGEzMDUwOyBUIGEzMDUxOyBUIGEzMDUy OyBUIGEzMDUzOyBUIGEzMDU0OyBUIGEzMDU1OyBUIGEzMDU2OyBUIGEzMDU3OyBUIGEzMDU4OyBU IGEzMDU5OwogIFQgYTMwNjA7IFQgYTMwNjE7IFQgYTMwNjI7IFQgYTMwNjM7IFQgYTMwNjQ7IFQg YTMwNjU7IFQgYTMwNjY7IFQgYTMwNjc7IFQgYTMwNjg7IFQgYTMwNjk7CiAgVCBhMzA3MDsgVCBh MzA3MTsgVCBhMzA3MjsgVCBhMzA3MzsgVCBhMzA3NDsgVCBhMzA3NTsgVCBhMzA3NjsgVCBhMzA3 NzsgVCBhMzA3ODsgVCBhMzA3OTsKICBUIGEzMDgwOyBUIGEzMDgxOyBUIGEzMDgyOyBUIGEzMDgz OyBUIGEzMDg0OyBUIGEzMDg1OyBUIGEzMDg2OyBUIGEzMDg3OyBUIGEzMDg4OyBUIGEzMDg5Owog IFQgYTMwOTA7IFQgYTMwOTE7IFQgYTMwOTI7IFQgYTMwOTM7IFQgYTMwOTQ7IFQgYTMwOTU7IFQg YTMwOTY7IFQgYTMwOTc7IFQgYTMwOTg7IFQgYTMwOTk7CiAgVCBhMzEwMDsgVCBhMzEwMTsgVCBh MzEwMjsgVCBhMzEwMzsgVCBhMzEwNDsgVCBhMzEwNTsgVCBhMzEwNjsgVCBhMzEwNzsgVCBhMzEw ODsgVCBhMzEwOTsKICBUIGEzMTEwOyBUIGEzMTExOyBUIGEzMTEyOyBUIGEzMTEzOyBUIGEzMTE0 OyBUIGEzMTE1OyBUIGEzMTE2OyBUIGEzMTE3OyBUIGEzMTE4OyBUIGEzMTE5OwogIFQgYTMxMjA7 IFQgYTMxMjE7IFQgYTMxMjI7IFQgYTMxMjM7IFQgYTMxMjQ7IFQgYTMxMjU7IFQgYTMxMjY7IFQg YTMxMjc7IFQgYTMxMjg7IFQgYTMxMjk7CiAgVCBhMzEzMDsgVCBhMzEzMTsgVCBhMzEzMjsgVCBh MzEzMzsgVCBhMzEzNDsgVCBhMzEzNTsgVCBhMzEzNjsgVCBhMzEzNzsgVCBhMzEzODsgVCBhMzEz OTsKICBUIGEzMTQwOyBUIGEzMTQxOyBUIGEzMTQyOyBUIGEzMTQzOyBUIGEzMTQ0OyBUIGEzMTQ1 OyBUIGEzMTQ2OyBUIGEzMTQ3OyBUIGEzMTQ4OyBUIGEzMTQ5OwogIFQgYTMxNTA7IFQgYTMxNTE7 IFQgYTMxNTI7IFQgYTMxNTM7IFQgYTMxNTQ7IFQgYTMxNTU7IFQgYTMxNTY7IFQgYTMxNTc7IFQg YTMxNTg7IFQgYTMxNTk7CiAgVCBhMzE2MDsgVCBhMzE2MTsgVCBhMzE2MjsgVCBhMzE2MzsgVCBh MzE2NDsgVCBhMzE2NTsgVCBhMzE2NjsgVCBhMzE2NzsgVCBhMzE2ODsgVCBhMzE2OTsKICBUIGEz MTcwOyBUIGEzMTcxOyBUIGEzMTcyOyBUIGEzMTczOyBUIGEzMTc0OyBUIGEzMTc1OyBUIGEzMTc2 OyBUIGEzMTc3OyBUIGEzMTc4OyBUIGEzMTc5OwogIFQgYTMxODA7IFQgYTMxODE7IFQgYTMxODI7 IFQgYTMxODM7IFQgYTMxODQ7IFQgYTMxODU7IFQgYTMxODY7IFQgYTMxODc7IFQgYTMxODg7IFQg YTMxODk7CiAgVCBhMzE5MDsgVCBhMzE5MTsgVCBhMzE5MjsgVCBhMzE5MzsgVCBhMzE5NDsgVCBh MzE5NTsgVCBhMzE5NjsgVCBhMzE5NzsgVCBhMzE5ODsgVCBhMzE5OTsKICBUIGEzMjAwOyBUIGEz MjAxOyBUIGEzMjAyOyBUIGEzMjAzOyBUIGEzMjA0OyBUIGEzMjA1OyBUIGEzMjA2OyBUIGEzMjA3 OyBUIGEzMjA4OyBUIGEzMjA5OwogIFQgYTMyMTA7IFQgYTMyMTE7IFQgYTMyMTI7IFQgYTMyMTM7 IFQgYTMyMTQ7IFQgYTMyMTU7IFQgYTMyMTY7IFQgYTMyMTc7IFQgYTMyMTg7IFQgYTMyMTk7CiAg VCBhMzIyMDsgVCBhMzIyMTsgVCBhMzIyMjsgVCBhMzIyMzsgVCBhMzIyNDsgVCBhMzIyNTsgVCBh MzIyNjsgVCBhMzIyNzsgVCBhMzIyODsgVCBhMzIyOTsKICBUIGEzMjMwOyBUIGEzMjMxOyBUIGEz MjMyOyBUIGEzMjMzOyBUIGEzMjM0OyBUIGEzMjM1OyBUIGEzMjM2OyBUIGEzMjM3OyBUIGEzMjM4 OyBUIGEzMjM5OwogIFQgYTMyNDA7IFQgYTMyNDE7IFQgYTMyNDI7IFQgYTMyNDM7IFQgYTMyNDQ7 IFQgYTMyNDU7IFQgYTMyNDY7IFQgYTMyNDc7IFQgYTMyNDg7IFQgYTMyNDk7CiAgVCBhMzI1MDsg VCBhMzI1MTsgVCBhMzI1MjsgVCBhMzI1MzsgVCBhMzI1NDsgVCBhMzI1NTsgVCBhMzI1NjsgVCBh MzI1NzsgVCBhMzI1ODsgVCBhMzI1OTsKICBUIGEzMjYwOyBUIGEzMjYxOyBUIGEzMjYyOyBUIGEz MjYzOyBUIGEzMjY0OyBUIGEzMjY1OyBUIGEzMjY2OyBUIGEzMjY3OyBUIGEzMjY4OyBUIGEzMjY5 OwogIFQgYTMyNzA7IFQgYTMyNzE7IFQgYTMyNzI7IFQgYTMyNzM7IFQgYTMyNzQ7IFQgYTMyNzU7 IFQgYTMyNzY7IFQgYTMyNzc7IFQgYTMyNzg7IFQgYTMyNzk7CiAgVCBhMzI4MDsgVCBhMzI4MTsg VCBhMzI4MjsgVCBhMzI4MzsgVCBhMzI4NDsgVCBhMzI4NTsgVCBhMzI4NjsgVCBhMzI4NzsgVCBh MzI4ODsgVCBhMzI4OTsKICBUIGEzMjkwOyBUIGEzMjkxOyBUIGEzMjkyOyBUIGEzMjkzOyBUIGEz Mjk0OyBUIGEzMjk1OyBUIGEzMjk2OyBUIGEzMjk3OyBUIGEzMjk4OyBUIGEzMjk5OwogIFQgYTMz MDA7IFQgYTMzMDE7IFQgYTMzMDI7IFQgYTMzMDM7IFQgYTMzMDQ7IFQgYTMzMDU7IFQgYTMzMDY7 IFQgYTMzMDc7IFQgYTMzMDg7IFQgYTMzMDk7CiAgVCBhMzMxMDsgVCBhMzMxMTsgVCBhMzMxMjsg VCBhMzMxMzsgVCBhMzMxNDsgVCBhMzMxNTsgVCBhMzMxNjsgVCBhMzMxNzsgVCBhMzMxODsgVCBh MzMxOTsKICBUIGEzMzIwOyBUIGEzMzIxOyBUIGEzMzIyOyBUIGEzMzIzOyBUIGEzMzI0OyBUIGEz MzI1OyBUIGEzMzI2OyBUIGEzMzI3OyBUIGEzMzI4OyBUIGEzMzI5OwogIFQgYTMzMzA7IFQgYTMz MzE7IFQgYTMzMzI7IFQgYTMzMzM7IFQgYTMzMzQ7IFQgYTMzMzU7IFQgYTMzMzY7IFQgYTMzMzc7 IFQgYTMzMzg7IFQgYTMzMzk7CiAgVCBhMzM0MDsgVCBhMzM0MTsgVCBhMzM0MjsgVCBhMzM0Mzsg VCBhMzM0NDsgVCBhMzM0NTsgVCBhMzM0NjsgVCBhMzM0NzsgVCBhMzM0ODsgVCBhMzM0OTsKICBU IGEzMzUwOyBUIGEzMzUxOyBUIGEzMzUyOyBUIGEzMzUzOyBUIGEzMzU0OyBUIGEzMzU1OyBUIGEz MzU2OyBUIGEzMzU3OyBUIGEzMzU4OyBUIGEzMzU5OwogIFQgYTMzNjA7IFQgYTMzNjE7IFQgYTMz NjI7IFQgYTMzNjM7IFQgYTMzNjQ7IFQgYTMzNjU7IFQgYTMzNjY7IFQgYTMzNjc7IFQgYTMzNjg7 IFQgYTMzNjk7CiAgVCBhMzM3MDsgVCBhMzM3MTsgVCBhMzM3MjsgVCBhMzM3MzsgVCBhMzM3NDsg VCBhMzM3NTsgVCBhMzM3NjsgVCBhMzM3NzsgVCBhMzM3ODsgVCBhMzM3OTsKICBUIGEzMzgwOyBU IGEzMzgxOyBUIGEzMzgyOyBUIGEzMzgzOyBUIGEzMzg0OyBUIGEzMzg1OyBUIGEzMzg2OyBUIGEz Mzg3OyBUIGEzMzg4OyBUIGEzMzg5OwogIFQgYTMzOTA7IFQgYTMzOTE7IFQgYTMzOTI7IFQgYTMz OTM7IFQgYTMzOTQ7IFQgYTMzOTU7IFQgYTMzOTY7IFQgYTMzOTc7IFQgYTMzOTg7IFQgYTMzOTk7 CiAgVCBhMzQwMDsgVCBhMzQwMTsgVCBhMzQwMjsgVCBhMzQwMzsgVCBhMzQwNDsgVCBhMzQwNTsg VCBhMzQwNjsgVCBhMzQwNzsgVCBhMzQwODsgVCBhMzQwOTsKICBUIGEzNDEwOyBUIGEzNDExOyBU IGEzNDEyOyBUIGEzNDEzOyBUIGEzNDE0OyBUIGEzNDE1OyBUIGEzNDE2OyBUIGEzNDE3OyBUIGEz NDE4OyBUIGEzNDE5OwogIFQgYTM0MjA7IFQgYTM0MjE7IFQgYTM0MjI7IFQgYTM0MjM7IFQgYTM0 MjQ7IFQgYTM0MjU7IFQgYTM0MjY7IFQgYTM0Mjc7IFQgYTM0Mjg7IFQgYTM0Mjk7CiAgVCBhMzQz MDsgVCBhMzQzMTsgVCBhMzQzMjsgVCBhMzQzMzsgVCBhMzQzNDsgVCBhMzQzNTsgVCBhMzQzNjsg VCBhMzQzNzsgVCBhMzQzODsgVCBhMzQzOTsKICBUIGEzNDQwOyBUIGEzNDQxOyBUIGEzNDQyOyBU IGEzNDQzOyBUIGEzNDQ0OyBUIGEzNDQ1OyBUIGEzNDQ2OyBUIGEzNDQ3OyBUIGEzNDQ4OyBUIGEz NDQ5OwogIFQgYTM0NTA7IFQgYTM0NTE7IFQgYTM0NTI7IFQgYTM0NTM7IFQgYTM0NTQ7IFQgYTM0 NTU7IFQgYTM0NTY7IFQgYTM0NTc7IFQgYTM0NTg7IFQgYTM0NTk7CiAgVCBhMzQ2MDsgVCBhMzQ2 MTsgVCBhMzQ2MjsgVCBhMzQ2MzsgVCBhMzQ2NDsgVCBhMzQ2NTsgVCBhMzQ2NjsgVCBhMzQ2Nzsg VCBhMzQ2ODsgVCBhMzQ2OTsKICBUIGEzNDcwOyBUIGEzNDcxOyBUIGEzNDcyOyBUIGEzNDczOyBU IGEzNDc0OyBUIGEzNDc1OyBUIGEzNDc2OyBUIGEzNDc3OyBUIGEzNDc4OyBUIGEzNDc5OwogIFQg YTM0ODA7IFQgYTM0ODE7IFQgYTM0ODI7IFQgYTM0ODM7IFQgYTM0ODQ7IFQgYTM0ODU7IFQgYTM0 ODY7IFQgYTM0ODc7IFQgYTM0ODg7IFQgYTM0ODk7CiAgVCBhMzQ5MDsgVCBhMzQ5MTsgVCBhMzQ5 MjsgVCBhMzQ5MzsgVCBhMzQ5NDsgVCBhMzQ5NTsgVCBhMzQ5NjsgVCBhMzQ5NzsgVCBhMzQ5ODsg VCBhMzQ5OTsKICBUIGEzNTAwOyBUIGEzNTAxOyBUIGEzNTAyOyBUIGEzNTAzOyBUIGEzNTA0OyBU IGEzNTA1OyBUIGEzNTA2OyBUIGEzNTA3OyBUIGEzNTA4OyBUIGEzNTA5OwogIFQgYTM1MTA7IFQg YTM1MTE7IFQgYTM1MTI7IFQgYTM1MTM7IFQgYTM1MTQ7IFQgYTM1MTU7IFQgYTM1MTY7IFQgYTM1 MTc7IFQgYTM1MTg7IFQgYTM1MTk7CiAgVCBhMzUyMDsgVCBhMzUyMTsgVCBhMzUyMjsgVCBhMzUy MzsgVCBhMzUyNDsgVCBhMzUyNTsgVCBhMzUyNjsgVCBhMzUyNzsgVCBhMzUyODsgVCBhMzUyOTsK ICBUIGEzNTMwOyBUIGEzNTMxOyBUIGEzNTMyOyBUIGEzNTMzOyBUIGEzNTM0OyBUIGEzNTM1OyBU IGEzNTM2OyBUIGEzNTM3OyBUIGEzNTM4OyBUIGEzNTM5OwogIFQgYTM1NDA7IFQgYTM1NDE7IFQg YTM1NDI7IFQgYTM1NDM7IFQgYTM1NDQ7IFQgYTM1NDU7IFQgYTM1NDY7IFQgYTM1NDc7IFQgYTM1 NDg7IFQgYTM1NDk7CiAgVCBhMzU1MDsgVCBhMzU1MTsgVCBhMzU1MjsgVCBhMzU1MzsgVCBhMzU1 NDsgVCBhMzU1NTsgVCBhMzU1NjsgVCBhMzU1NzsgVCBhMzU1ODsgVCBhMzU1OTsKICBUIGEzNTYw OyBUIGEzNTYxOyBUIGEzNTYyOyBUIGEzNTYzOyBUIGEzNTY0OyBUIGEzNTY1OyBUIGEzNTY2OyBU IGEzNTY3OyBUIGEzNTY4OyBUIGEzNTY5OwogIFQgYTM1NzA7IFQgYTM1NzE7IFQgYTM1NzI7IFQg YTM1NzM7IFQgYTM1NzQ7IFQgYTM1NzU7IFQgYTM1NzY7IFQgYTM1Nzc7IFQgYTM1Nzg7IFQgYTM1 Nzk7CiAgVCBhMzU4MDsgVCBhMzU4MTsgVCBhMzU4MjsgVCBhMzU4MzsgVCBhMzU4NDsgVCBhMzU4 NTsgVCBhMzU4NjsgVCBhMzU4NzsgVCBhMzU4ODsgVCBhMzU4OTsKICBUIGEzNTkwOyBUIGEzNTkx OyBUIGEzNTkyOyBUIGEzNTkzOyBUIGEzNTk0OyBUIGEzNTk1OyBUIGEzNTk2OyBUIGEzNTk3OyBU IGEzNTk4OyBUIGEzNTk5OwogIFQgYTM2MDA7IFQgYTM2MDE7IFQgYTM2MDI7IFQgYTM2MDM7IFQg YTM2MDQ7IFQgYTM2MDU7IFQgYTM2MDY7IFQgYTM2MDc7IFQgYTM2MDg7IFQgYTM2MDk7CiAgVCBh MzYxMDsgVCBhMzYxMTsgVCBhMzYxMjsgVCBhMzYxMzsgVCBhMzYxNDsgVCBhMzYxNTsgVCBhMzYx NjsgVCBhMzYxNzsgVCBhMzYxODsgVCBhMzYxOTsKICBUIGEzNjIwOyBUIGEzNjIxOyBUIGEzNjIy OyBUIGEzNjIzOyBUIGEzNjI0OyBUIGEzNjI1OyBUIGEzNjI2OyBUIGEzNjI3OyBUIGEzNjI4OyBU IGEzNjI5OwogIFQgYTM2MzA7IFQgYTM2MzE7IFQgYTM2MzI7IFQgYTM2MzM7IFQgYTM2MzQ7IFQg YTM2MzU7IFQgYTM2MzY7IFQgYTM2Mzc7IFQgYTM2Mzg7IFQgYTM2Mzk7CiAgVCBhMzY0MDsgVCBh MzY0MTsgVCBhMzY0MjsgVCBhMzY0MzsgVCBhMzY0NDsgVCBhMzY0NTsgVCBhMzY0NjsgVCBhMzY0 NzsgVCBhMzY0ODsgVCBhMzY0OTsKICBUIGEzNjUwOyBUIGEzNjUxOyBUIGEzNjUyOyBUIGEzNjUz OyBUIGEzNjU0OyBUIGEzNjU1OyBUIGEzNjU2OyBUIGEzNjU3OyBUIGEzNjU4OyBUIGEzNjU5Owog IFQgYTM2NjA7IFQgYTM2NjE7IFQgYTM2NjI7IFQgYTM2NjM7IFQgYTM2NjQ7IFQgYTM2NjU7IFQg YTM2NjY7IFQgYTM2Njc7IFQgYTM2Njg7IFQgYTM2Njk7CiAgVCBhMzY3MDsgVCBhMzY3MTsgVCBh MzY3MjsgVCBhMzY3MzsgVCBhMzY3NDsgVCBhMzY3NTsgVCBhMzY3NjsgVCBhMzY3NzsgVCBhMzY3 ODsgVCBhMzY3OTsKICBUIGEzNjgwOyBUIGEzNjgxOyBUIGEzNjgyOyBUIGEzNjgzOyBUIGEzNjg0 OyBUIGEzNjg1OyBUIGEzNjg2OyBUIGEzNjg3OyBUIGEzNjg4OyBUIGEzNjg5OwogIFQgYTM2OTA7 IFQgYTM2OTE7IFQgYTM2OTI7IFQgYTM2OTM7IFQgYTM2OTQ7IFQgYTM2OTU7IFQgYTM2OTY7IFQg YTM2OTc7IFQgYTM2OTg7IFQgYTM2OTk7CiAgVCBhMzcwMDsgVCBhMzcwMTsgVCBhMzcwMjsgVCBh MzcwMzsgVCBhMzcwNDsgVCBhMzcwNTsgVCBhMzcwNjsgVCBhMzcwNzsgVCBhMzcwODsgVCBhMzcw OTsKICBUIGEzNzEwOyBUIGEzNzExOyBUIGEzNzEyOyBUIGEzNzEzOyBUIGEzNzE0OyBUIGEzNzE1 OyBUIGEzNzE2OyBUIGEzNzE3OyBUIGEzNzE4OyBUIGEzNzE5OwogIFQgYTM3MjA7IFQgYTM3MjE7 IFQgYTM3MjI7IFQgYTM3MjM7IFQgYTM3MjQ7IFQgYTM3MjU7IFQgYTM3MjY7IFQgYTM3Mjc7IFQg YTM3Mjg7IFQgYTM3Mjk7CiAgVCBhMzczMDsgVCBhMzczMTsgVCBhMzczMjsgVCBhMzczMzsgVCBh MzczNDsgVCBhMzczNTsgVCBhMzczNjsgVCBhMzczNzsgVCBhMzczODsgVCBhMzczOTsKICBUIGEz NzQwOyBUIGEzNzQxOyBUIGEzNzQyOyBUIGEzNzQzOyBUIGEzNzQ0OyBUIGEzNzQ1OyBUIGEzNzQ2 OyBUIGEzNzQ3OyBUIGEzNzQ4OyBUIGEzNzQ5OwogIFQgYTM3NTA7IFQgYTM3NTE7IFQgYTM3NTI7 IFQgYTM3NTM7IFQgYTM3NTQ7IFQgYTM3NTU7IFQgYTM3NTY7IFQgYTM3NTc7IFQgYTM3NTg7IFQg YTM3NTk7CiAgVCBhMzc2MDsgVCBhMzc2MTsgVCBhMzc2MjsgVCBhMzc2MzsgVCBhMzc2NDsgVCBh Mzc2NTsgVCBhMzc2NjsgVCBhMzc2NzsgVCBhMzc2ODsgVCBhMzc2OTsKICBUIGEzNzcwOyBUIGEz NzcxOyBUIGEzNzcyOyBUIGEzNzczOyBUIGEzNzc0OyBUIGEzNzc1OyBUIGEzNzc2OyBUIGEzNzc3 OyBUIGEzNzc4OyBUIGEzNzc5OwogIFQgYTM3ODA7IFQgYTM3ODE7IFQgYTM3ODI7IFQgYTM3ODM7 IFQgYTM3ODQ7IFQgYTM3ODU7IFQgYTM3ODY7IFQgYTM3ODc7IFQgYTM3ODg7IFQgYTM3ODk7CiAg VCBhMzc5MDsgVCBhMzc5MTsgVCBhMzc5MjsgVCBhMzc5MzsgVCBhMzc5NDsgVCBhMzc5NTsgVCBh Mzc5NjsgVCBhMzc5NzsgVCBhMzc5ODsgVCBhMzc5OTsKICBUIGEzODAwOyBUIGEzODAxOyBUIGEz ODAyOyBUIGEzODAzOyBUIGEzODA0OyBUIGEzODA1OyBUIGEzODA2OyBUIGEzODA3OyBUIGEzODA4 OyBUIGEzODA5OwogIFQgYTM4MTA7IFQgYTM4MTE7IFQgYTM4MTI7IFQgYTM4MTM7IFQgYTM4MTQ7 IFQgYTM4MTU7IFQgYTM4MTY7IFQgYTM4MTc7IFQgYTM4MTg7IFQgYTM4MTk7CiAgVCBhMzgyMDsg VCBhMzgyMTsgVCBhMzgyMjsgVCBhMzgyMzsgVCBhMzgyNDsgVCBhMzgyNTsgVCBhMzgyNjsgVCBh MzgyNzsgVCBhMzgyODsgVCBhMzgyOTsKICBUIGEzODMwOyBUIGEzODMxOyBUIGEzODMyOyBUIGEz ODMzOyBUIGEzODM0OyBUIGEzODM1OyBUIGEzODM2OyBUIGEzODM3OyBUIGEzODM4OyBUIGEzODM5 OwogIFQgYTM4NDA7IFQgYTM4NDE7IFQgYTM4NDI7IFQgYTM4NDM7IFQgYTM4NDQ7IFQgYTM4NDU7 IFQgYTM4NDY7IFQgYTM4NDc7IFQgYTM4NDg7IFQgYTM4NDk7CiAgVCBhMzg1MDsgVCBhMzg1MTsg VCBhMzg1MjsgVCBhMzg1MzsgVCBhMzg1NDsgVCBhMzg1NTsgVCBhMzg1NjsgVCBhMzg1NzsgVCBh Mzg1ODsgVCBhMzg1OTsKICBUIGEzODYwOyBUIGEzODYxOyBUIGEzODYyOyBUIGEzODYzOyBUIGEz ODY0OyBUIGEzODY1OyBUIGEzODY2OyBUIGEzODY3OyBUIGEzODY4OyBUIGEzODY5OwogIFQgYTM4 NzA7IFQgYTM4NzE7IFQgYTM4NzI7IFQgYTM4NzM7IFQgYTM4NzQ7IFQgYTM4NzU7IFQgYTM4NzY7 IFQgYTM4Nzc7IFQgYTM4Nzg7IFQgYTM4Nzk7CiAgVCBhMzg4MDsgVCBhMzg4MTsgVCBhMzg4Mjsg VCBhMzg4MzsgVCBhMzg4NDsgVCBhMzg4NTsgVCBhMzg4NjsgVCBhMzg4NzsgVCBhMzg4ODsgVCBh Mzg4OTsKICBUIGEzODkwOyBUIGEzODkxOyBUIGEzODkyOyBUIGEzODkzOyBUIGEzODk0OyBUIGEz ODk1OyBUIGEzODk2OyBUIGEzODk3OyBUIGEzODk4OyBUIGEzODk5OwogIFQgYTM5MDA7IFQgYTM5 MDE7IFQgYTM5MDI7IFQgYTM5MDM7IFQgYTM5MDQ7IFQgYTM5MDU7IFQgYTM5MDY7IFQgYTM5MDc7 IFQgYTM5MDg7IFQgYTM5MDk7CiAgVCBhMzkxMDsgVCBhMzkxMTsgVCBhMzkxMjsgVCBhMzkxMzsg VCBhMzkxNDsgVCBhMzkxNTsgVCBhMzkxNjsgVCBhMzkxNzsgVCBhMzkxODsgVCBhMzkxOTsKICBU IGEzOTIwOyBUIGEzOTIxOyBUIGEzOTIyOyBUIGEzOTIzOyBUIGEzOTI0OyBUIGEzOTI1OyBUIGEz OTI2OyBUIGEzOTI3OyBUIGEzOTI4OyBUIGEzOTI5OwogIFQgYTM5MzA7IFQgYTM5MzE7IFQgYTM5 MzI7IFQgYTM5MzM7IFQgYTM5MzQ7IFQgYTM5MzU7IFQgYTM5MzY7IFQgYTM5Mzc7IFQgYTM5Mzg7 IFQgYTM5Mzk7CiAgVCBhMzk0MDsgVCBhMzk0MTsgVCBhMzk0MjsgVCBhMzk0MzsgVCBhMzk0NDsg VCBhMzk0NTsgVCBhMzk0NjsgVCBhMzk0NzsgVCBhMzk0ODsgVCBhMzk0OTsKICBUIGEzOTUwOyBU IGEzOTUxOyBUIGEzOTUyOyBUIGEzOTUzOyBUIGEzOTU0OyBUIGEzOTU1OyBUIGEzOTU2OyBUIGEz OTU3OyBUIGEzOTU4OyBUIGEzOTU5OwogIFQgYTM5NjA7IFQgYTM5NjE7IFQgYTM5NjI7IFQgYTM5 NjM7IFQgYTM5NjQ7IFQgYTM5NjU7IFQgYTM5NjY7IFQgYTM5Njc7IFQgYTM5Njg7IFQgYTM5Njk7 CiAgVCBhMzk3MDsgVCBhMzk3MTsgVCBhMzk3MjsgVCBhMzk3MzsgVCBhMzk3NDsgVCBhMzk3NTsg VCBhMzk3NjsgVCBhMzk3NzsgVCBhMzk3ODsgVCBhMzk3OTsKICBUIGEzOTgwOyBUIGEzOTgxOyBU IGEzOTgyOyBUIGEzOTgzOyBUIGEzOTg0OyBUIGEzOTg1OyBUIGEzOTg2OyBUIGEzOTg3OyBUIGEz OTg4OyBUIGEzOTg5OwogIFQgYTM5OTA7IFQgYTM5OTE7IFQgYTM5OTI7IFQgYTM5OTM7IFQgYTM5 OTQ7IFQgYTM5OTU7IFQgYTM5OTY7IFQgYTM5OTc7IFQgYTM5OTg7IFQgYTM5OTk7Cgp9OwoKQTo6 QSgpIHsKCn07Cg==